var debugMode = false ;

//dates for cookies
var m_today = new Date();
var m_expiry = new Date(m_today.getTime() + 28 * 24 * 60 * 60 * 1000); // plus 28 days

//browser detection
var m_bd = new BrowserDetector(navigator.userAgent);
var m_ns = (m_bd.browser == "Netscape")? true:false;
var m_ns4 = (document.layers)? true:false;
var m_ns6 = (m_ns && !m_ns4)? true:false;
var m_ie = (m_bd.browser == "IE")? true:false;
var m_ie4 = false;
var m_ie5 = (m_bd.browser == "IE" && m_bd.majorver == 5)? true:false;
var m_ie55 = (m_bd.browser == "IE" && m_bd.majorver == 5 && m_bd.minorver == 5)? true:false;
var m_ie6 = (m_bd.browser == "IE" && m_bd.majorver == 6)? true:false;
if (m_ie && !m_ie5 && !m_ie6) {
	m_ie4 = (document.all)? true:false;
}

//*******************************************************
// Browser Sniffer
//	Usage: var bd = new BrowserDetector(navigator.userAgent);
//*******************************************************

function BrowserDetector(ua) {

// Defaults
	this.browser = "Unknown";
	this.platform = "Unknown";
	this.version = "";
	this.majorver = "";
	this.minorver = "";

	uaLen = ua.length;

// ##### Split into stuff before parens and stuff in parens
	var preparens = "";
	var parenthesized = "";

	i = ua.indexOf("(");
	if (i >= 0) {
		preparens = Trim(ua.substring(0,i));
		parenthesized = ua.substring(i+1, uaLen);
		j = parenthesized.indexOf(")");
		if (j >= 0) {
			parenthesized = parenthesized.substring(0, j);
		}
	}
	else {
		preparens = ua;
	}

// ##### First assume browser and version are in preparens
// ##### override later if we find them in the parenthesized stuff
	var browVer = preparens;

	var tokens = parenthesized.split(";");
	var token = "";
// # Now go through parenthesized tokens
	for (var i=0; i < tokens.length; i++) {
		token = Trim(tokens[i]);
        //## compatible - might want to reset from Netscape
        if (token == "compatible") {
			//## One might want to reset browVer to a null string
			//## here, but instead, we'll assume that if we don't
			//## find out otherwise, then it really is Mozilla
			//## (or whatever showed up before the parens).
			//## browser - try for Opera or IE
		} else if (token.indexOf("MSIE") >= 0) {
			browVer = token;
		} else if (token.indexOf("Opera") >= 0) {
			browVer = token;
		}
		//'## platform - try for X11, SunOS, Win, Mac, PPC
		else if ((token.indexOf("X11") >= 0) || (token.indexOf("SunOS") >= 0) ||
				(token.indexOf("Linux") >= 0)) {
			this.platform = "Unix";
		} else if (token.indexOf("Win") >= 0) {
			this.platform = token;
		} else if ((token.indexOf("Mac") >= 0) || (token.indexOf("PPC") >= 0)) {
			this.platform = token;
		}
	}

	var msieIndex = browVer.indexOf("MSIE");
	if (msieIndex >= 0) {
		browVer = browVer.substring(msieIndex, browVer.length);
	}

	var leftover = "";
	if (browVer.substring(0, "Mozilla".length) == "Mozilla") {
		this.browser = "Netscape";
        leftover = browVer.substring("Mozilla".length+1, browVer.length);
	} else if (browVer.substring(0, "Lynx".length) == "Lynx") {
		this.browser = "Lynx";
        leftover = browVer.substring("Lynx".length+1, browVer.length);
	} else if (browVer.substring(0, "MSIE".length) == "MSIE") {
		this.browser = "IE";
		leftover = browVer.substring("MSIE".length+1, browVer.length);
	} else if (browVer.substring(0, "Microsoft Internet Explorer".length) == "Microsoft Internet Explorer") {
		this.browser = "IE"
        leftover = browVer.substring("Microsoft Internet Explorer".length+1,browVer.length);
	} else if (browVer.substring(0, "Opera".length) == "Opera") {
		this.browser = "Opera"
		leftover = browVer.substring("Opera".length+1, browVer.length);
	}

	leftover = Trim(leftover);

	// # Try to get version info out of leftover stuff
	i = leftover.indexOf(" ");
	if (i >= 0) {
		this.version = leftover.substring(0, i);
	} else {
		this.version = leftover;
	}
	j = this.version.indexOf(".");
	if (j >= 0) {
		this.majorver = this.version.substring(0,j);
		this.minorver = this.version.substring(j+1, this.version.length);
	} else {
		this.majorver = this.version;
	}
} // function BrowserCap

// Utility function to trim spaces from both ends of a string
function Trim(inString) {
  var retVal = "";
  var start = 0;
  while ((start < inString.length) && (inString.charAt(start) == ' ')) {
    ++start;
  }
  var end = inString.length;
  while ((end > 0) && (inString.charAt(end - 1) == ' ')) {
    --end;
  }
  retVal = inString.substring(start, end);
  return retVal;
}

function getElement(elementId, parentLayer)
{
	var el ;
	//DEBUG
	//alert(elementId);
	
	if (m_ie4) {	
		el = document.all[elementId] ;
	} else if (m_ns4) {		
		if (parentLayer == null) {
			el = document.layers[elementId] ;
		} else {			
			//Nested Layer			
			el = document.layers[parentLayer].document.layers[elementId] ;
		}			
	} else {
		el = document.getElementById(elementId);
	}
	//DEBUG
	//alert(el.id);

	return el ;		
}

function getFormElement(elementId, formId) {
    var el ;
    
    if (m_ns4) {
		el = document.forms[formId].elements[elementId];
    } else if (m_ie4) {
		el = document.all[elementId];
    } else {
		el = document.getElementById(elementId);
	}
    return el;
}

function getSelectValue(selectEl) {
    var retVal = '';
    if (m_ns4) {
        retVal = selectEl.options[selectEl.selectedIndex].value;
    } else {
        retVal = selectEl.value;
    }
    return retVal;
}

function getTopPosition(el)
{
	var topPos = 0;
	var parent = el.offsetParent;
	
	topPos += el.offsetTop;
	
	var topTagName;
	if (m_ie6) {
		topTagName = "HTML";
	} else {
		topTagName = "BODY";
	}
		
	while(topTagName != parent.tagName)
	{
		topPos += parent.offsetTop;
		parent = parent.offsetParent;				
	}

	//no clientTop property in Netscum?
	if (m_ie) {
		topPos += parent.clientTop;
	}

	return topPos;
}

function getLeftPosition(el)
{
	var leftPos = 0;
	var parent = el.offsetParent;

	leftPos += el.offsetLeft;
	
	var topTagName;
	if (m_ie6) {
		topTagName = "HTML";
	} else {
		topTagName = "BODY";
	}

	while(topTagName != parent.tagName)
	{
		leftPos += parent.offsetLeft;
		parent = parent.offsetParent;				
	}
	
	//no clientLeft property in Netscum?
	if (m_ie) {
		leftPos += parent.clientLeft;
	}
	return leftPos;
}

//Like getTopPosition, but doesn't include clientTop
function absoluteTop(el, offsetTop)
{
	var offParent = el.offsetParent;
			
	if (offParent.tagName == 'BODY') {
		return el.offsetTop + offsetTop;
	} else {
		return absoluteTop(offParent, (offsetTop + el.offsetTop));
	}
}

//Like getLeftPosition, but doesn't include clientLeft
function absoluteLeft(el, offsetLeft)
{
	var offParent = el.offsetParent;
				
	if (offParent.tagName == 'BODY') {
		return el.offsetLeft + offsetLeft;
	} else {
		return absoluteLeft(offParent, (offsetLeft + el.offsetLeft));
	}
}
    
function stripCharacter(stringValue, charValue)
{
	var retVal ;
	var beginIndex = 0 ;
	var endIndex ;
	
	retVal = "" ;
	
	endIndex = stringValue.indexOf(charValue, beginIndex) ;	
	
	while(endIndex != -1)
	{
		retVal += stringValue.substring(beginIndex, endIndex) ;
		beginIndex = endIndex + 1 ;		
		endIndex = stringValue.indexOf(charValue, beginIndex) ;		
	}
	
	if(beginIndex < stringValue.length)
	{
		retVal += stringValue.substring(beginIndex, stringValue.length) ;
	}	
	
	return retVal ;
}

function limitString(stringValue, charLimit)
{
	var retVal ;	
	
	retVal = "" ;
	
	if (stringValue.length > charLimit)
	{
		retVal = stringValue.substring(0, charLimit - 3) + "..." ;
	}
	else
	{
		retVal = stringValue ;
	}		
	
	return retVal ;
}

function setText(elementID, text, bUseDefault)
{
	var el ;
	
	if (m_ie)
	{
		if (bUseDefault == true)
		{		
			elementID += 1 ;
		}		
		el = getElement(elementID) ;		
		el.innerHTML = text ;
		el.style.visibility = 'visible' ;
	}
	else if (m_ns4)
	{
		if (text == "")
		{
			text = "&nbsp;"
		}
		
		if (bUseDefault == true)
		{
			el = getElement(elementID + "1") ;
			el.document.open() ;
			el.document.write("&nbsp;") ;
			el.document.close() ;
		
			elementID += 2 ;
		}		
		el = getElement(elementID) ;
		el.document.open() ;
		el.document.write(text) ;
		el.document.close() ;
		el.visibility = 'show' ;	
	}
	
	return null ;	
}

function showElement(el) {
	if (m_ie) {
		el.style.visibility = "visible";
	} else if (m_ns4) {
		el.visibility = "show";	
	} else if (m_ns6) {
		el.style.visibility = "visible";
	}
}

function hideElement(el) {
    if (m_ns4) {
        el.visibility = 'hide';
    } else if (m_ie) {
        el.style.visibility = 'hidden';
    }
}

function positionElement(el, posEl, fudgeTop, fudgeLeft) {
    // default fudge factors to 0
    if (fudgeTop == null) {
        fudgeTop = 0;
    }
    if (fudgeLeft == null) {
        fudgeLeft = 0;
    }
    // move it
    if (m_ns4) {
        el.top = posEl.top + fudgeTop;
        el.left = posEl.left + fudgeLeft;
    } else {
        el.style.top = (getTopPosition(posEl) + fudgeTop + "px");
        el.style.left = (getLeftPosition(posEl) + fudgeLeft + "px");
    } 
}

function positionElementAbsolute(el, top, left) {
    // move it
    if (m_ns4) {
        el.top = top;
        el.left = left;
    } else {
        el.style.top = top + "px";
        el.style.left = left + "px";
    }
}


//*******************************************************
// Cookie Functions
//*******************************************************
function getCookie(name)  
{
  var re = new RegExp(name + "=([^;]+)");
  var value = re.exec(document.cookie);
  return (value != null) ? unescape(value[1]) : null;
}

function setCookie(name, value, expires, path, domain, secure)
{
	var argv = setCookie.arguments;
	var argc = setCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;	
	var cookieVal = name + "=" + value +
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
	((path == null) ? "" : ("; path=" + path)) +
	((domain == null) ? "" : ("; domain=" + domain)) +
	((secure == true) ? "; secure" : "");	
	
	document.cookie = cookieVal ;
}
