var PG_PRIVILEGE_NOT_ENOUGH="noprivileges.php";
var KEY_CODE_RETURN=13;
var KEY_CODE_TAB=9;
var KEY_CODE_ARROWUP=38;
var KEY_CODE_ARROWDOWN=40;

var MAIN_DIV,BODY;

var debug=false;

var DOM;

function str_pad(str,l,c,where){
	var i,toadd;
	toadd="";
	if(typeof(str)=="number") str=str.toString();
	if(str.length<l){
		for(i=0;i<l-str.length;i++) toadd+=c;
		switch(where){
			case "L":
				return toadd+str;
				break;
			
			case "R":
				return str+toadd;
				break;
		}
	}
	return str;
}

function setEvent(obj,event_name,func,args){
	var tmp_str="func(";
	var listener;
	var i,j;
	var args_OO=new Array();
	if(arguments.length>3) 
		for(i=3;i<arguments.length;i++) {
			switch(typeof(arguments[i])){
				case "string":
				tmp_str+="\""+arguments[i]+"\",";
				break;
				
				case "number":
				tmp_str+=arguments[i]+",";
				break;
				
				case "object":
				args_OO.push(arguments[i]);
				j=args_OO.length-1;
				tmp_str+="args_OO["+j+"],";
				break;
				
				case "function":
				tmp_str+=arguments[i]+",";
				break;
		
				case "boolean":
				tmp_str+=arguments[i]+",";
				break;
			}
		}
	try{
		if(obj.addEventListener){ //gestione eventi DOM Level 2 (Mozilla)
			tmp_str+="e.target,e);";
			listener=function (e){e.listener=arguments.callee;eval(tmp_str);}
			obj.addEventListener(event_name,listener,true);
		}else if(obj.attachEvent){ //gestione eventi IE5+
			event_name='on'+event_name;
			tmp_str+="e.srcElement,e);";
			obj.attachEvent(event_name,function (){e=window.event;e.listener=arguments.callee;eval(tmp_str)});
		}
	}catch(e){
		alert("error setEvent "+obj);
		alert(e.message);
		obj.style.border="2px solid red";
		
	}
	return listener;
}


function unsetEvent(obj,event_name,listener){
	obj.removeEventListener(event_name,listener,true);
}


function send_feedback(){
	window.open("feedback_popup.php" ,"send feedback","width=500,height=400,resizable=no,scrollbars=no");
}


function show_message(msg){
	hide_message();
	m=document.createElement("div");
	var txt=document.createTextNode(msg);
	var b=document.createElement("b");
	b.appendChild(txt);
	m.id="message";
	m.className="on_top";
	m.appendChild(b);
	m.style.visibility="hidden";
	m=document.getElementsByTagName("body")[0].appendChild(m);
	//m=_tag("body")[0].appendChild(m);
	//if(!MENU) m.style.top="2px";
	m.style.left=((window.outerWidth-m.offsetWidth)/2)+"px";
	m.style.visibility="visible";
	//m.scrollIntoView();
}


function show_alert(msg){
	hide_message();
	m=document.createElement("div");
	//if(typeof(msg)=="string") msg=document.createTextNode(msg);
	var b=document.createElement("b");
	//b.appendChild(msg);
	b.innerHTML=msg;
	m.id="alert";
	m.className="on_top";
	m.appendChild(b);
	document.getElementsByTagName("body")[0].appendChild(m);
}

function hide_message(){
	var m=document.getElementById("message");
	if(m) m.parentNode.removeChild(m);
}

function show_loading(){
	hide_loading();
	/*
	var m=document.createElement("div");
	var txt=document.createTextNode(MSG_LOADING);
	
	m.id="loading";
	m.className="on_top";
	m.appendChild(txt);
	*/
	
	var m=document.getElementById("loading_message");
	m.innerHTML=MSG_LOADING;
		
	var img=document.createElement("img");
	img.src="/img/loading_circle.gif";
	/*img.height=40;*/
	img.id="loading_img";
	
	
	
	//document.getElementsByTagName("body")[0].appendChild(m);
	m.style.visibility="visible";
	document.getElementsByTagName("body")[0].appendChild(img);
	//alert("loading");
}

function hide_loading(){
	//var m=document.getElementById("loading");
	var m=document.getElementById("loading_message");
	m.style.visibility="hidden";
	var img=document.getElementById("loading_img");
	//if(m) m.parentNode.removeChild(m);
	if(img) img.parentNode.removeChild(img);
}

function check_error(response,XML_data){
	if(arguments.length==1) {
		XML_data=response;
		response=XML_data.getElementsByTagName("response")[0].firstChild.nodeValue;
	}
	//var post=XML_data.getElementsByTagName('POST')[0].firstChild.nodeValue;
	var msg_err,xml_msg="",scriptname="",line="";
	switch(response){
		case "script_error":
		
		msg_err='errore script\n';
		if(XML_data.getElementsByTagName("message")[0] && XML_data.getElementsByTagName("message")[0].firstChild) 
														xml_msg=XML_data.getElementsByTagName("message")[0].firstChild.nodeValue;
		if(XML_data.getElementsByTagName("scriptname")[0] && XML_data.getElementsByTagName("scriptname")[0].firstChild)	
														scriptname=XML_data.getElementsByTagName("scriptname")[0].firstChild.nodeValue;
		if(XML_data.getElementsByTagName("line")[0] && XML_data.getElementsByTagName("line")[0].firstChild)
														line=XML_data.getElementsByTagName("line")[0].firstChild.nodeValue;
		redirect("error.php?&message="+xml_msg+"&scriptname="+scriptname+"&line="+line);
		break;
		
		case "privileges_error":
		redirect(PG_PRIVILEGE_NOT_ENOUGH);
		break;
		
		case "validation_error":
		//msg_err='errore validazione\n';
		validation_parseXMLresult(XML_data);
		break;
		
		default:
		if(XML_data.getElementsByTagName("message")[0] && XML_data.getElementsByTagName("message")[0].firstChild) 
														xml_msg=XML_data.getElementsByTagName("message")[0].firstChild.nodeValue;
		if(XML_data.getElementsByTagName("scriptname")[0] && XML_data.getElementsByTagName("scriptname")[0].firstChild)	
														scriptname=XML_data.getElementsByTagName("scriptname")[0].firstChild.nodeValue;
		if(XML_data.getElementsByTagName("line")[0] && XML_data.getElementsByTagName("line")[0].firstChild)
														line=XML_data.getElementsByTagName("line")[0].firstChild.nodeValue;
		redirect("error.php?&message="+xml_msg+"&scriptname="+scriptname+"&line="+line);
		break;
	}
	//msg_err+='POST:\n'+post;
	//alert(msg_err);
}

function lock_opbase(id){
	return true;
	if(id==null) id="opbase";
	var opbase=document.getElementById(id);
	var select=opbase.getElementsByTagName("select")[0];
	if(select && !select.disabled){
		var img=document.createElement("img");
		img.src="/img/locked.png"
		img.height="20";
		img.className="hand";
		img=opbase.appendChild(img);
		setEvent(img,"click",unlock_opbase,null);
		select.disabled=true;
	}
	return true;
}

function unlock_opbase(id){
	return true;
	if(id==null) id="opbase";
	var opbase=document.getElementById(id);
	var select=opbase.getElementsByTagName("select")[0];
	if(select && select.disabled){
		var img=opbase.getElementsByTagName("img")[0];
		opbase.removeChild(img);
		select.disabled=false;
	}
	return true;
}


/*
function get_opbaseid(id){
	if(id==null) id="opbase";
	var opbase=document.getElementById(id);
	if(!opbase) {
		opbase=document.getElementsByName("operatorbaseid")[0];
		if(opbase) {
			return opbase.value;
		}else{
			return false;	
		} 
	}
	
	var field;
	if(field=opbase.getElementsByTagName("select")[0]){
		return field.value;
	}else if(field=opbase.getElementsByTagName("input")[0]){
		return field.value;		
	}else{
		alert("ne select ne input...qualche errore nella funzione get_opbaseid nella riga 125 di utils.js!!");
	}
	return false;
}
*/

function get_position(obj){
	var pos={X:0,Y:0};
	pos.toString=function(){
		return "X="+this.X+", Y="+this.Y;
	}
	var i=0;
	while(obj && i<250){
		pos.X+=obj.offsetLeft;
		pos.Y+=obj.offsetTop;
		//alert(pos.X);
		//alert(pos.Y);
		obj=obj.offsetParent;
		i++;
	}
	//alert("X="+pos.X+"    Y="+pos.Y);
	return pos;
}

function checkCoords(coords,element){
	var pos=get_position(element);
	//coords.X>e
}

function getElementsByClassName(className, elm, tag){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = new Array();
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)) returnElements.push(current);
	}
	return returnElements;
}

function _byId(ID){
	return document.getElementById(ID);
}

function _nodesByName(treeNode,nodeName){
	try{
		return treeNode.getElementsByTagName(nodeName);
	}catch(e){
		alert("_nodesByName: "+treeNode+","+nodeName);
	}
}

function _nodeValue(treeNode,nodeName){
	var res=_nodesByName(treeNode,nodeName);
	if(res.length && res[0]){
		res=res[0];
		if(res.firstChild) {
			res=res.firstChild.nodeValue;
		}else{
			res="";
		}
	}else{
		res=false;
	}
	return res;
}

function _setNodeValue(treeNode,nodeName,nodeValue){
	var res=_nodesByName(treeNode,nodeName);
	if(res.length && res[0]){
		res=res[0];
		res.innerHTML=nodeValue;
	}else{
		res=false;
	}
	return true;
}

function _nodeAttribute(treeNode,nodeName,attrName){
	var res=_nodesByName(treeNode,nodeName);
	if(res.length && res[0]){
		res=res[0].getAttribute(attrName);
	}else{
		res=false;
	}
	return res;
}

function isChildOf(child,main){
	var i;
	if(!child || !main) return false;
	try{
	if(main.clickable_elements)
		for(i=0;i<main.clickable_elements.length;i++) if(isChildOf(child,main.clickable_elements[i])) return true;
	}catch(e){}
	while(child!=main && child) child=child.parentNode;
	if(child) return true;
	return false;
}

function complete_url(url){
	if(!url.match("http://") && !url.match("https://")){
		if(url.substring(0,1)!="/") url="/"+url;
		url=location.protocol+"//"+location.host+url;
	}
	return url;
}


function redirect(url){
	url=complete_url(url);
	if(url!="")	window.location.href=url;
}


function reload(nocache){
	if(arguments.length==0) nocache=false;
	document.location.reload(nocache);
}

function checkKeyCode(keyCode,Alpha,Digit){
	var Alpha=Alpha || true;
	var Digit=Digit || true;
	var res=true;;
	if(Alpha) res=res && (keyCode>64 && keyCode<91);
	if(Digit) res=res && (keyCode>64 && keyCode<91);
	return res;
}

function get_localtime(tz,callbackfunc){
	var data="op=localtime&tz="+tz;
	if(arguments.length==2){
		processRequestAsync("/xml/utils.php",callbackfunc,"GET",true,data);
		return true;
	}else{
		var xmlDoc=processRequestSync("/xml/utils.php",data,"GET");
		var res=xmlDoc.getElementsByTagName("response")[0].firstChild.nodeValue;
		if(res!="ok"){check_error(res,xmlDoc);return false;}
		res=xmlDoc.getElementsByTagName("localtime")[0].firstChild.nodeValue;
	}
	return res;
}


function show_time(select,main){
	if(main!=null) show_time_span.m=main;
	show_time_span.s=select;
	get_localtime(select.value,show_time_span);
}

function global_init(){
	MAIN_DIV=document.getElementById("bodymain");
	BODY=document.getElementsByTagName("body")[0];
	if(!MAIN_DIV) MAIN_DIV=BODY;
	setOnEnterEvents();
	
	//DOM=new DOM_Class();
}

function checkFirefox(){
	if(BrowserDetect.browser!="Firefox") {
		redirect("download_firefox.php");
		return false;
	}
	
	return true;
}


function createElement(type,className,value,raw){
	var res=document.createElement(type);
	if(className) res.className=className;
	if(arguments.length<3) return res;
	raw=raw || false;
	
	switch(type){
		case "span":
		if(raw){
			res.innerHTML=value;
		}else{
			if(typeof(value)=="string" || typeof(value)=="number") value=document.createTextNode(value);
			res.appendChild(value);
		}
		break;
		
		case "img":
		res.src=value;
		break;
		
		case "div":
		if(raw){
			res.innerHTML=value;
		}else{
			if(typeof(value)=="string" || typeof(value)=="number") value=document.createTextNode(value);
			res.appendChild(value);
		}
		break;
	}
	return res;
}

function createTable(row,col){
	var res=document.createElement("table");
	var R,C,i,j;
	i=j=0;
	while(i<row){
		R=res.insertRow(i);
		j=0;
		while(j<col){
			C=R.insertCell(j);
			j++;
		}
		i++;
	}
	return res;
}


function setOnEnter(obj1,func_str){
	var tmp_func=function(obj,evt){
		if(obj1==obj && evt.keyCode==KEY_CODE_RETURN) eval(func_str);
	}
	return setEvent(obj1,"keypress",tmp_func);
}

function setOnEnterEvents(){
	var i,funcname;
	var inputs=BODY.getElementsByTagName("input");
	for(i=0;i<inputs.length;i++)
				if((funcname=inputs[i].getAttribute("onenter")) && !inputs[i].onEnter) inputs[i].onEnter=setOnEnter(inputs[i],funcname);
}

function chk_expired_services(opbaseid){
	var str="op=chk&operatorbaseid="+opbaseid;
	processRequestAsync("/xml/service_expired_list.php", parse_expired_services_response, "GET",true, str);
}

function parse_expired_services_response(xmlres){
	var opbaseid=xmlres.getElementsByTagName("operatorbaseid")[0].firstChild.nodeValue;
	var msg=MSG_EXPIRED_SERVICES.replace("%s","<a href=\"/service_expired_list.php?operatorbaseid="+opbaseid+"\">").replace("%s","</a>");
	if(xmlres.getElementsByTagName("expired")[0].firstChild.nodeValue>0) show_alert(msg);
}


function cloneObject(what) {
    for (i in what) {
        if (typeof what[i] == 'object') {
            this[i] = new cloneObject(what[i]);
        }
        else
            this[i] = what[i];
    }
}


function mergeArray(){
	var res=new Array();
	var i;
	switch(arguments.length){
		case 1:
			for(i=0;i<arguments[0].length;i++) res.push(arguments[0][i]);
			break;
		
		case 2:
			for(i=0;i<arguments[0].length;i++) res.push(arguments[0][i]);
			for(i=0;i<arguments[1].length;i++) res.push(arguments[1][i]);
			break;
		
		default:
			for(i=0;i<arguments.length;i++) res=mergeArray(res,arguments[i]);
			break;
	}
	
	return res;
}

function get_ts(){
	var d=new Date();
	return d.getTime();	
}

function disable_form(form){
	var form_obj=form;
	var buttons;
	if(typeof(form)=="string") {
		form_obj=eval("document."+form);
		if(!form_obj) form_obj=document.getElementById(form);
	}
	if(!form_obj || typeof(form_obj)!="object") return false;
	
	for(i=0;i<form_obj.length;i++) form_obj.elements[i].disabled=true;
	
	if(buttons=document.getElementById("bottom_toolbar")){
		buttons.getElementsByTagName("button");
		for(i=0;i<buttons.length;i++) buttons[i].disabled=true;
	}
	return true;
}

function enable_form(form){
	var form_obj=form;
	var buttons;
	if(typeof(form)=="string") {
		form_obj=eval("document."+form);
		if(!form_obj) form_obj=document.getElementById(form);
	}
	if(!form_obj || typeof(form_obj)!="object") return false;
	
	for(i=0;i<form_obj.length;i++) form_obj.elements[i].disabled=false;
	
	if(buttons=document.getElementById("bottom_toolbar")){
		buttons.getElementsByTagName("button");
		for(i=0;i<buttons.length;i++) buttons[i].disabled=false;
	}
	return true;
}

function removeAllChilds(parentNode){
	var child;
	while(child=parentNode.firstChild) parentNode.removeChild(child);
	return parentNode;
}

function TextNode2Input(parentNode,input){
	var child=parentNode.firstChild;
	
	if(arguments.length<2){
		var input=document.createElement("input");
		input.type="text";
	}
	if(child){
		if(child.nodeType==3){
			input.value=child.nodeValue;
			removeAllChilds(parentNode);
			input=parentNode.appendChild(input);
		}
	}else{
		removeAllChilds(parentNode);
		input=parentNode.appendChild(input);
	}
	return input;
}

function Input2TextNode(parentNode){
	var tmp=parentNode.getElementsByTagName("input")[0].value;
	removeAllChilds(parentNode);
	return parentNode.appendChild(document.createTextNode(tmp));
}

function getParentByTagName(child,tagName){
	var tmp=child;
	while(tmp && tmp.tagName.toLowerCase()!=tagName.toLowerCase()) tmp=tmp.parentNode;
	return tmp;
}
function getParentByClassName(child,className){
	var tmp=child;
	while(tmp && tmp.className!=className) tmp=tmp.parentNode;
	return tmp;
}

function DOM_Class(){
	this.body=document.body;
	
	this._id=function(id){return document.getElementById(id);}
	//this._name=function(name){return document.getElementById(id);}
	this._tagName=function(tagName,index){
		if(arguments.length==1) var index=0;
		return document.getElementsByTagName(tagName)[index];
	}
	
	this.bodymain;
}


function goback(){window.history.back();}


function set_mouseOver(obj){
	var i,tmp;
	
	if(arguments.length==0){
		obj=getElementsByClassName("fake_a");
	}else{
		tmp=obj;
		obj=new Array();
		obj[0]=tmp;
	}	
	for(i=0;i<obj.length;i++) {
		setEvent(obj[i],"mouseover",element_mouseover);
	}
}

function element_mouseover(obj,evt){
	obj.style.cursor="pointer";
}

function parseURL(url){
	var pattern=new RegExp(/(http[s]?:\/\/)?([^\/:]+)(?::([0-9]+))?\/([^\?]+)(?:\?(.+))?/i);
	var res=pattern.exec(url);
	this.res=res;
	this.protocol=res[1];
	this.hostname=res[2];
	this.port=res[3];
	this.path=res[4];
	this.query=res[5];
	
}

var debug_domain={referer:"",domain:""}

function check_customer_referer(domain){
	var referer=new parseURL(document.referrer);
	var domain=new parseURL(domain);
	debug_domain.referer=referer;
	debug_domain.domain=domain;
	if(referer.hostname!=domain.hostname) redirect("/customer/logout_customer.php?err=wrong_domain");
}

setEvent(window,"load",global_init);