
function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}

function MM_changeProp(objName,x,theProp,theValue) { //v3.0
  var obj = MM_findObj(objName);
  if (obj && (theProp.indexOf("style.")==-1 || obj.style)) eval("obj."+theProp+"='"+theValue+"'");
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function RAL_helpWindow(filename, windowName){
	helpWindow = window.open(filename, windowName, "scrollbars=yes, width=400, height=400, left=50, top=50");
	helpWindow.focus();
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_setTextOfLayer(objName,x,newText) { //v3.0 updated by Robert Lee with " && document.layers" for NS6 compatibility
  if ((obj=MM_findObj(objName))!=null) with (obj)
    if (navigator.appName=='Netscape' && document.layers) {document.write(unescape(newText)); document.close();}
    else innerHTML = unescape(newText);
}

function MM_setTextOfTextfield(objName,x,newText) { //v3.0
  var obj = MM_findObj(objName); if (obj) obj.value = newText;
}

function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}


function RAL_openBrWindowInfo(theURL) {
  window.open(theURL,'info','scrollbars=yes,resizable=yes,width=550,height=500,left=50,top=50');
}

function RAL_addToTextOfTextfield(objName,x,newText) {
  var obj = MM_findObj(objName); if (obj) obj.value += newText;
}

function RAL_submitConfirm(text){
	var agree=confirm(text);
	if(agree) return true;
	else return false;
}

function RAL_toggleDisplay(object){ // changes style's display attribute between 'none' & 'inline'
  var obj;
	if ((obj=MM_findObj(object))!=null){
    if (obj.style){
			obj=obj.style;
			if(obj.display=='none') obj.display='inline';
			else if(obj.display=='inline') obj.display='none';
		}
	}
}

function SDIGclickOnce(obj, string){
	// use this on form buttons (not submits)
	if(typeof string=="undefined") string = 'Please wait...';
	obj.disabled=true;
	obj.value=string;
	return true;
}

function SDIGsubmitOnce(theForm, string){
	//if IE 4+ or NS 6+
	if(document.all||document.getElementById){
		if(typeof string=="undefined") string = 'Please wait...';
		for(i=0;i<theForm.length;i++){
			var tempObj=theForm.elements[i];
			if(tempObj.type.toLowerCase()=="submit"||tempObj.type.toLowerCase()=="reset"||tempObj.type.toLowerCase()=="button"){
				tempObj.disabled=true;
				tempObj.value=string;
			}
		}
	}
}

function SDIGtoggleCheckboxes(idString) {
	var inputs = document.getElementsByTagName("input");
	var c = idString.length;
	for(index = 0; index < inputs.length; index++){
		if(inputs[index].id.substring(0,c) == idString){
			if(inputs[index].checked == 0) inputs[index].checked = 1;
			else if(inputs[index].checked == 1) inputs[index].checked = 0;
		}
	}
}

function SDIGcheckAllCheckboxes(idString) {
	var inputs = document.getElementsByTagName("input");
	var c = idString.length;
	for(index = 0; index < inputs.length; index++){
		if(inputs[index].id.substring(0,c) == idString){
			inputs[index].checked = 1;
		}
	}
}

function SDIGuncheckAllCheckboxes(idString) {
	var inputs = document.getElementsByTagName("input");
	var c = idString.length;
	for(index = 0; index < inputs.length; index++){
		if(inputs[index].id.substring(0,c) == idString){
			inputs[index].checked = 0;
		}
	}
}

function SDIGclearAllTextInputs(formId) {
	var form, elements, i, elm;
	form = document.getElementById ? document.getElementById(formId) : document.forms[formId]; 
	if(document.getElementsByTagName){
		elements = form.getElementsByTagName('input');
		for(i=0, elm; elm=elements.item(i++);){
			if(elm.getAttribute('type') == "text"){
				elm.value = '';
			}
		}
	}else{
		elements = form.elements;
		for(i=0, elm; elm=elements[i++];){
			if(elm.type == "text"){
				elm.value ='';
			}
		}
	}
}


function SDIGchangeSelectOptions(formName, selectName, selector){
	s=document.forms[formName][selectName];
	s.length=selectItems[selector].length;
	for(i=0;i<s.length;i++){
 		s.options[i]=new Option(selectItems[selector][i][1],selectItems[selector][i][0]);
	}
	if((s.length==1) && (s.options[0].value=='') ) document.forms[formName][selectName].disabled=true;
	else document.forms[formName][selectName].disabled=false;
}

function SDIGtoggleMultiSelect(idString) {
	var target = document.getElementById(idString);
	for(i = 0; i < target.length; i++){
		if(target.options[i].selected == true) target.options[i].selected = false;
		else target.options[i].selected = true;
	}
}

function SDIGselectAllMultiSelect(idString) {
	var target = document.getElementById(idString);
	for(i = 0; i < target.length; i++){
		target.options[i].selected = true;
	}
}

function SDIGdeselectAllMultiSelect(idString) {
	var target = document.getElementById(idString);
	for(i = 0; i < target.length; i++){
		target.options[i].selected = false;
	}
}

function SDIGshowInvoiceReminderEmailTextField(obj){
	if(obj.value=='email') document.getElementById("emailTextRow").style.visibility='visible';
	else document.getElementById("emailTextRow").style.visibility='collapse';
}

function SDIGgetElementsByClassName( strClassName, obj ) {
	var ar = arguments[2] || new Array();
	if(!obj) obj = document.body;
	var re = new RegExp("\\b" + strClassName + "\\b", "g");

	if ( re.test(obj.className) ) {
		ar.push( obj );
	}
	for ( var i = 0; i < obj.childNodes.length; i++ )
		SDIGgetElementsByClassName( strClassName, obj.childNodes[i], ar );
	
	return ar;
}



function SDIGgetKeyCode(e){
	if(!e){
		//if the browser did not pass the event information to the
		//function, we will have to obtain it from the event register
		if(window.event){
			//Internet Explorer
			e = window.event;
		}else{
			//total failure, we have no way of referencing the event
			//alert('No event');
			return false;
		}
	}

	if(typeof( e.keyCode ) == 'number'){
		//DOM
		var keycode = e.keyCode;
	}else if(typeof( e.which ) == 'number'){
		//NS 4 compatible
		var keycode = e.which;
	}else if(typeof( e.charCode ) == 'number'){
		//also NS 6+, Mozilla 0.9+
		var keycode = e.charCode;
	}else{
		//total failure, we have no way of obtaining the key code
		//alert('No keyCode');
		return false;
	}

	//alert(keycode);
	return keycode;
}


function SDIGtextFieldCharLimiter(limitField, charLimit, countField){

/*
To add a "characters remaining" counter, put this in the form:
You have <input type="text" name="countFieldName" size="3" value="[charLimit]" readonly="readonly" /> characters left.
And add the 3rd argument to the function call, i.e. this.form.countFieldName
*/

// this function should be called using the onkeyup event, which is fired after the key press has been actioned (text has been added to input field)
// don't need to exclude delete/backspace keys from this because pressing them reduces the size of the text string before this function is called

	if(limitField.value.length > charLimit){
		limitField.value = limitField.value.substring(0, charLimit);
		alert("Sorry - only "+charLimit+" characters allowed. Please abbreviate if possible.");
	}
	if(typeof countField!="undefined") countField.value = charLimit - limitField.value.length;
}


function SDIGcopyAddressToBilling(){

	var address = MM_findObj('address');
	var city = MM_findObj('city');
	var state = MM_findObj('state');
	var zip = MM_findObj('zip');
	var billingAddress = MM_findObj('billingAddress');
	var billingCity = MM_findObj('billingCity');
	var billingState = MM_findObj('billingState');
	var billingZip = MM_findObj('billingZip');

	billingAddress.value = address.value;
	billingCity.value = city.value;
	billingState.value = state.value;
	billingZip.value = zip.value;

}


function SDIGrevealBillingAddressFields(checkbox){

	if(checkbox.checked == 1){
		document.getElementById("trBillingNumber").style.visibility='collapse';
		document.getElementById("trBillingAddress").style.visibility='collapse';
		document.getElementById("trBillingCity").style.visibility='collapse';
		document.getElementById("trBillingState").style.visibility='collapse';
		document.getElementById("trBillingZip").style.visibility='collapse';
	}else{
		document.getElementById("trBillingNumber").style.visibility='visible';
		/*document.getElementById("trBillingAddress").style.visibility='visible';
		document.getElementById("trBillingCity").style.visibility='visible';
		document.getElementById("trBillingState").style.visibility='visible';*/
		document.getElementById("trBillingZip").style.visibility='visible';
	}

}



/*
Form field Limiter script- By Dynamic Drive
For full source code and more DHTML scripts, visit http://www.dynamicdrive.com
This credit MUST stay intact for use
*/

var ns6=document.getElementById&&!document.all

function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9\.\,\/]/ //detect alphanumeric keys
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}

function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0)
theform.value=theform.value.substring(0,maxlength)
placeholderobj.innerHTML=lengthleft
}
}


function displaylimit(theform,thelimit){
var limit_text='<br><b><span id="'+theform.toString()+'">'+thelimit+'</span></b> characters remaining <br>(edit text to update this value)'
if (document.all||ns6)
document.write(limit_text)
if (document.all){
eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
}
else if (ns6){
document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true); 
document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true); 
}
}

// End form field Limiter script- By Dynamic Drive








/***********************************************
* Fixed ToolTip script- © Dynamic Drive (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for full source code
* Modified by Robert Lee:
*   Hides <select>s under tooltip while it's displayed in IE6 & older
*   x & y offsets passed in main function call
*   default tooltipwidth & bg color moved to CSS
*   getposOffset() function modified to ignore offset of <body> tag to fix IE bug
***********************************************/
		
//var tipwidth='200px' //default tooltip width
//var tipbgcolor='#EEEEEE'  //tooltip bgcolor
var disappeardelay=0  //tooltip disappear speed onMouseout (in miliseconds)
var vertical_offset_default=10 //horizontal offset (px) of tooltip from anchor link if not passed with fixedtooltip()
var horizontal_offset_default=0 //horizontal offset (px) of tooltip from anchor link if not passed with fixedtooltip()

/////No further editing needed

var ie4=document.all
var ns6=document.getElementById&&!document.all

if (ie4||ns6)
	document.write('<div id="fixedTipDiv" style="visibility:hidden;" ></div>')
//document.write('<div id="fixedTipDiv" style="visibility:hidden;width:'+tipwidth+';background-color:'+tipbgcolor+'" ></div>')

function getposOffset(what, offsettype){
	var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
	var parentEl=what.offsetParent;
	//while (parentEl!=null){
	// next line ignores offset of <body> tag
	// if <body> is relatively positioned and is not at viewport origin (e.g. centered), IE will incorrectly judge this to be some offset and the fixedTipDiv is wrongly positioned
	while (parentEl!=null && parentEl.tagName!='BODY'){
		//alert(parentEl.tagName);
		totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
		parentEl=parentEl.offsetParent;
	}
	return totaloffset;
}


function showhide(obj, e, visible, hidden, tipwidth){
	if (ie4||ns6)
		dropmenuobj.style.left=dropmenuobj.style.top=-500
	if (tipwidth!=""){
		dropmenuobj.widthobj=dropmenuobj.style
		dropmenuobj.widthobj.width=tipwidth
	}
	if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
		obj.visibility=visible
	else if (e.type=="click")
		obj.visibility=hidden
}

function iecompattest(){
	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function clearbrowseredge(obj, whichedge){
	var edgeoffset=(whichedge=="rightedge")? parseInt(horizontal_offset)*-1 : parseInt(vertical_offset)*-1
	if (whichedge=="rightedge"){
		var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
		dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
		if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
			edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth
	}else{
		var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
		dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
		if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure)
			edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight
	}
	return edgeoffset
}

function fixedtooltip(menucontents, obj, e, tipwidth, offsetx, offsety){
	if (typeof offsetx!="undefined") horizontal_offset = offsetx;
	else horizontal_offset = horizontal_offset_default;
	if (typeof offsety!="undefined") vertical_offset = offsety;
	else vertical_offset = vertical_offset_default;
	if (window.event) event.cancelBubble=true
	else if(e.stopPropagation) e.stopPropagation()
	clearhidetip()
	dropmenuobj=document.getElementById? document.getElementById("fixedTipDiv") : fixedTipDiv
	dropmenuobj.innerHTML=menucontents

	if (ie4||ns6){
		showhide(dropmenuobj.style, e, "visible", "hidden", tipwidth)
		dropmenuobj.x=getposOffset(obj, "left")
		dropmenuobj.y=getposOffset(obj, "top")
		dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px"
		dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px"
		/*
		New lines below added by Robert Lee
		Hides <select>s under tooltip while it's displayed
		*/
		var positions=getElementPosition("fixedTipDiv");
		toggleSelect(positions[0], positions[1], positions[2], positions[3]);
		/*
		end new lines
		*/
	}
}

function hidetip(e){
if (typeof dropmenuobj!="undefined"){
	if (ie4||ns6)
		dropmenuobj.style.visibility="hidden"
		/*
		New lines below added by Robert Lee
		Hides <select>s under tooltip while it's displayed
		*/
		var positions=getElementPosition("fixedTipDiv");
		toggleSelect(positions[0], positions[1], positions[2], positions[3]);
		/*
		end new lines
		*/
	}
}

function delayhidetip(){
	if (ie4||ns6)
	delayhide=setTimeout("hidetip()",disappeardelay)
}

function clearhidetip(){
	if (typeof delayhide!="undefined")
	clearTimeout(delayhide)
}

// End Fixed Tooltip - By Dynamic Drive


function toggleSelect(x,y,w,h){ 
	// works only in IE6 and older - if IE7 displays form controls over DHTML objects then modify below 
	var appVer = navigator.appVersion.toLowerCase(); 
	var iePos = appVer.indexOf('msie'); 
	if (iePos !=-1) { 
		var is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos))); 
		var is_major = parseInt(is_minor); 
	} 
	if (navigator.appName.substring(0,9) == "Microsoft"){ // Check if IE version is 6 or older 
		if (is_major <= 6){ 
			var selx,sely,selw,selh,i 
			var sel=document.getElementsByTagName("SELECT") 
			for(i=0;i<sel.length;i++){ 
				selx=0; sely=0; var selp; 
				if(sel[i].offsetParent){ 
					selp=sel[i]; 
					while(selp.offsetParent){ 
						selp=selp.offsetParent; 
						selx+=selp.offsetLeft; 
						sely+=selp.offsetTop; 
					} 
				} 
				selx+=sel[i].offsetLeft; 
				sely+=sel[i].offsetTop; 
				selw=sel[i].offsetWidth; 
				selh=sel[i].offsetHeight; 
				if(selx+selw>x && selx<x+w && sely+selh>y && sely<y+h){
					if(sel[i].style.visibility!="hidden") sel[i].style.visibility="hidden"; 
					else sel[i].style.visibility="visible"; 
				}
			} 
		} 
	} 
}



function getElementPosition(id){
	var tooltipx,tooltipy,tooltipw,tooltiph,tooltipp; 
	var tooltip=document.getElementById(id) 
	tooltipx=0; tooltipy=0;
	if(tooltip.offsetParent){ 
		tooltipp=tooltip; 
		while(tooltipp.offsetParent){ 
			tooltipp=tooltipp.offsetParent; 
			tooltipx+=tooltipp.offsetLeft; 
			tooltipy+=tooltipp.offsetTop;
		}
	}
	tooltipx+=tooltip.offsetLeft; 
	tooltipy+=tooltip.offsetTop; 
	tooltipw=tooltip.offsetWidth; 
	tooltiph=tooltip.offsetHeight; 
	//alert('tooltipx=' + tooltipx + 'tooltipy=' + tooltipy + 'tooltipw=' + tooltipw + 'tooltiph=' + tooltiph);
	var output = [ tooltipx, tooltipy, tooltipw, tooltiph ];
	return output;
}
