/* --------------------------------------------------
	Coordinates routine -- provided by ADenis (adeniss@ukr.net)
-------------------------------------------------- */

function getX(object){
	return findPos(object)[0];
}

function getY(object){
	return findPos(object)[1];
}

function findPos(obj, _debug) {
	var curleft = curtop = 0;
	
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		curleft -= obj.scrollLeft;
		curtop -= obj.scrollTop;
		
		var obj2 = obj;
		
		while (obj2 = obj2.parentNode) {
			if (obj2.tagName && obj2.tagName != "HTML" && obj2 != document.body) {
				//if (_debug)	debug(obj2 + " " + obj2.tagName + " : " + obj2.offsetTop + " + " + obj2.scrollTop + "    " + obj2.offsetLeft + " + " + obj2.scrollLeft);
				curleft -= (obj2.scrollLeft) ? obj2.scrollLeft : 0;
				curtop -= (obj2.scrollTop) ? obj2.scrollTop : 0;
			}
		}
		
		while (obj = obj.offsetParent) {
			if (_debug)	debug(obj + " " + obj.tagName + " : " + obj.offsetTop + " + " + obj.scrollTop + "    " + obj.offsetLeft + " + " + obj.scrollLeft);
			curleft += (obj.offsetLeft) ? obj.offsetLeft : 0;
			curtop += (obj.offsetTop) ? obj.offsetTop : 0;
			curleft += (obj.currentStyle && !isNaN(parseInt(obj.currentStyle.borderLeftWidth))) ? parseInt(obj.currentStyle.borderLeftWidth) : 0;
			curtop += (obj.currentStyle && !isNaN(parseInt(obj.currentStyle.borderTopWidth))) ? parseInt(obj.currentStyle.borderTopWidth) : 0;
			
			/*
			curleft -= (obj.scrollLeft) ? obj.scrollLeft : 0;
			curtop -= (obj.scrollTop) ? obj.scrollTop : 0;*/
		}
	}
	
	return [curleft,curtop];
}

function getMouseX(object){
	if(object && MOUSE){
		var x = getX(object);
		return MOUSE.x - x;	
	}
	return false;
}

function getMouseY(object){
	if(object && MOUSE){
		var y = getY(object);
		return MOUSE.y - y;	
	}
	return false;
}

/* --------------------------------------------------
	Events -- provided by Kostya Kulikov (kostiko@mail.ru)
-------------------------------------------------- */

function addEvent(element, eventName, handler, listener)
{
	if(typeof element == 'string') element = dojo.byId(element);
	if(!element) {
		alert("addEvent: element was not found!")
		return;
	}
	
	//if the system is not set up, set it up, and
	// store any outside script's event registration in the first handler slot
	if(typeof element[eventName] != 'function' || 
	typeof element[eventName + '_num'] == 'undefined'){
		element[eventName + '_num'] = 0;
		if(typeof element[eventName] == 'function'){
			element[eventName + 0] = element[eventName];
			element[eventName + '_num']++;
		}
		element[eventName] = function(e){
			var r = true;
			e = (e) ? e : window.event;
			for(var i = 0; i < element[eventName + '_num']; i++) {
				if(listener) {
					if((element[eventName + i]).call(listener, e) === false) r = false;
				} else {
					if(element[eventName + i](e) === false) r = false;
				}
			}
			return r;
		}
	}
	//if handler is not already stored, assign it
	for(var i = 0; i < element[eventName + '_num']; i++)
		if(element[eventName + i] == handler) return;
	element[eventName + element[eventName + '_num']] = handler;
	element[eventName + '_num']++;
}

function removeEvent(element, eventName, handler)
{
	//if the system is not set up, or there are no handlers to remove, exit
	if(typeof element[eventName] != 'function' || 
	typeof element[eventName + '_num'] == 'undefined' ||
	element[eventName + '_num'] == 0) return;
	//loop through handlers,
	//  if target handler is reached, begin overwriting each
	//  handler with the handler in front of it until one before the last
	var found = false;
	for(var i = 0; i < element[eventName + '_num']; i++){
		if(!found)
			found = element[eventName + i] == handler;
		if(found && (i+1) < element[eventName + '_num'])
			element[eventName + i] = element[eventName + (i+1)];
	}
	//if handler was found, decrement the handler count
	if(found)
		element[eventName + '_num']--;
}


/* --------------------------------------------------
	DOM Utils -- provided by Kostya Kulikov (kostiko@mail.ru)
-------------------------------------------------- */

function getChildByClassName(object, className) {
	var childs = object.childNodes;
	var count = childs.length;
	
	for (var i = 0; i < count ; i++) {
		if(childs[i].className && childs[i].className == className){
			return childs[i];
		} else {
			if(childs[i].childNodes) {
				var child = getChildByClassName(childs[i], className);
				if(child) return child;
			}
		}
	}
	
	return null;
}

function toggleMenuItem(divName) {
	var el = dojo.byId(divName);
        if (el.style.display == "block") {
            el.style.display = "none";
        }
        else {
            el.style.display = "block";
        }
} 

//Random number generator to be placed in page header
var ord = Math.random() * 10000000000000000;

function saveStateToCookie(panelsState) {
    var jsonState = dojo.toJson(panelsState);

    dojo.cookie("PanelsState", "", { expire: -1 });
    dojo.cookie("PanelsState", jsonState, { expire: 7 });
}
