//reference to last-focused
var lastFocused = 'nothing';

//check all form elements
function checkEls(){
	var el;
	for (i = 0; i < document.forms[0].elements.length; i++){
		el = document.forms[0].elements[i];
		// if this doesn't already have an onClick handler
		// set it to have one that resets lastFocused
		if (!el.onclick)
			el.onclick = function () {lastFocused='nothing';};
	}
	document.body.onclick = function () {lastFocused='nothing';};
}

function goback() {
	history.back();
}

function printPage() {
  if (window.print)
    window.print();
  else
    alert("Sorry, your browser doesn't support this feature. Please print from the browser menu bar.");
} 


function otherFocus(textboxObj, radioGroup, indexNo)
{
	radioGroup[indexNo].checked = true;
	//radioGroup[radioGroup.length-1].checked = true; // last
}

function otherBlur(textboxObj, radioGroup, indexNo)
{
	textboxObj.value = trim(textboxObj.value);
	if (textboxObj.value == "") {
		radioGroup[indexNo].checked = false;
		lastFocused = textboxObj;
	}
}

function otherClick(textboxObj, objClicked)
{
	if (lastFocused == textboxObj) {
		objClicked.checked = false;
	}
	if (objClicked.checked) {
		textboxObj.focus();
	} else {
		textboxObj.value = "";
	}
	lastFocused = objClicked;
}

//checks value is correct email syntax using reg exp, and trims spaces
function Email_onblur(emailField) {

	var Email = trim(emailField.value);
	emailField.value = Email;

	if (Email != "") {
		var re = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
		if (!re.test(Email)) {
			alert("Please make sure the email address you have entered is correct.");
			emailField.focus();
			return false;
		}
	}
	return true;
}



//trim leading and trailing spaces from a text box
function trimFld(myfield) {	
	myfield.value = trim(myfield.value);
}

//remove leading & trailing spaces
function trim(strText) { 
	strText = strText.replace(/^\s+/, ""); //remove leading spaces
	strText = strText.replace(/\s+$/, ""); //remove trailing spaces
	return strText;
}

//allow only number in input box
// CL - now allows enter, tab, del, backspace to happen in non IE 
//      (IE let them through anyway because they didn't trigger an event)
function KeyCheck(e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	if (((keycode>47) && (keycode<58) )  || (keycode==0) || (keycode==127) || (keycode==9) || (keycode==8) || (keycode==13)) { return true; }
	else {
		alert("Please type in numbers 0-9 only. No spaces please");
		return false;
	}
}

//allow only number & space in input box
function KeyCheckSpace(e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	if (((keycode>47) && (keycode<58) )  || (keycode==0) || (keycode==127) || (keycode==9) || (keycode==8) || (keycode==13) || (keycode==32)) { return true; }
	else {
		alert("Please type in numbers or spaces only.");
		return false;
	}
}

function State_onChange(f) {
	with (f) {
		//Australia
		switch(State.selectedIndex) {
			//Vic
			case 0:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "03");
				break;
			//Nsw
			case 1:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "02");
				break;
			//Qld
			case 2:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "07");
				break;
			//SA
			case 3:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "08");
				break;
			//NT
			case 4:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "08");
				break;
			//WA
			case 5:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "08");
				break;
			//Tas
			case 6:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "03");
				break;
			//Act
			case 7:
				ChangeCountry(f, 1);
				SetAreaCodes(f, "02");
				break;				
			default:
				ChangeCountry(f, 0);
				SetAreaCodes(f, "");
				ShowOther(f, 'divt1');
				break;
		}	//switch
	}//with
}

function ChangeCountry(form, newIndex) {
	form.Country.selectedIndex = newIndex;
}

function SetAreaCodes(f, newVal) {
	f.PhoneArea.value = newVal;
	f.FaxArea.value = newVal;
}

var isIE=document.all?true:false; 
var isDOM=document.getElementById?true:false; 
var isNS4=document.layers?true:false;
function ShowHide(hide,_w) {
  	if (isDOM) {
    	if (!hide) {
    		document.getElementById(_w).style.display='inline';
    		document.getElementById(_w).style.visibility='visible';
    	}
    	else {
    		document.getElementById(_w).style.display='none';
    		document.getElementById(_w).style.visibility='hidden';
    	}
  	}
  	else if (isIE) {
    	if (!hide) {
    		eval("document.all."+_w+".style.display='inline';");
    		eval("document.all."+_w+".style.visibility='visible';");
    	}
    	else {
    		eval("document.all."+_w+".style.display='none';");
    		eval("document.all."+_w+".style.visibility='hidden';");
    	}
  	}
  	else if(isNS4) {
    	if (!hide) {
    		eval("document.layers['"+_w+"'].display='inline';");
    		eval("document.layers['"+_w+"'].visibility='show';");
    	}
    	else {
    		eval("document.layers['"+_w+"'].display='none';");
    		eval("document.layers['"+_w+"'].visibility='hide';");
    	}
  	}
}

function ShowOther(f,_w) {
	ShowHide(false,_w);
	f.State_Other.focus();
}
function CheckBlank(f,tb) {
	tb.value = trim(tb.value)
	if (tb.value == "") {
		//hide this & reset title select
		f.State.selectedIndex = 0;
		ShowHide(true,"divt1");
	}
}

function CheckState(sel) {
	if (sel.selectedIndex != 1) {
		//non australia, so swap state to other
		sel.form.State.selectedIndex = 8;
		//ShowOther(sel.form, "divt1");
		
		//also blank out area codes
		SetAreaCodes(sel.form, "");
	}
}


function Title_onchange(f,_w) {
	var hide;
	if (f.Title.options[f.Title.selectedIndex].value == "Other")
		hide = false;	//visible
	else
		hide = true;	//hidden

	ShowHide(hide,_w);
	
  	//Other is selected, so move focus to Title_Other. Otherwise, move focus to FirstName
  	if (!hide) {
  		f.Title_Other.focus();
  	}
  	else {
  		//if it is hidden again, reset its value to blank
  		f.Title_Other.value = '';
  		f.FirstName.focus();
  	}
}

function Title_Other_onblur(f) {
	f.Title_Other.value = trim(f.Title_Other.value)
	if (f.Title_Other.value == '') {
		//hide this & reset title select
		f.Title.selectedIndex = 0;
		ShowHide(true,"divt1");
	}
}

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 checkThis(obj, name) {
	var retVal = true;
	if (obj.type == "text") {
		if (obj.value.length == 0) {
			alert("Please enter a value for the " + name + " field.");
			obj.focus();
			retVal = false;
		}
	} else if (obj.type == "select-one") {
		if (obj.options[obj.selectedIndex].value == "NONE") {
			alert("Please pick one of the options for the " + name + " field.");
			obj.focus();
			retVal = false;
		}
	} else if (obj[0] && typeof(obj) != "string") {
		var noneChecked = true;
		for (var i = 0; i < obj.length; i++) {
			if (obj[i].checked)
				noneChecked = false;
		}
		if (noneChecked) {
			alert("Please pick at least one of the options for " + name + ".");
			obj[0].focus();
			retVal = false;
		}
	} 
	return retVal;
}


//check the credit card fields
function checkCreditCard(f) {
	if (!valRequired(MM_findObj('CardType'), 'Card Type')) return false;
	if (!valRequired(MM_findObj('CardNumber'), 'Card Number')) return false;
	if (!valRequired(MM_findObj('CardHolder'), 'Card Holder')) return false;	
	if (!valRequired(MM_findObj('CardExpMonth'), 'Card Expiry Month')) return false;
	if (!valRequired(MM_findObj('CardExpYear'), 'Card Expiry Year')) return false;
	//if (MM_findObj('CardType').selectedIndex==4) {
	if (MM_findObj('CardType').value=='AMERICANEXPRESS') {
		if (MM_findObj('CardNumber').value.length !=15 ) {
			 alert('Amex Card Number must be 15 digits');
			 MM_findObj('CardNumber').focus();
			 return false;
			 }
		}
	//else if (MM_findObj('CardType').selectedIndex==5) {
	else if (MM_findObj('CardType').value=='DINERSCLUB') {
		if (MM_findObj('CardNumber').value.length !=14 ) {
			 alert('Diners Card Number must be 14 digits');
			 MM_findObj('CardNumber').focus();
			 return false;
			 }
		}
	//else if (MM_findObj('CardType').selectedIndex==3) {
	else if (MM_findObj('CardType').value=='VISA') {
		if ((MM_findObj('CardNumber').value.length !=13 ) && (MM_findObj('CardNumber').value.length !=16 )) {
			 alert('VISA Card Number must be 13 or 16 digits');
			 MM_findObj('CardNumber').focus();
			 return false;
			 }
		}
	else {
		if (MM_findObj('CardNumber').value.length !=16 ) {
			 alert('Card Number must be 16 digits');
			 MM_findObj('CardNumber').focus();
			 return false;
			 }
		}
	var number = MM_findObj('CardNumber').value;
	var type = MM_findObj('CardType').value;
	if (!verifyCCNumber(number, type)){
		alert("Invalid credit card number.");
		MM_findObj('CardNumber').focus();
		return false;
		}
	return true;
}
function verifyCCNumber(cardNum, cardType){
	//var cardNum = document.getElementById(val.controltovalidate).value;
	//var listObj = document.getElementById(val.CreditCardListControl);
	//var cardType = listObj.options[listObj.selectedIndex].value;
	cardNum = cardNum.replace(/-|\s/g,'');
	if(isCardTypeCorrect(cardNum, cardType) && isNumberValid(cardNum)) return true;
	else return false;
}
function isNumberValid(cardNum){
	var nCheck = 0;
	var nDigit = 0;
	var bEven  = false;
	for (n = cardNum.length - 1; n >= 0; n--) {
		var cDigit = cardNum.charAt (n);
		if (isDigit (cDigit)) {
			var nDigit = parseInt(cDigit, 10);
			if (bEven) {
				if ((nDigit *= 2) > 9) nDigit -= 9;
			}
			nCheck += nDigit;
			bEven = ! bEven;
		}
		else if(cDigit != ' ' && cDigit != '.' && cDigit != '-') return false;
	}
	return (nCheck % 10) == 0;
}
function isDigit (c) {
	var strAllowed = '1234567890';
	return (strAllowed.indexOf(c) != -1);
}
function isCardTypeCorrect(cardNum, cardType){
	return cardNum.match(getRegexp(cardType));
}
function getRegexp(cardType){
	switch(cardType){
		case 'VISA':
			return '^[4]([0-9]{15}$|[0-9]{12}$)';
		case 'MASTERCARD':
			return '^[5][1-5][0-9]{14}$';
		case 'AMERICANEXPRESS':
			return '^[34|37][0-9]{14}$';
		case 'DINERSCLUB':
			return '(^30[0-5][0-9]{11}$)|(^(36|38)[0-9]{12}$)';
		default:
			return '';
	}
}
// returns the amount in the .99 format 
function cent(amount) {
    amount -= 0;
    amount = (Math.round(amount*100))/100;
    return (amount == Math.floor(amount)) ? amount + '.00' : (  (amount*10 == Math.floor(amount*10)) ? amount + '0' : amount);
}

function valRequired(obj, msg) {
	var retVal = true;

	if (obj.type == "text" || obj.type == "textarea") {
		if (obj.value.length == 0) {
			if (msg!="") {
				alert("Please enter a value for the " + msg + " field.");
				obj.focus();
			}
			retVal = false;
		}
	} else if (obj.type == "select-one" || obj.type == "select-multiple") {
		if (obj.options[obj.selectedIndex].value == "NONE" || obj.options[obj.selectedIndex].value == "" || obj.selectedIndex==0) {
			if (msg!="") {
				alert("Please pick one of the options for the " + msg + " field.");
				obj.focus();
			}
			retVal = false;
		}
	} else if (obj[0] && typeof(obj) != "string") {
		var noneChecked = true;
		for (var i = 0; i < obj.length; i++) {
			if (obj[i].checked)
				noneChecked = false;
		}
		if (noneChecked) {
			if (msg!="") {
				alert("Please pick at least one of the answers to " + msg + ".");
				obj[0].focus();
			}
			retVal = false;
		}
	} else if (obj.type == "checkbox") {
		if (obj.checked==false) {
			if (msg!="") {
				alert("Please pick at least one of the answers to " + msg + ".");
				obj.focus();
			}
			
			retVal = false;
		}
	} 
	
	return retVal;
}
function displayPanel(panelObj, display){
	panelObj.style.display = display;
}

function textLimit(field, maxlen) {
	if (field.value.length > maxlen + 1)
		alert('Max length for this field is ' + maxlen + ' characters. Your input has been truncated!');
	if (field.value.length > maxlen)
		field.value = field.value.substring(0, maxlen);
}	
function resetRadioGroup(radioGroup) {
	if (typeof(radioGroup)=="string") {
		// if string name only specified, then convert to radio obj
		radioGroup=MM_findObj(radioGroup);
	}
	
	if (radioGroup[0]) { // radio group
		for (var i=0;i < radioGroup.length;i++) {
			radioGroup[i].checked = false; 
		}
	} else { // stand alone radio button
		radioGroup.checked=false;
	}
}

function disableRadioGroup(radioGroup, disable) {
	if (typeof(radioGroup)=="string") {
		// if string name only specified, then convert to radio obj
		radioGroup=MM_findObj(radioGroup);
	}
	
	if (radioGroup[0]) { // radio group
		for (var i=0;i < radioGroup.length;i++) {
			radioGroup[i].disabled = disable; 
		}
	} else { // stand alone radio button
		radioGroup.disabled=disable;
	}
}

function isNumeric(elem, warning){
	var numericExpression = /^[0-9]+$/;
	if(elem.value.match(numericExpression)){
		return true;
	}else{
		alert(warning);
		elem.focus();
		return false;
	}
}

function selectElement(f) {
	MM_findObj(f).checked = true;
}

function checkOther(selectItem, otherTextbox, errorMessage) {
	if(MM_findObj(selectItem).checked) {
			if(MM_findObj(otherTextbox).value == "") {
				alert(errorMessage);				
				MM_findObj(otherTextbox).focus();
				return false;
			}
	}
	return true;
}

function change_select(passedSelect, value){
    var this_select = document.getElementById(passedSelect);
    var i;
    this_select[0].selected = true;
    for (i = 0; i < this_select.length; i++){
        if ( this_select[i].value.toUpperCase() == value.toUpperCase()){
            this_select[i].selected = true;
        }
    }
    return false;
}