//===============================================================================
//All contents of this file are confidential and 
//copyright (c) Inland Revenue Authority of Singapore
//All rights reserved.
//===============================================================================

/****************************************************************
* 
* File Name		 :	validation.js
* 
* Created		 :	24-Jun-2009
* Original Author:	Sabitha
* 
***************************************************************
* MODIFICATION HISTORY
* ------------------------------------------------------------
* When			Who				Why
* ------------------------------------------------------------
* 24-Jun-2009	Sabitha			Created
*/


/*
*---------------------------------------------------------------
 * FUNCTION		: CheckEmptyFromDate(form)
 *---------------------------------------------------------------
 * DESCRIPTION  : Check for the empty FromDate Field
 * PARAMETER    : form
 *---------------------------------------------------------------
 */
function CheckEmptyFromDate(form)
{
	if(form.FromDate.value=="" || form.FromDate.value==null)
	{      
	     form.FromDate.focus();
         alert("Please enter the From date");
         return false;
	}
	else if(!ValidateDate(form.FromDate.id,form))
	{
		return false;
	}
	else 
	return true;
}
/*
*---------------------------------------------------------------
 * FUNCTION		: CheckEmptyToDate(form)
 *---------------------------------------------------------------
 * DESCRIPTION  : Check for the empty ToDate Field
 * PARAMETER    : form
 *---------------------------------------------------------------
 */
function CheckEmptyToDate(form)
{
	if(!(form.FromDate.value ==null || form.FromDate.value==""))
	{
		if(form.ToDate.value=="" || form.ToDate.value==null)
		{     
           form.ToDate.focus();
           alert("Please enter the To date");
           return false;
		}
		else
		return true;
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: checkDateDiff(form)
 *---------------------------------------------------------------
 * DESCRIPTION  : To Check ToDate greater than FromDate
 * PARAMETER    : form
 *---------------------------------------------------------------
 */
function checkDateDiff(form)
{	
	if(form.FromDate.value!="" && form.ToDate.value!="")
	{
		if( ValidateDate(form.FromDate.id,form)==true && ValidateDate(form.ToDate.id,form)==true)
		{	
			var FromDate=GetDate(form.FromDate.value,form); 
			var ToDate=GetDate(form.ToDate.value,form);  
			if(ToDate<=FromDate)
			{	form.ToDate.focus();
				alert("To Date must be greater than From Date");
				return false;	
			}
			else 
			{	
				taxPayable(form);
				
			}
		}   
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: ValidateDate(date,form)
 *---------------------------------------------------------------
 * DESCRIPTION  : To validate date entered
 * PARAMETER    : date,form
 *---------------------------------------------------------------
 */
function ValidateDate(date,form)
{	var match;
    match=IsMatch(date,form);
	return match;
}
/*
*---------------------------------------------------------------
 * FUNCTION		: IsMatch(str,form)
 *---------------------------------------------------------------
 * DESCRIPTION  : To validate date entered in the required format and range
 * PARAMETER    : date,form
 *---------------------------------------------------------------
 */
function IsMatch(str,form)
{
		var mystring = document.getElementById(str).value;
		var yr=mystring.substring(6);
        var mm=mystring.substring(3,5);
        var dd=mystring.substring(0,2);
		var check=false;
        if (mystring.length==10)
        {
		    if (mystring.match(/^\d{2}\/\d{2}\/\d{4}$/) )
            {   
				if (yr < 2005 || yr > 3000)
				{
					alert ("Please enter the year between 2005 and 3000");document.getElementById(str).focus(); check=false;
				}
				else if (mm > 12 || mm < 1 ) 
				{alert ("Month should be between 1 and 12 ");document.getElementById(str).focus(); check=false;
				}
				else if (mm==4 || mm == 6 || mm == 9 || mm==11 )
				{
					if (dd > 30 )
					{
						alert ("Please check the day entered");
						document.getElementById(str).focus(); check=false;
					}
					else {check=true;}
				}
				else if (mm==2)
				{
					var b=parseInt(yr/4);
					if (isNaN(b) ||(dd>29)) 
					{
						alert( "Please check the no.of days in February");
						document.getElementById(str).focus();check=false;
					}
					else if (dd==29 && ((yr/4)!=parseInt(yr/4))) 
					{
						alert( "This is not a leap year. Please check the no. of days in February.");
						document.getElementById(str).focus();check=false;
					}
					else check=true;
				}
				else
				{
					if (dd < 1||dd > 31)
					{
						alert ("Day of month should be between 1 and 31 ");
						document.getElementById(str).focus();check=false;
					}	
					else {check= true;}
				}                
            }	
			else
			{
				alert("Please enter date in this format dd/mm/yyyy.");document.getElementById(str).focus();
				check=false;
            }
		}
		else
		{
			alert("Please enter date in this format dd/mm/yyyy");document.getElementById(str).focus();check=false;
		}
		return check;
    }
	
function GetDate(date,form)
{
	var fromDate=date.split("/");       
	var FromDate=new Date(fromDate[2],fromDate[1]-1,fromDate[0]);        
	return FromDate;	
}
function getStartDate(FromDate)
{
	var fromDate= new Date(FromDate);
	return fromDate;
}
function getEndDate(ToDate)
{
	var toDate=new Date(ToDate);
	return toDate;
}
/*
*---------------------------------------------------------------
 * FUNCTION		: noDaysMonth(month1,year)
 *---------------------------------------------------------------
  DESCRIPTION	: To return the number of days in a month
 * PARAMETER    : month,year
 *---------------------------------------------------------------
 */
function noDaysMonth(month1,year)
{
	var month=parseInt(month1);
	if(month==0||month==2||month==4||month==6||month==7||month==9||month==11)
	{
		return 31;
	}
	else if(month==3||month==5||month==8||month==10)
	{
		return 30;
	}
	else 
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}  
/*
*---------------------------------------------------------------
 * FUNCTION		: convertDaysToMonth(FromDate,ToDate)
 *---------------------------------------------------------------
  DESCRIPTION	: To convert the prorated days in the FromDate and ToDate entered into month
 * PARAMETER    : FromDate,ToDate
 *---------------------------------------------------------------
 */
function convertDaysToMonth(FromDate,ToDate)
{
	startDate=getStartDate(FromDate);
	endDate=getEndDate(ToDate);
	var startDay=startDate.getDate();
	var startYear=startDate.getFullYear();
	var startMonth=startDate.getMonth();
	var endDay=endDate.getDate();
	var endMonth=endDate.getMonth();
	var endYear=endDate.getFullYear();
	var noDaysMonth1=noDaysMonth(startMonth,startYear);
	var noDaysMonth2=noDaysMonth(endMonth,endYear);
	var proRateDays1=noDaysMonth1-startDay+1;
	var partialMonths=(proRateDays1/noDaysMonth1)+(endDay/noDaysMonth2);
	return partialMonths;
}
/*
*---------------------------------------------------------------
 * FUNCTION		: NumMonths(FromDate,ToDate)
 *---------------------------------------------------------------
  DESCRIPTION	: To return the whole number of months between the FromDate and ToDate
 * PARAMETER    : FromDate,ToDate
 *---------------------------------------------------------------
 */   
function NumMonths(FromDate,ToDate)
{
	var fromDate=getStartDate(FromDate);
	var toDate=getEndDate(ToDate);
	var monthsBetween;
	if(toDate.getFullYear()>fromDate.getFullYear())
	{
		monthsBetween=((12-fromDate.getMonth())+toDate.getMonth()-1)+(toDate.getFullYear()-fromDate.getFullYear()-1)*12;
	}
	else
	{
		monthsBetween=toDate.getMonth()-fromDate.getMonth()-1;
	}
	return monthsBetween;
}
/*
*---------------------------------------------------------------
 * FUNCTION		: taxPayable(form)
 *---------------------------------------------------------------
  DESCRIPTION	: To call other methods to calculate TaxPayable, GST RebateGranted, PT Rebate Grnated and Balance Tax Payable
 * PARAMETER    : form
 *---------------------------------------------------------------
 */
function taxPayable(form)
{
		if(form.FromDate.value!="" && form.ToDate.value!="")
		{
			if( ValidateDate(form.FromDate.id,form)==true && ValidateDate(form.ToDate.id,form)==true)
			{	
				var FromDate=GetDate(form.FromDate.value,form); 
				var ToDate=GetDate(form.ToDate.value,form);  
				var partialMonths=convertDaysToMonth(FromDate,ToDate);
				var monthsBetween=NumMonths(FromDate,ToDate);
				var months=partialMonths+monthsBetween;
				form.FromDate2.value=form.FromDate.value;
				form.ToDate2.value=form.ToDate.value;
				form.FromDate3.value=form.FromDate.value;
				form.ToDate3.value=form.ToDate.value;
				calTaxPayable(months,form);
				calGSTRebateAmount(form);
				calGSTRebateGranted(months,form);
				calPTRebate(form);
				calBalance(form);
			}
		}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calTaxPayable(months,form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate the Tax Payable
 * PARAMETER    : months,form
 *---------------------------------------------------------------
 */
function calTaxPayable(months,form)
{
	if(document.getElementsByTagName('AnnualValue').value!="" && document.getElementsByTagName('Rate').value!="" )
	{  
		var AV=form.AnnualValue.value;	
		if (!(isNaN(AV)|| (AV.indexOf(".")>-1)))
		{
			if(IsNumeric(form.Rate.id,this.form)==true && TaxRateValueCheck(form)==true )			
			{
				var taxRate1=(form.Rate.value)/100;
					
				var taxPayable=Math.round((months*taxRate1*AV/12)*100)/100;
				form.TaxPayable.value=taxPayable.toFixed(2);
				updateDOM(form.TaxPayable);		
			}	
			form.Rate.readOnly="";		
		}		
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calTaxPayableTemp(months,form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate the Tax Payable for the years 2008 and 2009 if falls in the date range entered
				   Used in the Calculating the PT Rebate Granted.
 * PARAMETER    : months,form
 *---------------------------------------------------------------
 */
function calTaxPayableTemp(months,form)
{
	var taxRate1=(form.Rate.value)/100;
	var AV=form.AnnualValue.value;	
	var tempTax=Math.round((months*taxRate1*AV/12)*100)/100;
	return tempTax;
		
}
/*
*---------------------------------------------------------------
 * FUNCTION		: CheckEmptyAV(form)
 *---------------------------------------------------------------
  DESCRIPTION	: Check Empty AnnualValue Field
 * PARAMETER    : form
 *---------------------------------------------------------------
 */
function CheckEmptyAV(form)
{
		if(form.AnnualValue.value=="" || form.AnnualValue.value==null)
		{
			alert("Please enter the annual value of your property");
			form.AnnualValue.focus();
			return false;
		}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: CheckEmptyTaxRate(form)
 *---------------------------------------------------------------
  DESCRIPTION	: Check Empty Tax Rate Field
 * PARAMETER    : form
 *---------------------------------------------------------------
 */
function CheckEmptyTaxRate(form)
{
	if(form.Rate.value=="" || form.Rate.value==null)
	{
		alert("Please enter the Tax Rate ");
		form.Rate.focus();
		return false;
	}
}
function IsNumeric(strValue,form)
{
	var check;
	var str=document.getElementById(strValue).value;
	if (isNaN(str)|| (str.indexOf(".")>-1))
	{
		alert("Numbers only. $, decimals, alphabets are invalid entries. Please re-enter.");
		document.getElementById(strValue).focus();
		check= false;
	}
	else 
	check= true;
	return check;
} 
function CheckAnnualValue(form)
{
	if(form.AnnualValue.value<0||form.AnnualValue.value>999000000)
	{
		alert("AnnualValue must be in the range of 0 to 999000000");
		form.AnnualValue.focus();			
		return false;
	}
	else if(IsNumeric(form.AnnualValue.id,this.form)==false)
	{
	return false;
	}
	else 
	{return true;}
}
function TaxRateValueCheck(form)
{
	var check=true;
	if(!(form.Rate.value=="" || form.Rate.value==null))
	{
		if(form.Rate.value!=4)
		{
			alert("Tax Rate entered is "+form.Rate.value+"% . No GST Rebate is applicable.");
			form.FromDate2.readOnly="readonly";
			form.ToDate2.readOnly="readonly";
			form.GSTRebateAmount.value=0;
			var gst=0;
			form.GSTRebateGranted.readOnly="readonly";form.GSTRebateGranted.value=gst.toFixed(2);
		}
		else 
		{
			form.FromDate2.readOnly="";
			form.ToDate2.readOnly="";
			form.GSTRebateAmount.readOnly="";
			form.GSTRebateGranted.readOnly="";
		}
	}
	if(document.getElementsByTagName('Rate').value<0 || document.getElementsByTagName('Rate').value>99)
	{
		alert("The valid  range of Tax Rate is 0 to 99");
		document.getElementsByTagName('TaxPayable').value="";
		document.getElementsByTagName('Rate').focus();check=false;
	}
	else
	{
		check=true;
	}	
	return check;		
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calPTRebate(form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate PTRebateGranted
 * PARAMETER    : form
 *---------------------------------------------------------------
 */	
function calPTRebate(form)
{
	var Date1=new Date(2008,0,1);
	var Date2=new Date(2009,11,31);
	var FromDate=GetDate(form.FromDate.value,form); 
	var ToDate=GetDate(form.ToDate.value,form); 
	var partialMonths;
	var monthsBetween;
	var months;
	var PTRebate;
	if(form.Rate.value!=4)
	{
		var pt=0;
		form.PTRebateGranted.value=pt.toFixed(2);
		updateDOM(form.PTRebateGranted);
	}
	else if(form.AnnualValue.value>3750 && form.AnnualValue.value<5625 && form.Rate.value==4)
	{
		form.PTRebateAmount.value=0;
		
		if(getStartDate(FromDate,form)>=Date1 && getEndDate(ToDate,form)<=Date2)
		{
			PTRebate=Math.round((form.TaxPayable.value-form.GSTRebateGranted.value)*100)/100;
			form.PTRebateGranted.value=PTRebate.toFixed(2);
			if(PTRebate<0)
			{
				var	pt=0;
				form.PTRebateGranted.value=pt.toFixed(2);
			}
			updateDOM(form.PTRebateGranted);
		}
		else if(getStartDate(FromDate)<Date1 && getEndDate(ToDate)<=Date2 && getEndDate(ToDate)>Date1)
		{
			partialMonths=convertDaysToMonth(Date1,ToDate);
			monthsBetween=NumMonths(Date1,ToDate);
			months=partialMonths+monthsBetween;
			var Tax=calTaxPayableTemp(months,form);
			var GST=calGSTRebateGrantedTemp(months,form);
			PTRebate=Math.round((Tax-GST)*100)/100;
			form.PTRebateGranted.value=PTRebate.toFixed(2);
			if(PTRebate<0)
			{
				var pt=0;
				form.PTRebateGranted.value=pt.toFixed(2);
			}
			updateDOM(form.PTRebateGranted);
		}
		else if(getStartDate(FromDate)>=Date1 && getStartDate(FromDate)<Date2 && getEndDate(ToDate)>Date2)
		{
			partialMonths=convertDaysToMonth(FromDate,Date2);
			monthsBetween=NumMonths(FromDate,Date2);
			months=partialMonths+monthsBetween;
			var Tax=calTaxPayableTemp(months,form);
			var GST=calGSTRebateGrantedTemp(months,form);
			PTRebate=Math.round((Tax-GST)*100)/100;
			form.PTRebateGranted.value=PTRebate.toFixed(2);
			if(PTRebate<0)
			{
			var pt=0;
			form.PTRebateGranted.value=pt.toFixed(2);
			}
			updateDOM(form.PTRebateGranted);		
		}
		else if(getStartDate(FromDate)>Date2)
		{
			var pt=0;
			form.PTRebateGranted.value=pt.toFixed(2);
			updateDOM(form.PTRebateGranted);
		}
		else if(getEndDate(ToDate)<Date1)
		{
			var pt=0;
			form.PTRebateGranted.value=pt.toFixed(2);
			updateDOM(form.PTRebateGranted);
		}
		else if(getStartDate(FromDate)<Date1 && getEndDate(ToDate)>Date2)
		{
			partialMonths=convertDaysToMonth(Date1,Date2);
			monthsBetween=NumMonths(Date1,Date2);
			months=partialMonths+monthsBetween;
			var Tax=calTaxPayableTemp(months,form);
			var GST=calGSTRebateGrantedTemp(months,form);
			PTRebate=Math.round((Tax-GST)*100)/100;
			form.PTRebateGranted.value=PTRebate.toFixed(2);;
			if(PTRebate<0)
			{
				var pt=0;
				form.PTRebateGranted.value=pt.toFixed(2);
			}
			updateDOM(form.PTRebateGranted);
		}
	}
	else if(form.AnnualValue.value>=5625 && form.Rate.value==4)
	{
		form.PTRebateAmount.value=100;
		if(getStartDate(FromDate,form)>=Date1 && getEndDate(ToDate,form)<=Date2)
		{
			partialMonths=convertDaysToMonth(FromDate,ToDate);
			monthsBetween=NumMonths(FromDate,ToDate);
			months=partialMonths+monthsBetween;
			calPT(months,form);
		}
		else if(getStartDate(FromDate)<Date1 && getEndDate(ToDate)<=Date2 && getEndDate(ToDate)>Date1)
		{
			partialMonths=convertDaysToMonth(Date1,ToDate);
			monthsBetween=NumMonths(Date1,ToDate);
			months=partialMonths+monthsBetween;
			calPT(months,form);
		}
		else if(getStartDate(FromDate)>=Date1 && getStartDate(FromDate)<Date2 && getEndDate(ToDate)>Date2)
		{
			partialMonths=convertDaysToMonth(FromDate,Date2);
			monthsBetween=NumMonths(FromDate,Date2);
			months=partialMonths+monthsBetween;
			calPT(months,form);
		}
		else if(getStartDate(FromDate)>Date2)
		{
			form.PTRebateAmount.readOnly="readOnly";
			var pt=0;
			form.PTRebateGranted.value=pt.toFixed(2);
			updateDOM(form.PTRebateGranted);
		}
		else if(getEndDate(ToDate)<Date1)
		{
			form.PTRebateAmount.readOnly="readOnly";
			var pt=0;
			form.PTRebateGranted.value=pt.toFixed(2);
			updateDOM(form.PTRebateGranted);
		}
		else if(getStartDate(FromDate)<Date1 && getEndDate(ToDate)>Date2)
		{
			partialMonths=convertDaysToMonth(Date1,Date2);
			monthsBetween=NumMonths(Date1,Date2);
			months=partialMonths+monthsBetween;
			calPT(months,form); 
		}
	}
	else if(form.AnnualValue.value<=3750 && form.Rate.value==4)
	{
		form.GSTRebateGranted.value=form.TaxPayable.value;
		updateDOM(form.GSTRebateGranted);
		var PTRebateGranted=0;
		form.PTRebateAmount.value="";
		form.PTRebateGranted.readonly="readonly";
		form.PTRebateGranted.value=PTRebateGranted.toFixed(2);
		updateDOM(form.PTRebateGranted);
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calGSTRebateAmount(form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate GSTRebateAmount
 * PARAMETER    : form
 *---------------------------------------------------------------
 */	
function calGSTRebateAmount(form)
{
	if(form.Rate.value!="" ||form.Rate.value!=null)
	{
		if(form.AnnualValue.value!="" && form.Rate.value==4)
		{
				var AV=form.AnnualValue.value;
				if(AV<=5000)
				{
				form.GSTRebateAmount.value=150;
				}
				else if(AV >=5001 && AV<=6000)
				{
				form.GSTRebateAmount.value=125;
				}
				else if(AV>=6001 && AV<=7000)
				{
				form.GSTRebateAmount.value=100;
				}
				else if(AV>=7001 && AV<=8000)
				{
				form.GSTRebateAmount.value=75;
				}
				else if(AV>=8001 && AV<=9000 )
				{	
				form.GSTRebateAmount.value=50;
				}
				else if(AV>=9001 && AV<=9999)
				{
				form.GSTRebateAmount.value=25;
				}
				else if(AV>=10000)
				{
				form.GSTRebateAmount.value=0;
				}
		}	
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calGSTRebateGranted(months,form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate GSTRebateGranted
 * PARAMETER    : months,form
 *---------------------------------------------------------------
 */	
function calGSTRebateGranted(months,form)
{
	if(form.Rate.value==10)
	{
		var gst=0;
		form.GSTRebateAmount.value="";
		form.GSTRebateGranted.value=gst.toFixed(2);
		updateDOM(form.GSTRebateGranted);
	}
	else if(form.GSTRebateAmount.value!="" && form.Rate.value!="")
	{
		if(IsNumeric(form.GSTRebateAmount.id,this.form)==true)
		{
			var GST=form.GSTRebateAmount.value;
			var TaxRate=form.taxrate.value/100;
			var gstRebateGranted=Math.round((months)*TaxRate*GST/12*100)/100;
			form.GSTRebateGranted.value=gstRebateGranted.toFixed(2);;	
			form.GSTRebateGranted.readOnly="readOnly";
			updateDOM(form.GSTRebateGranted);
		}
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calGSTRebateGrantedTemp(months,form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate GSTRebateGranted for the years 2008 and 2009 for Calculating the PTRebateGranted
 * PARAMETER    : months,form
 *---------------------------------------------------------------
 */	
function calGSTRebateGrantedTemp(months,form)
{
	var GST=form.GSTRebateAmount.value;
	var TaxRate=form.taxrate.value/100;
	var tempGST=Math.round((months)*TaxRate*GST/12*100)/100;
	return tempGST;
}
function calPT(months,form)
{
	if(!(form.PTRebateAmount.value=="" || form.PTRebateAmount.value==null ))
	{
		if(IsNumeric(form.PTRebateAmount.id,this.form)==true)
		{
			if(parseFloat(form.PTRebateAmount.value)>=0 && parseFloat(form.PTRebateAmount.value)<=9999.99)
			{
				var TaxRate=form.taxRate.value/100;
				var TaxRebate=form.PTRebateAmount.value;
				var PTRebateGranted=Math.round(months*TaxRate*TaxRebate/12*100)/100;
				form.PTRebateGranted.value=PTRebateGranted.toFixed(2);
				updateDOM(form.PTRebateGranted);
			}
			else
			{
				alert("The acceptable range of values for Property Tax Rebate Amount is 0 to 9999.99");
				form.PTRebateAmount.focus();
			}
		}
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calBalance(form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate Balance Tax Payable
 * PARAMETER    : form
 *---------------------------------------------------------------
 */	
function calBalance(form)
{
	var balance;
	var GSTRebateGranted;
	var PTRebateGranted;
	var TaxPayable;
	if(form.TaxPayable.value!="")
	{ 	
		TaxPayable=parseFloat(form.TaxPayable.value);
		GSTRebateGranted=parseFloat(form.GSTRebateGranted.value);
		PTRebateGranted=parseFloat(form.PTRebateGranted.value);
		if(PTRebateGranted<0)
		{
			PTRebateGranted=0;
		}				
		if(form.GSTRebateGranted.value!="" && form.PTRebateGranted.value!="")
		{
			var sum=GSTRebateGranted+ PTRebateGranted;
			if (TaxPayable>sum)
			{
				balance=Math.round((TaxPayable-GSTRebateGranted-PTRebateGranted)*100)/100;
				form.balance.value=balance.toFixed(2);
				form.AdditionalRebate.readOnly="";
				calNetTaxPayable(form);
			}
			else 
			{
				balance=0;
				form.balance.value=balance.toFixed(2);
				form.AdditionalRebate.value="";
				form.AdditionalRebate.readOnly="readOnly";
				calNetTaxPayable(form);
			}
				updateDOM(form.balance);
		}
		else if(form.GSTRebateGranted.value!="" && form.PTRebateGranted.value=="")
		{
			if(TaxPayable>GSTRebateGranted)
			{
				balance=TaxPayable-GSTRebateGranted;
				if(balance>0)
				{
				form.balance.value=balance.toFixed(2);
				form.AdditionalRebate.readOnly="";
				calNetTaxPayable(form);
				}
				else
				{
				balance=0;
				form.balance.value=balance.toFixed(2);
				form.AdditionalRebate.value="";
				form.AdditionalRebate.readOnly="readOnly";
				calNetTaxPayable(form);
				}
				updateDOM(form.balance);
			}
			else
			{
				balance=0;
				form.balance.value=balance.toFixed(2);
				form.AdditionalRebate.value="";
				form.AdditionalRebate.readOnly="readOnly";
				calNetTaxPayable(form);
				updateDOM(form.balance);
			}
		}
		else if(form.GSTRebateGranted.value=="" && form.PTRebateGranted.value=="")
		{
			balance=TaxPayable;
			form.balance.value=balance.toFixed(2);
			form.AdditionalRebate.readOnly="";
			calNetTaxPayable(form);
			updateDOM(form.balance);
		}
	}	
}
/*
*---------------------------------------------------------------
 * FUNCTION		: calNetTaxPayable(form)
 *---------------------------------------------------------------
  DESCRIPTION	: Calculate NetTaxPayable
 * PARAMETER    : form
 *---------------------------------------------------------------
 */	
function calNetTaxPayable(form)
{
	if(form.balance.value!=0 && form.SelectMode[form.SelectMode.selectedIndex].value !=null)
	{   
		var balance=form.balance.value;
		var SelectedValue=form.SelectMode[form.SelectMode.selectedIndex].value;
		if(form.AdditionalRebate.value==null || form.AdditionalRebate.value=="")
		{
		
		form.NetTaxPayable.value=form.balance.value;
		updateDOM(form.NetTaxPayable);
		}
		if(IsNumeric(form.AdditionalRebate.id,this.form)==true)
		{
			var additionalRebate=form.AdditionalRebate.value;
			if(additionalRebate=="" || additionalRebate==null)
			{
			additionalRebate=0;
			}
			else
			{
				if(SelectedValue=="%")
				{
					if(additionalRebate<0 ||additionalRebate>99)
					{
						alert("The acceptable range of values for Additional Rebates Granted field in % is 0 to 99");
						form.AdditionalRebate.focus();
					}
					else
					{
					var netTax=Math.round((balance-((additionalRebate/100)*balance))*100)/100;
					form.NetTaxPayable.value=netTax.toFixed(2);
					updateDOM(form.NetTaxPayable);
					}
				}
				else 
				{
					if(additionalRebate>0 && additionalRebate<99999)	
					{
						if(balance-additionalRebate<=0)
						{
							var netTax=0;
							form.NetTaxPayable.value=netTax.toFixed(2);
						}
						else
						{
							var netTax=Math.round((balance-additionalRebate)*100)/100;
							form.NetTaxPayable.value=netTax.toFixed(2);
						}
						updateDOM(form.NetTaxPayable);
					}
					else
					{
						alert("The acceptable range of values for Additional Rebates Granted field in $ is 0 to 99999");
						form.AdditionalRebate.focus();
					}
				}
			}
		}
	}
	else if(form.AdditionalRebate.value=="" || form.AdditionalRebate.value==null)
	{
		var balance=form.balance.value;
		form.NetTaxPayable.value=balance;
		updateDOM(form.NetTaxPayable);
	}
}
function updateDOM(inputField) 
{
    inputField.setAttribute("value",inputField.value);
}
/*
*---------------------------------------------------------------
 * FUNCTION		: Select(form)
 *---------------------------------------------------------------
  DESCRIPTION	: To Reset the Select option
 * PARAMETER    : form
 *---------------------------------------------------------------
 */	
function Select(form)
{
	var option=document.getElementById(form.SelectMode.id).value;
	if(option=="$")
	{
		document.getElementById("dollar").setAttribute("selected",true);
		document.getElementById("percent").removeAttribute("selected");
	}
	else
	{
		document.getElementById("percent").setAttribute("selected",true);
		document.getElementById("dollar").removeAttribute("selected");
	}
}
/*
*---------------------------------------------------------------
 * FUNCTION		: resetFields(form)
 *---------------------------------------------------------------
  DESCRIPTION	: To Reset the fields
 * PARAMETER    : form
 *---------------------------------------------------------------
 */	
function resetFields(form)
{
	document.getElementById(form.FromDate.id).value="";
	document.getElementById(form.ToDate.id).value="";
	document.getElementById(form.AnnualValue.id).value="";
	document.getElementById(form.Rate.id).value="";
	document.getElementById(form.TaxPayable.id).value="";
	document.getElementById(form.GSTRebateGranted.id).value="";
	document.getElementById(form.PTRebateGranted.id).value="";
	document.getElementById(form.balance.id).value="";
	document.getElementById(form.AdditionalRebate.id).value="";
	document.getElementById(form.NetTaxPayable.id).value="";
	document.getElementById(form.SelectMode.id).value="%";
	document.getElementById("dollar").removeAttribute("selected");
	updateDOM(form.FromDate);
	updateDOM(form.ToDate);
	updateDOM(form.AnnualValue);
	updateDOM(form.Rate);
	updateDOM(form.TaxPayable);
	updateDOM(form.GSTRebateGranted);
	updateDOM(form.PTRebateGranted);
	updateDOM(form.balance);
	updateDOM(form.AdditionalRebate);
	updateDOM(form.NetTaxPayable);
	Select(form);
}
