﻿/* _____________________________ ON ERROR ____________________________________________ */
function silenzia()  {return true}
// window.onerror=silenzia;
/* ___________________________________________________________________________________ */

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.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			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"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// 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.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
};

function serialize( mixed_value ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Arpad Ray (mailto:arpad@php.net)
    // +   improved by: Dino
    // +   bugfixed by: Andrej Pavlovic
    // +   bugfixed by: Garagoth
    // +      input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)
    // +   bugfixed by: Russell Walker (http://www.nbill.co.uk/)
    // %          note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %          note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
    // *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
    // *     returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
 
    var _getType = function( inp ) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {
            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            match = cons.match(/(\w+)\(/);
            if (match) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    var val, ktype = '';
    
    switch (type) {
        case "function": 
            val = ""; 
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");
            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":
            val = "s:" + encodeURIComponent(mixed_value).replace(/%../g, 'x').length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":
            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
            var count = 0;
            var vals = "";
            var okey;
            var key;
            for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") { 
                    continue; 
                }
                
                okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
                vals += serialize(okey) +
                        serialize(mixed_value[key]);
                count++;
            }
            val += ":" + count + ":{" + vals + "}";
            break;
        case "undefined": // Fall-through
        default: // if the JS object has a property which contains a null value, the string cannot be unserialized by PHP
            val = "N";
            break;
    }
    if (type != "object" && type != "array") {
        val += ";";
    }
    return val;
}

function unserialize(data){
    // http://kevin.vanzonneveld.net
    // +     original by: Arpad Ray (mailto:arpad@php.net)
    // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
    // +     bugfixed by: dptr1988
    // +      revised by: d3x
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +        input by: Brett Zamir (http://brett-zamir.me)
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: Chris
    // +     improved by: James
    // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *       example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
    // *       returns 1: ['Kevin', 'van', 'Zonneveld']
    // *       example 2: unserialize('a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}');
    // *       returns 2: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
 
    var error = function (type, msg, filename, line){throw new this.window[type](msg, filename, line);};
    var read_until = function (data, offset, stopchr){
        var buf = [];
        var chr = data.slice(offset, offset + 1);
        var i = 2;
        while (chr != stopchr) {
            if ((i+offset) > data.length) {
                error('Error', 'Invalid');
            }
            buf.push(chr);
            chr = data.slice(offset + (i - 1),offset + i);
            i += 1;
        }
        return [buf.length, buf.join('')];
    };
    var read_chrs = function (data, offset, length){
        var buf;
 
        buf = [];
        for(var i = 0;i < length;i++){
            var chr = data.slice(offset + (i - 1),offset + i);
            buf.push(chr);
        }
        return [buf.length, buf.join('')];
    };
    var _unserialize = function (data, offset){
        var readdata;
        var readData;
        var chrs = 0;
        var ccount;
        var stringlength;
        var keyandchrs;
        var keys;
 
        if(!offset) {offset = 0;}
        var dtype = (data.slice(offset, offset + 1)).toLowerCase();
 
        var dataoffset = offset + 2;
        var typeconvert = new Function('x', 'return x');
 
        switch(dtype){
            case 'i':
                typeconvert = function (x) {return parseInt(x, 10);};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'b':
                typeconvert = function (x) {return parseInt(x, 10) !== 0;};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'd':
                typeconvert = function (x) {return parseFloat(x);};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'n':
                readdata = null;
            break;
            case 's':
                ccount = read_until(data, dataoffset, ':');
                chrs = ccount[0];
                stringlength = ccount[1];
                dataoffset += chrs + 2;
 
                readData = read_chrs(data, dataoffset+1, parseInt(stringlength, 10));
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 2;
                if(chrs != parseInt(stringlength, 10) && chrs != readdata.length){
                    error('SyntaxError', 'String length mismatch');
                }
            break;
            case 'a':
                readdata = {};
 
                keyandchrs = read_until(data, dataoffset, ':');
                chrs = keyandchrs[0];
                keys = keyandchrs[1];
                dataoffset += chrs + 2;
 
                for(var i = 0;i < parseInt(keys, 10);i++){
                    var kprops = _unserialize(data, dataoffset);
                    var kchrs = kprops[1];
                    var key = kprops[2];
                    dataoffset += kchrs;
 
                    var vprops = _unserialize(data, dataoffset);
                    var vchrs = vprops[1];
                    var value = vprops[2];
                    dataoffset += vchrs;
 
                    readdata[key] = value;
                }
 
                dataoffset += 1;
            break;
            default:
                error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
            break;
        }
        return [dtype, dataoffset - offset, typeconvert(readdata)];
    };
    
    return _unserialize((data+''), 0)[2];
}

function objFromId(id_elemento) {
	return ($("#id_elemento"));
}

function debJsObj(oggetto, testoDeb, livelloObj){
	if(oggetto.length>0){
		for(var prop in oggetto){
			if(oggetto[prop] && (oggetto[prop].toString()=="[object]" || oggetto[prop].toString()=="[object Text]")){
				testoDeb+="["+prop+"] Object:<br />";
				testoDeb+=debJsObj(oggetto[prop], testoDeb, (livelloObj+1));
			} else {
				for(i=0;i<livelloObj;i++){
					testoDeb+="> ";
				}
				testoDeb+="["+prop+"]="+ oggetto[prop]+"<br />";
			}
		}
	}
	return(testoDeb);
}

function insHTML(idDiv, htmlTxt){
	$("#"+idDiv).html(htmlTxt);
}

function insGetHtml(idDiv, url){
	$.get(url,{
			time: unixTime()
		}, function(data){
		insHTML(idDiv, data);
	});
}

function alertGetHtml(url){
	$.get(url, function(data){
		alert(data);
	});
}

/////////////// FUNZIONE PER RIMUOVERE ELEMENTI DA UN ARRAY
Array.remove = function(array, from, to) {
  var rest = array.slice((to || from) + 1 || array.length);
  array.length = from < 0 ? array.length + from : from;
  return array.push.apply(array, rest);
};

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
}

/////////////// FUNZIONE PER CAPITALIZE
String.prototype.capitalize = function(){ //v1.0
    return this.replace(/\w+/g, function(a){
        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
    });
};

//////////////////////////////// STAMPA DI UN BLOCCO DI UNA PAGINA
function stampa(idBlock) {
	var testo = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />";
	testo += "<link href=\"css/stili.css\" rel=\"stylesheet\" type=\"text/css\" />"; 
	testo += "</head><body><div style=\"height:10px;\"></div><div id=\"coldx\" class=\"floatLeft\" style=\"width:745px;\">";
	testo += $("#"+idBlock).html();
	testo += "</div></body></html>";
	var ident_finestra = window.open("","finestra_stampa","height=700,width=800,top=5,left=5,scrollbars=yes");
	ident_finestra.document.open();
	ident_finestra.document.write(testo);
	ident_finestra.print();
	ident_finestra.document.close();
}

function linkblank(src){
	window.open(src,'','toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes');
}

function getQueryString(idFormPost) {
	var qstr = "";
	var form = objFromId(idFormPost);
	for (keyVar in form) {
		if(form[keyVar] && form[keyVar].value!=undefined){
			qstr = qstr + keyVar + '=' + escape(form[keyVar].value) + "&";  // NOTE: no '?' before querystring
		}
	}
    return qstr;
}

var chiudiMS;
var chiudiMSArr=new Array();

function setOpacity(idDiv,value){
	if(objFromId(idDiv)){
		oggetto=objFromId(idDiv);
		oggetto.fadeTo(1000, (value/10), function(data){
			// nulla
		});
	}
}

function setlivelli(nomediv,stato){
	if(objFromId(nomediv)){
		oggetto=objFromId(nomediv);
		if(stato==1){
			oggetto.css('display', 'block');
			oggetto.css('visibility', 'visible');
		}
		if(stato==0){
			oggetto.css('display', 'none');
			oggetto.css('visibility', 'hidden');
		}
	}
	return(false);
}

function getVal(id){
	if(objFromId(id)){
		oggetto=objFromId(id);
		return oggetto.val();
	} else {
		return ("err");	
	}
}

function setVal(id,valore){
	if(objFromId(id)){
		oggetto=objFromId(id);
		oggetto.attr('value',valore);
		return (true);	
	} else {
		return (false);	
	}
}

function strpos(haystack, needle, offset){
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}

function loading(stato){
	setlivelli("loading",((stato==1)?1:0));
}

function posizionaDiv(idDiv,cooX,cooY){
	oggetto=objFromId(idDiv);
	if(cooX!=""){
		oggetto.css('marginLeft', cooX+"px");
	}
	if(cooY!=""){
		oggetto.css('marginTop', cooY+"px");
	}
}

function vai(url){
	location.href=url;
}

function getElementsByClassName(classname) {
    var rl = new Array();
    var re = new RegExp('(^| )'+classname+'( |$)');
    var ael = document.getElementsByTagName('*');
    var op = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
    if (document.all && !op) ael = document.all;
    for(i=0, j=0 ; i<ael.length ; i++) {
        if(re.test(ael[i].className)) {
        	rl[j]=ael[i];
            j++;
        }
    }
    return rl;
}

function rand(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function randNum(){
	var data = new Date();
	data=data.getYear()+data.getMonth()+data.getDate()+data.getHours()+data.getMinutes()+data.getSeconds()+data.getMilliseconds();
	return(data);
}

function unixTime(){
	var foo = new Date; // Generic JS date object
	var unixtime_ms = foo.getTime(); // Returns milliseconds since the epoch
	// var unixtime = parseInt(unixtime_ms / 1000);
	var unixtime = parseInt(unixtime_ms);
	return(unixtime);
}

function getViewportSize() { 
	var size = [0, 0]; 
	if (typeof window.innerWidth != "undefined") { 
		size = [window.innerWidth, window.innerHeight];
	} 
	else if (typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0) {
		size = [document.documentElement.clientWidth, document.documentElement.clientHeight]; 
	}
	else {
		size = [document.getElementsByTagName("body")[0].clientWidth, document.getElementsByTagName("body")[0].clientHeight]; 
	}
	return size;
}

function setSpazioVert(){
	ris=getViewportSize();
	ris=ris[1];
	return(ris);
}

function getIEVersion(){
    var version = 999; // we assume a sane browser
    if (navigator.appVersion.indexOf("MSIE") != -1)
      // bah, IE again, lets downgrade version number
      version = parseFloat(navigator.appVersion.split("MSIE")[1]);
    return version;
}

function testRegExp(stringa, espressione){
	var espressione = new RegExp(espressione);
	return espressione.test(stringa);
}

function zoomImg(url){
	tb_show('', url);
	return(false);
}

function aggiornaCaptcha(){
	oggetto=objFromId("imgCaptcha");
	if(oggetto){
		oggetto.attr("src","captcha_zdr/captcha_img.php?rand="+randNum());
	}
	return(false);
}

function showAddress(address,titolo,idDiv) {
  // document.getElementById('daddr').value=address;
  if (GBrowserIsCompatible()) {
	geocoder = new GClientGeocoder();
  }

  if (geocoder) {
	geocoder.getLatLng(
	  address,
	  function(point) {
		if (!point) {
		  alert(address + " non trovato");
		} else {
		/*zoom*/

			coordinate = point;

			map = new GMap2(document.getElementById(idDiv));
			
			/*mappa - satellite - ibrida */
			map.addControl(new GMapTypeControl());
			
			/*controller con barra vert*/
			// map.addControl(new GSmallMapControl());
			map.addControl(new GLargeMapControl());
			
			/*zoom box, in basso a dx*/
			map.addControl(new GOverviewMapControl(),
			
			new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(9, 9)));
			
			/*COORDINATE DI PARTENZA DELLA MAPPA*/
			map.setCenter(point, 15);
			// map.setCenter(point, 12);
			var marker = new GMarker(point);
			map.addOverlay(marker);
			if(titolo){
				marker.openInfoWindowHtml(titolo+"&nbsp;&nbsp;&nbsp;&nbsp;");
			} else {
				marker.openInfoWindowHtml(address+"&nbsp;&nbsp;&nbsp;&nbsp;");
			}
		}
	  }
	);
  }
}

function contaCharsTxtArea(maxchar){
	testo=$("#messaggio").val();
	caratteri=testo.length;
	if (caratteri > maxchar){
		$("#messaggio").val(testo.substr(0, maxchar));
	}
}

/* ----------------- INIZIO FUNZIONI DI CARRELLO ----------------------- */

var inviabile=true;

function bloccaNum(nomeModulo, nomeCampo) { // IMPONE AL CAMPO DI ACCETTARE SOLO NUMERI
	oggetto=document.getElementById(nomeModulo);
	var textObj = eval("oggetto."+nomeCampo);
	textObj.onkeyup = function () {
		valoreIniz=textObj.value;
		valoreFin="";
		valoreLenght=valoreIniz.length;
		for (i=0; i<valoreLenght; i++){
			if(!isNaN(valoreIniz.charAt(i))){
				valoreFin+=valoreIniz.charAt(i);
			} else {
			}
		}
		textObj.value=valoreFin;
	}
}

selectLists = document.getElementsByTagName('select');
function visAllSelect(stato){
	for (var counter=0; counter<selectLists.length; counter++){
		selectLists[counter].style.visibility=(stato==0)?'hidden':'visible';
	}
}

function modQta(qta){
	oggetto=objFromId("qta");
	var qtaAtt=parseInt(oggetto.val(), 10);
	qtaAtt=qtaAtt+parseInt(qta, 10);
	qtaAtt=(qtaAtt>=1)? qtaAtt : 1;
	oggetto.val(qtaAtt);
	oggetto=objFromId("qtaTxt");
	oggetto.html(qtaAtt);
}

/* ----------------- FINE FUNZIONI DI CARRELLO ----------------------- */

function logout(){
	$.get("background.php", {
		  	act: "logout",
			time: unixTime()
		}, function(data){
			document.location.reload();
	});
	return(false);
}

function logoutAdmin(){
	$.get("background.php", {
		  	act: "logoutAdmin",
			time: unixTime()
		}, function(data){
			document.location.reload();
	});
	return(false);
}

function contrLoginAdmin(){
	insHTML("alertForm", "");
	$.post("background.php",{
			user: $("#user").val(),
			password: $("#password").val(),

			act: "loginAdmin",
			time: unixTime()
		}, function(data){
			if(data=="ok"){
				vai("admin.php");
				return(false);				
			} else {
				insHTML("alertForm", "Autenticazione fallita");
				return(false);				
			}
		});
	return(false);
}


function funzioniResize(){

}

function funzioniOnLoad(){
	BrowserDetect.init();

}


