
function getId(id)
{
var e=null;
if(document.getElementById)
{
e=document.getElementById(id);
}
else if(document.all)
{
e=document.all(id);
}
if(!e)
{
e=null;
}
return(e);
}
String.prototype.trim=function()
{
return(this.toString()?
this.toString().replace(/\s+$|^\s*/g,""):"")
}
function getURLParameterValue(paramName)
{
return getURLParameterValueFromString(paramName,document.location.href);
}
function getURLParameterValueFromString(paramName,string)
{
paramName=paramName.toLowerCase();
var paramValue="";
var index=string.indexOf("?");
if(index!=-1)
{
var querystr=string.substring(index+1);
var params=querystr.split("&");
for(var i=0;i<params.length;i++)
{
var parts=params[i].split("=");
if(parts.length>1)
{
if(parts[0].toLowerCase()==paramName)
{
paramValue=unescape(parts[1]).toLowerCase();
break;
}
}
}
}
return(paramValue);
}
function setElementDisplay(id,show)
{
var el=getId(id);
if(el)
{
el.style.display=show?"":"none";
}
else
{
if(f)
{
f.vTrace("Could not set display on element "+id,"Alert");
}
}
}
function extractXMLTag(str,tag)
{
var lcont;
var lxmltag="<"+tag+">";
var lstart=str.indexOf(lxmltag);
if(lstart<0)
{
throw Error("Start Tag not found: "+tag);
}
var lend=str.indexOf("</"+tag+">");
if(lend<0)
{
throw Error("End Tag not found: "+tag);
}
else if(lstart>=lend)
{
throw Error("Tag in incorrect order: "+tag);
}
lstart+=lxmltag.length;
lcont=str.substring(lstart,lend);
return(lcont);
}
function quickCreateElement(type,className,id,parentNode)
{
var newEl=document.createElement(type);
if(className)
{
newEl.className=className;
}
if(id)
{
newEl.id=id;
}
if((parentNode)&&
(parentNode.appendChild))
{
parentNode.appendChild(newEl);
}
return(newEl);
}
function stopEventPropagation(e)
{
if(typeof event!='undefined')
{
event.cancelBubble=true;
}
else
{
e.stopPropagation();
}
}
String.prototype.compareTo=function(arg)
{
var base=this.toString();
if(base==arg)
{
return 0;
}
var array=[base,arg];
array.sort();
if(array[0]==base)
{
return 1;
}
else
{
return -1;
}
}
String.prototype.compareToIgnoreCase=function(arg)
{
return this.toLowerCase().compareTo(arg.toLowerCase());
}
String.prototype.startsWith=function(arg)
{
return(this.search(arg)==0);
}
function getKeyCode(e)
{
var key=0;
if(e)
{
if(e.keyCode)
{
key=e.keyCode;
}
else
{
key=e.which;
}
}
else if(typeof event!='undefined')
{
key=event.keyCode;
}
return(key);
}
function isHelpKey(e)
{
if((typeof e=='undefined')||
(typeof e.charCode=='undefined'))
{
return false;
}
else if(f.vIsSafari)
{
return(e.keyCode==0xF704);
}
else if(e.charCode!=0)
{
return false;
}
else
{
return(e.keyCode==0x70);
}
}
function releaseEvents(el)
{
var events=["focus","blur","change","click","mousedown",
"mouseup","mouseover","keypress","keydown",
"keyup","keypress","error","help","submit"];
var i;
for(i=0;i<events.length;i++)
{
if(typeof el["on"+events[i]]!="undefined")
{
el["on"+events[i]]=null;
}
}
for(i=0;i<el.childNodes.length;i++)
{
releaseEvents(el.childNodes[i]);
}
}
function releaseDocumentEvents()
{
if(window.detachEvent)
{
window.detachEvent("onunload",releaseDocumentEvents);
}
else if(window.removeEventListener)
{
window.removeEventListener("onunload",releaseDocumentEvents,false);
}
releaseEvents(document);
}
if(window.attachEvent)
{
window.attachEvent("onunload",releaseDocumentEvents);
}
else if(window.addEventListener)
{
window.addEventListener("onunload",releaseDocumentEvents,false);
}
function vAssertNumArguments(num)
{
if(!f.vIsSafari)
{
var callerFn=vAssertNumArguments.caller;
if(callerFn)
{
vAssert(callerFn.arguments.length==num,
"Expected "+num+" but received "+callerFn.arguments.length+" arguments");
}
}
}
function vAssert(statement,str)
{
if(!statement)
{
try
{
throw Error("Assertion failed"+(str?(":"+str):""));
}
catch(e)
{
vLogException(e,"Assert");
}
}
}
function vLogError(err,level)
{
try
{
throw Error(err);
}
catch(e)
{
vLogException(e,level?level:"Error");
}
}
var vSentLastErrorAt=0;
function vLogException(e,level)
{
var now=new Date();
var data=f.vGetTimeString(now)+" JS exception: "+e;
if(typeof e!="undefined")
{
data+=" "+e.name+": "+e.message;
if(typeof e.number!="undefined")
{
data+=":"+e.number;
}
}
data+=".\n"+vGetStack(vLogException.caller);
var trace=data;
data+="Trace:\n"+f.vGetTrace().slice(-2000);
f.vTrace(trace,level?level:"Error");
if(now.getTime()-vSentLastErrorAt>60000)
{
vSentLastErrorAt=now.getTime();
f.vSend("Ve",[data]);
}
}
function vGetStack(e)
{
try
{
if(f.vIsMozilla)
{
return Error().stack;
}
if(!e)
{
return("");
}
var data=f.vGetFuncName(e)+"(";
for(var ii=0;ii<e.arguments.length;ii++)
{
if(ii>0)
{
data+=",";
}
data+=String(e.arguments[ii]);
}
data+=")\n"+vGetStack(e.caller)
return(data);
}
catch(localException)
{
return("Failed to get stack due to "+localException);
}
}
function removeAllChildren(node)
{
vAssertNumArguments(1);
while(node.hasChildNodes())
{
releaseEvents(node.firstChild);
node.removeChild(node.firstChild);
}
}
function replaceChild(node,newChild)
{
vAssertNumArguments(2);
removeAllChildren(node);
node.appendChild(newChild);
}
function numberCompare(first,second)
{
vAssertNumArguments(2);
return first-second;
}
function addNewOptionAlphabetically(dropDownBox,option,earliestListPosition)
{
var options=dropDownBox.options;
var currentSelectedIndex=dropDownBox.selectedIndex;
if(earliestListPosition>=0)
{
var index;
var ii;
var lowest=earliestListPosition;
var highest=options.length;
var result=0;
while(highest>lowest)
{
ii=Math.floor((highest+lowest)/2);
result=options[ii].text.compareToIgnoreCase(option.text);
if(result==-1)
{
highest=ii;
}
else if(result==1)
{
lowest=ii+1;
}
else
{
highest=ii;
break;
}
}
index=highest;
for(ii=options.length;ii>index;ii--)
{
var tempObj=new Option(options[ii-1].text,
options[ii-1].value);
tempObj.id=options[ii-1].id;
options[ii]=tempObj;
}
options[index]=option;
if(index<=currentSelectedIndex)
{
dropDownBox.selectedIndex=currentSelectedIndex+1;
}
else
{
dropDownBox.selectedIndex=currentSelectedIndex;
}
}
else
{
f.vTrace("Earliest list position of "+earliestListPosition+
" specified. This is not supported.","Error");
}
}
function createApplet(appletTagParams,params)
{
document.write('<applet '+appletTagParams+'>');
if(params)
{
for(var p in params)
{
document.write('<param name="'+params[p][0]+'" value="'+params[p][1]+'">');
}
}
document.write('</applet>');
}
function createHTML(html)
{
document.write(html);
}


