/*--------------------------------------------------------*
* Copyright (C) 2006 Verthink S.r.l. - Italy
* 
* File: library.js
* Author: Aldo Armiento
* Version: 20060605.1
*---------------------------------------------------------*/

var gvaDissolve = new Array();
var gvaCollapse = new Array();

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslElIsVisible(sID)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl || !oEl.style) 
		return(false);

	if (navigator && navigator.vendor && navigator.vendor.indexOf("Apple") >= 0)
		return(vslElGetStyleProp(sID, 'visibility') == 'visible');
	
	if (vslElGetStyleProp(sID, 'visibility') != 'hidden')
		return(true);

	return(false);
}


/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslElGetStyleProp(sID, sProp)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl) 
		return(false);

	var mPropValue = null;
	if (oEl.currentStyle)
		mPropValue = oEl.currentStyle[sProp];
	else if (window.getComputedStyle)
		mPropValue = document.defaultView.getComputedStyle(oEl, null).getPropertyValue(sProp);

	return(mPropValue);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslSEL(sID)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl || !oEl.style) 
		return(false);

	try
	{	oEl.style.visibility = 'visible';
		oEl.style.display = 'block';
	}
	catch(e)
	{	return(false);
	}

	return(true);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslHEL(sID)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl || !oEl.style) 
		return(false);

	try
	{	//if (!_gvaELHeight[sID]) 
		//	_gvaELHeight[sID] = clGetElementHeight(sID);		
		
		oEl.style.visibility = 'hidden';
		oEl.style.display = 'none';
	}
	catch(e)
	{	return(false);
	}
	
	return(true);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetHTMLElement(sID)
{
	if(document.getElementById && document.getElementById(sID))
		return document.getElementById(sID);

	if (document.all && document.all(sID))
		return document.all(sID);

	if (document.layers && document.layers[sID])
		return document.layers[sName];

	return(null);
}

/*---------------------------------------------------------*
* 
*----------------------------------------------------------*/

function vslGetXMLReq()
{
	var XMLReq = false;

	if (typeof(XMLHttpRequest) != 'undefined')
	{	try
		{	XMLReq = new XMLHttpRequest();
		}
		catch (e)
		{	XMLReq = false;
		}
	}
	else if (typeof(ActiveXObject) != 'undefined')
	{	try
		{	XMLReq = new ActiveXObject("Msxml2.XMLHTTP");;
		}
		catch (e)
		{	try
			{	XMLReq = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e2)
			{	XMLReq = false;
			}
		}
	}

	return(XMLReq);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetElementHeight(sID)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl) 
		return(false);

	var nSH = oEl.scrollHeight;
	var nOH = oEl.offsetHeight;

	if (nSH > nOH) 
		return(nSH);

	return(nOH);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetElementWidth(sID)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl) 
		return(false);

	var nSW = oEl.scrollWidth;
	var nOW = oEl.offsetWidth;

	if (nSW > nOW) 
		return(nSW);

	return(nOW);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetKeyCode(e)
{
	var nKC = e.keyCode ? e.keyCode : e.charCode;

	return(nKC);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetSelectedOptionFromSelect(sID)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl || oEl.nodeName.toUpperCase() != 'SELECT') 
		return(false);

	for (i = oEl.length -1; i >= 0; i--)
		if (oEl.options && oEl.options[i] && oEl.options[i].selected) 
			return(oEl.options[i].value);

	return(null);
}


/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetElementPos(oEl)
{
	var nLeft = nTop = 0;

	if (oEl.offsetParent)
	{	nLeft = oEl.offsetLeft;
		nTop = oEl.offsetTop;
		while (oEl = oEl.offsetParent)
		{	nLeft += oEl.offsetLeft
			nTop += oEl.offsetTop
		}
	}

	return [nLeft,nTop];
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslDissolveEL(sID, nFrom, nTo, nStep, nSpeed, fCallBack)
{
	if (sID == '' || nStep == 0 || nSpeed == 0 || (nFrom == 0 && nTo == 0)) 
		return(false);

	var oEl = vslGetHTMLElement(sID);
	if (!oEl || !oEl.style) 
		return(false);

	var oElStyle = oEl.style;

	try
	{	if (gvaDissolve[sID] && gvaDissolve[sID][0])
			clearInterval(gvaDissolve[sID][0]);

		if (nFrom < 0) 
		{
			try
			{
				if (typeof(oElStyle.opacity) != 'undefined' && parseFloat(oElStyle.opacity) != 'NaN')
					nFrom = oElStyle.opacity * 100;
				else if (typeof(oElStyle.MozOpacity) != 'undefined' && parseFloat(oElStyle.MozOpacity) != 'NaN')
					nFrom = parseFloat(oElStyle.MozOpacity) * 100;
				else if (typeof(oElStyle.KhtmlOpacity) != 'undefined' && parseFloat(oElStyle.KhtmlOpacity) != 'NaN')
					nFrom = parseFloat(oElStyle.KhtmlOpacity) * 100;
				else if (typeof(oElStyle.filter.alpha.opacity) != 'undefined' && parseInt(oElStyle.filter.alpha.opacity) != 'NaN')
					nFrom = parseInt(oElStyle.filter.alpha.opacity);

			}
			catch(e)
			{
			}
		}

		gvaDissolve[sID] = new Array(null, nFrom);

		var nSIntID = setInterval(function ()
		{	
			var nLevel = gvaDissolve[sID][1];
			nLevel += nStep;

			var bStop = false;

			if (nStep > 0) 
			{	if (nLevel >= nTo) 
					bStop = true;
			}
			else 
			{
				if (nLevel <= nTo) 
					bStop = true;
			}

			if (bStop) 
			{	if (gvaDissolve[sID][0]) 
					clearInterval(gvaDissolve[sID][0]);

				nLevel = nTo;

				if (fCallBack != null) 
					fCallBack();
			}

			vslSetElOpacity(sID, nLevel);
			
			gvaDissolve[sID][1] = nLevel;

		}, nSpeed);

		gvaDissolve[sID] = new Array(nSIntID, nFrom);

	}
	catch(e)
	{	return(false);
	}

	return(true);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslCollapseEL(sID, nFrom, nTo, nStep, nSpeed, fCallBack)
{
	if (sID == '' || nStep == 0 || nSpeed == 0 || (nFrom == 0 && nTo == 0)) 
		return(false);

	var oEl = vslGetHTMLElement(sID);
	if (!oEl || !oEl.style) 
		return(false);

	var oElStyle = oEl.style;

	try
	{	if (gvaCollapse[sID] && gvaCollapse[sID][0])
			clearInterval(gvaCollapse[sID][0]);

		if (nFrom < 0) 
			nFrom = vslGetElementHeight(sID);

		gvaCollapse[sID] = new Array(null, nFrom);

		var nSIntID = setInterval(function ()
		{	
			var nLevel = gvaCollapse[sID][1];
			nLevel += nStep;

			var bStop = false;

			if (nStep > 0) 
			{	if (nLevel >= nTo) 
					bStop = true;
			}
			else 
			{
				if (nLevel <= nTo) 
					bStop = true;
			}

			if (bStop) 
			{	if (gvaCollapse[sID][0]) 
					clearInterval(gvaCollapse[sID][0]);

				nLevel = nTo;

				if (fCallBack != null) 
					fCallBack();
			}

			oElStyle.height = nLevel + 'px';
			
			gvaCollapse[sID][1] = nLevel;

		}, nSpeed);

		gvaCollapse[sID] = new Array(nSIntID, nFrom);
	}
	catch(e)
	{	return(false);
	}

	return(true);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslSetElOpacity(sID, nPercOpacity)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl || !oEl.style) 
		return(false);

	var oElStyle = oEl.style;

	try
	{	
		oElStyle.opacity = (nPercOpacity / 100);
		oElStyle.MozOpacity = (nPercOpacity / 100);
		oElStyle.KhtmlOpacity = (nPercOpacity / 100);
		oElStyle.filter = "alpha(opacity=" + nPercOpacity + ")"; 
	}
	catch(e)
	{	return(false);
	}

	return(true);
}

/*---------------------------------------------------------*
* 
*----------------------------------------------------------*/

function vslGetRand(nMax)
{	return (Math.floor(Math.random() * nMax + 1));
}


/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslOnMouseLE(e, oCaller)
{
	if (e.type != 'mouseout' && e.type != 'mouseover')
		return(false);
		
	var oRelTarget = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement;
	
	while (oRelTarget && oRelTarget != oCaller)
		oRelTarget = oRelTarget.parentNode; 
	
	return (oRelTarget != oCaller);
}


/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetCookie(sName)
{
	var asCookies = document.cookie.split("; ");
	for (var nCnt = 0; nCnt < asCookies.length; nCnt++)
	{	var asCookie = asCookies[nCnt].split("=");
		if (sName == asCookie[0])
			return(unescape(asCookie[1]));
	}
	return("");
}


/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslSetCookie(sName, sVal, nDays)
{
	var dtNow = new Date();
	var dtExpires = new Date();
	dtExpires.setTime(dtNow.getTime() + 3600000 * 24 * nDays);
	document.cookie = sName + "=" + escape(sVal) + ";expires=" + dtExpires.toGMTString() + ";path=/";
	return(true);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetLocationPathName()
{
	var s = window.location.pathname;
	if (s.charAt(s.length - 1) != "/")
		s += "/";

	if (s.charAt(0) != "/")
		s = "/" + s;

	return(s);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetChangedParms(aFiltersArgs)
{
	var sRet = "";
	
	for (var sK in aFiltersArgs)
	{	var sV = aFiltersArgs[sK];
		
		if (sV == "" || sK == parseInt(sK))
			continue;

		sRet += "/" + sK + "-" + String(sV).vslURLEncodeR2();
	}
	
	return(sRet);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetChangedVirt(sURL, aFiltersArgs, nOffset)
{
	var sRet = "";
	
	if (!nOffset)
		nOffset = 0;
	
	var aSplit = sURL.split("/");
	
	for (var sK in aFiltersArgs)
	{	var sV = aFiltersArgs[sK];
		
		if (sV == "")
			continue;
			
		if (sK == parseInt(sK))
		{	aSplit[parseInt(sK) + nOffset] = sV;
		}
	}
	
	for (var i = 0; i < aSplit.length; i++)
	{	if (i > 0)
			sRet += "/";
		sRet += aSplit[i];
	}

	return(sRet);
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslGetClientSize()
{
	var nWidth = 0, nHeight = 0;

	if (typeof(window.innerWidth) == 'number')
	{	//Non-IE
		nWidth = window.innerWidth;
		nHeight = window.innerHeight;
	}
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
	{	//IE 6+ in 'standards compliant mode'
		nWidth = document.documentElement.clientWidth;
		nHeight = document.documentElement.clientHeight;
	}
	else if (document.body && (document.body.clientWidth || document.body.clientHeight))
	{	//IE 4 compatible
		nWidth = document.body.clientWidth;
		nHeight = document.body.clientHeight;
	}
	
	return(new Array(nWidth, nHeight));
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslNewWindow(sUrl, sName, sFeatures, bReplace)
{
	return(window.open(sUrl, sName, sFeatures, bReplace));
}

/*---------------------------------------------------------*
*
*----------------------------------------------------------*/

function vslElToggle(sID)
{
	var oEl = vslGetHTMLElement(sID);
	if (!oEl || !oEl.style) 
		return false;
	
	if (oEl.style.display == 'none') {
		oEl.style.display = 'block';
	} else {
		oEl.style.display = 'none';
	}
	return true;
}

/*---------------------------------------------------------*
* NEW PROTOTYPE
*----------------------------------------------------------*/

String.prototype.vslTrim = function ()
{	return this.replace(/^\s+|\s+$/g, '');
};

String.prototype.vslURLEncode = function ()
{	return escape(this).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27');
};

String.prototype.vslURLEncodeR = function ()
{	return escape(this).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace('-', '%2d');
};

String.prototype.vslURLEncodeR2 = function ()
{	return escape(this).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace('-', '%252d').replace('/', '%252f');
};

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

Number.prototype.vslAddSep = function (sSep)
{	
	var sNumber = new String(this);

	var aNumberPart = sNumber.split('.');
	var sNumberM = aNumberPart[0];
	var sNumberD = aNumberPart.length > 1 ? '.' + aNumberPart[1] : '';

	var regExp = /(\d+)(\d{3})/;

	while (regExp.test(sNumberM))
		sNumberM = sNumberM.replace(regExp, '$1' + sSep + '$2');

	return sNumberM + sNumberD;
};

