ul = "";

function showUl(ul) {
 if (document.getElementById(ul).className == "sub_cat hidden") {
  document.getElementById(ul).className = "sub_cat";
  } else {
  document.getElementById(ul).className = "sub_cat hidden";
 }
}

function showUl(ul,ul2, imageDir) {

subcat = document.getElementById(ul);
if (subcat) {
	if (subcat.className == "sub_cat hidden") {
		document.getElementById(ul).className = "sub_cat";
		document.getElementById(ul2).style.backgroundImage = "url(" + imageDir + "images/arrow_down_trans.gif)";
		} else {
		document.getElementById(ul).className = "sub_cat hidden";
		document.getElementById(ul2).style.backgroundImage = "url(" + imageDir + "images/arrow_right_trans.gif)";
		}
	}
}

function showDiv(div) {
if (document.getElementById(div).className != "hidden") {
	document.getElementById(div).className = "hidden";
	//document.getElementById(ul2).style.backgroundImage = "url(images/arrow_down.png)";
	} else {
	document.getElementById(div).className = "";
	//document.getElementById(ul2).style.backgroundImage = "url(images/arrow_right.png)";
	}
}
 
function toggleShowTopCategories() {
	var toggleAnchor = document.getElementById("toggleSidebar");
	var sidebarOverflow = document.getElementById("sidebarOverflow");
	var showAllCategories = readCookie("showAllCategories");
	if (!showAllCategories) {
		showAllCategories = "false";
	}
	if ( showAllCategories == "true") {
		sidebarOverflow.style.display = "none";
		toggleAnchor.innerHTML = "Browse All";
		createCookie("showAllCategories", "false", 1);
	} else {
		sidebarOverflow.style.display = "block";
		toggleAnchor.innerHTML = "Show Top Categories";
		createCookie("showAllCategories", "true", 1);
	}
}
 
// Cookie functionality from http://www.quirksmode.org/js/cookies.html
function createCookie(name,value,days) {
 if (days) {
  var date = new Date();
  date.setTime(date.getTime()+(days*24*60*60*1000));
  var expires = "; expires="+date.toGMTString();
 } else {
  var expires = "";
 }
 document.cookie = name+"="+value+expires+"; path=/";
}
function createSessionLongCookie(name,value) {
  var expires = "; expires=0";
 document.cookie = name+"="+value+"; path=/";
}
 
function readCookie(name) {
 var nameEQ = name + "=";
 var ca = document.cookie.split(';');
 for(var i=0;i < ca.length;i++) {
  var c = ca[i];
  while (c.charAt(0)==' ') c = c.substring(1,c.length);
  if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
 }
 return null;
}
 
function eraseCookie(name) {
 createCookie(name,"",-1);
}
// End www.quirksmode.org material

// updated for SIR #1662
function maskKeyPress(objEvent, reValidChars) {             
	var iKeyCode, strKey;
	var strUserAgent = navigator.userAgent.toLowerCase();
	var isIE = strUserAgent.indexOf("msie") > -1;
	var reKeyboardChars = /[\x00\x08\x09\x0D]/;		// HOME, END, ARROWS, DELETE, BACKSPACE, TAB, and ENTER
	if (isIE) {
		iKeyCode = objEvent.keyCode;
	} else {
		iKeyCode = objEvent.which; 
	}

	strKey = String.fromCharCode(iKeyCode);

	if (!reValidChars.test(strKey) && !reKeyboardChars.test(strKey) && !checkClipboardCode(objEvent, strKey)) {
		return false;
	}
}

// SIR #1662
// checks for keystrokes for cut, copy, paste, and undo 
// based on http://archive.devx.com/dhtml/articles/nz012402/nz012402-5.asp
function checkClipboardCode(objEvent, strKey) {
	var strUserAgent = navigator.userAgent.toLowerCase();
	var isIE = strUserAgent.indexOf("msie") > -1;
	var reClipboardChars;
    if (isIE) { 
    	reClipboardChars = /[\x03\x16\x18\x1A]/;
    	return reClipboardChars.test(strKey);
    } else {
    	reClipboardChars = /[cvxz]/i;
    	return objEvent.ctrlKey &&  reClipboardChars.test(strKey);
    }
}

// SIR #1662
// checks for valid entry, stores last valid text in "validValue" attribute
// based on http://archive.devx.com/dhtml/articles/nz012402/nz012402-5.asp
function maskChange(objEvent, reValidChars) {
	var strUserAgent = navigator.userAgent.toLowerCase();
	var isIE = strUserAgent.indexOf("msie") > -1;
    var objInput= isIE ? objEvent.srcElement: objEvent.target;
    
    if (objInput.value.length != 0 && !objInput.value.match(reValidChars)) {
       objInput.value = objInput.validValue || "";
       objInput.focus();
       objInput.select(); 
     } else {
       objInput.validValue = objInput.value;
     }
}

// SIR #1662
// does not allow the user to paste content that is not valid
// should be used with IE event "onpaste"
// based on http://archive.devx.com/dhtml/articles/nz012402/nz012402-5.asp
function maskPaste(objEvent, reValidChars) {
	var strUserAgent = navigator.userAgent.toLowerCase();
	var isIE = strUserAgent.indexOf("msie") > -1;
	if(!isIE)
		return;
		
     var strPasteData = window.clipboardData.getData("Text");
     var objInput = objEvent.srcElement;
   
     if (strPasteData.length != 0 && !strPasteData.match(reValidChars)) {
       objInput.focus();
       return false;
     }
}

function limitText(limitField, limitNum, limitBreak) {
	if (limitField.value.length > limitNum) {
		limitField.value = limitField.value.substring(0, limitNum);
	}
	if (limitField.value.length == limitBreak) {
		limitField.value = limitField.value + "\n";
	}
}
	
function isNumberKey(evt){
		 var charCode = (evt.which) ? evt.which : evt.keyCode
	 if ((charCode > 31 && (charCode < 46 || charCode > 57)))
		 return false;
     return true;
}

function getCreditCardType(ccnum) 
{
	// these need to match the name in the POLICY table
	
    // American Express: length 15, prefix 34 or 37.
    var re = /^3[4,7]\d{13}$/;
    if (re.test(ccnum))
    {
    	return "AMEX";
   	}
   	
    // Discover: length 16, prefix 6011.
//  var re = /^6011\d{12}$/;
//  if (re.test(ccnum))
//  {
//    	return "DISCOVER";
//  }
  
    // Mastercard: length 16, prefix 51-55.
    var re = /^5[1-5]\d{14}$/;
    if (re.test(ccnum))
    {
    	return "Master Card";
    }
    
    // Visa: length 13 or 16, prefix 4.
    var re = /^4(\d{12}|\d{15})$/;
    if (re.test(ccnum))
    {
       	return "VISA";
    }
      
    return "";
}

function luhn_check(cc)
{
   var sum = 0;
   var i;

   for (i = cc.length - 2; i >= 0; i -= 2) {
      sum += Array (0, 2, 4, 6, 8, 1, 3, 5, 7, 9) [parseInt (cc.charAt (i), 10)];
   }
   for (i = cc.length - 1; i >= 0; i -= 2) {
      sum += parseInt (cc.charAt (i), 10);
   }
   return (sum % 10) == 0;
}

function TabNext(obj,event,len,next_field) {
	if (event == "down") {
		var phone_field_length=obj.value.length;
		}
	else if (event == "up") {
		if (obj.value.length != phone_field_length) {
			var phone_field_length=obj.value.length;
			if (phone_field_length == len) {
				next_field.focus();
				}
			}
		}
}

///////////////////////////////////////////////////////////////////////////////
// This function is used to check if the CVV count is valid for a given CC type 
// e.g. "AMEX" is 4, "DISCOVER" is 3, "MASTER" is 3 and "VISA" is 3
///////////////////////////////////////////////////////////////////////////////
function ccidLengthCheck(ccType, cvvCount) {
	if ((ccType == "AMEX" && cvvCount == 4) || ((ccType == "Master Card" || ccType == "VISA") && (cvvCount == 3)) ) {
		return true;
	} else {
		return false;
	}
}

function movepic(img_name,img_src) {
document[img_name].src=img_src;
document.getElementById('myCart').style.color = "#388BA7";
}

function removepic(img_name, img_src) {
document[img_name].src=img_src;
document.getElementById('myCart').style.color = "#00324E";
}

function movepic_globalButtons(img_name,img_src) {
document[img_name].src=img_src;
}

//Purpose : To replace empty TDs in a dom object , with &nbsp; or the replace string passed.
function replaceEmptyTdWithSpace(tblId, replacestr){
	if(document.getElementById(tblId) == null){
		return;
	}	
	var allTDs = document.getElementById(tblId).getElementsByTagName("td");
	for (i=0;i< allTDs.length ; i++ )
	{
		var innerContent = allTDs[i].innerHTML;
		if(innerContent == ''){
			allTDs[i].innerHTML = replacestr;
		}	
	}
}

function handleEnterKey (field, event, functionName) {
		//alert("Inside handleEnterKey function name is: "+functionName);
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13) {
			eval(functionName);
			//submitForm(document.LogonForm);
		} 
		return true;
	}
	
function changeFocusOnEnter (event, objectId) {
	//alert("Inside changeFocusOnEnter take focus to object name: "+objectId);
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13) {
        document.getElementById(objectId).focus();
	} 
}
	
//Purpose : This function is a combination of handle Enter Key functionality and mask Keys.
//If the user entered key is 'Enter' then  handleEnterKey function is called else  maskKeyPress function is called.
function handleEnterKeyAndMaskKeyset (field, event, functionName, reValidChars) {		
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		//If the user entered key is 'Enter' i.e keycode=13 then call handleEnterKeyFunction else call the maskKeyPress function
		if (keyCode == 13) {
			return handleEnterKey(field, event, functionName);
		} else {
			return maskKeyPress(event, reValidChars);
		}		
	}	
			
// Used in OrderConfirmDisplay.jsp to remove alphabits and special characters(!, >, ?, $, # etc...) since Google don't allow them.
function removeAlphaandSpecialCharsNZero(fieldValue) {
	fieldValue =  fieldValue.replace(/[^0-9^.]+/g,'');
	// per Google documentation - these fields cannot contain the value zero (0). 
	//If you do not want to use these fields, use "".
	//alert('fieldValue is: '+fieldValue);
	if(fieldValue == '0.00') {
		fieldValue = "";
	}
	//alert('fieldValue after removing zero is: '+fieldValue);
	return fieldValue;
}  

//Purpose : This is the implementation for Javascript array Contains Element. 
//Returns true if the valueToCompare exists in the varArray passed. Else returns false.
//varArray - Javascript Array that needs to be tested
//valueToCompare - value that needs to be checked inside the array.
function arrayContainsElement(varArray, valueToCompare){
	if(!varArray) return false;
	for (var i = 0, loopCnt = varArray.length; i < loopCnt; i++) {
		if (varArray[i] == valueToCompare) return true;
	}	
	return false;
}

//Purpose : Gets the current date and writes it to the page.
function getDate() {
   d = new Array();
	d[0] = "Sunday";
	d[1] = "Monday";
	d[2] = "Tuesday";
	d[3] = "Wednesday";
	d[4] = "Thursday";
	d[5] = "Friday";
	d[6] = "Saturday";
	m = new Array();
	m[0] = "January";
	m[1] = "February";
	m[2] = "March";
	m[3] = "April";
	m[4] = "May";
	m[5] = "June";
	m[6] = "July";
	m[7] = "August";
	m[8] = "September";
	m[9] = "October";
	m[10] = "November";
	m[11] = "December";
    today = new Date();
   	document.write(d[today.getDay()]+", ");
	document.write(m[today.getMonth()]+" ");
	document.write(today.getDate()+", ");
	document.write(""+today.getFullYear());
}

function openWindow(id, url, props) {
	eval("page" + id + " = window.open('" + url + "', '" + id + "', '" + props + "');");
}

function setBrowserandOSInfo(formElementsArray) {
	//alert('formElementsArray lenth in setBrowserandOSInfo:'+formElementsArray.length);
	var nVer = navigator.appVersion;
	var nAgt = navigator.userAgent;
	var browserName  = navigator.appName;
	var fullVersion  = ''+parseFloat(navigator.appVersion); 
	var nameOffset,verOffset,ix;
	
	// In MSIE, the true version is after "MSIE" in userAgent
	if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
		browserName = "Microsoft Internet Explorer";
		fullVersion = nAgt.substring(verOffset+5);
	}
	// In Opera, the true version is after "Opera" 
	else if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
		 browserName = "Opera";
		 fullVersion = nAgt.substring(verOffset+6);
	}
	// In Chrome, the true version is after "Chrome" 
	else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
		 browserName = "Chrome";
		 fullVersion = nAgt.substring(verOffset+7);
	}
	// In Safari, the true version is after "Safari" 
	else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
		 browserName = "Safari";
		 fullVersion = nAgt.substring(verOffset+7);
	}
	// In Firefox, the true version is after "Firefox" 
	else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
		 browserName = "Firefox";
		 fullVersion = nAgt.substring(verOffset+8);
	}
	// In most other browsers, "name/version" is at the end of userAgent 
	else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) {
		 browserName = nAgt.substring(nameOffset,verOffset);
		 fullVersion = nAgt.substring(verOffset+1);
		 if (browserName.toLowerCase()==browserName.toUpperCase()) {
		  	browserName = navigator.appName;
		 }
	}
	// trim the fullVersion string at semicolon/space if present
	if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix);
	if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix);
	
	var majorVersion = parseInt(''+fullVersion,10);
	if (isNaN(majorVersion)) {
	 	fullVersion  = ''+parseFloat(navigator.appVersion); 
	}
	
	for (i = 0; i < formElementsArray.length; i++) {
		var currentField = formElementsArray[i];
		var currentElement = document.getElementById(currentField);
		if (currentElement) {
			//alert('currentElement.id is---->>>'+currentElement.id);
			if(currentElement.id == 'browserType') {
				currentElement.value = navigator.appName;
			}
			else if(currentElement.id == 'browserVersion') {
				currentElement.value = browserName + ' ' + fullVersion;
			}
			else if(currentElement.id == 'fullVersion') {
				currentElement.value = fullVersion;
			}
			else if(currentElement.id == 'platform') {
				currentElement.value = navigator.platform;
			}
			else if(currentElement.id == 'operatingSystem') {
				var osName = '';
				if (nAgt.indexOf("NT 3.1")!=-1) {
					osName = 'Windows NT 3.1';
				}
				else if (nAgt.indexOf("NT 3.5")!=-1) {
					osName = 'Windows NT 3.5';
				}
				else if (nAgt.indexOf("NT 3.51")!=-1) {
					osName = 'Windows NT 3.51';
				}
				else if (nAgt.indexOf("NT 4.0")!=-1) {
					osName = 'Windows NT 4.0';
				}
				else if (nAgt.indexOf("NT 5.0")!=-1) {
					osName = 'Windows 2000';
				}
				else if (nAgt.indexOf("NT 5.1")!=-1) {
					osName = 'Windows XP';
				}
				else if (nAgt.indexOf("NT 5.2")!=-1) {
					osName = 'Windows XP';
				}
				else if (nAgt.indexOf("NT 6.0")!=-1) {
					osName = 'Windows Vista';
				}
				else if (nAgt.indexOf("NT 6.1")!=-1) {
					osName = 'Windows 7';
				}
				currentElement.value = osName;
			}
			else if(currentElement.id == 'screenWidth') {
				currentElement.value = screen.width;
			}
			else if(currentElement.id == 'screenHeight') {
				currentElement.value = screen.height;
			}
			else if(currentElement.id == 'colorDepth') {
				currentElement.value = screen.colorDepth;
			}
			else if(currentElement.id == 'headerInformation') {
				currentElement.value = navigator.appVersion;
			}
			else if(currentElement.id == 'cookieEnabled') {
				currentElement.value = navigator.cookieEnabled;
			}
		}
	}
}

//Purpose : This is the implementation for generating a pattern for the elements array passed.
//Returns a string which is a concatenation of the elements passed separated by the delimiter.
//getElementsByNameObj -  This is an array which is returned from document.getElementsByName() 
//delimitterAcrossElements - delimitter that will be appended across elements.
function generatePatternForMetrics(getElementsByNameObj ,delimitterAcrossElements) {
	if(!getElementsByNameObj) return "";
	var concatenatedStr ="";
	for(var k = 0; k < getElementsByNameObj.length; k++) {        
        if(k==0) { 
        	concatenatedStr = getElementsByNameObj[k].value;
        } else {
        	concatenatedStr = concatenatedStr+ delimitterAcrossElements + getElementsByNameObj[k].value;
        }               		
    }
    return concatenatedStr;
}
//Purpose : This function will sum up the values of the document.getElementsByName() object passed. 
// This object passed should contain numbers in each of these fields.
//Returns 0 if the object passed is null.
//getElementsByNameObj -  This is an array which is returned from document.getElementsByName() 
function summationOfElementValues(getElementsByNameObj ) {
	var summationValue = "0";
	summationValue = summationValue * 1;
	if(!getElementsByNameObj) return summationValue;

	for(var k = 0; k < getElementsByNameObj.length; k++) {        
    	  summationValue = summationValue + getElementsByNameObj[k].value * 1;               		
    }
    return summationValue;
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
