var onLoad=[];

onLoad.run=function()
{
	var r=null;
	while(this.length)
		r=this.pop()();
	return r;
}

window.onload=function(){return onLoad.run();}


String.prototype.repeat=function(num)
{
	var str='';
	for(var x=0;x<num;x++)str+=this;
	return str;
}

function formatNumber2(num, min, max)
{
	if(max && max<min)min=max;
	num=num.toString();
	return '0'.repeat(min-num.length)+(max?num.substr(0,max):num);
}

function _timer(timeoutCallback, timeout, element, format, timing)
{
	this.timeout=timeout;
	this.timeoutCallback=timeoutCallback;
	this.element=element;
	this.format=format;
	this.timing=timing;
	this.reset();
}

_timer.prototype.reset=function()
{
	this.num=this.timeout;

	this.element.innerHTML=this.formatNum();
	if(this.interval)clearInterval(this.interval);
	var I=this;
	this.interval=setInterval(function(t)
	{
		if(I.num>0)
		{
			I.num--;
			I.element.innerHTML=I.formatNum();
			return;
		}
		clearInterval(I.interval);
		I.interval=0;
		I.timeoutCallback(t,I.timeout);
	},1000);
}

_timer.prototype.formatNum=function()
{
	return this.format?formatNumber(Math.floor(this.num/3600),2,3)+':'+formatNumber(Math.floor((this.num%3600)/60),2,2)+':'+formatNumber(this.num%60,2,2):this.num;
}

function fixNumber(number)
{
	number=number.replace(/ /g,'').replace(/,/g,'.');
	return number;
}

function formatNumber(number)
{
	number=number.toString().replace(/\./g,',');
	var i=number.indexOf(',');
	if(i<0)i=number.length;
	for(chunk=3;i>0;i--,chunk--)
	{
		if(!chunk)
		{
			number=number.substring(0,i)+' '+number.substring(i);
			chunk=3;
		}
	}
	return number;
}

function query2object(query)
{
	var obj={};
	var params=query.split('&');

	for(var i=0;i<params.length;i++)
	{
		var tmp=params[i].split('=',2);
		obj[tmp[0]]=tmp[1];
	}

	return obj;
}

function object2query(obj)
{
	var query='';

	for(var i in obj)
	{
		query+=(query?'&':'');
		query+=i+(obj[i]!=undefined?'='+obj[i]:'');
	}

	return query;
}

function address(address)
{
	var tmp;
	var uri=parseUri(address,true);

	// domains
	if(uri.host)
		uri.domains=uri.host.split('.').reverse();
	else uri.domains=[];

	// separate path
	if(uri.path)
	{
		uri.absolute=uri.path[0]=='/';

		tmp=uri.path;
		if(tmp[0]=='/')tmp=tmp.substr(1);
		uri.isDir=tmp[tmp.length-1]=='/';
		if(uri.isDir)
			tmp=tmp.substring(0,uri.length-1);
		uri.paths=tmp.split('/');
	}
	else uri.paths=[];

	// directory
	if(uri.dir)
	{
		if(uri.dir[uri.dir.length-1]=='/')
			uri.dir=uri.dir.substring(0,uri.dir.length-1);

		tmp=uri.dir;
		if(tmp[0]=='/')tmp=tmp.substr(1);
		uri.dirs=tmp.split('/');
	}
	else uri.dirs=[];

	// query string
	if(uri.query)
		uri.args=query2object(uri.query.replace('&amp;','&'));
	else uri.args={};
	delete uri.queryKey;

	// anchor
	if(uri.anchor)
		uri.jsArgs=query2object(uri.anchor.replace('&amp;','&'));
	else uri.jsArgs={};

	return uri;
}

function object2address(uri)
{
	// user info
	if(uri.user)
		uri.userInfo=uri.user+(uri.password?':'+uri.password:'');

	// host
	if(uri.domains)
		uri.host=uri.domains.reverse().join('.');

	// path
	if(uri.paths)
	{
		uri.path=uri.paths.join('/');
		if(uri.absolute)
			uri.path='/'+uri.path;
		if(uri.isDir)
			uri.path+='/';
	}

	// query string
	if(uri.args)
		uri.query=object2query(uri.args);

	// anchor
	if(uri.jsArgs)
		uri.anchor=object2query(uri.jsArgs);

	if(uri.host || uri.port || uri.userInfo)uri.authority='';
	if(uri.host)uri.authority+=uri.host;
	if(uri.port)uri.authority+=':'+uri.port;
	if(uri.userInfo)uri.authority=uri.userInfo+'@'+uri.authority;

	if(uri.path || uri.query || uri.anchor)uri.relativeInfo='';
	if(uri.path)uri.relativeInfo+=uri.path;
	if(uri.query)uri.relativeInfo+='?'+uri.query;
	if(uri.anchor)uri.relativeInfo+='#'+uri.anchor;

	var tmp='';
	if(uri.scheme)tmp+=uri.scheme+'://';
	if(uri.authority)tmp+=uri.authority;
	if(uri.relativeInfo)tmp+=uri.relativeInfo;
	return tmp;
}

function show(id, on, visible, hidden)
{
	if(!hidden)hidden='none';
	if(!visible)visible='block';
	var obj=document.getElementById(id);
	if(!obj)return false;

	obj.style.display=on?visible:hidden;

	return true;
}

