function OpenWindow(sURL, iW, iH) {
	if (iW == 0 || iW == '') iW = 600;
	if (iH == 0 || iH == '') iW = 450;
	NewWindow = window.open(sURL,'DisplayWindow','toolbar=no,scrollbars=yes,width=' + iW + ',height=' + iH + ',resizable=yes');
	NewWindow.focus();
}

function SubRollOverRow(oTd, c) {
	if (c =='') c = "#FFFF99";
	if (!oTd.contains(event.fromElement)) {
		oTd.bgColor=c;
	}
}
function SubRollOutRow(oTr, c) {
	if (c =='') c = "#FFFFFF";
	if (!oTr.contains(event.toElement)) {
		oTr.bgColor=c;
	}
}

function CheckAgentForm(sFrm) {
	bReturn = true;
	sMsg = "";
	sCode = eval("document." + sFrm + ".AgentCode").value;
	//alert(sCode);
	if (eval("document." + sFrm + ".AgentFirstName").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a first name\n";
	}
	if (eval("document." + sFrm + ".AgentLastName").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a surname\n";
	}
	if (sCode =='' || sCode.length != 4) {
		bReturn = false;
		sMsg = sMsg + "You must enter a four character code for this agent.\n";
	}
	if (eval("document." + sFrm + ".AgentCompany").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter an institution name.\n";
	}
	if (eval("document." + sFrm + ".Address1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter an address\n";
	}
	if (eval("document." + sFrm + ".Suburb1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a suburb.\n";
	}
	if (eval("document." + sFrm + ".Postcode1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a postcode.\n";
	}
	if (eval("document." + sFrm + ".Phone1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a phone number.\n";
	}
	if (eval("document." + sFrm + ".Username").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a username.\n";
	}
	if (eval("document." + sFrm + ".Password").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a password.\n";
	}
	if (!isEmail(eval("document." + sFrm + ".AgentEmail").value)) {
		bReturn = false;
		sMsg = sMsg + "You must enter a valid email address.\n";
	}
	if (!bReturn) {
		alert(sMsg);
	}
	return bReturn;
}

function CheckUserForm(sFrm) {

	bReturn = true;
	sMsg = "";
	 //alert("blah");
	if (eval("document." + sFrm + ".UserFirstName").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter your first name\n";
	}
	if (eval("document." + sFrm + ".UserLastName").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter your surname\n";
	}
	if (eval("document." + sFrm + ".UserCompany").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter your institution name.\n";
	}
	if (eval("document." + sFrm + ".Address1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter your address\n";
	}
	if (eval("document." + sFrm + ".Suburb1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter your suburb.\n";
	}
	if (eval("document." + sFrm + ".Postcode1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter your postcode.\n";
	}
	if (eval("document." + sFrm + ".Phone1").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter your phone number.\n";
	}
	if (!isEmail(eval("document." + sFrm + ".UserEmail").value)) {
		bReturn = false;
		sMsg = sMsg + "You must enter your email address.\n";
	}
	if (!bReturn) {
		alert(sMsg);
	}
	return bReturn;
}
		
function CheckEventForm(sFrm) {
	bReturn = true;
	sMsg = "";
	 
	if (eval("document." + sFrm + ".EventTitle").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a title for the event\n";
	}
	if (eval("document." + sFrm + ".EventCost").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter an event cost\n";
	}
	if (eval("document." + sFrm + ".EventAddress").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter an address\n";
	}
	if (eval("document." + sFrm + ".EventSuburb").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a suburb.\n";
	}
	if (eval("document." + sFrm + ".EventPostcode").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a postcode.\n";
	}
	if (eval("document." + sFrm + ".EventPhone").value =='') {
		bReturn = false;
		sMsg = sMsg + "You must enter a contact phone number.\n";
	}
	if (!isEmail(eval("document." + sFrm + ".EventEmail").value)) {
		bReturn = false;
		sMsg = sMsg + "You must enter a contact email address.\n";
	}
	if (!bReturn) {
		alert(sMsg);
	}
	return bReturn;
}

function CheckPaymentForm(sFrm) {
	bReturn = true;
	sMsg = "";
	iSel = eval("document." + sFrm + ".PaymentMethod").selectedIndex;
	iCard = eval("document." + sFrm + ".CardNumber").value;
	sType = eval("document." + sFrm + ".CardType").value;
	sMth = eval("document." + sFrm + ".Expiry")[0].value;
	sYr = eval("document." + sFrm + ".Expiry")[1].value
	if (iSel == 0) {
		if (eval("document." + sFrm + ".CardName").value =='') {
			bReturn = false;
			sMsg = sMsg + "You must enter a name for your credit card.\n";
		}
		if (!isValidCardNo(iCard, sType)) {
			bReturn = false;
			sMsg = sMsg + "Please enter a valid credit card number.\n";
		}
		if( expired(sMth, sYr) ) {							// check if entered date is already expired.
			sMsg = sMsg + "Sorry! The expiration date you have entered would make this card invalid.";
			bReturn = false;
		}
	}
	if (!bReturn) {
		alert(sMsg);
	}
	return bReturn;
}
		
function isEmail(str) {
	// are regular expressions supported?
	var supported = 0;
	if (window.RegExp) {
		var tempStr = "a";
		var tempReg = new RegExp(tempStr);
		if (tempReg.test(tempStr)) supported = 1;
	}
	if (!supported) 
		return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
	return (!r1.test(str) && r2.test(str));
}

function mod10( cardNumber ) { // LUHN Formula for validation of credit card numbers.
	var ar = new Array( cardNumber.length );
	var i = 0,sum = 0;

	for( i = 0; i < cardNumber.length; ++i ) {
		ar[i] = parseInt(cardNumber.charAt(i));
    }
	for( i = ar.length -2; i >= 0; i-=2 ) { // you have to start from the right, and work back.
		ar[i] *= 2;							 // every second digit starting with the right most (check digit)
		if( ar[i] > 9 ) ar[i]-=9;			 // will be doubled, and summed with the skipped digits.
	}										 // if the double digit is > 9, ADD those individual digits together 

	for( i = 0; i < ar.length; ++i ) {
		sum += ar[i];						 // if the sum is divisible by 10 mod10 succeeds
	}
	return (((sum%10)==0)?true:false);	 	
}


function expired( month, year ) {
	var now = new Date();							// this function is designed to be Y2K compliant.
	var expiresIn = new Date("20" + year,month,0,0,0);		// create an expired on date object with valid thru expiration date
	expiresIn.setMonth(expiresIn.getMonth()+1);		// adjust the month, to first day, hour, minute & second of expired month
	if( now.getTime() < expiresIn.getTime() ) return false;
	return true;									// then we get the miliseconds, and do a long integer comparison
}


function isValidCardNo(cardNumber,cardType) {
	if( cardNumber.length == 0 ) {						//most of these checks are self explanitory
    	return false;				
	}
	var length = cardNumber.length;			//perform card specific length and prefix tests
	switch( cardType ) {
		case 'American Express':
			if( length != 15 ) {
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,2));
			if( prefix != 34 && prefix != 37 ) {
				return false;
			}
			break;
		case 'Diners Club':
			if( length != 16 ) {
				return false;
			}
			var prefix = parseInt( cardNumber.substring(0,4));
			if( prefix != 6011 ) {
				return false;
			}
			break;
		case 'MasterCard':
  			if( length != 16 ) {
  				return false;
  			}
  			var prefix = parseInt( cardNumber.substring(0,2));
			if( prefix < 51 || prefix > 55) {
      			return false;
      		}
      		break;
      	case 'VISA':
			if( length != 16 && length != 13 ) {
          		return false;
          	}
          	var prefix = parseInt( cardNumber.substring(0,1));
			if( prefix != 4 ) {
				return false;
			}
		break;
	}
	if( !mod10( cardNumber ) ) { 		// run the check digit algorithm
		return false;
	}
	return true; // at this point card has not been proven to be invalid
}


// code for disabling form elements below...

var b = navigator.appName
if (b=="Netscape") b = "ns"
else if (b=="Microsoft Internet Explorer") b = "ie"

if (b == 'ns') {
			var netscapeItems;
			var o;
			var arrElementsStatus = new Array();
			var arrElementsNames = new Array();
			var arrListBoxValue = new Array();

			netscapeItems = new details();

			this.document.captureEvents(Event.MOUSEDOWN);
			this.document.captureEvents(Event.FOCUS);
			this.document.onMouseDown=checkEvent;
			this.document.onFocus=checkEvent;
}
function disableObj(objIn) {
	if (b == "ns") {
		disableNS(objIn);
	}
	if (b == "ie") {
		objIn.disabled = 1;
	}
}
function enableObj(objIn) {
	if (b == "ns") {
		enableNS(objIn);
	}
	if (b == "ie") {
		objIn.disabled = 0;
	}
}		
		function disableNS(objName){
			if (objName[0] != null  && objName[0].type == 'radio') {
					arrElementsStatus[objName[0].name] = 'readonly';
			}
			else {
				if (objName.type == "select-multiple") {
					arrListBoxValue[objName.name] = objName.selectedIndex;
				}
				this.arrElementsStatus[objName.name] = 'readonly';
			}
		}
		function enableNS(objName){
			if (objName[0] != null && objName[0].type == 'radio') {
					arrElementsStatus[objName[0].name] = 'editable';
			}
			else {
				this.arrElementsStatus[objName.name] = 'editable';
			}
		}
		
		function details() {
			//Get Array Size
			for(i = 0; i<document.forms.length; i++) {
				nArraySize += document.forms[i].elements.length;
			}
			this.arrElementsNames = new Array(nArraySize);
			var k=0;
			//Go through each element : assign name &  readonly value to associative array
			for(i = 0; i<document.forms.length; i++) {
				for (j =0; j<document.forms[i].elements.length; j++) {
					if (document.forms[i].elements[j].type == "select-multiple") {
						arrListBoxValue[document.forms[i].elements[j].name] = document.forms[i].elements[j].selectedIndex;
					}
					arrElementsStatus[document.forms[i].elements[j].name] = 'editable';
					arrElementsNames[k++] = document.forms[i].elements[j].name;
				}
			}
		}
		
		function checkEvent(e) {
			if (e.target !="") {
				if (b == 'ns') {
					if (e.target.name) {
						if (arrElementsStatus[e.target.name] == 'readonly') {
							if (e.target.type == "select-multiple") {
								if (arrListBoxValue[e.target.name] != -1) {
									e.target[arrListBoxValue[e.target.name]].selected = true;
								}
								else {
									e.target.selectedIndex = -1;
								}
							}
							e.target.blur();
							return false;
						}
						else {
							return true;
						}
					}
				}
				else {
					return true;
				}
			}
		}
