function getRequestValue (name)
{
	if (location.search == "")
		return false;

	var pos = location.search.indexOf (name);
	if (pos < 0)
		return false;

	pos += name.length + 1;

	var value = "", _char = "";
	do
	{
		value += _char;
		_char = location.search.substr (pos, 1);
		pos++;
	}
	while (_char != "&" && location.search.length >= pos);

	return value;
}


if (navigator.userAgent.indexOf ("adminFlag") > 0 || getRequestValue ("test") == 1)
	window.TEST = true;
else
	window.TEST = false;


function attachOnLoad (func)
{
	if (window.addEventListener != undefined)
		window.addEventListener ('load', func, false);

	else if (document.attachEvent != undefined)
		window.attachEvent ("onload", func);

	else
	{
		if (window.onload != null)
		{
			var oldOnload = window.onload;
			window.onload = function (e)
			{
				oldOnload (e);
				func.call (window);
			};
		}
		else
			window.onload = func;
  }
}



/***********************************************
					LIBRERIE
*********************************************/
window.getSize = function ()
{
	if (typeof( window.innerWidth ) == 'number' )
		return [ window.innerWidth, window.innerHeight ];
	else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ))
		return [ w = document.documentElement.clientWidth, document.documentElement.clientHeight ];
	else if ( document.body && ( document.body.clientWidth || document.body.clientHeight))
		return [ document.body.clientWidth, document.body.clientHeight];
}
window.lock = function ()
{
	var w = document.getElementById ("bodyMainCell").offsetLeft;
	var top = document.getElementById ("bodyTrueCell").offsetHeight;
	var elemStyle = document.getElementById ('layerBackground').style;
	elemStyle.display = 'block';
	var size = window.getSize ();
	elemStyle.top = top + "px";
	elemStyle.left = w + "px";
	elemStyle.width = (size[0] - w) + "px";
	elemStyle.height = size[1] + "px";
}
window.unlock = function ()
{
	document.getElementById ('layerBackground').style.display = "none";
}
window.openedLayer = false;
window.openLayer = function (layer)
{
	window.lock ();
	var size = window.getSize ();
	var cont = window.openedLayer = document.getElementById (layer);
	// var box = document.getElementById (layer + "_form");

	cont.style.display = "block";
	cont.style.top = (Math.round (size[1] - cont.offsetHeight) / 2) + "px";
	cont.style.left = (Math.max (0, Math.round (size[0] - cont.offsetWidth) / 2)) + "px";
	// box.style.display = "block";
}
window.updateLayer = function ()
{
	var size = window.getSize ();
	var cont = window.openedLayer;
	cont.style.display = "block";
	cont.style.top = (Math.round (size[1] - cont.offsetHeight) / 2) + "px";
	cont.style.left = (Math.max (0, Math.round (size[0] - cont.offsetWidth) / 2)) + "px";
}
window.closeLayer = function ()
{
	window.unlock ();
	window.openedLayer.style.display = "none";
	window.openedLayer = false;
}
function nascondi ()
{
	window.closeLayer ();
}


var _Mouse = {
	x: 0, y: 0,
	track: function (e)
	{
		if (document.all)
		{
			_Mouse.x = window.event.clientX;
			_Mouse.y = window.event.clientY;
		}
		else if (document.layers)
		{
			_Mouse.x = e.pageX;
			_Mouse.y = e.pageY;
		}
		else
		{
			_Mouse.x = e.pageX;
			_Mouse.y = e.pageY;
		}

		if (navigator.userAgent.indexOf ("MSIE") > 0)
			_Mouse.y += document.body.scrollTop;
	},

	startTrack: function ()
	{
		if (document.layers)
		{
			window.captureEvents (Event.MOUSEMOVE);
			window.onmousemove = _Mouse.track;
		}
		else if (document.all)
			document.onmousemove = _Mouse.track;
		else
			document.body.onmousemove = _Mouse.track;

		this.startTrack = function () {};
	}
};

function $ (elem)
{
	if (typeof elem == 'string')
		return document.getElementById (elem);
	else
		return elem;
}
function _switch (show, hide)
{
	$ (show).style.display = 'block';

	if (hide instanceof Array)
		for (var i = 0; i < hide.length; i++)
			$ (hide[i]).style.display = 'none';

	else
		$ (hide).style.display = 'none';
}
function _switchSingle (e)
{
	if (e instanceof Array)
	{
		for (var i = 0; i < e.length; i++)
			_switchSingle (e[i]);
	}
	else
	{
		var s = $ (e).style;
		if (s.display == "block")
			s.display = "none";
		else
			s.display = "block";
	}
}
function $cT (t)
{
	if (t !== false)
		window.clearTimeout (t);
}
function $sT (cmd, to)
{
	return window.setTimeout (cmd, to);
}
function $C (tagName)
{
	return document.createElement (tagName);
}
function $D (elem)
{
	$ (elem).parentNode.removeChild ($ (elem));
}


function str_replace(search, replace, subject)
{
	// http://kevin.vanzonneveld.net
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Gabriel Paderni
	// +   improved by: Philip Peterson
	// +   improved by: Simon Willison (http://simonwillison.net)
	// +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
	// +   bugfixed by: Anton Ongson
	// +      input by: Onno Marsman
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +    tweaked by: Onno Marsman
	// *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
	// *     returns 1: 'Kevin.van.Zonneveld'
	// *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
	// *     returns 2: 'hemmo, mars'

	var f = search, r = replace, s = subject;
	var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;

	while (j = 0, i--) {
		if (s[i]) {
			while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
		}
	};

	return sa ? s : s[0];
}
function str_ireplace (search, replace, subject)
{
	// http://kevin.vanzonneveld.net
	// +   original by: Martijn Wieringa
	// +      input by: penutbutterjelly
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +    tweaked by: Jack
	// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   bugfixed by: Onno Marsman
	// *     example 1: str_ireplace('l', 'l', 'HeLLo');
	// *     returns 1: 'Hello'

	var i, k = '';
	var searchl = 0;

	search += '';
	searchl = search.length;
	if (!(replace instanceof Array)) {
		replace = new Array(replace);
		if (search instanceof Array) {
			// If search is an array and replace is a string,
			// then this replacement string is used for every value of search
			while (searchl > replace.length) {
				replace[replace.length] = replace[0];
			}
		}
	}

	if (!(search instanceof Array)) {
		search = new Array(search);
	}
	while (search.length>replace.length) {
		// If replace has fewer values than search,
		// then an empty string is used for the rest of replacement values
		replace[replace.length] = '';
	}

	if (subject instanceof Array) {
		// If subject is an array, then the search and replace is performed
		// with every entry of subject , and the return value is an array as well.
		for (k in subject) {
			subject[k] = str_ireplace(search, replace, subject[k]);
		}
		return subject;
	}

	searchl = search.length;
	for (i = 0; i < searchl; i++) {
		reg = new RegExp(search[i], 'gi');
		subject = subject.replace(reg, replace[i]);
	}

	return subject;
}


function randomString (len)
{
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
	var randomstring = '';
	for (var i=0; i < len; i++)
	{
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}

	return randomstring;
}
function getEvent (event)
{
	if (typeof event != 'object' || (typeof event.button == 'undefined' && typeof event.originalTarget == 'undefined') || typeof event.__fixed != 'undefined')
		return event;
	if (!event)
		event = window.event;
	event.__fixed = true;

	if (navigator.userAgent.toLowerCase ().indexOf ('msie') != - 1)
	{
		event.MouseX = event.clientX ;//+ document.body.scrollLeft;
		event.MouseY = event.clientY ;//+ document.body.scrollTop;
		event.pulsante = event.button + 1;
		event.elemOver = event.srcElement;
	}
	else
	{
		event.MouseX = event.pageX;
		event.MouseY = event.pageY;
		event.pulsante = event.button;
		event.elemOver = event.target;
	}

	event.key = event.charCode ? event.charCode : event.keyCode;

	var delta;
	if (event.wheelDelta)
	{
		/* IE/Opera. */
		delta = event.wheelDelta / 120;
		/** In Opera 9, delta differs in sign as compared to IE. */
		if (window.opera)
			delta = - delta;
	}
	else if (event.detail)
	{
		/** Mozilla case. */
		/** In Mozilla, sign of delta is different than in IE.
		 * Also, delta is multiple of 3.
		 */
		delta = - event.detail / 3;
	}
	event.deltaFix = delta;

	return event;
}
function preventDispatch (event)
{
	event = getEvent (event);
	if (typeof event.stopPropagation == 'function')
		event.stopPropagation ();

	if (typeof event.preventDefault  == 'function')
		event.preventDefault ();

	if (typeof event.preventCapture  == 'function')
		event.preventCapture ();

	if (typeof event.preventBubble  == 'function')
		event.preventBubble ();

	event.returnValue = false;
}


function redirectReplace (pattern, addGet)
{
	if (addGet)
	{
		if (location.href.indexOf ("?") > -1)
			addGet = "&" + addGet;
		else
			addGet = "?" + addGet;
	}
	else
		addGet = "";

	location.href = location.href.replace (new RegExp (pattern), "") + addGet;
}



function throughtParent (elem, type, name, value)
{
	switch (type)
	{
		case "tagName":
			while (elem.tagName.toLowerCase () != name)
				elem = elem.parentNode;
			return elem;
			break;

		case "property":
			while (elem && (elem[name] == undefined || elem[name] != value))
				elem = elem.parentNode;

			return elem;
	}
}


window.errors = [];
function _err (e)
{
	var d = $C ("div");

	if (typeof e == "string")
		d.innerHTML = e;
	else
	{
		window.errors.push (e);
		d.innerHTML = e.fileName + " (" + e.lineNumber + "): " + e.name + ", " + e.message;
	}

	document.body.appendChild (d);
}

function selectGetOption (select)
{
	return select.options[select.selectedIndex];
}
function selectGetValue (select)
{
	return select.options[select.selectedIndex].value;
}
function selectSetValue (select, value)
{
	for (var i = 0; i < select.options.length; i++)
		if (select.options[i].value == value)
		{
			select.selectedIndex = i;
			return;
		}
}



function number_format (number, decimals, dec_point, thousands_sep)
{
    // Formats a number with grouped thousands
    //
    // version: 906.1806
    // discuss at: http://phpjs.org/functions/number_format
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +     input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +     improved by: davook
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Jay Klehr
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *     example 10: number_format('1.20', 2);
    // *     returns 10: '1.20'
    // *     example 11: number_format('1.20', 4);
    // *     returns 11: '1.2000'
    // *     example 12: number_format('1.2000', 3);
    // *     returns 12: '1.200'
    var n = number, prec = decimals;

    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };

    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;

    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;

    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;

    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;

        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }

    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}



var QueryString = {
	get: function (name)
	{
		var searchPos = location.search.indexOf (name);
		if (searchPos === -1)
			return null;

		searchPos += name.length + 1; // =

		var value = "", _char = "";
		do
		{
			value += _char;
			_char = location.search.substr (searchPos, 1);
			searchPos++;
		}
		while (_char != "&" && location.search.length >= searchPos);

		return value;
	}
};



function checkAll (form, inputName, check)
{
	form = $ (form);

	for (var i in form)
	{
		var attr = form[i];
		if (attr === null)
			continue;

		if (typeof attr == 'object' && attr[0] != undefined)
		{
			var array = attr;
			for (var n = 0; n < array.length; n++)
			{
				attr = array[n];
				checkSingle (attr, inputName, check);
			}
		}
		else
			checkSingle (attr, inputName, check);
	}
}
function checkSingle (attr, inputName, check)
{
	if (attr.type != undefined && attr.type == "checkbox")
	{
		if (!inputName || attr.name == inputName)
			attr.checked = check;
	}
}



if (Array.prototype.indexOf == undefined)
{
	Array.prototype.indexOf = function (v, b, s)
	{
		for (var i = +b || 0, l = this.length; i < l; i++)
			if (this[i] === v || s && this[i] == v)
				return i;
		return -1;
	}
}


/*
var ClipBoard = {
	copyAll: function (elem)
	{
		if (document.all)
			window.clipboardData.setData ("blah", text);

		elem.focus ();
		elem.select ();
		var txt = document.selection.createRange ();
		txt.execCommand ("Copy");
	}
}
*/


function getFormElementsUrlEncode (form)
{
	var post = "";
	for (var i = 0; i < form.elements.length; i++)
	{
		var input = form.elements[i];
		post += inputGetUrlencode (input);
	}

	/*
	var post = "";
	for (var i in args)
		post += "&" + i + "=" + args[i];
	*/

	return post;
}

function inputGetUrlencode (input)
{
	switch (input.type)
	{
		case "textarea":
			return "&" + input.name + "=" + php_urlencode (input.value);
			break;

		case "checkbox":
			if (input.checked)
				return "&" + input.name + "=" + php_urlencode (input.value);;
			break;

		default:
			return "&" + input.name + "=" + php_urlencode (input.value);;
	}
}


function php_urlencode (str)
{
	str = escape(str);
	return str.replace (/[*+\/@]|%20/g,
		function (s)
		{
			switch (s)
			{
				case "*": s = "%2A"; break;
				case "+": s = "%2B"; break;
				case "/": s = "%2F"; break;
				case "@": s = "%40"; break;
				case "%20": s = "+"; break;
			}

			return s;
		}
	);
}


function followScroll (elem, minTop)
{
	elem = $ (elem);

	if (elem.minTop)
		return;
	elem.minTop = minTop;

	elem.style.position = "relative";
	//elem.style.zindex = 10;
	elem.style.display = "block";
	elem.onScrollFollow = onScrollFollow;

	window.setInterval ("var e = $ ('" + elem.id + "'); if (e && e.onScrollFollow) e.onScrollFollow ();", 100);
}
function onScrollFollow ()
{
	if (document.body.scrollTop != undefined)
	{
		if (document.body.scrollTop > this.minTop)
			this.style.top = (document.body.scrollTop - this.minTop) + "px";
		else
			this.style.top = "0px";
	}
	else if (typeof document.documentElement.scrollTop != undefined)
	{
		if (document.documentElement.scrollTop > this.minTop)
			this.style.top = (document.documentElement.scrollTop - this.minTop) + "px";
		else
			this.style.top = "0px";
	}
	else
		this.style.top = "0px";
}



