
/*
 * Вспомогательные функции
 * TimeZero <http://www.timezero.ru/>
 * 2007-12-01
 * Автор: Дмитрий Шкинёв <berkel@timezero.ru>
 */

function $(id){

	if (arguments.length > 1){

		for (var i=0, elements=[], c=arguments.length; i < c; i++)
			elements.push($(arguments[i]));

		return elements;

	} else {

		return document.getElementById(id);
	}
}

function returnFalse(e){
	return false;
}

function var_dump(obj){

	var temp = "";

	for (var i in obj){

		var value = eval("obj." + i);

		if (i == "innerHTML" || i == "outerHTML")
			value = "<pre>" + value.replace(/</g, "&lt;").replace(/>/g, "&gt;") + "</pre>";

		temp += "obj." + i + " = " + value + "<br />";
	}

	document.body.innerHTML += temp;
}


/*********Стандартные вспомогательные функции****/

function cmnInformation(){

	var eHTML = document.getElementsByTagName("html")[0];

	this.sUser_agent = navigator.userAgent.toLowerCase();

	if (window.opera){

		this.bOpera = true;
		cmnSet_class(eHTML, "Opera");
	}

	if (!this.bOpera && this.sUser_agent.indexOf("msie") != -1){

		this.bIE = true;
		cmnSet_class(eHTML, "IE");

	} else if (navigator.product == "Gecko"){

		this.bGecko = true; this.bMozilla = true;
		cmnSet_class( eHTML, "Mozilla");
	}

	this.bMAC = (this.sUser_agent.indexOf("mac") != -1);

	this.sLanguage = null;
	this.bHTTP = null;
	this.bHandheld = false;

	return this;
}

function cmnInit_Information(){

	cmn_oInformation.sLanguage = (document.body && document.body.getAttribute("lang") != "") ? document.body.getAttribute("lang") : "ru";
	cmn_oInformation.bHTTP = (document.location.href.indexOf("http://") == 0 ) ? true : false;
}

function cmnInArray(obj, datum, strict){

    if (strict){

		function equals(a,b){return a === b}

	} else {

		function equals(a,b){return a == b}
	}

    for (var i in obj){

        if (equals(obj[i], datum))
			return true;
    }

    return false;
}

function cmnGetRandom(min, max){

	var randomNum = Math.random() * (max-min);

	return (Math.round(randomNum) + min);
}

function cmnBetween(iNum, iMin, iMax, bInclusive){

	if (bInclusive)
		return (iNum >= iMin && iNum <= iMax);
	else
		return (iNum > iMin && iNum < iMax);
}

function cmnGetScrollXY(){

	var _x=0, _y=0;

	if (document.documentElement.scrollTop){

		_x = document.documentElement.scrollLeft;
		_y = document.documentElement.scrollTop;

	} else {

		_x = document.body.scrollLeft;
		_y = document.body.scrollTop;
	}

	return {x: _x, y: _y};
}

function cmnGetElementsByClassName(oElm, strTagName, strClassName){

	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);

	var arrReturnElements = new Array();

	strClassName = strClassName.replace(/\-/g, "\\-");

	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");

	var oElement;

	for (var i=0, c=arrElements.length; i<c; i++){

		oElement = arrElements[i];

		if (oRegExp.test(oElement.className)){

			if (arrReturnElements.push)
				arrReturnElements.push(oElement);
		}
	}

	return (arrReturnElements);
}

function cmnGetAbsolutePos(oElem){

	var _x=0, _y=0;

	if (oElem){

		do {
			_x += oElem.offsetLeft;
			_y += oElem.offsetTop;

		} while (oElem = oElem.offsetParent);
	}

	return {x: _x, y: _y};
}

var cmn_oInformation = new cmnInformation();

cmnAdd_event(window, "load", cmnInit_Information);

/************************************************/

/*********Функции для работы с событиями*********/

function cmnAdd_events(eOn, asEvent_type, ptrFunction){

	for (var sName in asEvent_type)
		cmnAdd_event(eOn, asEvent_type[sName], ptrFunction);
}

function cmnAdd_event(eOn, sEvent_type, ptrFunction){

	if (eOn.addEventListener){

		eOn.addEventListener(sEvent_type, ptrFunction, false);

	} else {

		if (!ptrFunction.$$guid)
			ptrFunction.$$guid = cmnAdd_event.guid++;

		if (!eOn.events)
			eOn.events = {};

		var aHandler = eOn.events[sEvent_type];

		if (!aHandler){

			aHandler = eOn.events[sEvent_type] = {};

			if (eOn["on" + sEvent_type])
				aHandler[0] = eOn['on' + sEvent_type];

			eOn["on" + sEvent_type] = cmnHandle_event;
		}

		aHandler[ptrFunction.$$guid] = ptrFunction;
	}
}

cmnAdd_event.guid = 1;

function cmnRemove_event(eOn, sEvent_type, ptrFunction){

	if (eOn.removeEventListener){

		eOn.removeEventListener(sEvent_type, ptrFunction, false);

	} else if (eOn.events && eOn.events[sEvent_type] && ptrFunction.$$guid){

		delete eOn.events[sEvent_type][ptrFunction.$$guid];
	}
}

function cmnHandle_event(event){

	event = event || cmnFixe_event(window.event);

	var returnValue = true;

	var aHandler = this.events[event.type];

	for (var i in aHandler){

		if (!Object.prototype[i]){

			this.$$ptrFunction = aHandler[i];

			if (this.$$ptrFunction(event) === false)
				returnValue = false;
		}
	}

	if (this.$$ptrFunction)
		this.$$ptrFunction = null;

	return returnValue;
}

function cmnFixe_event(event){

	event.preventDefault = cmnFixe_event.preventDefault;
	event.stopPropagation = cmnFixe_event.stopPropagation;

	return event;
}

cmnFixe_event.preventDefault = function(){
	this.returnValue = false;
}

cmnFixe_event.stopPropagation = function(){
	this.cancelBubble = true;
}

function checkEvent(oEvt){

	oEvt = (oEvt) ? oEvt : ((window.event) ? window.event : null);

	if (oEvt && oEvt.srcElement && !window.opera)
		oEvt.target=oEvt.srcElement;

	return oEvt;
}

function cmnAdd_hover(eOn){

	cmnAdd_event(eOn, "mouseover", function(){cmnSet_class( eOn, "hover")});
	cmnAdd_event(eOn, "mouseout",  function(){cmnRemove_class( eOn, "hover")});
}

function cmnAdd_button_events(eOn){

	cmnAdd_hover(eOn);

	cmnAdd_event(eOn, "mousedown", function(){cmnSet_class(eOn, "mousedown")});
	cmnAdd_event(eOn, "mouseup", function(){cmnSwitch_class(eOn, "mousedown", "mouseup")});
}

/************************************************/

/*********Функции для работы с классами**********/

function cmnSwitch_class(eOn, sClass_name, sInstead){

	if (cmnMatch_class(eOn, sClass_name)){

		cmnSet_class(eOn, sInstead, sClass_name);

	} else {

		cmnSet_class(eOn, sClass_name, sInstead);
	}
}

function cmnRemove_class(eOn, sClass_name){
	cmnSet_class(eOn, "", sClass_name);
}

function cmnChange_class(eOn, sClass_name){

	if (eOn){

		sClass_name = (sClass_name.length) ? sClass_name.replace(/(^\s+|\s+$)/, "") : "";

		eOn.className = sClass_name;
	}
}

function cmnSet_class(eOn, sClass_name, sInstead){

	if (eOn){

		sClass_name = (sClass_name.length) ? sClass_name.replace(/(^\s+|\s+$)/, "") : "";

		if (eOn.className.length){

			var sOld = sClass_name;

			if (sInstead && sInstead.length){

				sInstead = sInstead.replace(/\s+(\S)/g, "|$1");

				if (sOld)
					sOld += "|";

				sOld += sInstead;
			}

			eOn.className = eOn.className.replace(new RegExp("(^|\\s+)(" + sOld +")($|\\s+)", "g"), "$1");
		}

		eOn.className += (eOn.className.length && sClass_name ? " " : "") + sClass_name;
	}
}

function cmnMatch_class(eOn, sClass_name){
	return (sClass_name && eOn.className && eOn.className.length && eOn.className.match(new RegExp("(^|\\s+)(" + sClass_name +")($|\\s+)")));
}

/************************************************/
