/*
 * common.js
 * 
 * @author: Alexander Myadzel <aem@teletype.ru>
 * @modified: n/a
 *
 */
 
 function getEventKeyCode(oEvent)
{
	return oEvent.keyCode || oEvent.which || null;	
}

function stopEvent(oEvent)
{
	var oElement = getEventElement(oEvent);

	oEvent.returnValue = false;
	if (oEvent.preventDefault) {
		oEvent.preventDefault();
	}
	
	oEvent.cancelBubble = true;
	if (oEvent.stopPropagation) {
		oEvent.stopPropagation();
	}
}

function addEvent(oElement, sEvent, sCallback, bCapture)
{
	if (oElement.attachEvent) {
		oElement.detachEvent('on' + sEvent, sCallback);
		oElement.attachEvent('on' + sEvent, sCallback);
    } else if (oElement.addEventListener) {
		oElement.addEventListener(sEvent, sCallback, bCapture);
    } else {
        oElement['on' + sEvent] = sCallback;
    }
    return oElement;
}

function removeEvent(oElement, sEvent, sCallback, bCapture)
{
	if (oElement.detachEvent) {
        oElement.detachEvent('on' + sEvent, sCallback);
    } else if (oElement.removeEventListener) {
        oElement.removeEventListener(sEvent, sCallback, bCapture);
    } else {
        oElement['on' + sEvent] = null;
    }
    return oElement;
}

function getEvent(oEvent)
{
	return oEvent || window.event;
}

function getEventElement(oEvent)
{
	var oElement = oEvent.srcElement || oEvent.target;
	
	if (oElement.nodeType == 3) {
		oElement = oEvent.oElement.parentNode;
	}
	
	return oElement;
}

function unescapeHTML(sValue)
{
	var sValue = sValue.toString();
	return sValue.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&#39;/g, '\'').replace(/&amp;/g, '&');
}

function $$(sId)
{
	return document.getElementById(sId);
}

function getElementsByClassName(sClassName, oParentElement)
{
	var oParentElement = oParentElement || document;
	
	if (document.getElementsByClassName) { 
		//https://developer.mozilla.org/en/DOM/document.getElementsByClassName
		return oParentElement.getElementsByClassName(sClassName); 
	} 
	
	var aReturnElements = [];
	var sClassName = sClassName.replace(/\-/g, '\\-');
	var aElements = oParentElement.all ? oParentElement.all : oParentElement.getElementsByTagName('*');

	for (var i = 0; i < aElements.length; i++) {
		if (aElements[i].className.match('(^|\\s)' + sClassName + '(\\s|$)')) {
			aReturnElements.push(aElements[i]);
		}
	}

	return aReturnElements;
}

function getOffset(oElement)
{
	var iTop = 0;
	var iLeft = 0;

	while (oElement.tagName != 'HTML' && oElement.tagName != 'BODY')
	{
		iTop += oElement.offsetTop;
		iLeft += oElement.offsetLeft;
			
		oElement = oElement.offsetParent;
	}
	
	iTop += oElement.offsetTop;
	iLeft += oElement.offsetLeft;
	
	return {
		'top': iTop, 
		'left': iLeft
	}
}

function getNextIndex(iPlanIndex, iLength)
{
	if (iPlanIndex >= iLength) {
		iPlanIndex = 0;
	} else if (iPlanIndex < 0) {
		iPlanIndex = iLength - 1;
	}
	return iPlanIndex;
}

function trim(sArg)
{
	return sArg.replace(/^\s+|\s+$/g, '');
}

function isEmail(sArg)
{
	return (/^\w+([.-]?\w+)+@\w+([.-]?\w+)*\.[a-zA-Z]{2,6}$/.test(sArg));
	//return (/^[-!#$%&\'*+\.\/0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\.\/0-9=?A-Z^_`a-z{|}~]{2,6}$/.test(sArg));
}

function getInt(mValue)
{
	var iValue = parseFloat((mValue + '').replace(/[,]+/g, '.').replace(/[^-\d\.]+/g, ''));
	return isNaN(iValue) ? 0 : iValue;
}

