var jPrototype = {
  Version: '0.179',
  nightly: '20090112'
}

function dump(o){
	var level_current=arguments[1]||0;
	var level_next=level_current+1;
	var indent_single="    ";
	var indent_current="";
	var indent_next="";
	for(var i=0;i<level_current;i++)indent_current+=indent_single;
	var indent_next=indent_current+indent_single;
	var result = ''; 
	     if(is.Null(o))   result += '{ } null';
	else if(is.U(o)) result += '{ } undefined';
	else if(is.S(o)) result += '{s:'+o.length+'} "' + o.replace(/"/,'\\"') + '"' ;
	else if(is.B(o)) result += '{b} ' + (o?"true":"false") ;
	else if(is.N(o)) result += '{n} ' + o ;
	else if(is.F(o)) result += '{f} ' + String(o).split("\n").join("\n"+indent_current) ;
	else if(is.Time(o)) result += '{D} '+o.getFullYear().zeroFill()+'-'+(o.getMonth()+1).zeroFill()+'-'+o.getDate().zeroFill()+' '+o.getHours().zeroFill()+':'+o.getMinutes().zeroFill()+':'+o.getSeconds().zeroFill()+' '+o.getMilliseconds().zeroFill(3);
	else if(is.Array(o)){
		var l=o.length;
		result += '{a:'+l+') [';
		o.each(function(v,k){
			result += '\n'+indent_next+k+': ';
			result += dump(v,level_next) ;
			result += "," ;
		});
		if (l>0) result  = result.substr(0,result.length-1)+'\n';
		result += indent_current+']' ;
	}else if(is.Object(o)){
		if(is.Defined(o.tagName)){
			result += '{H} '+o.tagName;
		}else if(is.Defined(o.nodeName)){
			result += '{X} '+o.nodeName;
		}else{
			var l=$AA(o).length;
			result += '{o:'+l+') {';
			for(k in o){
				v=o[k];
				result += '\n'+indent_next+k+': ';
				result += dump(v,level_next) ;
				result += "," ;
			}
			if (l>0) result  = result.substr(0,result.length-1)+'\n';
			result += indent_current+'}' ;
		}
	}
	return result;
}

function log(q){
	if(console.log){
		console.log(q);
	}else{
		if(!byId("jLog")){
			$$("BODY").first().insert('<div id="jLog" style="float:right;"></div>','top')
		}
		var jconsole=byId("jLog"),d=new Date();
		if(jconsole){
			var l = '';
			l+='<div>';
			l+='['+d.getMinutes().zeroFill()+':'+d.getSeconds().zeroFill()+']';
			l+=' ';
			l+=q.replace(/</,"&lt;");
			l+='</div>';
			l+=String(jconsole.innerHTML);
			jconsole.innerHTML=l;
		}
	}
}

function trace(){alert($AA(arguments))};

function AND(check,values){
	result=true;
	values.each(function(v){if(check!=v)result=false;});
	return result;
}
function NAND(check,values){
	var result=true;
	values.each(function(v){if(check==v)result=false;});
	return result;
}
function OR(check,values){
	var result=false;
	values.each(function(v){if(check==v)result=true;});
	return result;
}
function NOR(check,values){
	result=false;
	values.each(function(v){if(check!=v)result=true;});
	return result;
}

function wr(q){document.write(q)};
function wri(q){wr(q)};
function xmp(q){wri("<xmp>"+q+"</xmp>")};
function div(q){wri("<div>"+q+"</div>")};
function ce(q){return document.createElement(q)};
function ac(q,p){p.appendChild(q)};
function rc(q,p){p.removeChild(q)};
function px(q){return parseInt(q)+"px"};

function count(q){
	if(typeof q.length!="undefined")return q.length;
	var t,i=0;
	for(t in this)i++;
	return i;
};
function global(k){
	var v;
	if(arguments.length>1)v=arguments[1];
	window[k]=v;
};

function $AA(o){
	if(!is.Defined(o)||is.Null(o))return o;
	if(!is.Array(o)&&!is.Object(o))return [o];
	if(is.Array(o))return $A(o);
	var a=[];
	var valid=false;
	if(is.Defined(o.length)){
		for(var i=0;i<o.length;i++){
			if(is.Defined(o[i])){
				a[i]=o[i];
				valid=true;
			}else break;
		}
	}
	if(!valid){
		a=[];
		for(k in o)a.push(o[k])
	}
	return a;
}

// fix both IE and Opera (adjust when they implement this method properly)
// http://webbugtrack.blogspot.com/2007/08/bug-152-getelementbyid-returns.html
if(Prototype.Browser.IE||Prototype.Browser.Opera){
	document.nativeGetElementById = document.getElementById;
	document.getElementById = function(id){
		var elem = document.nativeGetElementById(id);
		if(elem){
			if(elem.id == id){
				return elem;
			}else{
				for(var i=1;i<document.all[id].length;i++){
					if(document.all[id][i].id == id){
						return document.all[id][i];
					}
				}
			}
		}
		return null;
	};
}
function byId(tagId){
	var src;
	if(arguments.length>1){
		var arg = arguments[1] ;
		if(is.S(arg)){
			if(document.getElementById) src=document.getElementById(arguments[1]) ;
			if(document.all)            src=document.all[arguments[1]] ;
			if(document.layers)         src=document.layers[arguments[1]] ;
		}else src = arg ;
	}else src = document ;
	
	if(src.getElementById) return src.getElementById(tagId);
	if(src.all)            return src.all[tagId];
	if(src.layers)         return src.layers[tagId];
	
	return null;
}
function byTag(tagName){
	var r = $A( ($(arguments[1])||document).getElementsByTagName(tagName) );
	r.each(function(v,k){r[k]=$(v)});
	return r;
}
function byClass(className){
	var r = $A( ($(arguments[1])||document).getElementsByClassName(className) );
	r.each(function(v,k){r[k]=$(v)});
	return r;
}
function $EX(element){
	// Extract Value
	element=$(element);
	if(is.formElement(element))					return $F(element);
	if(is.Defined(element.innerHTML))			return element.innerHTML;
	return element;
}
function $FGet(element){
	var isArrayOfFormElements=false;
	if(is.Defined(element.length)){
		if(element.length>0){
			if(is.Defined(element[0].tagName)){
				var tag=element[0].tagName.toUpperCase();
				isArrayOfFormElements=OR(tag,["INPUT","TEXTAREA","SELECT"]);
			}
		}
	}
	if(isArrayOfFormElements){
		i=element;
	}else{
		q=$(element);
		// se non è l'elemento di una form: return false
		if(!is.formElement(element))return false;
		// se non ha un nome: return value
		if(is.Empty(q.name))return $F(q);
		// se invece ha un nome: recupero l'elemento tramite il suo nome
		var i=q.form.elements[q.name];
		// controllo se è un array di elementi
		if(!is.Defined(i.length)){
			// se non è un array: return value
			return $F(i);
		}else if(is.Defined(i.options)){
			// se è una select: return value
			return $F(i);
		}
	}
	if(i[0].type=="radio"){
		// se è un array di radio: return array value
		for(var j=0;j<i.length;j++){
			if(i[j].checked)return i[j].value;
		}
		return null;
	}else{
		// se è un array di input: return array value
		var r=[];
		if(i[0].type=="checkbox"){
			// array di checkbox
			for(var j=0;j<i.length;j++){
				if(i[j].checked)r.push(i[j].value);
			}
		}else{
			// array di input text o textarea
			for(var j=0;j<i.length;j++){
				r.push(i[j].value);
			}
		}
		return r;
	}
}
function $FSet(element,value){
	// build my own Array.indexOf
	// because actual Prototype version (1.6.0.2) uses "===" operator
	// instad of "==" operator
	function $FSet_indexOf(ago,pagliaio){
		var l=pagliaio.length;
		for(var i=0;i<l;i++){
			if(pagliaio[i]==ago)return i;
		}
		return -1;
	}
	var isArrayOfFormElements=false;
	if(is.Defined(element.length)){
		if(element.length>0){
			if(is.Defined(element[0].tagName)){
				var tag=element[0].tagName.toUpperCase();
				isArrayOfFormElements=OR(tag,["INPUT","TEXTAREA","SELECT"]);
			}
		}
	}
	if(isArrayOfFormElements){
		i=element;
	}else{
		q=$(element);
		if(!is.formElement(element))return false;
		if(is.Empty(q.name))return $F(q);
		var i=q.form.elements[q.name];
	}
	if(is.Defined(i.options)){
		value=$AA(value);
		for(var j=0;j<q.options.length;j++){
			var o=q.options[j];
			o.selected=($FSet_indexOf(o.value,value)!=-1)?1:0;
		}
	}else if(!is.Defined(i.length)){
		i.value=value;
	}else if(i[0].type=="radio"){
		value=$AA(value);
		for(var j=0;j<i.length;j++){
			var o=i[j];
			o.checked=($FSet_indexOf(o.value,value)!=-1)?1:0;
		}
	}else{
		value=$AA(value);
		if(i[0].type=="checkbox"){
			for(var j=0;j<i.length;j++){
				var o=i[j];
				o.checked=($FSet_indexOf(o.value,value)!=-1)?1:0;
			}
		}else{
			for(var j=0;j<i.length;j++){
				var o=i[j];
				if(is.Defined(value[j]))o.value=value[j];
			}
		}
	}
	return $(element);
}

Element.addMethods({
	byId:function(element,q){return byId(q,$(element))},
	byTag:function(element,q){return byTag(q,$(element))},
	byClass:function(element,q){return byClass(q,$(element))},
	getFormElements:function(element){
		return [$(element).select("INPUT"),$(element).select("TEXTAREA"),$(element).select("SELECT")].flatten();
	},
	setDimensions:function(element,dim){
		var d=$AA(dim),element=$(element);
		$(element).style.width=px(d[0]);
		$(element).style.height=px(d[1]);
	},
	setWidth:function(element,dim){
		$(element).style.width=px(dim);
	},
	setHeight:function(element,dim){
		$(element).style.height=px(dim);
	},
	get:function(element){
		return $FGet(element);
	},
	set:function(element,value){
		return $FSet(element,value);
	},
	getIndex:function(element){
		// WORK IN PROGRESS: NON SOLO SELECT
		q=$(element);
		if(q.tagName!="SELECT")return -1;
		if(arguments.length==1)return q.options.selectedIndex;
		
		var value=arguments[1];
		var r=[];
		$AA(q.options).each(function(o,i){
			if(o.value==value)r.push(i);
		});
		return (r.length==1)?r[0]:r;
		return q;
	},
	setIndex:function(element,index){
		// WORK IN PROGRESS: NON SOLO SELECT
		q=$(element);
		if(q.tagName!="SELECT")return -1;
		$AA(index).each(function(v){
			q.options[v].selected=1;
		})
		return q;
	},
	is:{
		Num     : function(q){
			return is.Num($EX(q));
		},
		Int     : function(q){
			return is.Int($EX(q));
		},
		Float   : function(q){
			return is.Float($EX(q));
		},
		Empty	: function(q){
			return is.Empty($EX(q));
		},
		Email  : function(q){
			return is.Email($EX(q));
		},
		Url    : function(q){
			return is.Url($EX(q));
		},
		CreditCard : function(q) {
			return is.CreditCard($EX(q));
		},
		CodiceFiscale : function(q){
			return is.CodiceFiscale($EX(q));
		},
		PIVA : function(q){
			return is.PIVA($EX(q));
		},
		Tel : function(q){
			return is.Tel($EX(q));
		},
		formElement : function(q){
			return is.formElement(q);
		}
	}
}); 

var is = {
	// enviroment
	global:function(q){
		return window[q]!="undefined";
	},
	// browser
	IE: Prototype.Browser.IE,
	Opera: Prototype.Browser.Opera,
	Safari: navigator.userAgent.indexOf("Safari")!=-1,
	WebKit: Prototype.Browser.WebKit,
	Gecko: Prototype.Browser.Gecko,
	MobileSafari: Prototype.Browser.MobileSafari,
	Win:navigator.appVersion.toLowerCase().indexOf("win")!=-1,
	Mac:navigator.userAgent.indexOf("Mac")!=-1,
	// objects
	formElement: function(q){
		q=$(q);
		if(q)switch(q.tagName.upper()){case"TEXTAREA":case"INPUT":case"SELECT":return true;}
		return false;
	},
	// normal types
	S : function(q){ return typeof q == "string" },
	B : function(q){ return typeof q == "boolean" },
	N : function(q){ return typeof q == "number" },
	F : function(q){ return typeof q == "function" },
	O : function(q){ return typeof q == "object" },
	U : function(q){ return typeof q == "undefined" },
	// special types
	D : function(q){
		// Date object
		if(!is.O(q))return false;
		if(!is.Defined(q.toUTCString))return false;
		var s=q.toUTCString();
		if(!(/^\w{3}, \d{1,2} \w{3} \d{4} \d{1,2}:\d{1,2}:\d{1,2} \w{3}/.test(s)))return false;
		return is.F(q.getFullYear);
	},
	Array   : function(q){
		return Object.prototype.toString.call(q) === '[object Array]'; 
	},
	Time    : function(q){ return is.D(q) },
	Object  : function(q){ return !is.Array(q) && !is.Time(q) && is.O(q) },
	Defined : function(q){ return !is.U(q) },
	Null    : function(q){ return is.O(q) && q==undefined },
	// not reliable types
	Collection:function(q){
		if(!is.Defined(q.length))return false;
		if(String(q)=="[object HTMLCollection]")return true;
		return is.Object(q);
	},
	// validation
	Date:function(yyyy,mm,gg){
		function y2k(q){return(q<1000)?q+1900:q;}
		var today=new Date();
		yyyy = ((!yyyy) ? y2k(today.getFullYear()):yyyy)
		mm = ((!mm) ? today.getMonth():mm-1)
		if (!gg) return false
		var test = new Date(yyyy,mm,gg)
		if ((y2k(test.getFullYear()) == yyyy) && (mm == test.getMonth()) && (gg == test.getDate()) ){
			return true
		}else{
			return false
		}
	},
	Num     : function(q){
		if(is.N(q))return true;
		var str=String(q);
		var re = /^[\-\+]{0,1}[0-9]+\.{0,1}[0-9]*$/;
		return re.test(str);
	},
	Int     : function(q){
		var str=String(q);
		var re = /^[\-]{0,1}[0-9]+$/;
		return re.test(str);
	},
	Float   : function(q){
		var str=String(q);
		var re = /^[\-]{0,1}[0-9]+\.[0-9]+$/;
		return re.test(str);
	},
	Empty	: function(q){
		var str=String(q);
		return (is.S(str)||is.N(str))?(String(str).trim()==""):false;
		
	},
	Email  : function(q){
		var str=String(q);
		var re = /^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2,6})$/i;
		return re.test(str);
	},
	Url    : function(q){
		var str=String(q);
		var re = /^((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*\.)+([a-z]{2,6})|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&amp;]*)?)?(#[a-z][a-z0-9_]*)?$/i;
		return re.test(str);
	},
	CreditCard : function(q) {
		// Encoding only works on cards with less than 19 digits
		var str=String(q);
		if(typeof str!="string")return false;
		if (str.length > 19)return (false);
		var sum=0, mul=1, l=str.length;
		for (i = 0; i < l; i++) {
			var digit = str.substring(l-i-1,l-i);
			var tproduct = parseInt(digit ,10)*mul;
			sum += (tproduct >= 10) ? ((tproduct%10)+1) : tproduct ;
			mul += (mul == 1) ? 1 : -1 ;
		}
		return ((sum % 10)==0) ;
	},
	CodiceFiscale : function(q){
		var str=String(q);
		var re = /^[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]$/i;
		return re.test(str);
	},
	PIVA : function(q){
		var str=String(q);
		var re = /^\d{11}$/;
		return re.test(str);
	},
	Tel : function(q){
		var str=String(q);
		var re = /^\+{0,1}[\d\s\-\.\(\)\[\]]+$/;
		return re.test(str);
	}
}

var Cookie = {
  set: function(name, value, o) {
	var daysToExpire,path;
	if(typeof o=="undefined"){
		daysToExpire=365*2;
		path="/";
	}else{
		if(is.Num(o))daysToExpire=o;
		else if(typeof o.expire!="undefined")daysToExpire=o.expire;
		else daysToExpire=365*2;
		if(is.Num(o))path="/";
		else if(typeof o.path!="undefined")path=o.path;
		else path="/";
	}
	
 	var expire = '';
	if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
	var path = '; path='+path;
	
	
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire + path);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  del: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name, '', -1);
    return cookie;
  },
  isEnabled: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.del('_test') === '1');
  },
  exists: function(name){
	return !(Cookie.get(name)===null);
  }
};

Object.extend(String.prototype, {
	find: function(q){return this.indexOf(q) != - 1;},
	zeroFill:function(){
		var q=arguments[0]||2;

		if(!is.Num(this))return this;
		else return (this*1).zeroFill(q);
	},
	timestamp2date:function(q){
		q=this.replace(/\D/g,"");
		return new Date(q.substr(0,4),q.substr(4,2)-1,q.substr(6,2),q.substr(8,2),q.substr(10,2),q.substr(12,2));
	},
	fileext:function(){
		var s = this;
		if(s.indexOf("?")!=-1)s=s.substr(0,s.indexOf("?"));
		if(s.indexOf("#")!=-1)s=s.substr(0,s.indexOf("#"));
		return (s.lastIndexOf(".")!=-1) ? s.substring(s.lastIndexOf(".")+1,s.length) : s ;
	},
	filename:function(){
		var s = this;
		if(s.indexOf("?")!=-1)s=s.substr(0,s.indexOf("?"));
		if(s.indexOf("#")!=-1)s=s.substr(0,s.indexOf("#"));
		return (s.lastIndexOf("/")!=-1) ? s.substring(s.lastIndexOf("/")+1,s.length) : s ;
	},
	trim:function(){
		  return this.replace(/^[\n\r\t\v\f\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]+/, '').replace(/[\n\r\t\v\f\u00a0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000]+$/, '');
	},
	lower:function(){
		  return this.toLowerCase();
	},
	upper:function(){
		  return this.toUpperCase();
	},
	parseNumbers:function(){
		return this.match(/-{0,1}\d+(\.\d+)*/g);
	},
	parseIntegers:function(){
		var s=this.parseNumbers();
		var r=[]
		s.each(function(i){
			r.push(parseInt(i));
		})
		return r;
	},
	parseIDs:function(){
		var s=this.parseNumbers();
		var r=[]
		s.each(function(i){
			if( i*1>0 && i==parseInt(i) ){
				r.push(parseInt(i));
			}
		})
		return r;
	},
	parseEmails:function(){
		return this.match(/[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2,6})/g);
	},
	parseLinks: function(q){
		return this.match(/((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*\.)+([a-z]{2,6})|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&amp;]*)?)?(#[a-z][a-z0-9_]*)?/g);
	}
});

// navigator.version
if(is.IE){
	navigator.version=navigator.userAgent.split("MSIE ")[1].split(" ")[0].replace(";","");
}else if(is.Opera){
	navigator.version=navigator.userAgent.substring(navigator.userAgent.lastIndexOf("/")+1).split(" ")[0];
}else if(is.WebKit){
	navigator.version=navigator.userAgent.split("Version/")[1].split(" ")[0];
}else{
	navigator.version=navigator.userAgent.substring(navigator.userAgent.lastIndexOf("/")+1)
}

Object.extend(Number.prototype, {
	prev: function(){return this - 1;},
	next: function(){return this + 1;},
	zeroFill:function(){
		var q=arguments[0]||2;
		var s=String(this);
		var isFloat=s.indexOf(".")!=-1;
		var isNegative=s.indexOf("-")==0;
		
		if(isFloat){
			var int=s.substring(isNegative?1:0,s.lastIndexOf("."));
			var float=s.substring(s.lastIndexOf(".")+1);
		}else{
			var int=s.substring(isNegative?1:0);
			var float="";
		}
		
		if(q>=0){
			if(int.length>=q)return s;
			var r=int;
			for(var i=int.length;i<q;i++)r="0"+r;
			if(isNegative)r="-"+r;
			if(isFloat)r+="."+float;
		}else{
			q*=-1;
			if(float.length>=q)return s;
			var r=((isNegative)?"-":"")+int+"."+float;
			for(var i=float.length;i<q;i++)r+="0";
		}
		return r;
	},
	timestamp2date:function(){
		q=this.replace(/\D/g,"");
		return new Date(q.substr(0,4),q.substr(4,2)-1,q.substr(6,2),q.substr(8,2),q.substr(10,2),q.substr(12,2));
	}
});

Object.extend(Math,{
	baseConvert:function(n,b1,b2){return parseInt(String(n),b1).toString(b2).toUpperCase();},
	gra2rad:function(G){return G*Math.PI/180;},
	rad2gra:function(R){return R*180/Math.PI;}
});

Object.extend(Form,{
	submit:function(form){
		form=$(form);
		if(form.onsubmit!=null){
			switch(form.onsubmit()){
				case true:case undefined:form.submit();
			}
		}else form.submit();
	}
});

Object.extend(Position,{
	setLeft:function(element,left){
		$(element).style.left=parseInt(left)+"px";
	},
	setTop:function(element,top){
		$(element).style.top=parseInt(top)+"px";
	},
	setMidLeft:function(element,left){
		$(element).style.left=(parseInt(left)-Element.getDimensions(element).width/2)+"px";
	},
	setMidTop:function(element,top){
		$(element).style.top=(parseInt(top)-Element.getDimensions(element).height/2)+"px";
	},
	set:function(element,pos){
		element=$(element);
		if(OR(Element.getStyle(element,'position'),["absolute","relative"])){
			pos=$A(pos);
			Position.setLeft(element,pos[0]);
			Position.setTop(element,pos[1]);
		}
	},
	setMid:function(element,pos){
		element=$(element);
		if(OR(element.style.position,["absolute","relative"])){
			pos=$A(pos);
			var dim=element.getDimensions();
			Position.setLeft(element,pos[0]-dim.width/2);
			Position.setTop(element,pos[1]-dim.height/2);
		}
	},
	get:function(element){
		element=$(element);
		if(OR(element.style.position,["absolute","relative"])){
			return [element.style.left,element.style.top];
		}else{
			return Position.cumulativeOffset(element);
		}
	},
	getMid:function(element){
		element=$(element);
		var pos,dim=Element.getDimensions(element);
		if(OR(element.style.position,["absolute","relative"])){
			pos=[element.style.left,element.style.top];
		}else{
			pos=Position.cumulativeOffset(element);
		}
		return [pos[0]+dim.width/2,pos[1]+dim.height/2];
	}
});
Function.prototype.name=function(q){
	// q can be a function or an "arguments.callee"
	var results = String(q).match(/function (\S+)\(/); // in Opera the regexp doesn't work if i put "^" at the beginning
	if(results)if(results.length>1)return results[1];
	return null;
}

Object.extend(window,{
	getScroll:function(){
		var x,y;
		if( typeof( window.pageYOffset ) == 'number' ) {
			//Netscape compliant
			y = window.pageYOffset;
			x = window.pageXOffset;
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			//DOM compliant
			y = document.body.scrollTop;
			x = document.body.scrollLeft;
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			//IE6 standards compliant mode
			y = document.documentElement.scrollTop;
			x = document.documentElement.scrollLeft;
		}
		return [x,y];	
	},
	getDimensions:function(){
		var w,h;
		if (typeof window.innerWidth!="undefined"){
			w = window.innerWidth;
			h = window.innerHeight;
		}else if (document.documentElement && typeof document.documentElement.clientWidth!="undefined" && document.documentElement.clientWidth!=0){
			w = document.documentElement.clientWidth
			h = document.documentElement.clientHeight
		}else if (document.body && typeof document.body.clientWidth!="undefined"){
		    w = document.body.clientWidth
		    h = document.body.clientHeight
		}
		return {width:w,height:h};
	},
	pop:function(){
		// pop ( href [,target] [,x] [,y] [,"maximized"] [,"fullscreen"] [,"noresize"] [,"nocenter"] [,"scroll"] [,"return"] )
		// eg: pop('http://www.google.com',400,300,'myTarget','scroll')
		if(arguments.length>0){
			_url=arguments[0];
			var x,y,o,_target="",_params=[],center=true,maximized=false,fullscreen=false,resizable=true,scroll=false,returnObj=false;
			if(!document.all || (document.all && navigator.userAgent.indexOf("Mac")!=-1) ){
				for(i=1;i<arguments.length;i++){
					if(arguments[i]=="fullscreen"){
						arguments[i]="maximized";
						break;
					}
				}
			}
			if(arguments.length>1){
				for(i=1;i<arguments.length;i++){
					if(isNaN(arguments[i])){
						switch(arguments[i]){
							case"nocenter":
								center=false;
							break;
							case"scroll":
								scroll=true;
							break;
							case"maximized":
								maximized=true;
								_params[_params.length]="left=0";
								_params[_params.length]="top=0";
								_params[_params.length]="width="+(screen.width-6);
								_params[_params.length]="height="+(screen.height-26);
							break;
							case"fullscreen":
								fullscreen=true;
								_params[_params.length]="fullscreen=yes";
								if(document.all)_params[_params.length]="channelmode=yes"; 
							break;
							case"noresize":
								resizable=false;
								_params[_params.length]="resizable=no";
							break;
							case"return":
								returnObj=true;
							break;
							default:
								_target=arguments[i];
							break;
						}
					}
				}
				if(!fullscreen && !window[_target])_params[_params.length]="scrollbars="+((scroll)?"yes":"no");
				if(!maximized && !fullscreen &&  !window[_target]){
					for(i=1;i<arguments.length;i++){
						if(!isNaN(arguments[i]) && !maximized){
							if(x==undefined){
								x=arguments[i];
								_params[_params.length]="width="+x;
							}else{
								y=arguments[i];
								_params[_params.length]="height="+y;
							}
						}
					}
					if(center && !window[_target]){
						_params[_params.length]="left="+((screen.width-x)/2);
						_params[_params.length]="top="+((screen.height-y)/2);
					}
				}
			}
			o=window.open(_url,_target,_params.join(","));
			if(o==undefined)alert("L'apertura della finestra è stata bloccata");
			if(returnObj)return o;
		}
	}
});

Object.extend(Date.prototype,{
	toTimestamp:function(){
		var Y=this.getFullYear();
		var m=(this.getMonth()+1).zeroFill();
		var d=(this.getDate()).zeroFill();
		var H=(this.getHours()).zeroFill();
		var i=(this.getMinutes()).zeroFill();
		var s=(this.getSeconds()).zeroFill();
		return ""+Y+m+d+H+i+s;
	}
});


$_GET=location.href.toQueryParams();
$_SERVER={
	PHP_SELF:location.pathname,
	QUERY_STRING:location.search.substring(location.search.indexOf("?")==0?1:0)
};
