
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_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');

}


function getRadioBoxSelectedValue(radioBox)  {
	var valueToReturn = radioBox.value;
    for (var iCount=0; iCount < radioBox.length; iCount++) {
       if (radioBox[iCount].checked) {
          return radioBox[iCount].value;
       }
    }
    return valueToReturn;
}

function selectRadioBox(radioBox, theValue){
    for (var iCount=0; iCount < radioBox.length; iCount++) {
       if (radioBox[iCount].value == theValue) {
          radioBox[iCount].checked = true;
       } else {
          radioBox[iCount].checked = false;
       }
    }
}

//***************************************************
// Function to see if there's any checkboxes checked
// Includes single and multiple checkbox situations
function isAnythingChecked(checkboxes) {
	var isChecked = false;
	if (checkboxes) {
		if (checkboxes.length) {
			for (var i=0; i<checkboxes.length; i++) {
				if (checkboxes[i].checked) {
					isChecked = true;
					break;
				}
			}
		} else {
			isChecked = checkboxes.checked;
		}
	}
	return isChecked;
}
//***************************************************
function anyRadioBoxSelected(radioBox)  {
    for (var iCount=0; iCount < radioBox.length; iCount++) {
       if (radioBox[iCount].checked) {
          return true;
       }
    }
    return false;
}
//***************************************************

function numItemsChecked(checkboxes) {
	if (!isAnythingChecked(checkboxes)) return 0;
	var checked = 0;
	if (checkboxes.length) {
		for (var i=0; i<checkboxes.length; i++) {
			if (checkboxes[i].checked) {
				checked++;
			}
		}
	}
	else if (checkboxes.checked) checked++;

	return checked;
}
//***************************************************
function checkOrUncheckAllCheckedBoxes(field, checkedOrUnchecked) {	
	if (field) {
		if (field.length && field[0]) {
			for (var i=0; i<field.length; i++) {
				field[i].checked = checkedOrUnchecked;
			}
		}
	}
}
//***************************************************
function getOptionListSelectedValues(CONTROL){
	var strArray = new Array();
	var controlIndex = 0;
	for(var i = 0; i < CONTROL.length; i++){
		if(CONTROL.options[i].selected == true){
			strArray[controlIndex++] = CONTROL.options[i].value;
		}
	}
	return strArray;
}
//***************************************************
function setAllOptionAsSelected(CONTROL){
	//Set all options as selected before submit
	for(var i = 0; i < CONTROL.length; i++){
		CONTROL.options[i].selected = true
	}
}

//***************************************************
function showFocus(msg,field) {
	alert(msg)
	field.focus()
	field.select()
}
//***************************************************
function submitFormWithUserAction(aForm, usrAction)
{
	  	aForm.userAction.value = usrAction;
	  	aForm.submit();
}
//***************************************************
function validatePhoneNumber(countryCodeField, areaCodeField, exchangeNumField, phoneNumFiled, isRequired, phoneType)  {
	if(areaCodeField == null && phoneNumFiled == null)  {
		return true;
	}
	areaCodeField.value = trimString(areaCodeField.value);
	exchangeNumField.value = trimString(exchangeNumField.value);
	phoneNumFiled.value = trimString(phoneNumFiled.value);
	if(areaCodeField.value == "" && phoneNumFiled.value == "" && exchangeNumField.value =="")
	{
		if(isRequired == true)  {
			showFocus("You must enter valid " + phoneType, areaCodeField);
			return false;
		} else {
			return true;
		}
	}
	if(areaCodeField.value == "" || areaCodeField.value.length != 3 || !checkInt(areaCodeField.value))  {
		showFocus("Enter 3 digit area code for " + phoneType, areaCodeField);
		return false;
	}
	if(phoneNumFiled.value != "") {
		phoneNumFiled.value = clearHiphens(phoneNumFiled.value);
		phoneNumFiled.value = clearSpaces(phoneNumFiled.value);
		exchangeNumField.value = clearHiphens(exchangeNumField.value);		
		exchangeNumField.value = clearSpaces(exchangeNumField.value);
	}
	if(exchangeNumField.value.length != 3 || !checkInt(exchangeNumField.value)) {
		showFocus("Enter valid phone number for " + phoneType + ".", exchangeNumField);
		return false;
	}
	
	if(phoneNumFiled.value.length != 4 || !checkInt(phoneNumFiled.value))  {
		showFocus("Enter valid phone number for " + phoneType + ".", phoneNumFiled);
		return false;
	}
	
	if(countryCodeField == null || countryCodeField.value == "")  {
		showFocus("Please select Country Code for the " + phoneType, countryCodeField);
		return false;
	}

	return true;
}
//***************************************************
function validateEmail(emailField){
	
	if(emailField == null)  {
		return true;
	}
	email = trimString(emailField.value);
	if(email == "") {
		return true;
	}else
	{
		
		if(email.indexOf('@') != -1 && email.indexOf('@')!= 0 && email.indexOf('@') < email.length && email.indexOf(' ')==-1)
		{
			var emailPreString = email.slice(0, email.indexOf('@')); 
			var emailPostString = email.slice(email.indexOf('@') +1, email.length);			
			if(checkJunkValues(emailPreString) && checkJunkValues(emailPostString))
			{
				
				if(email.indexOf('.') != -1 && email.indexOf('.')!= 0 && email.lastIndexOf('.') <= email.length-3 && email.charAt(email.length-1)!='.')
				{
					return true;
				}
			}			
		}			
	}
	alert("Please enter a valid E-mail Address.");	
	return false;
}	
//***************************************************
function validateAddress(line1Field, line2Field, cityField, stateField, countryField, postalCodeField)  {
	line1Field.value = trimString(line1Field.value);
	line2Field.value = trimString(line2Field.value);
	cityField.value = trimString(cityField.value);
	stateField.value = trimString(stateField.value);
	if(line1Field.value == "" || !checkJunkValues(line1Field.value))  {
		showFocus("Enter valid Address Line 1", line1Field);
		return false;
	}
	
	if(!checkJunkValues(line2Field.value)){
		showFocus("Enter valid line 2", line2Field);
		return false;	
	}
	
	if(cityField.value == "" )  {
		showFocus("Enter city name", cityField);
		return false;
	}
	
	if(cityField.value != "") {
		var objRegExp=new RegExp(/^([\sa-zA-Z\-\'])+$/);
		if(!objRegExp.exec(cityField.value)){
			showFocus("The City field may contain characters, spaces, apostrophe  and hyphens only.",cityField);
			return false;
		}		
	}		
	
	if(stateField.value == "")  {
		alert("Select state");
		return false;
	}
	return validatePostalCode(countryField, postalCodeField);
}
//***************************************************
function checkJunkValues(address){
	
	if(address.indexOf('#')!= -1 || address.indexOf('@')!= -1 || address.indexOf('%')!= -1 || address.indexOf('*')!= -1 || address.indexOf('$')!= -1 || address.indexOf('!')!= -1 || address.indexOf('^')!= -1 ||
	address.indexOf('&')!= -1 || address.indexOf('+')!= -1 || address.indexOf('=')!= -1 || address.indexOf('~')!= -1 || address.indexOf('<')!= -1 || address.indexOf('>')!= -1 || address.indexOf('?')!= -1) {
		
		return false;	
	} else
	{
		return true;
	}
}
//***************************************************
function validatePostalCode(countryField, postalCodeField)  {
	if(countryField == null || countryField.value == "")  {
		alert("Select Country");
		return false;
	}
	
	if(postalCodeField.value != "") {
		postalCodeField.value = clearHiphens(postalCodeField.value);
		postalCodeField.value = clearSpaces(postalCodeField.value);
	}
	if(countryField.value == "CA")  {
			if(postalCodeField.value.length != 6 || checkJunkValues(postalCodeField.value) == false)  {
			showFocus("Canadian postal codes include a combination of 6 letters and numbers (e.g. C1E1E8). Enter postal code criteria in this format.", postalCodeField);
			return false;
		}
	} else {
		if(!checkInt(postalCodeField.value))  {
			showFocus("Enter numeric values for Postal code", postalCodeField);
			return false;
		}
		if(postalCodeField.value.length != 5)  {
			showFocus("Enter only 5 digit ZIP code", postalCodeField);
			return false;
		}
	}
	return true;
}

//***************************************************
function trimString(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}
//***************************************************
function clearSpaces(passedVal) {
	if (passedVal == "") {
		return passedVal
	}
	var val = ""
	for (i=0; i<passedVal.length ; i++) {
		if(passedVal.charAt(i) == " "){
			continue
		}
		else{
			val = val + passedVal.charAt(i);
		}
	}
	return val
}
//***************************************************
function clearHiphens(passedVal) {
	if (passedVal == "") {
		return passedVal
	}
	var val = ""
	for (i=0; i<passedVal.length ; i++) {
		if(passedVal.charAt(i) == "-"){
			continue
		}
		else{
			val = val + passedVal.charAt(i);
		}
	}
	return val
}
//***************************************************
function checkInt(val){
	for (i=0; i<val.length ; i++) {
		if (val.charAt(i) < "0") {
			return false
		}
		if (val.charAt(i) > "9") {
			return false
		}
	}
	return true
}
//***************************************************
function isNum(passedVal) {
	if (passedVal == "") {
		return false;
	}
	for (i=0; i<passedVal.length ; i++) {
		if (passedVal.charAt(i) < "0" || passedVal.charAt(i) > "9") {
			return false;
		}
	}
	return true;
}

//***************************************************
function addSelections(availableList, selectedList){
	if(!hasOptions(availableList)){
		return;
	}
	for(var i=0;i<availableList.options.length;i++){
		var o = availableList.options[i];
		if(o.selected){
			if(!hasOptions(selectedList)){
				var index = 0;
			}else{
				var index=selectedList.options.length;
			}
			selectedList.options[index] = new Option( o.text, o.value, false, false);
		}
	}
	for(var i=(availableList.options.length-1);i>=0;i--){
		var o = availableList.options[i];
		if(o.selected){
			availableList.options[i] = null;
		}
	}
	if((arguments.length<3) ||(arguments[2]==true)){
		sortSelect(availableList);
		sortSelect(selectedList);
	}
	availableList.selectedIndex = -1;
	selectedList.selectedIndex = -1;
}

function removeSelections(selectedList, availableList){
	if(!hasOptions(selectedList)){
		return;
	}
	for(var i = 0; i < selectedList.options.length; i++){
		var o = selectedList.options[i];
		if(o.selected){
			if(!hasOptions(availableList)){
				var index = 0;
			}else{
				var index=availableList.options.length;
			}
			availableList.options[index] = new Option( o.text, o.value, false, false);
		}
	}
	for(var i=(selectedList.options.length-1);i>=0;i--){
		var o = selectedList.options[i];
		if(o.selected){
			selectedList.options[i] = null;
		}
	}
	if((arguments.length<3) ||(arguments[2]==true)){
		sortSelect(selectedList);
		sortSelect(availableList);
	}
	selectedList.selectedIndex = -1;
	availableList.selectedIndex = -1;
}

function sortSelect(obj) {
	var o = new Array();
	if (!hasOptions(obj)) {
		return;
	}
	for (var i=0; i<obj.options.length; i++) {
		o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected) ;
	}
	if (o.length==0) {
		return;
	}
	o = o.sort(
		function(a,b) {
			if ((a.text+"") < (b.text+"")) { return -1; }
			if ((a.text+"") > (b.text+"")) { return 1; }
			return 0;
			}
		);
	for (var i=0; i<o.length; i++) {
		obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
	}
}
function hasOptions(obj) {
	if (obj!=null && obj.options!=null) {
		return true;
	}
	return false;
}

//***************************************************
function addAllSelections(availableList, selectedList){
	setAllOptionAsSelected(availableList);
	addSelections(availableList, selectedList)
}

//***************************************************
function anyOptionSelected(anOptionList){
	if(!hasOptions(anOptionList)){
		return false;
	}
	for(var i=(anOptionList.options.length-1);i>=0;i--){
		var o = anOptionList.options[i];
		if(o.selected){
			return true;
		}
	}
	return false;
}

//***************************************************
function completeContextSelection(aForm, branchLevelContext, territoryLevelContext, dealerLevelContext, servletName)
{
	if(aForm.userSelectedDealerIDs.length > 0)
	{
		selectDealers(aForm, dealerLevelContext, servletName);
		return true;
	}
	else if(aForm.userSelectedTerritoryCodes.length > 0)
	{
		selectTerritories(aForm, territoryLevelContext, servletName);
		return true;
	}
	else
	{
	    aForm.userAction.value = branchLevelContext;
		aForm.action = servletName;
		aForm.submit();
	    return true;
	}
}

//***************************************************
function selectBranch(aForm, usrAction, servletName)
{
	if(aForm.userSelectedBranchCode.value == "")
	{
		alert("Select a Branch");
		return false;
	}

    aForm.userAction.value = usrAction;
	aForm.action = servletName;
	aForm.submit();
    return true;
}
//***************************************************
function selectTerritories(aForm, usrAction, servletName)
{
	if(aForm.userSelectedTerritoryCodes.length == 0)
	{
		alert("Include at least one Territory");
		return false;
	}

 	setAllOptionAsSelected(aForm.userSelectedTerritoryCodes);
    aForm.userAction.value = usrAction;
	aForm.action = servletName;
	aForm.submit();
    return true;
}

//***************************************************
function fetchDealersOfTerritory(aForm, usrAction, servletName)
{
	if(aForm.userSelectedTerritoryCodes.length == 0)
	{
		alert("Include a Territory to retrieve Dealer Accounts");
		return false;
	}
	else if(aForm.userSelectedTerritoryCodes.length > 1)
	{
		alert("Include only one Territory to retrieve Dealer Accounts");
		return false;
	}
	else
	{
		setAllOptionAsSelected(aForm.userSelectedTerritoryCodes);
	    aForm.userAction.value = usrAction;
		aForm.action = servletName;
		aForm.submit();
	    return true;
    }
}

//***************************************************
function selectDealers(aForm, usrAction, servletName)
{
	if(aForm.userSelectedDealerIDs.length == 0)
	{
		alert("Include at least one Dealer");
		return false;
	}

	setAllOptionAsSelected(aForm.userSelectedDealerIDs);
    aForm.userAction.value = usrAction;
	aForm.action = servletName;
	aForm.submit();
    return true;
}

//***************************************************
function selectDealer(aForm, usrAction, currentDelaerID, servletName)
{
	if(validateDealerID(aForm, currentDelaerID) == false)
	{
	    return false;
	}
    aForm.userAction.value = usrAction;
	aForm.action = servletName;
	aForm.submit();
    return true;
}

function validateDealerID(aForm, currentDelaerID)
{
	selDealerId = trimString(aForm.userSelectedDealerID.value);
    aForm.userSelectedDealerID.value = selDealerId;
    if(selDealerId == null || selDealerId == "" || selDealerId.length < 1)  {
    	showFocus("Enter Dealer Id", aForm.userSelectedDealerID);
    	return false;
    }  else if(isNum(selDealerId) == false)  {
    	showFocus("Dealer Id should be 6 digit number: " + selDealerId, aForm.userSelectedDealerID);
		return false;
    }  else if(selDealerId.length != 6)  {
    	showFocus("Dealer Id should be 6 digit number: " + selDealerId, aForm.userSelectedDealerID);
		return false;
    }  else if(selDealerId == currentDelaerID)  {
    	showFocus(selDealerId + ": Selected Dealer is in context. Enter different Dealer ID", aForm.userSelectedDealerID);
		return false;
    }
    return true;
}

//***************************************************
function displayJDAIMStyleHoverText(text){
	return overlib(
				text,
				BGCOLOR, '#FFF0AF', 
				BORDER, '0',  
				FGCOLOR, '#FFF0AF', 
				WIDTH, '225', 
				CELLPAD, '4',	
				STICKY, MOUSEOFF);
}
//***************************************************
function displayHoverTextVariableWidth(text, width, xposition){
	return overlib(
				text,
				BGCOLOR, '#FFF0AF', 
				BORDER, '0',  
				FGCOLOR, '#FFF0AF', 
				WIDTH, width,   //'120', 
				CELLPAD, '4',
				FIXX, xposition, //'180',
				STICKY, MOUSEOFF);
}
//***************************************************
function displayHoverText(text)
{
	return displayJDAIMStyleHoverText(text);
}
//***************************************************
function hideHoverText()
{
	return nd(2);
}
//***************************************************
function moveNextField(currentField, length, nextField, evnt) {	
	if (currentField != null && currentField.value != null && currentField.value.length >= length && !isFilter(evnt)) {
		nextField.focus();
		nextField.select();
	}
}
//***************************************************
function isFilter(e) {
	var isNN = (navigator.appName.indexOf("Netscape")!=-1);
	var keyCode = (isNN) ? e.which : e.keyCode; 
	var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
	return containsElement(filter,keyCode);
}

function containsElement(arr, ele) {
	for (i=0; i<arr.length; i++) 
		if (arr[i] == ele) return true;	
	return false;
}