//DATE VALIDATION
// Declaring valid date character, minimum year and maximum year
var dtCh= "-";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : dd-mm-yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}



function validateform(){

	
	var non_numeric = 0;
	var non_numeric_gas = 0;
	var non_numeric_current = 0;
	var count = 0;
	var total_fields = document.frmreading.elements.length;
	total_fields = total_fields - 2;
	
	for(i=0;i<document.frmreading.elements.length;i++)
	{
		
		if(document.frmreading.elements[i].type != 'submit' && document.frmreading.elements[i].type != 'hidden' && document.frmreading.elements[i].type != 'reset'){
			if(document.frmreading.elements[i].value == ''){
				count = count + 1;
			}
		}
	}
	
	var elecric_meter_fields = Array('electric_meter_details1','electric_meter_details2','electric_meter_serial_no','electric_meter_account_no','electric_meter_supplier','electric_reading_date1','electric_reading_date2','electric_meter_date1_r1','electric_meter_date1_r2','electric_meter_date1_r3','electric_meter_date1_r4','electric_meter_date1_r5','electric_meter_date1_r6','electric_meter_date2_r1','electric_meter_date2_r2','electric_meter_date2_r3','electric_meter_date2_r4','electric_meter_date2_r5','electric_meter_date2_r6','electric_meter_r1_units','electric_meter_r2_units','electric_meter_r3_units','electric_meter_r4_units','electric_meter_r5_units','electric_meter_r6_units','electric_meter_r1_unit_price','electric_meter_r2_unit_price','electric_meter_r3_unit_price','electric_meter_r4_unit_price','electric_meter_r5_unit_price','electric_meter_r6_unit_price','total_supply_cost1','total_supply_cost2','total_supply_cost3','total_supply_cost4','total_supply_cost5','total_supply_cost6','electric_meter_sc_used','electric_meter_sc_price','electric_meter_sc_supply','electric_meter_ccl_used','electric_meter_ccl_price','electric_meter_ccl_supply','total_supply_cost');
	
	var elecric_meter_numeric_fields = Array('electric_meter_date1_r1','electric_meter_date1_r2','electric_meter_date1_r3','electric_meter_date1_r4','electric_meter_date1_r5','electric_meter_date1_r6','electric_meter_date2_r1','electric_meter_date2_r2','electric_meter_date2_r3','electric_meter_date2_r4','electric_meter_date2_r5','electric_meter_date2_r6','electric_meter_r1_units','electric_meter_r2_units','electric_meter_r3_units','electric_meter_r4_units','electric_meter_r5_units','electric_meter_r6_units','electric_meter_r1_unit_price','electric_meter_r2_unit_price','electric_meter_r3_unit_price','electric_meter_r4_unit_price','electric_meter_r5_unit_price','electric_meter_r6_unit_price','total_supply_cost1','total_supply_cost2','total_supply_cost3','total_supply_cost4','total_supply_cost5','total_supply_cost6','electric_meter_sc_used','electric_meter_sc_price','electric_meter_sc_supply','electric_meter_ccl_used','electric_meter_ccl_price','electric_meter_ccl_supply','total_supply_cost');
	
	var elecric_meter_numeric_fields_desc = Array('Readig date1 r1','Readig date1 r2','Readig date1 r3','Readig date1 r4','Readig date1 r5','Readig date1 r6','Readig date2 r1','Readig date2 r2','Readig date2 r3','Readig date2 r4','Readig date2 r5','Readig date2 r6','r1 units used','r2 units used','r3 units used','r4 units used','r5 units used','r6 units used','r1 unit price','r2 unit price','r3 unit price','r4 unit price','r5 unit price','r6 unit price','r1 supply cost','r2 supply cost','r3 supply cost','r4 supply cost','r5 supply cost','r6 supply cost','standing charge units used','standing charge unit price','standing charge supply cost','CCL units used','CCL unit price','CCL supply cost','total supply cost');
	
	
	
	
	var gas_meter_fields = Array('gas_meter_mpr','gas_meter_serial_number','gas_meter_account_number','gas_meter_supplier','gas_reading_date1','gas_reading_date2','gas_meter_date1_r1','gas_meter_date2_r1','gas_meter_r1_units_used','gas_meter_r1_kwh_used','gas_meter_r1_price_per_kwh','gas_total_supply_cost1','gas_meter_sc_used','gas_meter_sc_kwh_used','gas_meter_sc_price_per_kwh','gas_meter_sc_supply','gas_meter_ccl_used','gas_meter_ccl_kwh_used','gas_meter_ccl_price_per_kwh','gas_meter_ccl_supply','gas_total_supply_cost');
	
	var gas_meter_numeric_fields = Array('gas_meter_date1_r1','gas_meter_date2_r1','gas_meter_r1_units_used','gas_meter_r1_kwh_used','gas_meter_r1_price_per_kwh','gas_total_supply_cost1','gas_meter_sc_used','gas_meter_sc_kwh_used','gas_meter_sc_price_per_kwh','gas_meter_sc_supply','gas_meter_ccl_used','gas_meter_ccl_kwh_used','gas_meter_ccl_price_per_kwh','gas_meter_ccl_supply','gas_total_supply_cost');
	
	var gas_meter_numeric_fields_desc = Array('Reading date1 r1','Reading date2 r1','r1 units used','r1 kwh used','r1 price per kwh','r1 supply cost','standing charge units used','standing charge Kwh used','standing charge price per Kwh','Standing Charge supply cost','CCL units used','CCL Kwh used','CCL price per Kwh','CCL supply cost','total cost');
	
	var current_meter_numeric_fields = Array('electric_current_r1','electric_current_r2','electric_current_r3','electric_current_r4','electric_current_r5','electric_current_r6','gas_current_r1');
	
	var current_meter_numeric_fields_desc = Array('current electric reading r1','current electric reading r2','current electric reading r3','current electric reading r4','current electric reading r5','current electric reading r6','current gas reading r1');
	
	var elecric_meter_fields_number = elecric_meter_fields.length;
	var non_empty_fields = 0;
	var empty_fields = 0;
	var alertMsg = "Enter A Numeric Value for the following electric meter invoice details";
	var gas_meter_fields_number = gas_meter_fields.length;
	var non_empty_fields_gas = 0;
	var empty_fields_gas = 0;
	var alertmsg_gas = "Enter A Numeric Value for the following gas meter invoice details";
	var alertmsg_current = "Enter A Numeric Value for the following current meter reading details";
	for (var i = 0; i < elecric_meter_fields.length; i++)
   	{
  		var obj = document.frmreading.elements[elecric_meter_fields[i]];
   		if (obj)
       		{
				if(obj.value == ''){
					empty_fields = empty_fields + 1;
				}else if(obj.value != ''){
					non_empty_fields = non_empty_fields + 1;
				}
			}
	}	
	//gas meter
	for (var i = 0; i < gas_meter_fields.length; i++)
   	{
  		var obj = document.frmreading.elements[gas_meter_fields[i]];
   		if (obj)
       		{
				if(obj.value == ''){
					empty_fields_gas = empty_fields_gas + 1;
				}else if(obj.value != ''){
					non_empty_fields_gas = non_empty_fields_gas + 1;
				}
			}
	}
	//end gas meter
	
	for (var i = 0; i < elecric_meter_numeric_fields.length; i++)
   	{
  		var obj1 = document.frmreading.elements[elecric_meter_numeric_fields[i]];
   		if (obj1)
       		{
				if(obj1.value != '' && isNaN(obj1.value)){
					non_numeric = non_numeric + 1;
					alertMsg += " - " + elecric_meter_numeric_fields_desc[i] + "\n";
				}
			}
	}
	
	//gas meter
	for (var i = 0; i < gas_meter_numeric_fields.length; i++)
   	{
  		var obj1 = document.frmreading.elements[gas_meter_numeric_fields[i]];
   		if (obj1)
       		{
				if(obj1.value != '' && isNaN(obj1.value)){
					non_numeric_gas = non_numeric_gas + 1;
					alertmsg_gas += " - " + gas_meter_numeric_fields_desc[i] + "\n";
				}
			}
	}
	
	//end gas meter
	
	//current readings
	for (var i = 0; i < current_meter_numeric_fields.length; i++)
   	{
  		var obj2 = document.frmreading.elements[current_meter_numeric_fields[i]];
   		if (obj2)
       		{
				if(obj2.value != '' && isNaN(obj2.value)){
					non_numeric_current = non_numeric_current + 1;
					alertmsg_current += " - " + current_meter_numeric_fields_desc[i] + "\n";
				}
			}
	}
	
	
	//end current readings
	if(count > 0 && count == total_fields){
		alert('Please fill your bill details');
		return false;
	}else if(document.frmreading.email.value!="")
	{
	
	fieldEmail = Array('email');
	if(!(fieldEmail)) fieldEmail = Array();	
	for (var i = 0; i < fieldEmail.length; i++)
	   	{
  			var obj = document.frmreading.elements[fieldEmail[i]];
			if (obj)
			{
			  if(obj.length < 5 || obj.value.indexOf("@")==-1 || obj.value.indexOf(".")==-1)
			  		{
					err = 1
				 		var alertEmail = 'Enter a Valid Email Address';
						alert(alertEmail);
						document.frmreading.email.focus();
			   			return false;
					 }
			}	
		} 
	}else if(document.frmreading.electric_reading_date1.value != '' && (isDate(document.frmreading.electric_reading_date1.value)==false) )
	{
			alert("Please enter a valid date");
			return false;
	}else if(document.frmreading.electric_reading_date2.value != '' && (isDate(document.frmreading.electric_reading_date2.value)==false) )
	{
			alert("Please enter a valid date");
			return false;
	}else if(document.frmreading.gas_reading_date1.value != '' && (isDate(document.frmreading.gas_reading_date1.value)==false) )
	{
			alert("Please enter a valid date");
			return false;
	}else if(document.frmreading.gas_reading_date2.value != '' && (isDate(document.frmreading.gas_reading_date2.value)==false) )
	{
			alert("Please enter a valid date");
			return false;
	}else if(document.frmreading.electric_current_reading_date.value != '' && (isDate(document.frmreading.electric_current_reading_date.value)==false) )
	{
			alert("Please enter a valid date");
			return false;
	}else if(document.frmreading.gas_current_reading_date.value != '' && (isDate(document.frmreading.gas_current_reading_date.value)==false) )
	{
			alert("Please enter a valid date");
			return false;
	}else if(document.frmreading.phone_number.value != '' && isNaN(document.frmreading.phone_number.value))
	{
			alert("Please enter a valid phone number");
			return false;
	}else if( (empty_fields!= 0) && (elecric_meter_fields_number != empty_fields)){
	
	
		alert("Please fill all the electric meter invoice details");
		return false;
	}else if(non_numeric > 0){
		alert(alertMsg);
		return false;
	}else if( (empty_fields_gas!= 0) && (gas_meter_fields_number != empty_fields_gas)){ //gas meter
	
	
		alert("Please fill all the gas meter invoice details");
		return false;
	}else if(non_numeric_gas > 0){
	
	
		alert(alertmsg_gas);
		return false;
	}else if(non_numeric_current > 0){
	
	
		alert(alertmsg_current);
		return false;
	}else if(non_empty_fields_gas > 0 && (document.frmreading.gas_current_r1.value =='' || document.frmreading.gas_current_reading_date.value =='') ){
		alert("Please fill gas meter details");
		return false;
	}else if( (non_empty_fields > 0) && (non_empty_fields_gas == 0) ){
		
		alert("Please fill current electric meter readings");
		return false;
	}else if( (non_empty_fields == 0) && (non_empty_fields_gas > 0) ){
	
	
		alert("Please fill current gas meter readings");
		return false;
	}else if( (non_empty_fields > 0) && (non_empty_fields_gas > 0) ){
	
	
		alert("Please fill all fields in current meter readings");
		return false;
	}else if( (non_empty_fields == 0) && (non_empty_fields_gas == 0) ){
	
	
		alert("Please fill gas or electric meter reading details");
		return false;
	}
	
	return true;
}


