// String Extensions ----------------------------------------------------------

String.prototype.startsWith = function(pattern)
{
	return this.indexOf(pattern) === 0;
}

String.prototype.endsWith = function(pattern)
{
	var d = this.length - pattern.length;
	return d >= 0 && this.lastIndexOf(pattern) === d;
}

// Cookies --------------------------------------------------------------------

function SetCookie(cookieName, cookieValue) 
{
	var today = new Date();
	var expire = new Date();
	expire.setTime(today.getTime() + 3600000*24*3000);
	document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString();
}

function GetCookie(cookieName, defaultValue)
{
    var dc = document.cookie;
    var prefix = cookieName + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return defaultValue;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

if (!Array.prototype.indexOf)
{
	Array.prototype.indexOf = function(val, fromIndex) 
	{
		if (typeof(fromIndex) != 'number') fromIndex = 0;
		for (var index = fromIndex,len = this.length; index < len; index++)
			if (this[index] == val) return index;
		return -1;
	}
}

/* Client-side access to querystring name=value pairs
	Version 1.3
	28 May 2008
	
	License (Simplified BSD):
	http://adamv.com/dev/javascript/qslicense.txt
*/
function Querystring(qs)  // optionally pass a querystring to parse
{
	this.params = {};
	
	if (qs == null) qs = location.search.substring(1, location.search.length);
	if (qs.length == 0) return;

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&'); // parse out name/value pairs separated via &
	
// split out each name=value pair
	for (var i = 0; i < args.length; i++) {
		var pair = args[i].split('=');
		var name = decodeURIComponent(pair[0]);
		
		var value = (pair.length==2)
			? decodeURIComponent(pair[1])
			: name;
		
		this.params[name] = value;
	}
}

Querystring.prototype.get = function(key, default_) 
{
	var value = this.params[key];
	return value ? value : default_;
}

Querystring.prototype.contains = function(key) 
{
	var value = this.params[key];
	return (value != null);
}

// http://www.quirksmode.org/viewport/elementdimensions.html
function WindowClientHeight()
{
    var clientHeight = 0;
    if (self.innerHeight) // all except Explorer
        clientHeight = self.innerHeight;
    else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
	    clientHeight = document.documentElement.clientHeight;
    else if (document.body) // other Explorers
	     clientHeight = document.body.clientHeight;
    return clientHeight;	     
}

// http://www.quirksmode.org/js/findpos.html
function GetObjectX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function GetObjectY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function HoverImage(imgId) 
{
	var e = document.getElementById(imgId);
	
    if(e.src.indexOf('Hover.') == -1)
    {
        var i = e.src.lastIndexOf('.');
        e.src = e.src.substr(0, i) + 'Hover' + e.src.substr(i, e.src.length - i);
    }
    else
    {
        e.src = e.src.replace('Hover.', '.');
    }
}

// http://www.robertnyman.com
function GetElementsByClassName(oElm, strTagName, strClassName)
{
    var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++)
    {
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className))
        {
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

// http://www.robertnyman.com
function GetElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue)
{
    var arrElements = (strTagName == "*" && oElm.all) ? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var oAttributeValue = (typeof strAttributeValue != "undefined") ? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
    var oCurrent;
    var oAttribute;
    for(var i=0; i<arrElements.length; i++)
    {
        oCurrent = arrElements[i];
        oAttribute = oCurrent.getAttribute(strAttributeName);
        if(typeof oAttribute == "string" && oAttribute.length > 0)
        {
            if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute)))
            {
                arrReturnElements.push(oCurrent);
            }
        }
    }
    return arrReturnElements;
}

function Trace1(msg)
{
    // var traceTag = document.getElementById("trace");
    // traceTag.innerHTML = traceTag.innerHTML + "<p>" + strMessage + "</p>";
    if( typeof( jsTrace ) != 'undefined' )
        jsTrace.send( msg );
}

function CurrentTime()
{
    var d = new Date();
    return d.toLocaleDateString() + ": " + d.getMilliseconds();
}

function FormatCurrency(amount)
{
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}

var g_FormFieldDivCornerSettings =
{
	tl: { radius: 12 },
	tr: { radius: 12 },
	bl: { radius: 12 },
	br: { radius: 12 },
	antiAlias: true,
	autoPad: false
}

var g_InAutoPositionOnResize = false;
var g_EnableAutoHeight = false;
var g_viewportWidth = 0;
var g_viewportHeight = 0;

function AutoPositionDisable()
{
    g_InAutoPositionOnResize = true;
}

function AutoPositionAutoHeightEnable()
{
    // This can run real slow on IE when there are lot of controls...
    g_EnableAutoHeight = true;
}

function AutoPositionResetData()
{
    var menu = document.getElementById("menu");
    var main = document.getElementById("content");
    
    YAHOO.util.Dom.setStyle(menu, 'height', 'auto');
    YAHOO.util.Dom.setStyle(main, 'height', 'auto');
}

function AutoPositionOnResize()
{
    if(g_InAutoPositionOnResize)
        return;
    g_InAutoPositionOnResize = true;

    var menu = document.getElementById("menu");
    var main = document.getElementById("content");
    
    if (main.offsetHeight > menu.offsetHeight)
    {
        YAHOO.util.Dom.setStyle(menu, 'height', main.offsetHeight + 'px');
        if (menu.offsetHeight > main.offsetHeight)
			YAHOO.util.Dom.setStyle(menu, 'height', (main.offsetHeight - (menu.offsetHeight - main.offsetHeight)) + 'px');
	}
    else if (menu.offsetHeight > main.offsetHeight)
    {
        YAHOO.util.Dom.setStyle(main, 'height', menu.offsetHeight + 'px');
        if (main.offsetHeight > menu.offsetHeight)
			YAHOO.util.Dom.setStyle(main, 'height', (menu.offsetHeight - (main.offsetHeight - menu.offsetHeight)) + 'px');
    }
        
    g_InAutoPositionOnResize = false;
}    

