function get(n) { return document.getElementById(n); }

String.prototype.toArray = function() {
	var tArr=this.split('&');
	var arr=new Array();
	for(var i in tArr) {
		var dArr=tArr[i].split('=');
		arr[dArr[0]] = dArr[1];
	}

	return arr;
};


String.prototype.inn = function() {
	var arr=[];
	
	if(arguments.length > 1) {
		for(var i=0; i < arguments.length; i++) {
			arr[i] = arguments[i];
		}
	}else {
		if(typeof arguments[0] == 'string' && arguments[0].indexOf(',') > -1) 
			arr = arguments[0].split(',');
		else 
			arr = arguments[0];
	}
	
	for(var i in arr) {
		if(arr[i] == this) return true;	
	}
	
	return false;
};

String.prototype.repeat = function(l){
	return new Array(l+1).join(this);
};


function isDescendantOf(tNode, pNode) {
	try{
		if(pNode.contains) {
			if(pNode.contains(tNode) && !pNode.contains(get('__!)(@&__'))) // safari always returns true so lookup nonexistent element
				return true;
		}
	}catch(ex) { }// manually look
	
	var p = tNode;
	while(p.parentNode && false != (p = p.parentNode))
		if(p == pNode) 
			return true;

	return false;
}

function getChildren(n) {
	var children=[];
	if(n && n.hasChildNodes())
		for(var i in n.childNodes)
			if(n.childNodes[i] && n.childNodes[i].nodeType == 1)
				children[children.length]=n.childNodes[i];

	return children;
}

function getParentNode(n) {
	var o=n.parentNode;
	while(o != document && o.nodeType != 1)
		o=o.parentNode;

	return o;
}

function findParentNode(o, nodeName, highestNode) {
	var i=0;
	var max=1000;
	if(!highestNode) highestNode = document.body;
	do {
		o=o.parentNode;
		i++;
				
		if(i>=max||o==highestNode) return false;
	}while(o.nodeName != nodeName);
	
	return o;
}

function newElement(type) { return document.createElement(type); }

function getMousePos(e) {
	var posx = 0;
	var posy = 0;
	
	if (!e) var e = window.event;
	
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
	}
	
	return {'x':posx, 'y':posy};
}



function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	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] );
	}
}

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}


function evsrc(e) {
	var o=false;
	if (e.target) o = e.target;
	else if (e.srcElement) o = e.srcElement;
	if (o.nodeType == 3) // defeat Safari bug
		o = o.parentNode;
	
	return o;
}




function get_parent_menu(o) {
	var par=null;
	for(var i=0; i<c.length; i++) {
		if(isDescendantOf(o, c[i])) {
			par=c[i];
			break;
		}
	}
	
	return par?par:o;
}

function submenu_over(e) {
	var src = evsrc(e);
	var submenu = getChildren(get_parent_menu(src))[1];
	
	if(active_submenu==submenu) return;
	
	if(active_submenu)
		active_submenu.style.display='none';

	if(submenu)
		submenu.style.display='block';
}

function submenu_out(e) {
	var src = evsrc(e);
	var submenu = getChildren(get_parent_menu(src))[1];
	
	if(active_submenu==submenu) return;
	
	if(submenu)
		submenu.style.display='none';
	
	if(active_submenu)
		active_submenu.style.display='block';
}

function xget(strURL, pass, cb) {
	var xmlHttpReq = false;
	if (window.XMLHttpRequest)
		xmlHttpReq = new XMLHttpRequest();
	else if (window.ActiveXObject)
		xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");

	xmlHttpReq.open('GET', strURL, true);
	xmlHttpReq.onreadystatechange = function() {//Call a function when the state changes.
		if(xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
			if(typeof cb == 'function')
				cb(xmlHttpReq.responseText, pass);
		}else if(xmlHttpReq.readyState == 4 && xmlHttpReq.status != 200) {
			alert('Error performing the request.');
		}
	}
	xmlHttpReq.send(null);
}

function vote(e, url) {
	if(!e) e = window.event;
	xget(url, evsrc(e), vote_handler);
}

function vote_handler(data, obj) {
	var obj = findParentNode(obj, 'DIV');
	obj.className='voted';
	var r = getChildren(getChildren(obj)[0])[0];
	var nval = parseInt(r.innerHTML)+parseInt(data);
	r.innerHTML = (nval > -1 ? '+' : '') + nval;
}
