/*******************************************************
Favela.net
Authors:
	Rui Eduardo Gouveia Gil

Reviewers: 
	TODO

Version 1
Date: 2008
File: updater.js
 *******************************************************/
function repaint()
{
	var body = document.getElementsByTagName("body")[0];
	body.style.display = "none";
	body.style.display = "block"; 
}

function addScripts(src)
{  
	for (i=0; i<src.length; i++)
	{
		newScript = document.createElement("script");
		newScript.src = src[i];
		newScript.type = "text/javascript";
		newScript.language = "JavaScript";
		document.getElementsByTagName("head")[0].appendChild(newScript);
	}
}

function addCSS(src)
{  
	for (i=0; i<src.length; i++)
	{
		newCSS = document.createElement("link");
		newCSS.href = src[i];
		newCSS.type = "text/css";
		newCSS.rel = "stylesheet";
		document.getElementsByTagName("head")[0].appendChild(newCSS);
	}
}

function executeScript(text)
{  
	var script = new Function(text);
	script();
}

function insertCSS(text)
{  
	if(text!='')
	{
		newStyle = document.createElement("style");
		newStyle.type = "text/css";
		newStyle.rel = "stylesheet";
		if (newStyle.styleSheet)
			newStyle.styleSheet.cssText = text;
		else
			newStyle.innerHTML = text;
		document.getElementsByTagName("head")[0].appendChild(newStyle);
	}
}

function renderContext(data)
{
	insertCSS(data[2]);
	addCSS(data[4]);	
	$('main').innerHTML = data[0];
	addScripts(data[3]);	
	executeScript(data[1]);

	$('loading').style.visibility='hidden';
}

function redrawLayer(data)
{
	var i = 0;
	for (i = 0 ; i+1 < data.length ; i += 2)
		$(data[i]).innerHTML = data[i+1];	

	if(data[i])
		executeScript(data[i]);

	$('loading').style.visibility='hidden';
}

function addLayer(data)
{
	addCSS(data[4]);	
	insertCSS(data[2]);
	$('main').innerHTML += data[0];
	addScripts(data[3]);	
	executeScript(data[1]);

	$('loading').style.visibility='hidden';
}

function removeLayer(layerID)
{
	var layer = document.getElementById(layerID);
	layer.parentNode.removeChild(layer);
}

function isZrowser()
{
	return (navigator['vendor'] == 'Ludiloom');
}

var tooltip_time;
function showTooltip(current,e,text)
{
	if (browser=navigator.appName == "Microsoft Internet Explorer" && parseFloat(navigator.appVersion) <= 4)
		return;
	else
		tooltip_time = setTimeout(showTooltipNow,1000,current,e,text);
}

function showTooltipNow(current,e,text)
{
	var tooltipElement;
	if (document.getElementById("tooltipElement") == null)
	{
		tooltipElement = document.createElement("div");
		tooltipElement.setAttribute('id','tooltipElement');
		document.body.appendChild(tooltipElement);
	}
	else
	{
		tooltipElement = document.getElementById("tooltipElement");
	}
	
	var posx = -1;
	var posy = -1;
	if (browser=navigator.appName != "Microsoft Internet Explorer")
	{
		posx = e.pageX;
		posy = e.pageY;
	}
	
	if (posx==-1 && posy==-1)
	{
		posx = window.event.clientX + document.documentElement.scrollLeft;
		posy = window.event.clientY + document.documentElement.scrollTop;
	}
	
	tooltipElement.innerHTML = text;
	tooltipElement.style.left=posx+'px';
	tooltipElement.style.top=posy+'px';
	
	tooltipElement.style.visibility='visible';
}

function hideTooltip()
{
	var tooltipElement = document.getElementById("tooltipElement");
	if (tooltipElement != null)
	{
		tooltipElement.style.visibility='hidden';
		clearTimeout(tooltip_time);
	}
}

function ismaxlength(obj)
{
	var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
	if (obj.getAttribute && obj.value.length>mlength)
	obj.value=obj.value.substring(0,mlength)
}

//Adapted from code by Jennifer Madden found in http://jennifermadden.com/javascript/stringEnterKeyDetector.html (07/02/2008) 
function checkEnter(e) //e is event object passed from function invocation
{ 
	if(e && e.which)	//if which property of event object is supported (NN4)
		return (e.which == 13); //character code is contained in NN4's which property
	else
		return (e.keyCode == 13); //character code is contained in IE's keyCode property
}

function getRadioValue(radio)
{
	for (var i=0; i < radio.length; i++)
	{
		if (radio[i].checked)
			return radio[i].value;
	}
}

function setValidPort(obj)
{
	var text = obj.value.match(/[\d]{1,5}/g);
	if (text)
	{ 
		obj.value = text.join('');
	}
	else
	{
		obj.value = '';
	}
}

function setValidName(obj)
{
	var text = obj.value.match(/[\w\d]+/g);
	if (text)
		obj.value = text.join('');
	else
		obj.value = '';
}

function $(v,o) { return((typeof(o)=='object'?o:document).getElementById(v)); }
function $S(o) { return((typeof(o)=='object'?o:$(o)).style); }
function agent(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); }
function abPos(o) { var o=(typeof(o)=='object'?o:$(o)), z={X:0,Y:0}; while(o!=null) { z.X+=o.offsetLeft; z.Y+=o.offsetTop; o=o.offsetParent; }; return(z); }
function XY(e,v) { var o=agent('msie')?{'X':event.clientX+document.body.scrollLeft,'Y':event.clientY+document.body.scrollTop}:{'X':e.pageX,'Y':e.pageY}; return(v?o[v]:o); }

star={};

var currentValue = 0;
star.mouse=function(e,o) { if(star.stop || isNaN(star.stop)) { star.stop=0;

	document.onmousemove=function(e) { var n=star.num;
	
		var p=abPos($('star'+n)), x=XY(e), oX=x.X-p.X, oY=x.Y-p.Y; star.num=o.id.substr(4);

		if(oX<1 || oX>100 || oY<0 || oY>20)
		{ 
			star.stop=1; 
			star.revert(); 
		}
		else
		{
			currentValue = oX;
			$S('starCur'+n).width=oX+'px';
		}
	};
} };

star.revert=function() { var n=star.num, v=parseInt($('starCur'+n).title);

	$S('starCur'+n).width=Math.round(v*100/100)+'px';

	document.onmousemove='';

};

star.num=0;

starWorld={};

function listCheckboxes(checkboxes)
{
	var boxes = new Array();
	
	if(checkboxes.length != undefined)
	{
		for (i = 0; i < checkboxes.length; i++)
		{
			if (checkboxes[i].checked)
				boxes[boxes.length] = checkboxes[i].name;
			else
				boxes[boxes.length] = '0';
		}
	}
	else
	{
		if (checkboxes.checked)
			boxes[boxes.length] = checkboxes.name;
		else
			boxes[boxes.length] = '0';
	}
	
	return boxes;
};
