function hg(id) { return document.getElementById(id); };

function isSet(variable) {
    try { 
        eval(variable + ';'); 
        return true;
    }
    catch(ex) {
        return false;
    }
}

function field_control(callback,reload_url) {
	reset_asterisk();
	var arraycampi=form_obj.getElementsByTagName('input');
	
	var elem_name;
	var elem_value;
	var elem_type;
	var elem_id;
	div_form.style.display='none';
	div_loading.style.display='block';
	document.body.style.display='none';
	document.body.style.display='block';
	for (i=0; i < arraycampi.length; i++) {
		elem_type=arraycampi[i].getAttribute('type');
		if((elem_type!="button")&&(elem_type!="hidden")&&(elem_type!="reset")) {
			elem_id=arraycampi[i].getAttribute('id');
			elem_name=arraycampi[i].getAttribute('name');
			elem_value=arraycampi[i].value;
			
			// se pago con bonifico non devo controllare se sono stati inseriti i dati della carta
			if(hg('paymenttype') && hg('paymenttype').value == 'btform' && (elem_name=='cvv' || elem_name=='cardno'))
				continue;
			if((elem_value=='' || elem_value.match(/^\s*$/)) && hg('ast_'+elem_name)){
				div_loading.style.display='none';
				div_form.style.display='block';
				hg('ast_'+elem_name).innerHTML='&#171;';
				print_error(js_dic_NOALLFIELDS,'ast_'+elem_name);
				return false;
			}
			// Controllo email
			if(elem_id.indexOf('mail')>=0 && hg('ast_'+elem_name)) {
				if (!emailControl(elem_value)) {
					div_loading.style.display='none';
					hg('ast_'+elem_name).innerHTML='&#171;';
					div_form.style.display='block';
					print_error(js_dic_NOALLFIELDS,'ast_'+elem_name);
					return false;
				}
			}
					
			/*
			// Controllo della login
			if(elem_id.indexOf('login')>=0 && hg('ast_'+elem_name)) {
				if(elem_value.length<5 || elem_value.length>12) {
					hg('ast_'+elem_name).innerHTML='&#171;';
					print_error(js_dic_PWDUSERWRONG,'ast_'+elem_name);
					div_loading.style.display='none';
					div_form.style.display='block';
					return false;
				}
			}
			// Controllo delle password
			if(elem_id.indexOf('password')>=0 && hg('ast_'+elem_name)) {
				if(!pwd_control(elem_name,elem_name.replace('password','repwd'))) {
					div_loading.style.display='none';
					div_form.style.display='block';
					return false;
				}
			}
			*/
			
		}
	// controllo se l'email ridigitata � ok
	if(hg('email_repeat') && hg('email_repeat').value!=hg('email').value)
						{	div_loading.style.display='none';
							div_form.style.display='block';
							print_error(js_dic_EMAILERROR,'ast_'+elem_name);
							return false;
						}
	}
	
	// sezione per i tag di tipo textarea
	var arraycampi_txtarea=form_obj.getElementsByTagName('textarea');
	var elem_name_txtarea;
	var elem_value_txtarea;
	var elem_type_txtarea;
	var elem_id_txtarea;
	for (i=0; i < arraycampi_txtarea.length; i++) {
		elem_id_txtarea=arraycampi_txtarea[i].getAttribute('id');
		elem_name_txtarea=arraycampi_txtarea[i].getAttribute('name');
		elem_value_txtarea=arraycampi_txtarea[i].value;
		if(elem_value_txtarea=='' && hg('ast_'+elem_name_txtarea)) {
			div_loading.style.display='none';
			div_form.style.display='block';
			hg('ast_'+elem_name_txtarea).innerHTML='*';
			print_error(js_dic_NOALLFIELDS,'ast_'+elem_name_txtarea);
			return false;
		}
	}
	
	//se mi e' stata richiesta una funzione la chiamo altrimenti ritorno true
	if (callback !='') callback(reload_url);
	else return true;
}

function reset_asterisk() {
	hg('error').style.display='none';
	var arraycampi=form_obj.getElementsByTagName('input');
	var elem_name;
	var elem_type;
	for (i=0; i < arraycampi.length; i++) {
		elem_type=arraycampi[i].getAttribute('type');
		if((elem_type!="button")&&(elem_type!="hidden")&&(elem_type!="reset")) {
			elem_name=arraycampi[i].getAttribute('name');
			if(hg('ast_'+elem_name)) hg('ast_'+elem_name).innerHTML='';
		}
	}
}

function struct_length(struct) {
	var lunghezza=0;
	for(i in struct)
		lunghezza++;
	return lunghezza;
}

var _pieces=new Array();
function toDocument(struct,encode)	{
	_pieces=new Array();
	var xml_request='<?xml version="1.0" encoding="'+encode+'" ?>';
	_toDocument(struct);
	for(i in _pieces) {
		var elt=_pieces[i];
		xml_request +=elt;
	}	
	return xml_request;
}

function _toDocument(struct)	{
	if (struct==null)
		_pieces[_pieces.length]='<element type="NIL">NIL</element>';
	else if(struct.replace) {
		// Text handling
		var value=struct.replace(/&/g, '&amp;'); // Escaping entities
		value=value.replace(/</g, '&lt;');
		value=value.replace(/>/g, '&gt;');
		_pieces[_pieces.length]='<element type="string">'+value+'</element>';
	}
	else if(struct.length>0) {
		// Sequence handling
		_pieces[_pieces.length]='<sequence length="'+struct.length+'">';
		for(var item in struct) {
			var elt=struct[item];
			// For every item in the sequence
			_pieces[_pieces.length]='<item>';
			_toDocument(elt); // Recursively create internal items
			_pieces[_pieces.length]='</item>';
		}
		_pieces[_pieces.length]='</sequence>';
	}
	else if(struct.length==0) {
		// Map handling
		_pieces[_pieces.length]='<map length="'+struct_length(struct)+'">';
		for(var key in struct) {
			var value=struct[key];
			// For every (key, value) in the map
			_pieces[_pieces.length]='<key name="'+key+'">';
			_toDocument(value); // Recursively create internal elements
			_pieces[_pieces.length]='</key>';
		}
		_pieces[_pieces.length]='</map>';
	}
	else if(typeof(struct)=='boolean') {
		// Text handling
		if(struct) var value='True'; 
		else var value='False'; 
		_pieces[_pieces.length]='<element type="boolean">'+value+'</element>';
	}
	else if(isFinite(struct)) {
		// Integer handling
		// controllo se il numero e' un intero o un float confrontandolo con se stesso troncato
		var struct_floor=Math.floor(struct);
		if(struct==struct_floor)
			_pieces[_pieces.length]='<element type="integer">'+struct+'</element>';
		else
			_pieces[_pieces.length]='<element type="float">'+struct+'</element>';
	}
}

function xml_request(struct,url_xml_rpc,encoding,cb) {
   var request=toDocument(struct,encoding);
   var htype=struct['header']['type']+'';
   $.ajax({
   url: url_xml_rpc,
   processData: false,
   type: 'POST',
   contentType: 'text/xml',
   data: request,
   dataType: 'json',
   success: function(res){cb(res['response']['result'],htype);}
   });
}

function print_error(text,el) {
	alert(text);
}

function hide_error() {
	hg('error').style.display='none';
}

function capitalize(str) {
	if(!str) return '';
	str=str.toLowerCase();
	var ap=str.split(' ');
	var new_str='';
	for(var i=0; i<ap.length; i++)
		new_str+=ap[i].substr(0,1).toUpperCase()+ap[i].substr(1,ap[i].length-1)+' ';
	return new_str.substr(0,new_str.length-1);
}

//Funzione per la formattazione di un prezzo (in base al locale)
function format_price(price, lingua) {
	lingua='it';
	var sub=Math.floor(price * 100)/100;
	var comma=lingua=='it' ? ',' : '.';
	var parts=('' + sub).split('.');
	var res='';
	if(parts.length==1) res=parts[0]+comma+'00';
	else if(parts[1].length==1) res=parts[0]+comma+parts[1]+'0';
	else res=parts[0]+comma+parts[1];
	return(res);
}

//Funzione per la formattazione di una data (in base al locale)
function format_data(data, lingua) {
	var res=data.charAt(8)+data.charAt(9)+'/'+data.charAt(5)+data.charAt(6)+'/'+data.charAt(0)+data.charAt(1)+data.charAt(2)+data.charAt(3);
	return(res);
}

//Funzione per la formattazione di una data e ora (in base al locale)
function format_timestamp(data, lingua) {
	var res=format_data(data, lingua);
	res +=' '+data.charAt(11)+data.charAt(12)+data.charAt(13)+data.charAt(14)+data.charAt(15);
	return(res);
}

//Dato l'ID di un elemento, restituisce la sua posizione [x,y].
function findPos(id) {
	try {
	var pos=new Array(0, 0, 0);
	var el=hg(id);
	var fieldset=0; // Altezza del fieldset, utilizzata per workaround
	if(!el) el=id;
	var obj=el;
	while(obj.tagName !='BODY') {
	if(obj.tagName=='FIELDSET') {
	fieldset=obj.offsetTop;
	}
	pos[1] +=obj.offsetTop;
	pos[0] +=obj.offsetLeft;
	obj=obj.offsetParent;
	}
	pos[2]=fieldset;
	return pos;
	}
	catch(ex) {alert('Elemento cercato: '+id+' Errore: '+ex);}
}

function emailControl(email) {
	if(email=='') return true;
	var at_pos=email.indexOf('@',0);
	if (at_pos==-1) return false;
	else {
		var dot_pos=email.indexOf('.',at_pos);
		if(dot_pos==-1) return false;
		else {
			var array_ext=new Array();
			var array_ext=email.substr(dot_pos+1,email.length).split('.');
			var ext=array_ext[array_ext.length-1].toLowerCase();
			for (var o=0; o < js_global_email_ext.length; o++)
				if (ext==js_global_email_ext[o])
					return true;
			return false;
		}
	}
}

// Trasforma la Y in true e N in false
function toBoolean(str) {
	if(str=='Y') return true;
	else return false;
}

function currency_symbol(iso) {
	if(js_dic_CURRENCYSYMBOLS[iso]) return js_dic_CURRENCYSYMBOLS[iso];
	else return iso;
}

function show_obj(obj_id) {
	hg(obj_id).style.display='block';
}

function hide_obj(obj_id) {
	hg(obj_id).style.display='none';
}

function inline_obj(obj_id) {
	hg(obj_id).style.display='inline';
}

function abilita(field_id) {
	hg(field_id).disabled=false;
}

function disabilita(field_id) {
	hg(field_id).disabled=true;
}

function addslashes(string) {
	return string.replace(/'/g,"\\'");
}

function stripslashes(string) {
	return string.replace(/\'/g,"\'");
}

function getFloat(value) {
	return Number(0.0 + value.replace(',','.'));
}

// ritorna true se la data e' valida
function isValidDate(day,month,year) {
	var valid=new Date(year,month-1,day); // decremento il mese * Js
	if((y2k(valid.getYear())==Number(year)) && (valid.getMonth()==Number(month-1)) && (valid.getDate()==Number(day)))
		return true;
	else
		return false
}

// mi assicuro che l'anno sia di 4 cifre (IE docet)
function y2k(number) {
	return (number < 1000) ? number + 1900 : number; 
}

//funzione simile a htmlentities
function e_h(string) {
	string=string.replace(new RegExp(/&/gi),'&amp;');
	string=string.replace(new RegExp(/"/gi),'&quot;');
	string=string.replace(new RegExp(/'/gi),'&apos;');
	string=string.replace(new RegExp(/</gi),'&lt;');
	string=string.replace(new RegExp(/>/gi),'&gt;');
	return string
}

//funzione simile al decode htmlentities
function decode_e_h(string) {
	string=string.replace(new RegExp(/&amp;/gi),'&');
	string=string.replace(new RegExp(/&quot;/gi),'"');
	string=string.replace(new RegExp(/&apos;/gi),"'");
	string=string.replace(new RegExp(/&lt;/gi),'<');
	string=string.replace(new RegExp(/&gt;/gi),'>');
	return string
}

// FUNZIONE VAR_DUMP PER JAVA SCRIPT//
var box;
function var_dump(obj) {
	box=window.open('','Var_dump','resizable=yes,toolbar=no,scrollbars=yes,width=200,height=200');
	explore(obj,0,0,0,0,0);
	box.document.close();
}

// funzione ricorsiva che esamina l'elemento passato
function explore(obj,eln,inside,level) {
	var index='';
	var spaces='';
	for (var i=0; i < level;i++)
		spaces +='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
	index +=spaces;
	if (inside==0)
		index +='';
	else
		index +='[' + eln + ']&nbsp;=>&nbsp;';
	if (obj==null) {
	box.document.write(index + 'NULL<br>');
		return;
	}
	else if (typeof(obj)=='number') {
		box.document.write(index + 'number(' + obj + ')<br>');
		return;
	}
	else if (typeof(obj)=='string') {
		box.document.write(index + 'string(' + obj.length + ')&nbsp;"' + obj + '"<br>');
		return;
	}
	else if (typeof(obj)=='boolean') {
		box.document.write(index + 'bool(' + obj + ')<br>');
		return;
	}
	else if (typeof(obj)=='object') {
		var count=0;
		for (var i in obj)
			count++;
		if (count==0)
			box.document.write(index + 'array(' + count + ')&nbsp;{&nbsp;}<br>');
		else {
			box.document.write(index + 'array(' + count + ')&nbsp;{<br>');
			for (var i in obj) 
				explore(obj[i],i,1,level+1);
			box.document.write(spaces + spaces + '}<br>');
		}
		return;
	}
	else {
	box.document.write(index + 'NULL<br>');
		return;
	}
	return;
}

// Aggiungi ai preferiti
function bookmark(url_page,title) {
	if ((navigator.appName=="Microsoft Internet Explorer")&&(parseInt(navigator.appVersion)>=4))
		window.external.addFavorite(url_page, title);
	else
	 alert(js_dic_NOADDBOOKMARKS);
	/*
	// Traccio la pressione del bottone
	    var mess_debug = XmlHttp.create();
	    mess_debug.open("GET", js_global_root_url+"xml_rpc/bookmark_alert.php", true);
	    mess_debug.send('');
	   */
}

// passato l'id di un menu select ne ritorna il testo della voce selezionata
function get_select_name(selectname) {
	var name='';
	var select=hg(selectname);
	var options=select.options;
	for (var o=0; o<options.length; o++)
		if(options[o].selected) name=options[o].text;
	if(name=='***') name='';
	return name;
}

// controlla che tipo di display fare sulle righe di una tabella in base al tipo di browser
function display_for_browser() {
	if(navigator.appName=='Microsoft Internet Explorer') return 'block';
	else return 'table-row';
}

function hide_selects() {
	BrowserDetect.init();
	if (BrowserDetect.browser=='Explorer') {
		var selects=document.getElementsByTagName('select');
		for (var i=0; i < selects.length; i++)
		selects[i].style.visibility='hidden';
	}
}

function show_selects() {
	var selects=document.getElementsByTagName('select');
	for (var i=0; i < selects.length; i++)
	selects[i].style.visibility='visible';
}

function hide_loading() {
	if(hg('loading'))
		hg('loading').style.display='none';
}

function print_page() {
	self.print();
}

function session_keep_alive()	{
	if(hg('ssl_page'))
		var url_xml_rpc_='https://www.thecellardoor.it/xml_rpc/call.php';
	else
		var url_xml_rpc_=js_global_root_url+'xml_rpc/call.php';
	
	var struct_param_=new Array();
	struct_param_['header']=new Array();
	struct_param_['query']=new Array();
	struct_param_['header']['version']='1.0.0';
	struct_param_['header']['product']='session';
	struct_param_['header']['sessid']=sessid;
	var iso_encoding_='utf-8';
	struct_param_['header']['type']='keep_alive';
	xml_request(struct_param_,url_xml_rpc_,iso_encoding_,no_action);
}

// Nessuna azione
function no_action()	{
	setTimeout(session_keep_alive,300000);
	return true;	
}

var BrowserDetect={
	init: function () {
		this.browser=this.searchString(this.dataBrowser) || "An unknown browser";
		this.version=this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version";
		this.OS=this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString=data[i].string;
			var dataProp=data[i].prop;
			this.versionSearchString=data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) !=-1)
					return data[i].identity;
			}
			else if (dataProp) return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index=dataString.indexOf(this.versionSearchString);
		if (index==-1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [ 
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{	// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 	// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

// se esiste, ritorna il value di un elemento della pagina
// (da usare SOLO con elementi che ammettono un value, ovviamente!)
function get_value(obj_id) {
	if(hg(obj_id)) return hg(obj_id).value;
	else return false;
}

// funziona che ritorna true o false in base all'esistenza nel document di un elemento con l'id passato
function exist(id_obj) {
	if(hg(id_obj)) return true;
	else return false;
}

function in_array(element, array){
	try {
		for (var i=0; i < array.length; i++)
			if (array[i]==element) return true;
	}
	catch(ex) {
		for (var i in array)
			if (array[i]==element) return true;
	}
	return false;
}

// se esiste, ritorna true o false se un elemento di tipo checkbox o radiobutton è selezionato o meno
// (se l'elemento non è un checkbox o un radiobutton, ritorna errore)
function is_checked(obj_id) {
	if(hg(obj_id)) {
		var obj=hg(obj_id);
		// poi controllo che sia di tipo checkbox o di tipo radiobutton
		if(obj.getAttribute('type')=='checkbox' || obj.getAttribute('type')=='radio')
			if(obj.checked) // e infine se è selezionato
				return true;
	}
	return false;
}

// scrive un numero in 2 cifre (CHI HA VOGLIA SOSTITUISCA CON UN ESPRESSIONE REGOLARE, TNX)
function format_number(num) {
	if(num<10) return '0'+num;
	else return num;
}

function showbody() {document.body.style.display='block';}
function hidebody() {document.body.style.display='none';}

function set_currency(currency)
{
	    // Setto la valuta in sessione e ricarico la pagina
	     var url_xml_rpc=js_global_root_url+"xml_rpc/currency.php";
	     $.get(url_xml_rpc,{PHPSESSID:sessid, currency:currency},
		   function(data){
		     window.location.reload();
		   }
		 );
}

function order_by(fl)
{
	    // Setto la valuta in sessione e ricarico la pagina
	     var url_xml_rpc=js_global_root_url+"xml_rpc/orderby.php";
	     $.get(url_xml_rpc,{PHPSESSID:sessid, by:fl},
		   function(data){
		     window.location.reload();
		   }
		 );
}