if(typeof(Array) != "undefined" && typeof(Array.prototype) != "undefined")
{
	if(typeof(Array.prototype.push) == "undefined")
	{
		Array.prototype.push = function(elem)
		{
			this[this.length] = elem;
		};
	}
	if(typeof(Array.prototype.pop) == "undefined")
	{
		Array.prototype.pop = function(elem)
		{
			this[this.length-1] = null;
		};
	}
	if(typeof(Array.prototype.contains) == "undefined")
	{
		Array.prototype.contains = function(elem)
		{
			var length = this.length;
			if(this.length == 0)
				return false;
			for(var i=0;i<length;i++)
			{
				if(this[i] == elem)
					return true;
			}
			return false;
		};
	}
	if(typeof(Array.prototype.remove) == "undefined")
	{
		Array.prototype.remove = function(elem)
		{
			var length = this.length;
			if(this.length == 0)
				return false;
			for(var i=0;i<length;i++)
			{
				if(this[i] == elem)
				{
					for(var j=i;j<length;j++)
					{
						this[j] = this[j+1];
					}
					this.length--;
					return true;
				}
			}
			return false;
		};
	}
	if(typeof(Array.prototype.indexOf) == "undefined")
	{
		Array.prototype.indexOf = function(elem)
		{
			var length = this.length;
			if(this.length == 0)
				return false;
			for(var i=0;i<length;i++)
			{
				if(this[i] == elem)
				{
					return i;
				}
			}
			return -1;
		};
	}
}
/*************************************************************/
function getParams()
{
    if(window.location.search.length<4)
        return null;
    var params = window.location.search.split("?");
	if(params.length != 2)
	    return null;
    params = params[1].split("&");
    if(params.length==0)
        return null;
    var args = new Array();
    for(var i=0;i<params.length;i++)
    {
        params[i] = params[i].split("=");
        if(params[i].length==2)
            args[params[i][0]] = params[i][1];
    }
    return args;
}
/*************************************************************/
function getFrameById(id)
{
    for(var i=0;i<window.frames.length;i++)
    {
        if(window.frames[i].frameElement && window.frames[i].frameElement.id == id)
            return window.frames[i];
    }
    return null;
}
/*************************************************************/
function getFrameElement(object)
{
    if(top.window == object)
        return top.window.document.body;
    for(var i=0;i<window.frames.length;i++)
    {
        if(object == window.frames[i])
            return window.frames[i].frameElement;
    }
    return null;
}
/*************************************************************/
function showElement(elemid, visible)
{
    var elem = document.getElementById(elemid);
    if(typeof(elem)!="undefined" && elem!=null)
    {
        if(visible)
            elem.style.display = "";
            else
            elem.style.display = "none";
    }
}
/*************************************************************/
function getElementDoc(elemid, optdoc)
{
    elem = null;
    if(typeof(optdoc)!="undefined" && optdoc!=null)
    {
        var elem = optdoc.getElementById(elemid);
        if(typeof(elem)=="undefined")
            elem = null;
    }
    return elem;
}
/*************************************************************/
function getElement(elemid)
{
    var elem = document.getElementById(elemid);
    if(typeof(elem)=="undefined")
        elem = null;
    return elem;
}
/*************************************************************/
function getElementValue(elemid)
{
	var elem = getElement(elemid);
	if(elem)
		return elem.value;
	return null;
}
/*************************************************************/
function getTarget(e)
{
	var targ = null;
	if(e.target) 
		targ = e.target;
	else if(e.srcElement) 
		targ = e.srcElement;
	if(targ && targ.nodeType == 3)
		targ = targ.parentNode;
	return targ;
}
/*************************************************************/
function getTopPosition(aEvent, _window)
{
    var e = getEvent(aEvent);
    var point = new Object();
    if(_window==top.window)
    {
        point.x = e.clientX;
        point.y = e.clientY;
    }
    else
    {
        if(typeof(top.window.screenLeft)!="undefined")
        {
            point.x = e.screenX - top.window.screenLeft;
            point.y = e.screenY - top.window.screenTop;
        }
        else
        {
            var elem = getElementDoc(_window.frameElement.id, top.window.document);
            if(elem)
            {
		        var CalculatedTotalOffsetLeft = CalculatedTotalOffsetTop = 0;
		        while(elem.offsetParent)
		        {
		            CalculatedTotalOffsetLeft += elem.offsetLeft;
		            CalculatedTotalOffsetTop += elem.offsetTop;
		            elem = elem.offsetParent;
		        }
                point.x = e.clientX + CalculatedTotalOffsetLeft;
                point.y = e.clientY + CalculatedTotalOffsetTop;
            }
            else
            {
                point.x = e.screenX - (top.window.screenX+(top.window.outerWidth-top.window.innerWidth));
                point.y = e.screenY - (top.window.screenY+(top.window.outerHeight-top.window.innerHeight));
            }
        }
    }
    return point;
}
/*************************************************************/
function getFramePosition(_window)
{
    var point = new Object();
    if(_window==top.window)
    {
        point.X = 0;
        point.Y = 0;
    }
    else
    {
        if(typeof(top.window.screenLeft)!="undefined")
        {
            point.X = top.window.screenLeft;
            point.Y = top.window.screenTop;
        }
        else
        {
            var elem = top.window.getFrameElement(_window);
            if(elem)
            {
                point = getPosition(elem);
            }
            else
            {
                point.X = (top.window.screenX+(top.window.outerWidth-top.window.innerWidth));
                point.Y = (top.window.screenY+(top.window.outerHeight-top.window.innerHeight));
            }
        }
    }
    return point;
}
/*************************************************************/
function getPosition(elem)
{
    var pos = new Object();
    pos.X = 0;
    pos.Y = 0;
    while(elem)
    {
        pos.X += elem.offsetLeft;
        pos.Y += elem.offsetTop;
        elem = elem.offsetParent;
    }
    return pos;
}
/*************************************************************/
function getOffset(aEvent, elem)
{
    var e = getEvent(aEvent);
	var posx = 0;
	var posy = 0;
//	if(typeof(e.offsetX)=='undefined')
	{
		var CalculatedTotalOffsetLeft = CalculatedTotalOffsetTop = 0;
		while(elem.offsetParent)
		{
			CalculatedTotalOffsetLeft += elem.offsetLeft;
  			CalculatedTotalOffsetTop += elem.offsetTop;
			elem = elem.offsetParent;
		}
		posx = e.clientX - CalculatedTotalOffsetLeft;
		posy = e.clientY - CalculatedTotalOffsetTop;
	}
/*	else
	{
		posx = e.offsetX;
		posy = e.offsetY;
	}*/
	return [posx, posy];
}
/*************************************************************/
function attachMyEvent(elem, eventName, eventMethodReference)
{
    if(elem==null)
        return;		
    if(typeof(elem.addEventListener)!="undefined")
    {
        var ret = elem.addEventListener(eventName, eventMethodReference, false);
        return true;        
    }
    else
    {
        return elem.attachEvent("on" + eventName, eventMethodReference);
    }
}
/*************************************************************/
function dettachMyEvent(elem, eventName, eventMethodReference)
{
    if(elem==null)
        return;
    if(typeof(elem.removeEventListener)!="undefined")
    {
        elem.removeEventListener(eventName, eventMethodReference, false);
    }
    else
    {
        elem.detachEvent("on" + eventName, eventMethodReference);
    }
}
/*************************************************************/
function getIEEvent(obj)
{
    var revent = null;
    if(obj==null)
        obj = top.window;
    if(obj.event)
        return obj.event;
    if(obj.frames && obj.frames.length)
    {
        for(var i=0;i<obj.frames.length;i++)
        {
            if((revent = getIEEvent(obj.frames[i]))!=null)
                return revent;
        }
    }
}
/*************************************************************/
function getEvent(aEvent)
{
    return aEvent ? aEvent : getIEEvent(null);
}
/*************************************************************/
function cancelEvent(aEvent)
{
    var e = getEvent(aEvent);
	if(e==null || typeof(e)=='undefined')
		if(typeof(document.createEventObject)!='undefined')
			e = document.createEventObject();
    e.returnValue = false;
	e.cancelBubble = true;
	if(typeof(e.stopPropagation)!='undefined')
		e.stopPropagation();
	if(typeof(e.preventDefault)!='undefined')
		e.preventDefault();
    if(window.document.body.onclick)
        window.document.body.onclick();
	return false;
}
/*************************************************************/
function cancelSelectEvent(aEvent)
{
    var e = getEvent(aEvent);
	var targ;
	if (e.target) 
		targ = e.target;
		else 
		if (e.srcElement) 
	targ = e.srcElement;
	if (targ.nodeType == 3) 
		targ = targ.parentNode;
	if(targ.tagName=="INPUT" || targ.tagName=="TEXTAREA")
		return;
	cancelEvent(e);
}
/*************************************************************/
function getCtrBtn(e)
{
    if (document.all || document.getElementById) 
    {
        return e.ctrlKey ? true : false;
    }
    else if (document.layers) 
    {
        return e.modifiers & Event.CONTROL_MASK ? true : false;
    }
    return false;
}
/*************************************************************/
function getAltBtn(e)
{
    if (document.all || document.getElementById) 
    {
        return e.altKey ? true : false;
    }
    else if (document.layers) 
    {
        return e.modifiers & Event.ALT_MASK ? true : false;
    }
    return false;
}
/*************************************************************/
function getShiftBtn(e)
{
    if (document.all || document.getElementById) 
    {
        return e.shiftKey ? true : false;
    }
    else if (document.layers) 
    {
        return e.modifiers & Event.SHIFT_MASK ? true : false;
    }
    return false;
}
/*************************************************************/
function getKeyCode(e)
{
    if(typeof(e.keyCode)!="undefined")
        return e.keyCode;
    else if(typeof(e.which)!="undefined")
        return e.which;
    else if(typeof(e.charCode)!="undefined")
        return e.charCode;
    return 0;
}
/*************************************************************/
function getMouseLButton(e)
{
    var btn = 0;
	if (e.which)
	{
		switch (e.button)
		{
		    case 0: 
		        btn = 1; 
		        break;
		    case 2: 
		        btn = 2;
		        break;
		     case 1: 
		        btn = 4;
		        break;
		 }
    }
	else 
	{
	    btn = e.button;
	}
	return (btn&1);
}
/*************************************************************/
function changeUrlParam(queryString, name, value)
{
    if(queryString.length<=1)
    {
        queryString = name + "=" + value;
    }
    else
    {
        var found = false;
        var arr = queryString.split("&");
		var narr = new Array();
        for(var i=0;i<arr.length;i++)
        {
            if(arr[i].length)
            {
                var parr = arr[i].split("=");
                if(parr.length==2 && parr[0] == name)
                {
                    arr[i] = name + "=" + value;
                    found = true;
					if(value.length > 0)
						narr[narr.length] = arr[i];
                }
				else
				{
					narr[narr.length] = arr[i];
				}
            }
        }
        if(!found)
        {
			if(value.length > 0)
	            narr[narr.length] = name + "=" + value;
        }
        queryString = narr.join("&");
    }
	return queryString;	
}
/*************************************************************/
function replaceUrlParam(name, value)
{
    var queryString = document.location.search;
	queryString = changeUrlParam(queryString.substr(1, queryString.length-1));
    document.location.replace(document.location.pathname + "?" + queryString);
}
/*************************************************************/
function checkEmail(emailaddress)
{
	if(emailaddress.length == 0)
	{
		return false;
	}
	else
	{
		var l_email = emailaddress;
		if(l_email.length<5)
		{
			return false;
		}
		var em1 = l_email.indexOf("@");
		if(em1 == -1)
		{
			return false;
		}
		l_email = l_email.substr(em1,l_email.length - em1);
		if(l_email.indexOf(".") == -1)
		{
			return false;
		}
	}
	return true;
}
/*************************************************************/
function ndigits(n, d) 
{ 
	var ret = n.toString();
	while( ret.length < d)
  		ret = '0'+ret;
	return ret;
}
/*************************************************************/
function ndigits2(n, d) 
{
	var pow = Math.pow(10, d);
	n = Math.round(n*pow)/pow;

	var ret = n.toString();
	var count = ret.indexOf(".");
	if(count == -1)
	{
		ret = ret + ".";
		count = 0;
	}
	else
	{
		count = ret.length - count - 1;
	}
	if(count > d)
	{
	}
	else
	{
		while( count < d)
		{
  			ret += "0";
			count++;
		}
	}
	return ret;
}
/*************************************************************/
function redirect(url)
{
	document.location.href = url;
}
/*************************************************************/
function ParseInt(str)
{
    if(typeof(str) == "number")
        return str;
    var ret = 0;
    if(str && str.length>0)
    {
        str = str.replace(/^0*/g, "");
        ret = parseInt(str);
    }
    if(isNaN(ret))
        ret = 0;
    
    return ret;
}
/*************************************************************/
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
	var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
	var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
	versionStr = checkFlash();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
//			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
			if(typeof(versionStr) == "string")
				versionArray      = versionStr.split(",");
				else
				versionArray = [versionStr];
		} 
		else 
		{
			if(typeof(versionStr) == "string")
				versionArray      = versionStr.split(".");
				else
				versionArray = [versionStr,0,0];
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];

        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}
function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

function checkFlash()
{
	var version = -1;
	if (navigator.plugins != null && navigator.plugins.length > 0 && (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"])) 
		version = 2;
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) 
		version = 4;
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) 
		version = 3;
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1)
		version = 2;
	else 
		version = ControlVersion();
	return version;
}

function getUTCTimeOffset(utcTimestamp)
{
	var date = new Date(utcTimestamp * 1000);
	var seconds = utcTimestamp%60;
	utcTimestamp -= seconds;utcTimestamp /= 60;
	var minutes = utcTimestamp%60;
	utcTimestamp -= minutes;utcTimestamp /= 60;
	var hours = utcTimestamp%24;
	var utchours = date.getUTCHours();
	return (hours - utchours)*60*60;
}

function getTimestamp(gmtTimeString)
{
	if(typeof(gmtTimeString) == "undefined")
	{
		var date = new Date();
		return (Math.floor(date.getTime()/1000) - timeOffset*60);
	}
	valueArr = gmtTimeString.split(" ");
	if(valueArr.length == 1)
	{
		value = valueArr[0].split("-");
		if(value.length>2)
		{
			var time = Date.UTC(parseInt(value[0], 10), parseInt(value[1], 10)-1, parseInt(value[2], 10));	
			return Math.floor(time/1000);
		}
		return 0;
	}
	else if(valueArr.length == 2)
	{
		valueArr[0] = valueArr[0].split("-");
		valueArr[1] = valueArr[1].split(":");
		var time = Date.UTC(parseInt(valueArr[0][0], 10), parseInt(valueArr[0][1], 10)-1, parseInt(valueArr[0][2], 10), parseInt(valueArr[1][0], 10), parseInt(valueArr[1][1], 10));
		return Math.floor(time/1000);
	}
	return 0;
}


function getUTCTimestamp(gmtTimeString)
{
	if(typeof(gmtTimeString) == "undefined")
	{
		var date = new Date();
		return (Math.floor(date.getTime()/1000) - timeOffset*60);
	}
	valueArr = gmtTimeString.split(" ");
	if(valueArr.length == 1)
	{
		value = valueArr[0].split("-");
		if(value.length>2)
		{
			var time = Date.UTC(parseInt(value[0], 10), parseInt(value[1], 10)-1, parseInt(value[2], 10));	
			return Math.floor(time/1000);//(time - 60*60*1000)/1000;
		}
		return 0;
	}
	else if(valueArr.length == 2)
	{
		valueArr[0] = valueArr[0].split("-");
		valueArr[1] = valueArr[1].split(":");
		var time = Date.UTC(parseInt(valueArr[0][0], 10), parseInt(valueArr[0][1], 10)-1, parseInt(valueArr[0][2], 10), parseInt(valueArr[1][0], 10), parseInt(valueArr[1][1], 10));
		return Math.floor(time/1000);//(time - 60*60*1000)/1000;
	}
	return 0;
}

function getGMTDate(utcTimestamp)
{
	if(utcTimestamp > 0)
	{
		var date = new Date((utcTimestamp + getUTCTimeOffset(utcTimestamp)) * 1000);
		return ndigits(date.getUTCFullYear(),4) + "-" + ndigits(date.getUTCMonth()+1,2) + "-" + ndigits(date.getUTCDate(),2);
	}
	return "";
}

function getGMTDateTime(utcTimestamp)
{
	if(utcTimestamp > 0)
	{
		var date = new Date((utcTimestamp + getUTCTimeOffset(utcTimestamp)) * 1000);
		return ndigits(date.getUTCFullYear(),4) + "-" + ndigits(date.getUTCMonth()+1,2) + "-" + ndigits(date.getUTCDate(),2) + " " + ndigits(date.getUTCHours(),2) + ":" + ndigits(date.getUTCMinutes(),2);
	}
	return "";
}

function getCurrencyPercentageFormData(val)
{
	if(val.indexOf("%")>0)
		val = -parseFloat(val);
		else
		val = parseFloat(val);
	return val;
}

function getCurrencyPercentageDataForm(val)
{
	if(val > 0)
		return ndigits2(val, 2) + "GBP";
	return ndigits2(-val, 2) + "%";
}




