var allowMsgs = new Array()
allowMsgs[allowMsgs.length] = "Please allow the application to finish loading... Thank you!"
allowMsgs[allowMsgs.length] = "Please allow the application to finish loading... Thank you!"
allowMsgs[allowMsgs.length] = "Please allow the application to finish loading... Thank you!"
var msgNum = 0;

var ie = document.all?true:false;
var dom = (document.getElementsByTagName) ? true : false;

function getObject(e) {
	return obj = e.target ? e.target : e.srcElement
}
function bi(name)
{
	return document.getElementById(name)
}
function gv(name)
{
	return document.getElementById(name).value;
}
function getFrameForCall(frame)
{
	var element = bi(frame)
	if(element.contentWindow)
	{
		element = element.contentWindow
	}
	return element
}
function ce(id)
{
	return document.createElement(id)
}
//-- xml node getters

function btn(obj, id) // -- used in conjuction w function sNode
{
	return obj.getElementsByTagName(id)
}
function getEZM(oXml)
{
	return btn(oXml,"EZMessage")
}
function sNode(obj)
{
	if(obj[0])
		return obj[0].firstChild.data
	else
		return obj.firstChild.data
}

//-- end xml node getters

function submitXML(oReq,path,f) // -- used to target frame with xml src
{
	try
	{
		if(bi(f))
		{
			var current = new Date()
			var newTime = current.getTime()
			bi(f).setAttribute("startTime", newTime)
		}
		bi("r").value = oReq
		if(path)
			bi("p").value = path
		else
			bi("p").value = null
		bi("mainForm").setAttribute("target", f)
		bi("mainForm").setAttribute("action","/m")
		if(bi(f))
		{
			if(ie && document.frames[f].name != f)
			{
				 /* *** IMPORTANT: This is a BUG FIX for Internet Explorer *** */ 
				 document.frames[f].name = f; 
			}
			bi("mainForm").submit();
		}
		else
		{
			window.status = "No frame found..."
			bi("mainForm").submit();
		}
	}
	catch(e)
	{
		window.status = "Failed to process submitXML. Trying again ..."
		setTimeout(function () {submitXML(oReq,path,f)}, 250);	
	}
}
function checkFrameForEmpty(f)
{
	try
	{
		return (getFrameForCall(f).document.body.id == "body_loading")?false:true;
	}
	catch(e)
	{
		return false;
	}
}
function inView(n)
{
	return (top.bi(n).style.display == "none")?false:true;
}
function writeToLeft(txt)
{
	if(bi("barTextLeft")) bi("barTextLeft").innerHTML  = txt
}
function writeToRight(txt)
{
	if(bi("barTextRight")) bi("barTextRight").innerHTML  = txt
}
function setPUcoords(obj)
{
	obj.style.top = top.cy + "px"
	obj.style.left = top.cx + "px"
	top.checkWinPosition(obj)
}
function checkWinPosition(obj)
{
	var cW = top.bi("mainDiv").offsetWidth;
	var cH = top.bi("mainDiv").offsetHeight;
	var objW = obj.offsetWidth
	var objH = obj.offsetHeight
	var objX = obj.offsetLeft
	var objY = obj.offsetTop
	if((objX + objW) > cW)
	{
		obj.style.left = (cW - 10 - objW) + "px"
	}
	if((objY + objH) > cH)
	{
		obj.style.top = (cH - 10 - objH) + "px"
	}
}
function toggleExternalPop(link)
{
	top.lastExternalLink = link
	top.getGFlyover("warningExternal");
}
function goExternal()
{
	top.hideExternalLink()
	window.open("http://" + top.lastExternalLink, "", "");
}
function setDelayedDis(t)
{
	bi("delayText").innerHTML = (t)?t:"";
}
// ----------------------------------- perferences
function prefSave(pref, val, fn)
{
	var requestObj = new Object()
	requestObj.pref = pref
	requestObj.value = val
	var oReq = top.requestEnv("preferences.save", requestObj);
	top.getXML(oReq, fn)
}
function prefLoad(pref, fn)
{
	if(pref)
	{
		var requestObj = new Object()
		requestObj.name = pref
		var oReq = top.requestEnv("preferences.load", requestObj)
	}
	else
		var oReq = top.requestEnv("preferences.load");
	top.getXML(oReq, fn)
}

// ----------------------------------- perferences
// ----------------------------------- accept options warning
function acceptOptionsWarning()
{
	if(bi('haveRead').checked)
	{
		var requestObj = new Object();
		requestObj.curTime = getDate() + ': ' + getTime();	
		requestObj.disclaimerType = "optionsWarning";
		var oReq = top.requestEnv('account.disclaimer', requestObj);		
		top.getXML(oReq, top.routing_sendAcceptance);
	}
	else
	{
		sendAcceptance();
	}
}
function sendAcceptance(oXml)
{
	top.foGroup["4"].style.display='none'
}
function acceptToolsWarning()
{
	if(bi("toolsRead1").checked && bi("toolsRead2").checked)
	{
		bi("firstToolsAlert").style.display="none"
		var requestObj = new Object();
		requestObj.curTime = getDate() + ": " + getTime();	
		requestObj.disclaimerType = "toolsWarning";
		var oReq = top.requestEnv("account.disclaimer", requestObj);		
		top.getXML(oReq, top.routing_sendWarning)
	}
	else
	{
		bi("agreementMsg").style.display="";
	}
}
function sendWarning(oXml)
{
	
}
function acceptRFQWarning()
{
	var requestObj = new Object();
	requestObj.curTime = getDate() + ': ' + getTime();	
	requestObj.disclaimerType = "rfqWarning";
	var oReq = top.requestEnv("account.disclaimer", requestObj);		
	top.getXML(oReq, top.routing_sendRFQAcceptance)
}
function sendRFQAcceptance(oXml)
{
	top.bi("rfqWarning").value = "true"
}
function setRFQDescription(oXml)
{
	var oSave = btn(oXml, "saved")
	if(oSave.length > 0)
	{
		if(sNode(oSave[0]) == "true")
			top.bi("RFQdescription").value = top.bi("RFQdescriptionCurrentVersion").value;
	}
}
function setQuickstartinit(oXml)
{
	var oSave = btn(oXml, "saved")
	if(oSave.length > 0)
	{
		if(sNode(oSave[0]) == "true")
			top.quickstartinit = top.gv("quickstartinitVersion");
	}
}
// ----------------------------------- accept options warning
// ------------------------------------ path functions (get url)
function setPath(path)
{
	top.pathName = "/" + path.substring(0, (path.length - 1)) + "/"
//	top.pathName = "/tool/dev_v3/"
}
function getFullPath()
{
	return ""
	var a = window.location.href.split("//"); 
	a = (a[1] ? a[1] : a[0]).split("/");
	return "http://" + a[0]
}
function getFullM()
{
	var a = window.location.href.split("//"); 
	a = (a[1] ? a[1] : a[0]).split("/"); 
	return "http://" + a[0] + "/m";
}
function makePath()
{
	return (getFullPath() + top.pathName)
}

function getURLParam(strParamName)
{
	var strReturn = "";
	var strHref = window.location.href;
	if ( strHref.indexOf("?") > -1 )
	{
		var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
		var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ )
		{
			if ( aQueryString[iParam].indexOf(strParamName.toLowerCase() + "=") > -1 )
			{
				var aParam = aQueryString[iParam].split("=");
				strReturn = aParam[1];
				break;
			}
		}
	}
	return unescape(strReturn);
}

// ------------------------------------ path functions (get url)
// ------------------------------------ format functions
String.prototype.reverse=function()
{
	return this.split('').reverse().join('')
}
function d2h(d)
{
	return oNum = (Number(d).toString(16).length == '1')?"0" + Number(d).toString(16):Number(d).toString(16)
}
function n(d)
{ 
	return d.match(/(\-|\d|\.)/gi).join(''); 
}
function convNumber(num)
{
	var newVal;
	if (parseFloat(num)>0){
		if (parseFloat(num) > 1000000000)
		{
			newVal = (parseFloat(num)/1000000000).toFixed(2) + 'B'
		}
		else if (parseFloat(num) > 1000000)
		{
			newVal = (parseFloat(num)/1000000).toFixed(2) + 'M'
		}
		else
		{
			newVal = parseFloat(num);
		}
		return newVal;
	}
}
function getDollarAmount(x)
{
	if(x < 0)
	{
		var str=(Math.abs(x)-1+1.005).toString();
		return "-" + str.substring(0,str.indexOf('.')+3);
	}
	else
	{
		var str=(x-1+1.005).toString();
		return str.substring(0,str.indexOf('.')+3);
	}
	
}
function number(d)
{ 
	return d.match(/(\-|\d|\.)/gi).join(''); 
}
function dollar(n)
{
	var s=(n+'.00').split('.');
	s[0]=((s[0]+'').reverse().match(/\d{1,3}\-?/gi)+'').reverse(); //greedy RegExp gathers groups of 3 digits
	s[1]=(s[1]+'00').slice(0,2);
	return("$"+s[0]+'.'+s[1]);
}
function dollarplain(n)
{
	n=((n+'').reverse().match(/\d{1,3}\-?/gi)+'').reverse(); //greedy RegExp gathers groups of 3 digits
	return n;
}
function replaceSpecials(value)
{
	return value.replace(/[&]/g,'&amp;').replace(/[<]/g,'&lt;').replace(/[>]/g,'&gt;')
}
function cleanNonAlphaComma(e)
{
	var obj = getObject(e)
	obj.value = stripNonAlphaComma(obj.value);
}
function stripNonAlphaComma(val)
{
	return val.replace(/[^a-zA-Z,]/g,'');
}
function stripNonAlpha(val)
{
	return val.replace(/[^a-zA-Z]/g,'');
}
function stripNonAlphaNumber(val)
{
	return val.replace(/[^a-zA-Z0-9\.]+/g, '')
}
function cleanNonNumberComma(e)
{
	var obj = getObject(e)
	obj.value = stripNonNumberComma(obj.value);
}
function stripNonNumberComma(val)
{
	return val.replace(/[^0-9,]/g,'');
}
function stripNonAlphaMinusPeriod(value) {
	return value.replace(/[^a-zA-Z.]/g,'');
}
// ------------------------------------ format functions
// ------------------------------------ currentDate
function doDate()
{
	var today = getDate()
	var mydate= new Date()
	var dayofweek=mydate.getDay()
	var dayArray = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat")
	return (dayArray[dayofweek] + ", " + today)
}
function getDate()
{
	var cur = new Date();
	fixDate(cur);
	var str = getString(cur);
	return str;
}
function makeArray()
{
	var args = makeArray.arguments;
	for (var i = 0; i < args.length; i++)
	{
		this[i] = args[i];
	}
	this.length = args.length;
}
function fixDate(date) 
{
	var base = new Date(0);
	var skew = base.getTime();
	if (skew > 0)
		date.setTime(date.getTime() - skew);
}
function getString(date)
{
	var months = new makeArray("January", "February", "March","April","May","June","July","August","September","October", "November", "December");
  	return months[date.getMonth()] + " " + date.getDate() + ", " + (date.getFullYear());
}
function getTime()
{
	var now = new Date();
	var hours = now.getHours();
	var minutes = now.getMinutes();
	var seconds = now.getSeconds()
	var timeValue = "" + ((hours >12) ? hours -12 :hours)
	if (timeValue == "0") timeValue = 12;
	timeValue += ((minutes < 10) ? ":0" : ":") + minutes
	timeValue += ((seconds < 10) ? ":0" : ":") + seconds
	timeValue += (hours >= 12) ? " PM" : " AM"
	
	return timeValue;
}
// ------------------------------------ currentDate
// ------------------------------------ set tab images
function mover(e)
{
	try
	{
		var obj = getObject(e)
		while(obj.className != "off")
		{
			obj = obj.parentNode
		}
		if(obj)
			obj.className = "over"
	}catch(e){}
}
function mout(e)
{
	try
	{
		var obj = getObject(e)
		while(obj.className != "over")
		{
			obj = obj.parentNode
		}
		if(obj)
			obj.className = "off"
	}catch(e){}
}
function setTopTabs(n, fn, checkhide)
{
	var obj = bi(n)
	if(checkhide) {var objhold = obj.parentNode.className;}
	while(obj.className != "noclass")
	{
		obj = obj.parentNode
	}
	for(var x = 0; x < obj.childNodes.length; x++)
	{
		obj.childNodes[x].className = "off"
	}
	var obj = (bi(n).parentNode.parentNode.className == "noclass")?bi(n).parentNode:bi(n).parentNode.parentNode;
	if(checkhide)
	{
		obj.className = (objhold != "on")?"on":"off";
		var cvalue = (objhold != "on")?true:false;
	}
	else
	{
		obj.className = "on"
	}
	if(fn)
	{
		fn(n)
	}
	if(checkhide)
	{
		return cvalue;
	}
}
function setTopTabBackMove(n)
{
	var obj = bi(n)
	while(obj.className != "sprite_top_tabs_green_white")
	{
		obj = obj.parentNode
	}
	obj.style.backgroundPosition = "1px -78px"
}
function setTopTabBackDefault(n)
{
	var obj = bi(n)
	while(obj.className != "sprite_top_tabs_green_white")
	{
		obj = obj.parentNode
	}
	obj.style.backgroundPosition = "0px -78px"
}
// ------------------------------------ set tab images
// ------------------------------------ common frame functions
function getKey(e)
{
	var obj = getObject(e)
	if(obj.nodeName.toLowerCase() == "input" || obj.nodeName.toLowerCase() == "textarea")
	{
	
	}
	else
	{
		if(e.keyCode == 8)
		{
			if(ie)
			{
				window.event.cancelBubble = true;
			       window.event.returnValue = false;
			       return false;
			 }
			 else
			 {
				e.preventDefault();
				e.stopPropagation();
			}
		}
	}
}
function getContextMenu(e)
{
	return true;
}
function getSelectStart(e)
{
	var obj = getObject(e)
	if(obj.tagName.toLowerCase() != "input" && obj.tagName.toLowerCase() != "textarea")
	{
		return false;
	}
	else
	{
		return true;
	}
}
function docClick(e)
{
	try
	{
		var obj = getObject(e);
		top.cx = getMouseX(e);
		top.cy = getMouseY(e);	
		var body = document.getElementsByTagName("body");
		if(parent.document && body[0].id != "mainBody")
		{
			parent.setIframeOffsets(body[0].getAttribute("thisFrame"));
		}
	}
	catch(e){}
}
function setIframeOffsets(name)
{
	var obj = bi(name)
	while (obj)
	{
		top.cx += obj.offsetLeft;
		top.cy += obj.offsetTop;
		obj= obj.offsetParent;
	}
	var body = document.getElementsByTagName("body")
	if(parent.document && body[0].id != "mainBody")
	{
		parent.setIframeOffsets(body[0].getAttribute("thisFrame"))
	}
//	window.status = top.cx +":"+ top.cy
}
function getMouseX(event)
{
	return (ie)?(event.clientX + document.body.scrollLeft):event.pageX;
}
function getMouseY(event)
{
	return (ie)?(event.clientY + document.body.scrollTop):event.pageY;
}
function hideTabCover(n)
{
	if(bi("tabCover_" + n))
		bi("tabCover_" + n).style.display = "none"
}
function updateProIcons()
{
	if(bi("icon_pro"))
		bi("icon_pro").className = (top.promode == false)?"icon_pro_white":"icon_basic_white";
}
// ------------------------------------ common frame functions
// ---------------------------- table sorting

if (ie || dom)
	initSortTable();

function initSortTable() {
//  	arrowUp = document.createElement("SPAN");
//	var tn = document.createTextNode("5");
//  	arrowUp.appendChild(tn);
//	arrowUp.className = "arrowUp";

//  	arrowDown = document.createElement("SPAN");
//  	var tn = document.createTextNode("6");
//  	arrowDown.appendChild(tn);
//  	arrowDown.className = "arrowDown";

}
function sortTable(tableNode, nCol, bDesc, sType) {
	var tBody = tableNode.tBodies[0];
	var trs = tBody.rows;
	var trl= trs.length;
	var a = new Array();
	
	for (var i = 0; i < trl; i++) {
		a[i] = trs[i];
	}
	
	var start = new Date;
//	window.status = "Sorting data...";
	a.sort(compareByColumn(nCol,bDesc,sType));
//	window.status = "Sorting data done";
	
	for (var i = 0; i < trl; i++) {
		tBody.appendChild(a[i]);
//		window.status = "Updating row " + (i + 1) + " of " + trl +
						" (Time spent: " + (new Date - start) + "ms)";
	}
	if (typeof tableNode.onsort == "string")
		tableNode.onsort = new Function("", tableNode.onsort);
	if (typeof tableNode.onsort == "function")
	tableNode.onsort();
}
function CaseInsensitiveString(s) {
	return String(s).toUpperCase();
}
function parseDate(s) {
	return Date.parse(s.replace(/\-/g, '/'));
}
function toNumber(s) {
    return Number(s.replace(/[^0-9\.]/g, ""));
}
function compareByColumn(nCol, bDescending, sType) {
	var c = nCol;
	var d = bDescending;
	
	var fTypeCast = String;

	if (sType == "Number")
		fTypeCast = Number;
	else if (sType == "Date")
		fTypeCast = parseDate;
	else if (sType == "CaseInsensitiveString")
		fTypeCast = CaseInsensitiveString;
	else if (sType == "MoneyText")
	{
		return function (n1, n2) {
			if (Number(getInnerText(n1.cells[c]).replace(/[^0-9.-]/g,'')) < Number(getInnerText(n2.cells[c]).replace(/[^0-9.-]/g,'')))
				return d ? -1 : +1;
			if (Number(getInnerText(n1.cells[c]).replace(/[^0-9.-]/g,'')) > Number(getInnerText(n2.cells[c]).replace(/[^0-9.-]/g,'')))
				return d ? +1 : -1;
			return 0;
		}
	}
	else if (sType == "MoneySpan")
	{
		return function (n1, n2) {
			if (Number(getInnerText(n1.cells[c].childNodes[0]).replace(/[^0-9.-]/g,'')) < Number(getInnerText(n2.cells[c].childNodes[0]).replace(/[^0-9.-]/g,'')))
				return d ? -1 : +1;
			if (Number(getInnerText(n1.cells[c].childNodes[0]).replace(/[^0-9.-]/g,'')) > Number(getInnerText(n2.cells[c].childNodes[0]).replace(/[^0-9.-]/g,'')))
				return d ? +1 : -1;
			return 0;
		}
	}	
	else if (sType == "NumSpan" || sType == "AlphaNumSpan")
	{
		fTypeCast = (sType == "NumSpan")?Number:String;
		return function (n1, n2) {
			if (fTypeCast(getInnerText(n1.cells[c].childNodes[0])) < fTypeCast(getInnerText(n2.cells[c].childNodes[0])))
				return d ? -1 : +1;
			if (fTypeCast(getInnerText(n1.cells[c].childNodes[0])) > fTypeCast(getInnerText(n2.cells[c].childNodes[0])))
				return d ? +1 : -1;
			return 0;
		}
	}               
	return function (n1, n2) {
		if (fTypeCast(getInnerText(n1.cells[c])) < fTypeCast(getInnerText(n2.cells[c])))
			return d ? -1 : +1;
		if (fTypeCast(getInnerText(n1.cells[c])) > fTypeCast(getInnerText(n2.cells[c])))
			return d ? +1 : -1;
		return 0;
	}
}
function sortColumnWithHold(e) {
	var el = ie ? e.srcElement : e.target;
	var table = getParent(el, "TABLE");
	var oldCursor = table.style.cursor;
	var oldClick = table.onclick;
	table.style.cursor = "wait";
	table.onclick = null;
	var fakeEvent = {srcElement : e.srcElement, target : e.target};
	window.setTimeout(function () {
		sortColumn(fakeEvent);
		// once done resore cursor and onclick
		table.style.cursor = oldCursor;
		table.onclick = oldClick;
	}, 100);
}
var lastSortedBy = null
function sortColumn(e,tableName) {
	var tmp = e.target ? e.target : e.srcElement;
	var tHeadParent = getParent(tmp, "THEAD");
	var el = getParent(tmp, "TD");
	if (tHeadParent == null)
		return;
		
	if (el != null) {
		var p = el.parentNode;
		var i;

		// typecast to Boolean
		el._descending = !Boolean(el._descending);

		for(var x = 0; x < el.parentNode.childNodes.length; x++)
		{
			el.parentNode.childNodes[x].style.textDecoration = "none"
//			el.parentNode.childNodes[x].style.fontStyle = "normal"
		}
//		if(lastSortedBy)
//		{
////			el.parentNode.childNodes[lastSortedBy].style.backgroundImage = ""
//		}
//		if (tHeadParent.arrow != null) {
//			if (tHeadParent.arrow.parentNode != el) {
//				tHeadParent.arrow.parentNode._descending = null;	//reset sort order		
//			}
//			tHeadParent.arrow.parentNode.removeChild(tHeadParent.arrow);
//			tHeadParent.arrow.style.fontWeight = "normal"
//			tHeadParent.arrow.style.fontSize = "10px"
//		}
//		if (el._descending)
//			tHeadParent.arrow = arrowUp.cloneNode(true);
//		else
//			tHeadParent.arrow = arrowDown.cloneNode(true);
//		el.appendChild(tHeadParent.arrow);

			
//		tHeadParent.arrow = el
//		tHeadParent.arrow.style.fontWeight = "bold"
//		tHeadParent.arrow.style.fontSize = "11px"
		
		for(var x = 0; x < el.parentNode.childNodes.length; x++)
		{
			if(el.parentNode.childNodes[x] == el)
			{
				lastSortedBy = "" + x + ""
				x = el.parentNode.childNodes.length
			}
		}
//		el.style.backgroundRepeat = "no-repeat"
//		if (el._descending)
//			el.style.backgroundImage = "url('" + top.pathName + "img/sort_desc.gif')";
//		else
//			el.style.backgroundImage = "url('" + top.pathName + "img/sort_asc.gif')";

//		if (el._descending)
//			el.style.textDecoration = "underline"
//		else
//			el.style.textDecoration = "overline"

//		lastSortedBy = el
		el.style.textDecoration = "underline"
//		el.style.fontStyle = "italic"
//		el.style.fontSize = "11px"

		var cells = p.cells;
		var l = cells.length;
		for (i = 0; i < l; i++) {
			if (cells[i] == el) break;
		}
		if(tableName.names)
		{
			for(var x = 0; x < tableName.names.length; x++)
			{
				var table = document.getElementById(tableName.names[x])
				sortTable(table,i,el._descending, el.getAttribute("type"));
			}
		}
		else
		{
			var table = (tableName)?document.getElementById(tableName):getParent(el, "TABLE");
			sortTable(table,i,el._descending, el.getAttribute("type"));
		}		
	}
}
function getInnerText(el) {
	if (ie) return el.innerText;
	var str = "";
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1:
				str += getInnerText(cs[i]);
				break;
			case 3:
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}
function getParent(el, pTagName) {
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())	// Gecko bug, supposed to be uppercase
		return el;
	else
		return getParent(el.parentNode, pTagName);
}
// ---------------------------- table sorting
function Hash()
{
	this.length = 0;
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
   
	this.removeItem = function(in_key)
	{
		var tmp_value;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			var tmp_value = this.items[in_key];
			delete this.items[in_key];
		}
	   
		return tmp_value;
	}

	this.getItem = function(in_key) {
		return this.items[in_key];
	}

	this.setItem = function(in_key, in_value)
	{
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
			}

			this.items[in_key] = in_value;
		}
	   
		return in_value;
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
}
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ getRadioButtonValue
function radioValue(radioButton)
{
	for (x = 0; x < radioButton.length; x++)
	{
		if (radioButton[x].checked == true) return radioButton[x]; 
	} 
	return radioButton;
}
function stripNonNum(value) {
	return value.replace(/[^0-9]/g,'');
}
function stripNonAlpha(value){
	return value.replace(/[^a-zA-Z]/g, '');
}
function stripNonSymbol(value){
	return value.replace(/[^a-z.A-Z]/g, '');
}
function stripNonNumMinusPeriod(value) {
	return value.replace(/[^0-9.]/g,'');
}
function stripNonNumMinusPeriodDash(value) {
	return value.replace(/[^0-9.-]/g,'');
}
function replaceSpecials(value)
{
	return value.replace(/[&]/g,'&amp;').replace(/[<]/g,'&lt;').replace(/[>]/g,'&gt;')
}
// ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ getRadioButtonValue
function ba(obj, name)
{
	var o = obj.getElementsByTagName("*")
	for(var x = 0; x < o.length; x++)
	{
		if(o[x].getAttribute(name))
		{
			return o[x]
			x = o.length
		}
	}
}
function n(n)
{
	return Number(n)
}
function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}
 
function isObject(a){
    return (a && typeof a == 'object') || isFunction(a);
}
function greatestCommonDiv(arr)
{
	if(!isArray(arr))
	{
		return 1;
	}
	var d = arr[0];
	if(!isNumber(d))
	{
		return 1;
	}
	for (var i=1; i<arr.length; i++)
	{
		d = gcd(d, arr[i]);
	}
	return d;
}
function gcd(a, b) 
{
	if (!isNumber(a) || !isNumber(b))
		return 1;
	a = Math.abs(a);
	b = Math.abs(b);
	if (a > b)
		return gcdHelper(a, b);
	return gcdHelper(b, a);
}
 
function gcdHelper(a, b)
{
	if (b==0)
		return a;
	return gcdHelper(b, a % b);
}
function checkSelectState(e)
{
	var obj = getObject(e)
	if(obj.tagName.toLowerCase() != "input" && obj.tagName.toLowerCase() != "textarea")
	{
		window.status = obj.tagName
		return false;
	}
	else
	{
		return true;
	}
}
// ------------------- add to watchlist from menus
function addToWatchlist()
{
	var requestObj = new Object()
	requestObj.echo = "<secKey>" + top.stockMenuRequestHold.secKey + "</secKey><type>" + top.stockMenuRequestHold.oDesc + "</type>";
	var oReq = "<EZList>"
	oReq += top.requestEnv("watchlist.list")
	oReq += top.requestEnv("echo", requestObj)
	oReq += "</EZList>"
	top.getXML(oReq, top.routing_checkWatchlistList)
}
function checkWatchlistList(oXml)
{
	var oList = btn(oXml, "numWatchLists")
	if(oList.length > 0)
	{
		oList = sNode(oList[0])
		if(oList == 0)
		{
			alert("You have no Watchlist created. Please create a Watchlist first.")
		}
		else if(oList == 1)
		{
			var secKey = btn(oXml, "secKey")
			secKey = sNode(secKey[0]).split("-");
			oList = btn(oXml, "WatchList")
			oList = oList[0].getElementsByTagName("id")
			var requestObj = new Object()
			requestObj.addItems = true
			var oReq = "<EZList>"
			for(var x = 0; x < secKey.length; x++)
			{
				if(secKey[x] != "")
				{
					requestObj.symbol = secKey[x]
					requestObj.id = sNode(oList[0])
					requestObj.override = true
					oReq += top.requestEnv("watchlist.save", requestObj);
				}
			}
			oReq += "</EZList>"
			top.getXML(oReq, top.routing_watchlistConfirmAddFromMenu)
		}
		else
		{
			var secKey = btn(oXml, "secKey")
			secKey = sNode(secKey[0])
			var oDesc = btn(oXml, "type")
			oDesc = sNode(oDesc[0])
			makeWatchListModal(secKey, oDesc)
		}
	}
}
function watchlistConfirmAddFromMenu(oXml)
{
	var oMsg = getEZM(oXml)
	var oCount = 0
	for(var x = 0; x < oMsg.length; x++)
	{
		if(oMsg[x].getElementsByTagName("errors").length > 0)
		{
			oCount++
		}
	}
	if(oCount > 0)
	{
		alert(oCount + " of the item(s) can not be added to the Watchlist. The item(s) may not exist or have expired.")
	}
	if(top.checkFrameForEmpty("frame_watchlist"))
		top.routing_getWatchlist()
}
function makeWatchListModal(secKey, oDesc)
{
	top.holdWatchlistSecKey = secKey
	top.holdWatchlistoDesc = oDesc
	if(!top.foGroup["15"])
	{
		top.getGFlyover("watchlist_selector")
	}
	else
	{
		if(top.foGroup["15"].style.display =="none")
		{
			var oSet = top.foSet["watchlist_selector"]
			top.fillwatchlist_selector(oSet)
			top.refitwatchlist_selector(oSet)
		}
		else
		{
			top.hidewatchlist_selector()
		}
	}	
}
function addToWatchlistFmSelector()
{
	var sKey = gv("secKey")
	var oCheck = document.getElementsByTagName("input")
	var oSelected = new Array()
	var oReq = "<EZList>"
	for(var x = 0; x < oCheck.length; x++)
	{
		if(oCheck[x].getAttribute("type") == "checkbox")
		{
			if(oCheck[x].checked)
			{
				var secKey = sKey.split("-");
				oList = oCheck[x].getAttribute("value")
				var requestObj = new Object()
				requestObj.addItems = true
				
				for(var y = 0; y < secKey.length; y++)
				{
					if(secKey[y] != "")
					{
						requestObj.symbol = secKey[y]
						requestObj.id = oList
						requestObj.override = true
						oReq += top.requestEnv("watchlist.save", requestObj);
					}
				}
			}
		}
	}
	oReq += "</EZList>"
	if(oCheck.length > 0)
	{
		top.hidewatchlist_selector();
		top.getXML(oReq, top.routing_watchlistConfirmAddFromMenu)	
	}
}
// ------------------- add to watchlist from menus
/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}

function ValidateForm(id){
	if(gv(id) != "")
	{
		var dt=bi(id).value.replace(/[-\\.]/g,'/')
		if (isDate(dt)==false){
			return false
		}
	}
	else
	{
		bi(id).value = setDefDateVal()
	}
	return true;
 }
function setDefDateVal()
{
	return "mm/dd/yyyy"
}
function allowDateRange(e)
{
	var obj = getObject(e)
	bi("startDate").disabled = (obj[obj.selectedIndex].value == "range")?false:true;
	bi("endDate").disabled = (obj[obj.selectedIndex].value == "range")?false:true;
}
function setPageOptions(e)
{
	var obj = (e)?getObject(e):bi("pageOptions");
	var val =obj[obj.selectedIndex].value
	bi("startPage").disabled = (val == "range")?false:true;
	bi("endPage").disabled = (val == "range")?false:true;
	if(val == "all" || val == "range")
	{
		setPrintRangeVal(1, maxPage)
	}
	else if(val == "current")
	{
		setPrintRangeVal((Number(page) + 1), (Number(page) + 1))
	}
}
function setPrintRangeVal(s, e)
{
	bi("startPage").value = s
	bi("endPage").value = e
}
function printInfo()
{
	if(bi("filter_tr"))
	{
		bi("filter_tr").style.display = "none"
	}
	bi("print_tr").style.display = (bi("print_tr").style.display == "none")?"":"none";
}
function showFilter()
{
	if(bi("print_tr"))
	{
		bi("print_tr").style.display = "none"
	}
	bi("filter_tr").style.display = (bi("filter_tr").style.display == "none")?"":"none";
}