var chars='¬`¦!"£$^&*()_+-={}[]:@~;\'#|<>?\\,./%';
var subst=['%AC','%60','%A6','%21','%22','%A3','%24','%5E','%26','%2A','%28','%29','%5F','%2B','%2D','%3D','%7B','%7D','%5B','%5D','%3A','%40','%7E','%3B','%27','%23','%7C','%3C','%3E','%3F','%5C','%2C','%2E','%2F','%25'];

function isNaA(a)
{
	return !((typeof(a)=='object')&&(!isNaN(a.length)));
}

function isIn(theValue,theList)
{
	if(isNaA(theValue))
	{
		return isIt(theValue,theList);
	}
	else
	{
		for(var i=0;i<theValue.length;i++)
		{
			var ret=isIt(theValue[i],theList);
			if(ret) return true;
		}
	}
	return false;
}

function isIt(theValue,theList)
{
	if(isNaA(theList))
	{
		if(theValue==theList) return true;
	}
	else
	{
		for(var i=0;i<theList.length;i++)
		{
			if(theValue==theList[i]) return true;
		}
	}
	return false;
}

function whereIs(v,l)
{
	if(!isNaA(l))
	{
		for(var i=0;i<l.length;i++)
		{
			if(v==l[i]) return i;
		}
	}
	return -1;
}

function alertByPage(str)
{
	var lines=str.split(/\n/);
	var pages=new Array();
	var p=0;
	var i=0;
	var t=0;
	for(var l=0;l<lines.length;l++)
	{
		if(i==0) pages[p]='';
		var minusWhitespace=lines[l].replace(/\s/g,'');
		if(minusWhitespace!='')
		{
			pages[p]+=lines[l]+'\n';
			i++;
			t++;
			if(i==30)
			{
				i=0;
				p++;
			}
		}
	}
	if(t>0)
	{
		for(var p=0;p<pages.length;p++)
		{
			alert(pages[p]+((pages.length>1)?'-- Press OK to continue [Page '+(p+1)+' of '+pages.length+'] ---':''));
		}
	}
	else
	{
		alert('Object empty');
	}
}

function displayObject(theObj,theName)
{
	var str=returnObject(theObj,((theName)?theName:'object'),0);
	alertByPage(str);
}

function returnObject(theObj,preStr,level)
{
	var str='';
	for(var i in theObj)
	{
		str+=((typeof(theObj[i])=='object'&&level<100)?returnObject(theObj[i],preStr+'.'+i,(level+1)):preStr+'.'+i+'='+theObj[i]+'\n');
	}
	return str;
}

function displayObj(theObj)
{
	var str=returnObj(theObj);
	alertByPage(str);
}

function returnObj(theObj,nl)
{
	if(!nl) nl='\n';
	var t="";
	for(var i in theObj)
	{
		t+=i+'='+theObj[i]+nl;
	}
	return t;
}

function getArgs()
{
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = query.split("&");
	for(var i = 0; i < pairs.length; i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos == -1) continue;
		var argname = pairs[i].substring(0,pos);
		var value = pairs[i].substring(pos+1);
		args[argname]=unescape(value);
	}
	return args;
}

function getArguments()
{
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = query.split("&");
	for(var i = 0; i < pairs.length; i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos == -1) continue;
		var argname = pairs[i].substring(0,pos);
		var value = pairs[i].substring(pos+1);
		if(args[argname])
		{
			if(isNaA(args[argname]))
			{
				var tmpval=escape(args[argname]);
				args[argname]=new Array()
				args[argname][0]=unescape(tmpval);
			}
			args[argname][args[argname].length]=unescape(value);
		}
		else
		{
			args[argname]=unescape(value);
		}
	}
	return args;
}

String.prototype.parseNumber = function()
{
	return parseInt(this.replace(/^\D*(\d+)\D.*$/,'$1').stripZeros());
}

String.prototype.stripZeros = function()
{
	return this.replace(/^0*([^0].*)/,'$1');
}

Number.prototype.padTo = function(digits)
{
	return this.padToWith(digits,'0');
}

Number.prototype.padToWith = function(digits,char)
{
	var s=this.toString();
	while(s.length<digits)
	{
		s=char+s;
	}
	return s;
}

String.prototype.padTo = function(digits)
{
	return this.padToWith(digits,'0');
}

String.prototype.padToWith = function(digits,char)
{
	var s=this;
	while(s.length<digits)
	{
		s=char+s;
	}
	return s;
}

String.prototype.stripSpaces = function()
{
	return this.replace(/^\s*(\S.*\S)\s*$/,'$1');
}

String.prototype.swapcase = function()
{
	return this.replace(/([a-z])|([A-Z])/g,function($0,$1,$2){return ($1)?$0.toUpperCase():$0.toLowerCase()});
}

String.prototype.toTitleCase = function()
{
	return this.replace(/\b([a-z])/g,function($0){return $0.toUpperCase()});
}

String.prototype.toSentenceCase = function()
{
	return this.replace(/^\W*([a-z])/,function($0){return $0.toUpperCase()});
}

String.prototype.encodeURL=function()
{
	return this.replace(/(.)/g,function($0){return (chars.indexOf($0)!=-1)?subst[chars.indexOf($0)]:$0;});
}

String.prototype.decodeURL=function()
{
	var str=this.toString();
	for(var i=0;i<subst.length;i++)
	{
		var re=new RegExp(subst[i],'g');
		str=str.replace(re,chars.charAt(i));
	}
	return str;
}
