if (!Search || Search == undefined || typeof(Search) != 'object') {
	var Search = {};
}

/* define prototype */
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

if(!Array.prototype.indexOf){
	Array.prototype.indexOf = function(elem,cmpfunct){
		if(!cmpfunct) cmpfunct = function(a,b){return a==b;};
		for (var i = 0; i < this.length; i++)
			if (cmpfunct(this[i],elem)) return i;
		return -1;
	}
}

if(!Array.prototype.map){ 
	Array.prototype.map = function(fx)
	{ for (var i = 0; i < this.length; i++) { this[i] = fx(this[i]); } }
}

/* http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:reduce */
if (!Array.prototype.reduce){
	Array.prototype.reduce = function(fun /*, initial*/){
		var len = this.length;
		if (typeof fun != "function") throw new TypeError();

		// no value to return if no initial value and an empty array
		if (len == 0 && arguments.length == 1) throw new TypeError();

		var i = 0;
		if (arguments.length >= 2){
			var rv = arguments[1];
		}else{
			do{
				if (i in this){
					rv = this[i++];
					break;
				}

				// if array contains no values, no initial value to return
				if (++i >= len) throw new TypeError();
			}while (true);
		}

		for (; i < len; i++){
			if (i in this)
				rv = fun.call(null, rv, this[i], i, this);
		}

		return rv;
	};
}

/* http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:filter  */
if (!Array.prototype.filter){
	Array.prototype.filter = function(fun /*, thisp*/) {
		var len = this.length;
		if (typeof fun != "function") throw new TypeError();

		var res = new Array();
		var thisp = arguments[1];
		for (var i = 0; i < len; i++) {
			if (i in this) {
				var val = this[i]; // in case fun mutates this
				if (fun.call(thisp, val, i, this)){
					res.push(val);
				}
			}
		}

		return res;
	};
}
/* server domain -> Search.host */
var sd = document.domain.split(".");
sd.shift();
Search.host = sd.join(".");

var sd = document.domain.split(".");
sd.shift();
Search.domain = sd.join("."); 

Search.host = document.domain;

/* search debug */
Search.debug_enabled = true;

/* function */
var $ = function(id){ return document.getElementById(id); }

Search.getParam = function(p, default_val){
  var regS = "[\\?&]"+p+"=([^&#]*)";
  var reg = new RegExp( regS );
  var url = window.location.href;
  var res = reg.exec( url );
  
  if( res == null || res == ""){
    return default_val || "";
  }else{
    return res[1];
  }
}


Search.isArray = function (obj) {
	if (!obj) return false;
	return obj.constructor == Array;
/*
alert(obj.toString() + "::" + obj.constructor.toString() + ":::" + [].constructor.toString());
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
*/
}

Search.debug = function (msg){
	if(Search.debug_enabled && $("debug")) $("debug").innerHTML = $("debug").innerHTML + "<br>" + msg;
}

Search.Events = {
	addEvent : function(elm, evType, fn, useCapture) {
		if (!elm) return;
		if (elm.addEventListener) {
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},
	
	stopEvent : function(evt){
		var e = evt || window.event;
		if(!e) return;
		if (e.preventDefault) { 
			e.preventDefault(); 
			e.stopPropagation(); 
		} else {
			e.returnValue = false;
			e.cancelBubble = true;
		}
	},

	removeEvent: function(elm, evType, fn, useCapture) {
		if (elm.removeEventListener) {
			elm.removeEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.removeEvent) {
			var r = elm.removeEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = function(){};
		}
	},
	
	target:function (evt){
	    return window.event ? window.event.srcElement : evt.target;
	},

	toElement: function(evt){
		var evt = window.event || evt;
		return (evt.relatedTarget) ? evt.relatedTarget : evt.toElement;
	}
};

Search.Cookie = {
	get: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' '){ c = c.substring(1,c.length); }
			if (c.indexOf(nameEQ) == 0){ return c.substring(nameEQ.length,c.length); }
		}
		return null;
	},

	set: function(domain,name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*8640000)); // 24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/; domain="+domain;
	},

	erase : function(domain, name) {
		this.set(domain, name,"",-1);
	},

	enabled: function(){
		Search.Cookie.set(Search.host, "probe","ok",1);
		var enabled = Search.Cookie.get("probe") == 'ok';
		Search.Cookie.set(Search.host, "probe","",-1);
		return enabled;
	}

};

Search.UI = {
	toggle : function(elem){
		if(!elem || !$(elem)) return;
		var st = $(elem).style;
		st.display = st.display != "block" ? "block" : "none"; 
	},

	hide : function(el_id){
		if(!el_id || !$(el_id)) return;
		var st = $(el_id).style;
		if(st.display != "none"){
			st.display = "none";
		}
	},

	hideAll: function(elems){
		elems.map(Search.UI.hide);
	},

	show: function(elem){
		if(!elem || !$(elem)) return;
		var st = $(elem).style;
		st.display = "block";
	}
};

Search.make_handler = function (callback, arg){
	return function(evt){
		callback(arg);
	};
}

getNodeAttribute = function(el, attname){
	return el.attname || el.getAttributeNode(attname) && el.getAttributeNode(attname).value;
}

function getTextValues(form){
	var vals = [];
	var els = form.getElementsByTagName("input");
	for (var i = 0; i < els.length; i++){
		if(els[i].type == "text"){
			vals.push(els[i].value);
		}
	}

	return vals.join(" ");
}

Search.ri = function( i ){
	var MW = 78 , MH = 86;
	i.width = MW;
	return;
}

Search.go = function(where, use_utf){
	qs = $('trova').qs.value;
	dv = $('trova').dv ? $('trova').dv.value : "";
	var a=encodeURIComponent||escape;

	if(where){
		page = where.split("/");
		page = page.pop();
		if(page != 'aziende' && page != 'persone' && page != 'annunci' && page != 'results.php'){ 
			qs = getTextValues($('trova'));
			dv = "";
		}
	}	
	
	qs = use_utf ? a(qs) : escape(qs);
	dv = use_utf ? a(dv) : escape(dv);

	where = where || "http://ricerca.alice.it/ricerca";

	if (where.indexOf("/local.alice.it")!=-1)
	uri='?cosa='+qs.replace("&","%26");
	else 
	uri='?qs='+qs.replace("&","%26");
	
	if(dv)
	uri+='&dv='+dv.replace("&","%26");

	document.location.href = where + uri;
}

Search.go_utf8 = function(where){
	Search.go(where, true);
}

Search.track = function(params){
	var url = "http://images.alice.it/kpi.gif?chnl=src"

	for(k in params){
		url += "&"+k + "=" + params[k];
	}
	url += '&ci='+Math.floor(1000000*Math.random());
	var img = new Image();
	img.onerror = null; 
	img.onload = null;
	img.src = url;
}


Search.Altro = {
	btn: "s_altro",
	menu: "tab-altro-cont-header",
	item_prefix: "s_",
	selected_class: "this-tab",
	srv:"altro",
	init: false,

	main: function(){
		if(Search.Altro.init) return;
		var btn = $(Search.Altro.btn);
		if(!btn){
			Search.debug("ooops.. button (id:" + Search.Altro.btn + ") not found");
			return;
		}
		btn.onclick = function(){Search.Altro.toggle();};
		Search.Events.addEvent(document, 'click', Search.Altro.hide, true);
		Search.Altro.init = true;
	},

	focus: function(){
		var trova = $("trova");
		if(Search.isArray(trova) && trova.length > 1){
			trova = trova[0];
		}

		if(!trova) return;
		var qs = trova.qs;
		if(qs){
			//if(qs.length) qs  = qs[0];
			if(qs.type != 'hidden'){
				qs.focus();
			}
		}

	},

	toggle : function(){
		Search.UI.toggle(Search.Altro.menu);
		Search.Events.stopEvent();
	},

	hide : function(){
		Search.UI.hide(Search.Altro.menu);
	},

	highlight: function(){
		var elname = Search.Altro.item_prefix + document.domain.split(".")[0];	
		if($(elname)){
			hl = getNodeAttribute($(elname), "hl");
			if(hl){
				$(hl).className += "  " + Search.Altro.selected_class;
			}
			$(elname).className += "  " + Search.Altro.selected_class;
		}
		Search.Altro.main();
		Search.Altro.focus();
	},

	track: function(evt){
		Search.track({"srv":Search.Altro.srv});
	}
}

/* to be removed after online */
Search.invia = function(u, w, h,scrollbars){

		    var w = w || 320;
		    var h = h || 400;
		    var scrollbars = scrollbars || 'no';
		    window.open(u,'','toolbar=no,status=no,scrollbars='+scrollbars+',location=no,menubar=no,directories=no,width='+w+',height='+h);
		}

Search.redir = function (){
	if(Search.onw == ''){document.location.href=Search.dest;}
	// window open tab aste
	if(Search.onw == 'WTA')
		window.open('http://rover.ebay.com/rover/1/724-10296-4030-255/4?mpre='+escape(Search.dest),'');
	 
	// window open rosso alice
	if(Search.onw=='WRA'){
		features='scrollbars=no,resizable=no,status=yes';
		if (screen.width==800 && screen.height==600){
			features='scrollbars=yes,resizable=no,status=yes';
		}
		window.open(Search.dest,'',features);
	}
}

Search.clck = function (u,k,o){
	if(k=="") return true;
	Search.dest=u;
	Search.onw=o;
	var src='http://go.virgilio.it/kpi.gif?k='+escape(k)+'&rand='+Math.floor(1000000*Math.random());
	var img = new Image();
	img.onerror = Search.redir;
	img.onload = Search.redir;
	img.src = src;
	return true;
}

var jQuery = jQuery || "";
if(jQuery == ""){
	Search.Events.addEvent(window,'load',Search.Altro.highlight, false);
}else{
	jQuery(document).ready(function(){
		Search.Altro.highlight();
	});
}

// utilities
Search.dest = "";
Search.onw='';

Search.ss = function(url){window.status=url;return true;}
Search.cs = function() {window.status='';return true;}
Search.wra = function (u){features='scrollbars=no,resizable=no,status=yes';if (screen.width==800 && screen.height==600){features='scrollbars=yes,resizable=no,status=yes';}window.open(u,'',features);}
Search.apri = function(u){window.open(u,'','toolbar=no,status=no,scrollbars=no,location=no,menubar=no,directories=no,width=400,height=540');}


/** spazio necessario */

