var addEvent = function(obj, type, fn) {
	if(obj.addEventListener) {
		obj.addEventListener(type, fn, false);
		EventCache.add(obj, type, fn);
	}
	else if(obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn](window.event); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}
	
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents: listEvents,
		add: function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush: function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener) item[0].removeEventListener(item[1], item[2], item[3]);
				if(item[1].substring(0, 2) != "on") item[1] = "on" + item[1];
				if(item[0].detachEvent) item[0].detachEvent(item[1], item[2]);
				item[0][item[1]] = null;
			}
		}
	}
}();

var elem = function(name, attrs, style, text) {
	var e = name.constructor == String ? document.createElement(name) : name;
	if(attrs) {
		for(var key in attrs) {
			if(key == 'class') {
				e.className = attrs[key];
			}
			else if(key == 'id') {
				e.id = attrs[key];
			}
			else {
				e.setAttribute(key, attrs[key]);
			}
		}
	}
	if(style) {
		for(var key in style) {
			e.style[key] = style[key];
		}
	}
	if(text) {
		e.appendChild(document.createTextNode(text));
	}
	return e;
}

var ajax = function(url, formName, answerFunc, errorFunc) {
	var handleServerResponse = (answerFunc || function(){});
	var handleServerError = (errorFunc || function(o) {
		alert('При обращении к серверу возникли проблемы: ' + o.statusText);
	});
	if(arguments.length) {
		var obj = window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false);
		if(!obj) return;
		var params = null;
		obj.onreadystatechange = function() {
			if(obj.readyState == 4) {
				return obj.status == 200 || location.href.indexOf('http:') < 0 && obj.status == 0 ? handleServerResponse(obj) : handleServerError(obj);
			}
		};
		if(typeof formName != 'undefined' && formName != '') {
			params = [];
			var formEl = document.forms[formName].elements;
			for(var i = 0; i < formEl.length; i++) {
				if(typeof formEl[i].name != 'undefined' && formEl[i].name != '') {
					var param = encodeURIComponent(formEl[i].name) + '=' + encodeURIComponent(formEl[i].value);
					params[params.length] = param;
				}
			}
			params = params.join("&");
			obj.open('POST', url, true);
			obj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		else {
			obj.open('GET', url, true);
		}
		obj.send(params);
	}
	return obj;
};

addEvent(window, 'unload', EventCache.flush);

document.getElementsByClassName = function(name) {
	var node = document.getElementsByTagName('*'), i = node.length, out = []; 
	while(i--) { 
		if(node[i].className.search(name) != -1) out.push(node[i]); 
	}
	return out;
};

var thisURL = location.toString().substr(7).split('/');
