    var rowNumber = 2;

    function createInput(inputId, inputType, inputClass, inputName, inputOnblur, inputValidation, inputMandatory, width){
        var inputObj = document.createElement('input');

        inputObj.id=inputId;
        inputObj.type=inputType;
        inputObj.className=inputClass;
        inputObj.name=inputName;
        inputObj.style.width = parseInt(width)+'px';
        inputObj.onblur=inputOnblur;
        inputObj.validation=inputValidation;
        inputObj.mandatory=inputMandatory;

        return inputObj;

    }


var testRow1 = [
  [ ["hidden", "hidden", "text", "hidden", "checkValue(this.id);", "no", "false", 90]  ]

, [ ["Meter_Number_", "text", "text", "~Meter_Number_", "checkValue(this.id);", "alphanumeric", "true", 80] ]

]
var testRow2 = [
  [ ["Meter_Number_", "text", "text", "~Meter_Number_", "checkValue(this.id);", "alphanumeric", "true", 80] ]

, [ ["Street_Number_", "text", "text", "~Street_Number_", "checkValue(this.id);", "no", "false", 30]
   ,["Street_", "text", "text", "~Street_", "checkValue(this.id);", "no", "false", 120]
   ,["Suburb_", "text", "text", "~Suburb_", "checkValue(this.id);", "no", "false", 90]
   ,["Pcode_", "text", "text", "~Pcode_", "checkValue(this.id);", "no", "false", 50]
  ]
]

    
	function addRow ( tableId, data, maxRows ) {
		if(document.getElementById(tableId).rows.length < maxRows) {
		      var tbl = document.getElementById(tableId);
			tbl.tBodies[0].appendChild(makeRow(data));
		}else{
		alert('Maximum number of rows reached.');
		}
	}

    function makeRow ( cellArray ) {
    
    	var row  = document.createElement('tr');
	for ( var i=0; i < cellArray.length; i++ ) {
		
		row.appendChild(makeCell(rowNumber, cellArray[i]));
       	
	}
	rowNumber++;
    	return row;
    }
    
    function makeCell ( rowId, cellData ) {
    	
    	var tdCell = document.createElement('td');
    	for ( var i=0; i < cellData.length; i++ ) {
    		//alert(cellData[i][0] + rowId +", "+ cellData[i][1] + ", "+ cellData[i][2] +", "+cellData[i][3] + rowId +", "+ cellData[i][4] +",  "+ cellData[i][5] +", "+ cellData[i][6] +", "+ cellData[i][7]);
    		tdCell.appendChild(createInput(cellData[i][0] + rowId,
    			cellData[i][1],
    			cellData[i][2],
    			cellData[i][3] + rowId,
    			cellData[i][4],
    			cellData[i][5],
    			cellData[i][6],
    			cellData[i][7]));
    	}
    	return tdCell;
    }

	
	function closeToggle() {
	
		toggleTag('reprogram_meter','required_meter_program_td'); 
		toggleTag('service_order_follow_up','service_order_follow_up_td'); 
		toggleTag('other','other_request_descriptor_td'); 
		toggleTag('final_reading','include_details_notification_td');
		toggleTag('access_current','access_current_td');
		toggleTag('access_new','access_new_td');
		toggleTag('change_retailer','change_retailer_td');
		toggleTag('change_retailer_erroneous','erroneous_transfer_td');
		toggleTag('change_retailer_other','other_transfer_reason_td');
		toggleTag('exit_point','exit_point_td');
		toggleTag('new_connection','new_connection_td');
		toggleTag('upgrade_connection','upgrade_connection_td');
		
	}
	
	//used for conditional input fields
	function toggleTag(checkObjectId, targetObjId) {
	
	if ( document.getElementById(checkObjectId) ) {
		// find the checkbox
		if(document.getElementById(checkObjectId).checked == true) {
			// if browser == IE
			if(navigator.userAgent.indexOf('MSIE') > -1){
				// find the target and set to block
				document.getElementById(targetObjId).style.display = "block";
			} else {
				// find the target set to table-cell
				document.getElementById(targetObjId).style.display = "table-cell";
			}
		} else {
			// find the target, set to none
			document.getElementById(targetObjId).style.display = "none";
		}
		}
	}
	
	function condRequire() {
		var	meterConsent = ((document.getElementById('metering_data').checked) && (!document.getElementById('custconsent').checked));
		var bothConsent = ((document.getElementById('both_requirements').checked) && (!document.getElementById('custconsent').checked));
		var retValRequire = true;
		
		if((meterConsent) || (bothConsent)){
			alert('You have not indicated consent from the customer. \nPlease tick the box to acknowledge consent before proceeding.');
			retValRequire = false;
		}
	
		return retValRequire;
	}
	
	function agreedTerms(formObj){
		
		if(!document.getElementById('tc_agreement').checked){
			//alert('To submit the '+ formObj.title +' you must agree to the terms and conditions.'); return false;
			alert('Before you can submit your claim, you must read and accept the Terms and Conditions'); return false;
			}
		return true;
	}
	
	function streetNumber(fieldSection){
	
	var streetNo = (document.getElementById('street_number').value != "");
	var unitNo = (document.getElementById('unit_number').value != "");
	var lotNo = (document.getElementById('lot_number').value != "");
	var retValStreetNumber = true;
	if((!streetNo) && (!unitNo) && (!lotNo)){
		alert('Please supply an Address Number in ' + fieldSection);
		document.getElementById('street_number').style.backgroundColor = "lightblue"; 
		document.getElementById('unit_number').style.backgroundColor = "lightblue"; 
		document.getElementById('lot_number').style.backgroundColor = "lightblue"; 
		retValStreetNumber = false;
	} else if((unitNo) && (!streetNo) && (!lotNo)){
		alert('Please supply a Lot or Street Number in ' + fieldSection); 
		document.getElementById('street_number').style.backgroundColor = "lightblue";
		document.getElementById('lot_number').style.backgroundColor = "lightblue";
		retValStreetNumber = false;
	}
	return retValStreetNumber;
	}
	
	function custValidate (formObj) {
	var streetResult = false;
	var retValCustVal = false;
	switch(formObj.id)
	{
		case "rmaso":
					streetResult = streetNumber('4. Site Information') && agreedTerms(formObj);
					break;					
		case "ctrf": 
		 			streetResult =  streetNumber('2. Customer Information');
					break;
		case "naaf": 
		 			streetResult =  streetNumber('4. Customer Information');
					break;
		case "rsdf":
					streetResult = streetNumber('2. Customer Information');
					break;					
		case "rhcd": 
		 			streetResult =  streetNumber('2. Customer Information');
					break;
		case "eops":
					streetResult = agreedTerms(formObj);
					break;
	}
		if (streetResult){
			retValCustVal=validateForm(formObj.id);
			if(retValCustVal){
				formObj.submit();
			}
		}
		
		checkPower();
		
		//alert("custValidate: " + retValCustVal);
		return retValCustVal;  //added return line.
		
	}
	
	function setSubject(){
		var siteStreet = document.getElementById('site_street');
		var siteSuburb = document.getElementById('site_suburb');
		var siteLotNo = document.getElementById('lot_number');
		var siteUnitNo = document.getElementById('unit_number');
		var siteStreetNo = document.getElementById('street_number');
		var subjectLine = document.getElementById('subject');
			
		if (siteLotNo.value != null && siteLotNo.value != ""){
			subjectLine.value = subjectLine.value + "Lot " + siteLotNo.value + ",";
		}
		
		if (siteUnitNo.value != null && siteUnitNo.value != ""){
			subjectLine.value = subjectLine.value + " Unit " + siteUnitNo.value + "/";
		}	
		
		if (siteStreetNo.value != null && siteStreetNo.value != ""){
			subjectLine.value = subjectLine.value + siteStreetNo.value + " ";
		}	
		
		subjectLine.value = (subjectLine.value + siteStreet.value + " " + siteSuburb.value);
			
		
	}

	function powerFactor(obj) {
	
	if (obj.value!="CMD-preJuly2001" || obj.value!="CMD" || checkMeter.value!="Nodal" || checkMeter.value!="Nodal-preJuly2001") {
		document.getElementById("powerFactor").style.display="none";
		document.getElementById("contractMaxDemand").style.display="none";
		document.getElementById("power_factor_field").mandatory="no";
		document.getElementById("contract_max_demand").mandatory="no";
		document.getElementById("power_unit").mandatory="no";
	}
	
	//~Meter_Number_
	
	metNumbers = 5;
	
	for (i=0;i<metNumbers;i++) {
		var checkMeter = document.getElementById("pref_network_access_tariff_"+(i+1));
			if (checkMeter.value=="CMD-preJuly2001" || checkMeter.value=="CMD" || checkMeter.value=="Nodal" || checkMeter.value=="Nodal-preJuly2001") {
				document.getElementById("powerFactor").style.display="inline";
				document.getElementById("contractMaxDemand").style.display="inline";
				document.getElementById("power_factor_field").mandatory="yes";
				document.getElementById("power_unit").mandatory="yes";
				document.getElementById("contract_max_demand").mandatory="yes";
				//document.getElementById("power_factor_field").style.backgroundColor="lightblue";
				//document.getElementById("power_unit").style.backgroundColor="lightblue";
				//document.getElementById("contract_max_demand").style.backgroundColor="lightblue";
				
			}
		}
	}
	
	
	function checkPower() {
		var powerFactor = document.getElementById("powerFactor");
		if (powerFactor) {
				var power_factor_field = document.getElementById("power_factor_field");
				if (powerFactor.style.display=="inline") {
					if(power_factor_field.value!="" || power_factor_field.value.length<5) {
						if (isNaN(power_factor_field.value.substr(0,1)) || power_factor_field.value.substr(1,1)!="." || isNaN(power_factor_field.value.substr(2,3))) {
							alert("Please ensure Power Factor is in '0.000' format with a decimal point");
							power_factor_field.style.backgroundColor="lightblue";						
						} else {
							power_factor_field.style.backgroundColor="white";
						}
					}
				}
			}
	}	