// https://superuser.com/questions/908196/chrome-any-way-to-assign-sticky-window-name

// 2.2
/*
var XSITE = (function() {
	return {
	};
})();
(function($){
    $.session = {
      _id: null,
			_init: function()
			{
				console.log(3);
			}
		};
		console.log(1);
		$.session._init();
})(XSITE);
*/

//console.log(1);

// http://stackoverflow.com/questions/41158069/how-to-create-a-session-variable-and-display-another-page
// http://blogs.sitepointstatic.com/examples/tech/js-session/index.html
//alert(window.name);

var $ = function( id ) {
	return document.getElementById( id );
};

String.prototype.replaceAll = function(search, replacement) {
    var target = this;
    return target.replace(new RegExp(search, 'g'), replacement);
};


function GUID() { 
	var S4 = function () { 
		return Math.floor( 
			Math.random() * 0x10000
			).toString(16); 
	}; 
	return ( 
		S4() + S4() + 
		S4() + 
		S4() + 
		S4() + 
		S4() + S4() + S4() 
	); 
} 


/**
 * Implements JSON stringify and parse functions
 * v1.0
 *
 * By Craig Buckler, Optimalworks.net
 *
 * As featured on SitePoint.com
 * Please use as you wish at your own risk.
*
 * Usage:
 *
 * // serialize a JavaScript object to a JSON string
 * var str = JSON.stringify(object);
 *
 * // de-serialize a JSON string to a JavaScript object
 * var obj = JSON.parse(str);
 */
var JSON = JSON || {};
// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
	var t = typeof (obj);
	if (t != "object" || obj === null) {
		// simple data type
		if (t == "string") obj = '"'+obj+'"';
		return String(obj);
	}
	else {
		// recurse array or object
		var n, v, json = [], arr = (obj && obj.constructor == Array);
		for (n in obj) {
			v = obj[n]; t = typeof(v);
			if (t == "string") v = '"'+v+'"';
			else if (t == "object" && v !== null) v = JSON.stringify(v);
			json.push((arr ? "" : '"' + n + '":') + String(v));
		}
		return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
	}
};


// implement JSON.parse de-serialization
JSON.parse = JSON.parse || function (str) {
	if (str === "") str = '""';
	eval("var p=" + str + ";");
	return p;
};



/**
 * Implements cookie-less JavaScript session variables
 * v1.0
 *
 * By Craig Buckler, Optimalworks.net
 *
 * As featured on SitePoint.com
 * Please use as you wish at your own risk.
*
 * Usage:
 *
 * // store a session value/object
 * Session.set(name, object);
 *
 * // retreive a session value/object
 * Session.get(name);
 *
 * // clear all session data
 * Session.clear();
 *
 * // dump session data
 * Session.dump();
 */
/*
addListener: function(el, sType, fn, capture) {
    if(el.addEventListener) {
        el.addEventListener(sType, fn, (capture));
    }
    else if(el.attachEvent) {
        el.attachEvent("on" + sType, fn);
    }
}
*/
 
 if (JSON && JSON.stringify && JSON.parse) var Session = Session || (function() {
 
	// window object
	var win = window.top || window;
	
	// session store
	var store = (win.name ? JSON.parse(win.name) : {});
	
	// save store on page unload
	function Save() {
		win.name = JSON.stringify(store);
	}
	
	if (window.addEventListener) window.addEventListener("unload", Save, false);
	else if (window.attachEvent) window.attachEvent("onunload", Save);
	else window.unload = Save;

	/* Windows 10 */
	if (window.addEventListener) window.addEventListener("beforeunload", Save, false);
	else if (window.attachEvent) window.attachEvent("onbeforeunload", Save);
	else window.beforeunload = Save;

	if (window.addEventListener) window.addEventListener("pagehide", Save, false);
	else if (window.attachEvent) window.attachEvent("onpagehide", Save);
	else window.pagehide = Save;

	// public methods
	return {
	
		// set a session variable
		set: function(name, value) {
			store[name] = value;
		},
		
		// get a session value
		get: function(name) {
			return (store[name] ? store[name] : undefined);
		},
		
		// clear session
		clear: function() { store = {}; },
		
		// dump session data
		dump: function() { return JSON.stringify(store); }
 
	};
 
 })();





// Inizializza il contenitore del carrello
var cart = Session.get("cart") || {
	products: [],
    sessionid : GUID()
};

console.log(cart);


// SITE:
//
//
var SITE = (function() {
	return {		
		log: function(s) {
			console.log(s);
		},
		Language: function() {
			var href = window.document.location.href;
			return href.split("/")[3];
		},
		SetSelect: function(id,params,selindex) {
			var obj = JSON.parse( params );
			var arr = Object.keys(obj).map(function(k) { return obj[k]; });
			// var arr = Object.values(obj);	// ES2015
			var x = document.getElementById(id);
			for(key=0; key < arr.length; key++) {
				if(key===0) continue;
				var option = document.createElement("option");
				option.text = obj[key];
				// option.value = key;
				x.add(option);
			}
			//if(arr.length == 2)
			//x.selectedIndex = 1;
			//else
			//x.selectedIndex = 0;
            if(selindex)
                x.selectedIndex = selindex;
            else
                x.selectedIndex = 0;
		},
		AddLoadEvent: function(func) {
			var oldonload = window.onload;
			if (typeof window.onload != 'function') {
				window.onload = func;
			} else {
				window.onload = function() {
					if (oldonload) {
						oldonload();
					}
					func();
				};
			}			
		}
	};
})();



// PAGE:
//
//
var PAGE = (function() {
	return {		
		exAttrib: function(atributeName) {
		},
		exAttribs: function(atributeName) {
			var matchingElements = [];
			var allElements = document.getElementsByTagName('*');
			for (var i = 0, n = allElements.length; i < n; i++)
			{
				if (allElements[i].getAttribute(attribute) !== null)
				{
						matchingElements.push(allElements[i]);
				}
			}
			return matchingElements;		
		},
		exAttribValue: function(exAttribName) {
			//var matchingElements = [];
			var result = null;
			var allElements = document.getElementsByTagName('*');
			for (var i = 0, n = allElements.length; i < n; i++)
			{
				if (allElements[i].getAttribute("data-ex") !== null)
				{
					if (allElements[i].getAttribute("data-value") !== null)
					{
						//matchingElements.push(allElements[i]);						
						result = allElements[i].getAttribute("data-value");
					}
				}
			}
			return result;
		}
	};
})();

function _m(s) {
	// if(_debug) SITE.log(s);
	SITE.log(s);
}

// CTRL:
//
//
var CTRL = (function() {
	return {		
		OpenCalendar: function() {
			
			var cobj = document.getElementById("ex-calendar");
			if (!cobj) {        
				var p=GetScreenCordinates(document.getElementById("datepicker"));
				var element=document.getElementById('datepicker');
				var elemRect=element.getBoundingClientRect();
				var div = document.getElementById("ex-calendar");
				if (!div) {
					div = document.createElement('div');
					div.id = 'ex-calendar';
					div.style.display = 'block';
					div.style.backgroundColor = 'white';
					div.style.position = 'absolute';
					div.style.top = (p.y+(elemRect.bottom-elemRect.top))+'px';
					div.style.left = p.x+'px';
					div.style.zIndex = 1000;
			}
			else {					
				div.style.display='block';
			}				


				div.innerHTML='';
				
				//document.getElementById("bookingbottom").appendChild(div);
				document.body.appendChild(div);
		}
			else {
				if (cobj.style.display=="block") {
          cobj.style.display="none";
        }
				else {
					cobj.style.display="block";
				}
			}
			soap('CTRL:GetCalendar', {"year":"auto", "month":"auto", "callback":"" } );
		},
		Listen : function(evnt, elem, func) {
			if (elem.addEventListener) { // W3C DOM
				elem.addEventListener(evnt,func,false);
			}
	    else if (elem.attachEvent) { // IE DOM
				elem.attachEvent("on"+evnt, func);
			}
	    else
				window.alert('Error');
		},
		Init : function() {
			
			// Inizializza i controlli di ricerca
			if($('CTRL:sitesearch')) {
				this.Listen("keydown", $('CTRL:sitesearch'), function(event) {
					event = event || window.event; // IE-ism
					// Aggiorna il link con la query di ricerca
					if($('CTRL:sitesearchgo')) {
						$('CTRL:sitesearchgo').href='/' + SITE.Language() + '/searchresults?q=' + $('CTRL:sitesearch').value.replaceAll(" ", "+");
					}
					if(event.keyCode == 13) {
						$('CTRL:sitesearchgo').click();
					}
				});
				// Aggiorna il link con la query di ricerca
				this.Listen("change", $('CTRL:sitesearch'), function() {
					if($('CTRL:sitesearchgo')) {
						$('CTRL:sitesearchgo').href='/' + SITE.Language() + '/searchresults?q=' + $('CTRL:sitesearch').value.replaceAll(" ", "+");
					}
				});				
			}
			
		}
	};
})();



function onGetCalendar(params) {
	//console.log(params);
	var obj = JSON.parse( params );
	document.getElementById("ex-calendar").innerHTML=obj.html;	
	for (var m = 1; m < 13; m++) {
		var table = document.getElementById('vucal' + m);
		if (table !== null) {
			for (var i = 1; i < table.rows.length; i++) {
				for (var j = 0; j < table.rows[i].cells.length; j++)
					xaddEventListener(
					table.rows[i].cells[j],
					'click',
					function () {
						document.getElementById('datepicker').value=this.id.substring(1);
						document.getElementById('ex-calendar').style.display='none';
						return false;
					});
			}
		}
	}
}


// CART: 
// 
//
var CART = (function() {
    
    // Verifica se si sta visualizzando la pagina di storico ordini
    function isOrderHistory()
    {
        if(document.getElementById('ex-cart:orders') === null)
		{
			return false;
		}
		return true;        
    }
	
	// Verifica se si sta visualizzando la pagina del checkout
	function isCheckOut()
	{
		if(document.getElementById('ex-cart:rows') === null)
		{
			return false;
		}
		return true;
	}

	// Verifica se si sta visualizzando la pagina di un prodotto
	function isProductPage()
	{
		if(document.getElementById('ex-cart:product') === null)
		{
			return false;
		}
		return true;
	}
	
	return {

        spesespedmode : 0,
        
        // Inizializza il carrello
		Init: function() {
			
			// Inizializza il riepilogo del carrello
			this.UpdateCounter();
			
			// Inizializza il form di ceckout
			if(isCheckOut())
			{				
				
    			var params = QueryStringToJSON();//getSoapData('ex-cart:');
    			params.session = Session.dump();


				soap("CART:Init", params);
				
			}
			
			// Inizializza lo storco ordini
			if(isOrderHistory())
			{				
				//soap("CART:OrderHistory", QueryStringToJSON());
                soap("CART:OrderHistory", {"userid": document.getElementById('ex-cart:orders').getAttribute('data-userid') } );                
			}


			// Inizializza la pagina del singolo prodotto
			if(isProductPage())
			{
				/*
				var idprod = PAGE.exAttribValue("cart:product");
				var qtyofprod = this.ProductsCount(idprod);

				var x = document.getElementById("ex-cart:prodqty");
				var y = parseInt(document.getElementById("ex-cart:availability").value) - qtyofprod;
				for(key=0; key <= y; key++) {
					var option = document.createElement("option");
					if(key===0) {
						option.text = "Seleziona quantità";						
					}
					else {
						option.text = key;
					}
					option.value = key;
					x.add(option);				
				}
				if(y <= 0 ) {
					document.getElementById("acqok").style.display="none";
					document.getElementById("acqko").style.display="block";
				}
				else {
					document.getElementById("acqok").style.display="block";
					document.getElementById("acqko").style.display="none";					
				}
				*/
				var idprod = PAGE.exAttribValue("cart:product");
				var qtyofprod = this.ProductsCount(idprod);

				var x = document.getElementById("ex-cart:prodqty");
				var y = parseInt(curr_max_qty) - qtyofprod;
				for(key=0; key <= y; key++)
				{
					var option = document.createElement("option");
					if(key === 0)
					{
						option.text = "Seleziona quantità";						
					}
					else
					{
						option.text = key;
					}
					option.value = key;
					x.add(option);				
				}
				if(y <= 0 )
				{
					document.getElementById("acqok").style.display="none";
					document.getElementById("acqko").style.display="block";
				}
				else
				{
					document.getElementById("acqok").style.display="block";
					document.getElementById("acqko").style.display="none";					
				}
			}
		},


		// Cerca i prodotti nel negozio
		Search: function(e) {

			var r = document.getElementById('block');
			
			if(e.value == "")
			{
				if(r)r.style.display = "none";
                return;
			}
			
			var point = GetScreenCordinates(e);

			var RQ = {};
			RQ.q = e.value;
			soap('CART:Search', RQ );

			if(!r) {
				var iDiv = document.createElement('div');
				iDiv.id = 'block';
				iDiv.className = 'block';
				iDiv.style.top = (point.y + e.offsetHeight + 2) + "px";
				iDiv.style.left = (point.x) + "px";
				iDiv.style.width = (e.offsetWidth + 100) + "px";
				iDiv.style.border = "1px solid #aaa";
				iDiv.style.boxShadow = "2px 2px 6px #aaa";
				

				document.getElementsByTagName('body')[0].appendChild(iDiv);
				iDiv.style.display = "block";
				r = iDiv;
			}
			
			if(e.value==="") {
				r.style.display = "none";
			}
			else {
				r.style.display = "block";
			}
		},
		
		// Aggiunge un prodotto al carrello
		Add: function(id)
		{
			
			var qty = 1;    // parseInt(document.getElementById('ex-cart:prodqty').value);
			var price = 0; //document.getElementById('ex-cart:price').value;
			var subcode = "-1";
			var codiceint = "-1";
			var userid = 0;
			var objs = document.getElementsByTagName("select");
			var ai = [];
			var objdata = '';
			
			// 
			if(document.getElementById('ex-cart:prodqty'))
			{
					qty = parseInt(document.getElementById('ex-cart:prodqty').value);
			}
			
			if(document.getElementById('ex-cart:price'))
			{
				price = document.getElementById('ex-cart:price').value;
			}
			if(document.getElementById('prezzo-' + id))
			{
				price = document.getElementById('prezzo-' + id).value;
			}
			if(document.getElementById('prezzoscontato-' + id))
			{
				price = document.getElementById('prezzoscontato-' + id).value;
			}
			
			if(document.getElementById('ex-cart:subcode')) {
				subcode = document.getElementById('ex-cart:subcode').value;
			}
			if(document.getElementById('ex-cart:codiceint')) {
				codiceint = document.getElementById('ex-cart:codiceint').value;
			}
			if(document.getElementById('ex-cart:userid')) {
				userid = document.getElementById('ex-cart:userid').value;
			}
			
			for(i=0; i < objs.length; i++) {
					var od = objs.item(i).id;
					var n = od.indexOf('ex-cart:prodopt-');
					if(n > -1)
					{
						var aod = od.split('-');
						ai[ai.length] = aod[2];						
					}
			}				
			var ooo = {};
			ooo.id = id;
			ooo.qty = qty;
			ooo.price = price;
			ooo.subcode = subcode;
			ooo.codiceint = codiceint;
			ooo.userid = userid;
			ooo.url = window.location.pathname;


			for(ii=0; ii<ai.length; ii++) {
				var nd = ai[ii];
				//console.log(document.getElementById('ex-cart:prodopt-' + nd).value);
				/*
				if(objdata!=='')
				{
					objdata += ',';
				}
				*/
				objdata += '"' + 'ex-cart:prodopt-' + nd + '":"' + document.getElementById('ex-cart:prodopt-' + nd).value + '"';
				ooo['ex-cart:prodopt-' + nd] = document.getElementById('ex-cart:prodopt-' + nd).value;
			}
			
            //console.log(ooo);
            
			soap('CART:Add', ooo );
			
		},
		
		// Elimina un prodotto dal carrello
		Del: function(id)
		{
			if(cart.products)
			{
				for(p=0; p < cart.products.length; p++)
				{
					if(cart.products[p].id == id)
					{
						break;
					}
				}
				cart.products.splice(p, 1);
				document.location.href = 'checkout';
			}
		},

		// Procede con il pagamento
		Checkout: function(version)
		{
			document.getElementById('ex-cart:checkoutbutton').disabled = true;
			var params = getSoapData('ex-cart:');
			params.session = Session.dump();
			//if(document.getElementById('ex-cart:email').value == "graziano@explico.biz") {
			
            
            //console.log(0);
				
			if(version !== undefined)
			{
				soap('CART:CheckoutV1', params);
			}
			else
			{
				soap('CART:Checkout', params);
			}
		},
		
		// Dump delle variabili di sessione
		Dump: function()
		{
			console.log(Session.dump());
		},
		
		// Vuota il carrello
		Clear: function()
		{
			Session.clear();
			cart = Session.get("cart") || {
				products: []
			};
			this.UpdateCounter();
		},
		
		// Nasconde visualizza i campi azienda
		ShowHideComapny: function()
		{
			var fldchk = document.getElementById('ex-cart:shiptocomapny');
			var fld = document.getElementById('ex-cart:showcompany');
			if (fldchk.checked)
			{
			    fld.style.display="block";
			}
			else
			{
				fld.style.display="none";
				document.getElementById('ex-cart:company').value='';
				document.getElementById('ex-cart:pi').value='';
			}
		},
		
		// Nasconde visualizza i campi di consegna ad indirizzo diverso
		ShowHideShip2: function()
		{
			var fldchk = document.getElementById('ex-cart:shipto');
			var fld = document.getElementById('ex-cart:ship2');
			
			// Se non è presente ship2 non esegue la funzione
			if(!fldchk) return;
			
			if (fldchk.checked)
			{
				fld.style.display="block";
                // Se indicata una sola nazione la seleziona in automatico
                if(document.getElementById("ex-cart:country2").length == 2)
                {
                    document.getElementById("ex-cart:country2").selectedIndex  = 1;
                }
                
			}
			else
			{
				fld.style.display="none";
				document.getElementById('ex-cart:shipname2').value='';
				document.getElementById('ex-cart:country2').selectedIndex = 0;
				document.getElementById('ex-cart:county2').selectedIndex = 0;
				document.getElementById('ex-cart:city2').value='';
				document.getElementById('ex-cart:zip2').value='';
				document.getElementById('ex-cart:address2').value='';
				document.getElementById('ex-cart:no2').value='';
			}
		},
		
		// Numero di prodotti/o nel carrello
		ProductsCount: function(idprodotto)
		{
			var qtytotale = 0;
			if(cart.products)
			{
				for(p=0; p < cart.products.length; p++)
				{
					if(idprodotto !== undefined)
					{
						if(idprodotto != cart.products[p].id)
						{
							continue;
						}
					}
					qtytotale += parseInt(cart.products[p].qty);
				}
			}
			return qtytotale;
		},
		
		// Numero di prodotti/o corrispondeti allo stesso dettaglio presenti nel carrello
		ProductsDetailCount: function(idprodotto,subcode)
		{
			var qtytotale = 0;
			if(cart.products)
			{
				for(p=0; p < cart.products.length; p++)
				{
					if(idprodotto !== undefined)
					{
						if(idprodotto == cart.products[p].id & subcode == cart.products[p].subcode)
						{
							qtytotale += parseInt(cart.products[p].qty);
						}
					}
				}
			}
			return qtytotale;
		},
		
		// Cambio della modalità di consegna
		SpeditionChange: function()
		{
			var params = getSoapData('ex-cart:');
			params.session = Session.dump();
			soap('CART:SpeditionChange', params);
		},

		// Cambio della modalità di pagamento:
		PaymentMethodChange: function()
		{
			
			if($('ex-cart:pagamento1').checked)
			{
				$('ex-cart:checkoutbutton').innerText = "Procedi al pagamento";
				$('notacontrassegno').style.display = 'block';
			}
			else
			{
				$('notacontrassegno').style.display = 'none';
			}
			if($('ex-cart:pagamento2').checked)
			{
				$('ex-cart:checkoutbutton').innerText = "Procedi al pagamento";
				$('notapaypal').style.display = 'block';
			}
			else
			{
				$('notapaypal').style.display = 'none';
			}
			if($('ex-cart:pagamento3').checked)
			{
				$('ex-cart:checkoutbutton').innerText = "Procedi al pagamento";
				$('notabonifico').style.display = 'block';
			}
			else
			{
				$('notabonifico').style.display = 'none';
			}			

			
            if($('ex-cart:pagamento4'))
            if($('ex-cart:pagamento4').checked)
			{
				$('notagiapagato').style.display = 'block';
				$('ex-cart:checkoutbutton').innerText = "Continua";
			}
			else
			{
				$('notagiapagato').style.display = 'none';
			}			

			this.UpdateTotale();
		},

		// Aggiorna la visualizzazione del carrello
		Update: function()
		{
			
			var qtytotale = this.ProductsCount();
			
			// Aggiorna l'icona del carrello
			if(document.getElementById("ex-cart:icon"))
			{
				if(qtytotale > 0)
				{
					document.getElementById("ex-cart:icon").src = "/res/img/carrello_pieno.png";
				}
				else
				{
					document.getElementById("ex-cart:icon").src = "/res/img/carrello.png";
				}
			}
			
			// Aggiorna il contatore
			if(document.getElementById("ex-cart:qty"))
			{
				document.getElementById("ex-cart:qty").firstChild.nodeValue = qtytotale;
			}
			if(document.getElementById("ex-cart:qtydesc"))
			{
				document.getElementById("ex-cart:qtydesc").firstChild.nodeValue = (qtytotale == 1 ? "prodotto" : "prodotti");
			}	
			if (document.getElementById('ex-cart:rows')===null)
			{
				return;
			}
		
			// Recupera la riga di esempio per il layout del riepilogo	
			var rows = document.getElementById('ex-cart:rows').innerHTML;
			var doc = document.implementation.createHTMLDocument("Temp row");	
			var html_rows = '';
			var imponibile = 0.0;
            var grantotale = 0.0;
			var spesespedmax = 0.0;
			var spesesped = 0.0;
			var totalespesesped = 0.0;
			
			if(cart.products)
			{
				for(p=0; p < cart.products.length; p++)
				{
					doc.body.innerHTML = rows;
					doc.getElementById("ex-cart:rowimage").src = '/res/photo/gallery/preview/' + cart.products[p].photo + '_1.jpg';
					doc.getElementById("ex-cart:url").href = cart.products[p].url;
					doc.getElementById("ex-cart:rowname").innerHTML = cart.products[p].name;
					doc.getElementById("ex-cart:rowdescr").innerHTML = cart.products[p].descr;
                    if(document.getElementById('cart:defaultiva'))
                    {
    					doc.getElementById("ex-cart:rowprice").innerHTML = sep1000(cart.products[p].price);
                        imponibile += cart.products[p].price;
                    }
                    else
                    {
    					doc.getElementById("ex-cart:rowprice").innerHTML = sep1000(cart.products[p].price_ic);
                    }
					doc.getElementById("ex-cart:rowqty").innerHTML = cart.products[p].qty;
					doc.getElementById("ex-cart:rowtot").innerHTML = sep1000(cart.products[p].tot);
					doc.getElementById("ex-cart:rowdel").href = 'javascript:CART.Del(' + cart.products[p].id + ');';
					grantotale += parseFloat(cart.products[p].tot.replace(",", "."));
					
					// Cerca il prodotto con la spesa di spedizione più alta
					spesesped = parseFloat(cart.products[p].spednazionale.replace(",", "."));
					if(spesesped > spesespedmax)
					{
						spesespedmax = spesesped;
					}	
					html_rows += doc.body.innerHTML;
				}
				// Il primo a prezzo pieno poi somma un eruo per ogni prodotto aggiunto
				if(qtytotale==1)
				{
					totalespesesped = spesespedmax;
				}
				else {
					totalespesesped = spesespedmax + ((qtytotale-1) * 1.00);
				}			
			}
            
            //console.log(imponibile);
			totalemerce = grantotale; 
//			Session.set("spednazionale", par.spednazionale);
//			Session.set("spedisole", par.spedisole);
			Session.set("imponibile", imponibile);
            Session.set("totalemerce", totalemerce);
			Session.set("grantotale", grantotale);
			document.getElementById('ex-cart:rows').innerHTML = html_rows;
			
			this.UpdateTotale();

			// soap("CART:Init", QueryStringToJSON());
			// Parametri della pagina di ritorno dal pagamento
			document.getElementById("ex-cart:loader").style.display="none";
			if(getParameterByName("cmd")) {
				if(getParameterByName("cmd")=="cancel") {
					document.getElementById("ex-cart:annulato").style.display="block";
					document.getElementById("ex-cart:form").style.display="block";
				}
				if(getParameterByName("cmd")=="confirm") {
					CART.Clear();
					document.getElementById("ex-cart:pagato").style.display="block";
				}
			}
			else {
				if(qtytotale === 0) {
					document.getElementById("ex-cart:vuoto").style.display="block";
				}
				else {
					document.getElementById("ex-cart:form").style.display="block";
				}
			}
				
		
		},

		// Aggiorna il contatore e lo stato del carrello nelle pagine del sito
		UpdateCounter: function()
		{
			var qtytotale = this.ProductsCount();
			//if(document.getElementById("ex-cart:availability")) {
				//console.log(document.getElementById("ex-cart:availability").value);
			//}
			if(document.getElementById("ex-cart:icon"))
			{
				if(qtytotale > 0)
				{
					document.getElementById("ex-cart:icon").src = "/res/img/carrello_pieno.png";
				}
				else
				{
					document.getElementById("ex-cart:icon").src = "/res/img/carrello.png";
				}
			}
			
			if(document.getElementById("ex-cart:qty"))
			{
				document.getElementById("ex-cart:qty").firstChild.nodeValue = qtytotale;
			}
			if(document.getElementById("ex-cart:qtydesc"))
			{
				document.getElementById("ex-cart:qtydesc").firstChild.nodeValue = (qtytotale == 1 ? "prodotto" : "prodotti");
			}				
		},
		
		
        // Aggiorna il totale in caso di modifica del metodo di pagamento o altro
		UpdateTotale: function() {
			
            //CART.Dump();
            //console.log(cart);
            
            var spesespedizione = 0.0;
			var	spesecontrassegno = 0.0;
			var	grantotale = 0.0;
            var	imponibile = 0.0;
			var	totalemerce = 0.0;
			var spesespedmax = 0.0;
			var qtytotale = this.ProductsCount();

			var alowcontrasegno = true;
			if(cart.products)
			{
				for(p=0; p < cart.products.length; p++)
				{

					if(alowcontrasegno & cart.products[p].spedcontrassegno=="0")
					{
						alowcontrasegno = false;
					}
				

					imponibile += cart.products[p].price;
                    totalemerce += parseFloat(cart.products[p].tot.replace(",", "."));
					
					// Cerca il prodotto con la spesa di spedizione più alta a seconda della destinazione isole/nazionale
                    if(cart.spedisole === 0)
                    {
                        spesesped = parseFloat(cart.products[p].spednazionale.replace(",", "."));
    					if(spesesped > spesespedmax)
                        {
                            spesespedmax = spesesped;
                        }
                    }
                    else
                    {
                        spesesped = parseFloat(cart.products[p].spedisolemaggiori.replace(",", "."));
    					if(spesesped > spesespedmax)
                        {
                            spesespedmax = spesesped;
                        }                        
                    }
                    
				}
			}
			
			// Disabilita la possibilità di contrassegno nel caso in cui almeno uno dei prodotti non lo consenta
			if(!alowcontrasegno)
			{
				document.getElementById('pagacontrassegno').checked = false;
				document.getElementById('pagacontrassegno').style.display = "none";
			}

			// Nel caso sia un prodotto virtuale attiva la consegna tramite download senza spese
            if(document.getElementById('ex-cart:sped3'))
            {
                spesespedizione = 0.0;
            }
			else
            {
                if(document.getElementById('ex-cart:sped2').checked | ( !document.getElementById('ex-cart:sped1').checked & !document.getElementById('ex-cart:sped2').checked) )
                {
                    spesespedizione = 0.0;
                }
                else
                {

					if(this.spesespedmode == 2)
					{
						if(totalemerce > 49.90)
							spesespedizione = 0;
						else
							spesespedizione = spesespedmax;
					}
					else {
						// Il primo a prezzo pieno poi somma un eruo per ogni prodotto aggiunto
	                    if(qtytotale == 1 | this.spesespedmode == 0)
						{
							spesespedizione = spesespedmax;
						}
	                    else
						{
							spesespedizione = spesespedmax + ((qtytotale-1) * 1.00);
						}
					}
                }
            }
			
			if(document.getElementById('ex-cart:pagamento1').checked)
			{
				spesecontrassegno = 5.0;
			}
			else {
				spesecontrassegno = 0.0;
			}
			
			// Calcola il gran totale
			grantotale = totalemerce + spesespedizione + spesecontrassegno;
			

            // Applica l'IVA di default su totale
            if(document.getElementById('cart:defaultiva'))
            {
                grantotale = imponibile + (imponibile * document.getElementById('cart:defaultiva').value) / 100;
            }


			Session.set("totalemerce", totalemerce);
			Session.set("spesespedizione", spesespedizione);
			Session.set("spesecontrassegno", spesecontrassegno);
			Session.set("grantotale", grantotale);

			
            if(document.getElementById('cart:defaultiva'))
            {
    			document.getElementById('ex-cart:totalemerce').innerHTML = imponibile.toFixed(2);
            }
            else
            {
    			document.getElementById('ex-cart:totalemerce').innerHTML = totalemerce.toFixed(2);
            }
			document.getElementById('ex-cart:spesesped').innerHTML = spesespedizione.toFixed(2);
			document.getElementById('ex-cart:spesecontra').innerHTML = spesecontrassegno.toFixed(2);
			document.getElementById('ex-cart:grantotale').innerHTML = grantotale.toFixed(2);
			
			
			if(spesespedizione > 0) {
				document.getElementById('spedizione').style.display = "block";
			}
			else {
				document.getElementById('spedizione').style.display = "none";
			}
			
			if(spesecontrassegno > 0) {
				document.getElementById('contrassegno').style.display = "block";
			}
			else {
				document.getElementById('contrassegno').style.display = "none";
			}
		}		
	}; 
})();






// Inizializza lo storico ordini
onOrderHistory = function (params) {

    var obj = JSON.parse( params );
    // console.log(obj);

    var html_item = document.getElementById("ex-cart:orders").innerHTML;
     document.getElementById("ex-cart:orders").innerHTML = html_item + html_item + html_item;

};
// Inizializza il form di checkout
onCartInit = function (params) {

	document.getElementById('ex-cart:checkoutbutton').disabled = false;

	if (document.getElementById('ex-cart:rows') === null)
	{
		CART.Update();
		return;
	}

	var obj = JSON.parse( params );
	
	// Imposta la modalità di calcolo delle spese di spedizione
    CART.spesespedmode = obj.spesespedmode;
    
    // Aggiorna la lingua dei placeholder
	document.getElementById("ex-cart:shipname").placeholder=obj.shipname;	
	document.getElementById("notacontrassegno").innerHTML = obj.notacontrassegno;
	document.getElementById("notabonifico").innerHTML = obj.notabonifico;
	document.getElementById("notapaypal").innerHTML = obj.notapaypal;
    
		
	// Popola la lista delle nazioni
	SITE.SetSelect('ex-cart:country', obj.countryselect );
	SITE.SetSelect('ex-cart:country2', obj.countryselect );
    
    // Se indicata una sola nazione la seleziona in automatico
    if(document.getElementById("ex-cart:country").length == 2)
    {
        document.getElementById("ex-cart:country").selectedIndex  = 1;
    }
	
	// Popola la lista delle localita
	SITE.SetSelect('ex-cart:county', obj.countyselect );
	SITE.SetSelect('ex-cart:county2', obj.countyselect );
	
	document.getElementById("ex-cart:privacytext").innerHTML = obj.privacytext;
	document.getElementById("ex-cart:conditiontext").innerHTML = obj.conditiontext;
	
	// Ricarica i campi prendendoli dall'ordine nel caso l'utente abbia deciso
	// per qualche motivo di annullare il pagamento con PayPal
    
	if(obj.formdata !== "")
	{
		var formdata = JSON.parse( obj.formdata );
		var arr = Object.keys(formdata);
		for(key=0; key < arr.length; key++)
		{
			
            if(arr[key].indexOf("ex-cart") == -1)
			{
				continue;
			}
			var el = document.getElementById(arr[key]);
			if(el)
			{
				if(el.type=="checkbox")
				{
					if(formdata[arr[key]] == 1)
					{
						document.getElementById(arr[key]).checked = true;
					}
				}
				else
				{
					document.getElementById(arr[key]).value =  decodeURIComponent(formdata[arr[key]]);
				}
			}
			else
			{
				for(elid=1; elid < 10; elid++)
				{
					el = document.getElementById(arr[key]+elid);
					if(el)
					{
						if(el.name == arr[key] & el.value == formdata[arr[key]])
						{
							document.getElementById(arr[key]+elid).checked  = true;
						}
					}
				}
			}
		}
	}

	CART.ShowHideComapny();
	CART.ShowHideShip2();
	CART.SpeditionChange();
	CART.PaymentMethodChange();
	CART.Update();    
	
};

// Visualizza i risultati della ricerca
SearchCallBack = function (params) {
	var obj = JSON.parse( params );
	var arr = Object.keys(obj).map(function(k) { return obj[k]; });
	var r = document.getElementById('block');
	var results = '';
	for(key=0; key < arr.length; key++) {
		results += '<a href="' + obj[key].url + '"><div class="itemresult">';
		results += '<img src="/res/photo/gallery/preview/' + obj[key].photo + '_1.jpg">';
		results += '<div class="text">' + obj[key].title + '<!-- br><br>Prezzo <strong>--,--</strong> &euro;--> </div>';
		results += '<div style="clear:left"></div></div></a>';
	}
	r.innerHTML = results;
};

function onCartError(params) {
	// Riabilita il pulsante di invio
	
	if(document.getElementById('ex-cart:checkoutbutton'))
		document.getElementById('ex-cart:checkoutbutton').disabled = false;
		
	var obj = JSON.parse( params );
	if(obj.ctrlid !== '') {
		document.getElementById(obj.ctrlid).style.background='#EEFF3A';
	}
	
	if(document.getElementById('cart-alert')) {
		document.getElementById('checkout').style.display = 'none';
		document.getElementById('message').innerHTML = obj.error;
		document.getElementById('cart-alert').style.display = 'block';
		document.getElementById('close').focus();
	}
	else {
		alert(obj.error);	
	}
}
onCartGetCountries = function (params)
{
	// SITE.SetSelect('ex-cart:country',params);
	// SITE.SetSelect('ex-cart:country2',params);
};
onCartGetProvincies = function (params)
{
	SITE.SetSelect('ex-cart:county',params);
	SITE.SetSelect('ex-cart:county2',params);
};
onCartGetCities = function (params)
{
	SITE.SetSelect('ex-cart:city',params);
	SITE.SetSelect('ex-cart:city2',params);
};
onCartAdd = function (params) {
    
    var products = JSON.parse( params );

    // Veririca se è attivo il limite di acquisto di un singolo prodotto
    var product_found = false;
    if(products.buyonlyone == 1)
    {
        for(i=0; i < cart.products.length; i++) {
            if(products.product.id == cart.products[i].id)
            {
                product_found = true;
                break;
            }
		}
    }
    if(product_found == true | products.buyonlyone == 2)
    {
        document.location.href='/it/checkout';
        return;
    }


    // Aggiunge il rodotto al carrello
	cart.products.push(products.product);
	Session.set("cart", cart);
	CART.Update();
    
    //console.log("----- ADD TO CART -----");
    //console.log(cart);
    
	
	// Reset form options fields
	var objs = document.getElementsByTagName("select");
	for(i=0; i < objs.length; i++)
    {
			var od = objs.item(i).id;
			var n = od.indexOf('ex-cart:prodopt-');
			if(n > -1)
			{
				document.getElementById(objs.item(i).id).value = '';
			}
	}
	var elt = document.getElementById('ex-cart:prodqty');
	if(elt)
	{
		if(elt.nodeName == "INPUT")
					{
			// NOP document.getElementById('ex-cart:prodqty').value = 0;
		}
		if(elt.nodeName == "SELECT")
					{
			document.getElementById('ex-cart:prodqty').value = 0;
		}
	}
	
	if(document.getElementById('cart-alert')) {
		document.getElementById('message').innerHTML = "È stato aggiunto un prodotto al carrello.";
		document.getElementById('IDOK').style.display = 'block';
		document.getElementById('close').style.display = 'none';
		// document.getElementById('checkout').innerHTML = "Vai al ceckout";
		document.getElementById('cart-alert').style.display = 'block';
		document.getElementById('checkout').style.display = 'block';
	}	
	
    //console.log("----- AFTER ALERT -----");
    //console.log(cart);
    
    
};

SpeditionChangeCallBack = function(params)
{
	var par = JSON.parse( params );
    cart.spednazionale = par.spednazionale;
    cart.spedisole = par.spedisole;
    CART.UpdateTotale();
};

function onCheckoutV1(params){
    
    var par = JSON.parse( params );
    
    
	
	//window.open(par.paypal_link, '_blank');
	window.document.location.href = par.paypal_link;
}

function onCheckout(params) {
	
	var par = JSON.parse( params );
	
	function addEl(p,n,v) {
		var el = document.createElement('input');
		el.type = 'hidden';
		el.name = n;
		el.value = v;
		p.appendChild(el);
	}

	if(par.pagamento=="paypal") {
		var pf = document.getElementById('shop-payform');  
		for(var key in par) {
			addEl(pf, key, par[key]);		
		}		
		var obj = JSON.parse(Session.dump());
		for(i=0; i < obj.cart.products.length; i++) {
			addEl(pf,'item_name_' + (i+1), obj.cart.products[i].name);
			addEl(pf,'quantity_' + (i+1), obj.cart.products[i].qty);
			addEl(pf,'amount_' + (i+1), obj.cart.products[i].price_ic);
		}
		if(obj.spesespedizione.toFixed(2) > 0) {
			addEl(pf,'item_name_' + (i+1), "Spese di spedizione");
			addEl(pf,'quantity_' + (i+1), 1);
			addEl(pf,'amount_' + (i+1), obj.spesespedizione.toFixed(2));
		}
		// addEl(pf,'shipping', obj.spesespedizione);//.toFixed(2));
		// addEl(pf,'shipping', 1);//.toFixed(2));
		if(par.testmode == "1") {
			pf.action = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
			// pf.action = 'http://grazianogobbato.it/example/paypal_pay/';
		} else {
			pf.action = 'https://www.paypal.com/cgi-bin/webscr';
		}
		pf.submit();
	}
	if(par.pagamento=="contrassegno") {
		document.location.href = par.return;
	}
	if(par.pagamento=="bonifico") {
		document.location.href = par.return;
	}
	if(par.pagamento=="giapagato") {
		document.location.href = par.return;
	}
	
}


var pagedata = GUID();

function soap(action, params) {
	var xmlhttp = new XMLHttpRequest();

		var actn = action.split(":");
	
		
		xmlhttp.open('POST', '/index.php?action=' + actn[0] + '-schema&uid=' + GUID(), true);

		// build SOAP request
		var sr =
			'<?xml version="1.0" encoding="UTF-8"?>' +
			'<SOAP-ENV:Envelope ' +
				'xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ' +
				'xmlns:ns1="http://admin-2.2.explico.biz/site/" ' +
				'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
				'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
				'xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" ' +
				'SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
			'<SOAP-ENV:Body>' + 
			'<ns1:' + actn[1] + '>';
			
			sr += '<param0 xsi:type="xsd:string">' + pagedata + '</param0>';
			sr += '<param1 xsi:type="xsd:string">' + SITE.Language() + '</param1>';
			if (params) {
				sr += '<param2 xsi:type="xsd:string">' + JSON.stringify(params) + '</param2>';
      }
			else {
				sr += '<param2 xsi:type="xsd:string">{"callback":""}</param2>';
			}
			sr += '</ns1:' + actn[1] + '>' +
			'</SOAP-ENV:Body>' +
			'</SOAP-ENV:Envelope>';

			xmlhttp.onreadystatechange = function () {
			if (xmlhttp.readyState == 4) {
				if (xmlhttp.status == 200) {
					
					if(xmlhttp.responseXML) {

						var xmlResponse = xmlhttp.responseXML.documentElement;
						var fullNodeList = xmlResponse.getElementsByTagName("item");
	
						for (var i=0; i < fullNodeList.length; i++)
						{						
							var node_key = fullNodeList[i].getElementsByTagName("key");
							var node_value = fullNodeList[i].getElementsByTagName("value");
							var key = node_key[0].childNodes[0].nodeValue;
							var value = node_value[0].childNodes[0].nodeValue;
							
							switch(key) {
	
								case "callback" :
									if(typeof(window[value]) == "function") {
										var params = getNodeValue('params', xmlResponse);
										window[value]( params );
									}
									break;
									
								default :
									// NOP
							}
						}
					}
				}
			}
		};
		
		// Send the POST request
		xmlhttp.setRequestHeader('Content-Type', 'text/xml');
		xmlhttp.timeout = 10000;
		xmlhttp.ontimeout = function () {};
		xmlhttp.send(sr);
	}


function getNodeValue(keyName, xmlResponse) {
	var nodes = xmlResponse.getElementsByTagName("item");
	var value = null;
	for (var i=0; i < nodes.length; i++) {
		var node_key = nodes[i].getElementsByTagName("key");
		var node_value = nodes[i].getElementsByTagName("value");
		var key = node_key[0].childNodes[0].nodeValue;
		if (key!=keyName) {
			continue;
		}
		value = node_value[0].childNodes[0].nodeValue;
		break;
	}
	return value;
}

function getSoapData(filter) {
	
	var	data = {};
	var chk,objs;

  if(document.getElementsByTagName) {
    objs = document.getElementsByTagName("input");
    for(i=0; i < objs.length; i++) {
			var id = objs.item(i).getAttribute("id");
			if (!id)
				{ continue; }
			if (filter) {
				if (id.indexOf(filter)==-1)
					{ continue; }
			}
      if(objs.item(i).getAttribute("type")=="checkbox") {
				chk = document.getElementById(id).checked;
        if(chk) {
					data[id] = 1;
				}
				else {
					data[id] = 0;
				}
			}
      else if(objs.item(i).getAttribute("type")=="radio") {
				chk = document.getElementById(id).checked;
        if(chk) {
					data[objs.item(i).getAttribute("name")] = objs.item(i).value;
				}
			} else {
				var v = encodeURI(objs.item(i).value);
				var tmp = new String(v);
				tmp = tmp.replace(/\+/g, '%26%2343%3B');
				data[id] = tmp;	 
      }
    }
    
		objs = document.getElementsByTagName("select");
    for(i=0; i < objs.length; i++) {
			if(objs.item(i)) {
				var id = objs.item(i).getAttribute("id");
				if (!id)
					{ continue; }
				if (filter) {
					if (id.indexOf(filter)==-1)
						{ continue; }
				}				
				//var iix = objs.item(i).selectedIndex;
				// data[id] = encodeURI(objs.item(i).options[iix].value);
				data[id] = encodeURI(objs.item(i).value);
			}
			
    }
		
    objs = document.getElementsByTagName("textarea");
    for(i=0; i < objs.length; i++){
			
			if(objs.item(i).readOnly) continue;

			var id = objs.item(i).getAttribute("id");
			if (!id)
				{ continue; }
			if (filter) {
				if (id.indexOf(filter)==-1)
					{ continue; }
			}
			if(objs.item(i).getAttribute("title")=="tiny") {						
				var v2 = encodeURI(tinyMCE.get(objs.item(i).getAttribute("id")).getContent());
				var tmp2 = new String(v2);
				tmp2 = tmp2.replace(/\+/g, '%26%2343%3B');
				data[id] = tmp2;
			}
			else {
				data[id] = encodeURI(objs.item(i).value);
			}
    }
  }
	return data;
}

// Auto generate code
var debug = false;

// Inizializza i plugin per il sito
SITE.AddLoadEvent(function() {
	
	// Inizializza i controlli
	CTRL.Init();
	
	// Inizializza l'e-commerce
	CART.Init();

    
    
    
    if(debug == true)
    {
        var client = new XMLHttpRequest();
        client.open('GET', '/php_errors.txt');
        client.onreadystatechange = function() {
    
            if (client.readyState == 4) {
                if (client.status == 200) {
    
            if(client.responseText!="")
            console.log(client.responseText);
                }}
        };
        client.send();
    }
		
		// Nascade il prezzo promo
		if(document.getElementById("ex-cart:prodqty")) {
			 if (typeof document.getElementById("ex-cart:prodqty").onChange === "function") { 
					document.getElementById("ex-cart:prodqty").onchange();
				}
		}
	
    
    
});


/* Force reload on history back - risolve il problema del back negli iPad */
window.onpageshow = function(event) {
	if (event.persisted) {
		window.location.reload();				
	}
};


// http://stackoverflow.com/questions/10810497/format-number-string-using-commas
function sep1000(somenum,usa){
  var dec = String(somenum).split(/[.,]/) ,sep = usa ? ',' : '.' ,decsep = usa ? '.' : ',';

  return xsep(dec[0],sep) + (dec[1] ? decsep+dec[1] :'');

  function xsep(num,sep) {
    var n = String(num).split(''),
        i = -3;
    while (n.length + i > 0) {
        n.splice(i, 0, sep);
        i -= 4;
    }
    return n.join('');
  }
}


function GetScreenCordinates(obj) {
	var p = {};
	p.x = obj.offsetLeft;
	p.y = obj.offsetTop;
	while (obj.offsetParent) {
			p.x = p.x + obj.offsetParent.offsetLeft;
			p.y = p.y + obj.offsetParent.offsetTop;
			if (obj == document.getElementsByTagName("body")[0]) {
					break;
			}
			else {
					obj = obj.offsetParent;
			}
	}
	return p;
} 

var xaddEventListener = (function() {
		if(document.addEventListener) {
				return function(element, event, handler) {
						element.addEventListener(event, handler, false);
				};
		}
		else {
				return function(element, event, handler) {
						element.attachEvent('on' + event, handler);
				};
		}
}());				






// ???????????????????????????????????????????????????????????????????????????????
// Memorizza la query string in una stringa json
function QueryStringToJSON() {            
    var pairs = location.search.slice(1).split('&');
    
    var result = {};
    pairs.forEach(function(pair) {
        pair = pair.split('=');
        result[pair[0]] = decodeURIComponent(pair[1] || '');
    });

    return JSON.parse(JSON.stringify(result));
}

function getParameterByNameEx(name, url) {
    if (!url) {
      url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}


function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

// add leading zeros
function Pad(n) {
	n = "00" + n;
	return n.substr(n.length-2);
}
















