function FormatAmount(parmAmount) {
// formats amount to two decimal points.
	//alert(parmAmount)
    	
	parmAmount = String(parmAmount);
	if (parmAmount == "" || parmAmount == "0" || Math.abs(parseFloat(parmAmount)) < 0.001)
	{
		 return "0.00"
	}
    	
	var DecimalIndex = parmAmount.indexOf(".");
    		
	if (DecimalIndex == -1)
	{
		return parmAmount + ".00";
	}
	else {
    	
		if (parmAmount.length == DecimalIndex + 2) {
			return parmAmount + "0";
		}
		else if (parmAmount.length == DecimalIndex + 1) {
			return parmAmount + "00";
		}
		else {
    			
			var newAmount;
			if (parseFloat(parmAmount.substring(DecimalIndex + 3, DecimalIndex + 4)) >= 5) {
				newAmount = parmAmount.substring(0, DecimalIndex + 1 );
    				
				if ((parseFloat(parmAmount.substring(DecimalIndex + 1, DecimalIndex + 3)) + 1) == 100){
 					newAmount = (parseFloat(newAmount) + 1) + ".00"
				}
				else{ 
					if((parseFloat(parmAmount.substring(DecimalIndex + 1, DecimalIndex + 3)) + 1) < 10){
 						newAmount  += "0" + String(parseFloat(parmAmount.substring(DecimalIndex + 2, DecimalIndex + 3)) + 1) 
					} 
					else{
						newAmount += String(parseFloat(parmAmount.substring(DecimalIndex + 1, DecimalIndex + 3)) + 1)
					}
				}	
				return newAmount;
			}
			else
				return parmAmount.substring(0, DecimalIndex + 3);
		}
	}
}
    
function GetNumberOfPages(parmPageCount) {
	var dialogWindow;
	if (parmPageCount)
 		dialogWindow = window.showModalDialog("../CommonLibrary/NumberOfPrintPages.htm", parmPageCount, "DialogHeight= 125px; Dialogwidth = 256px; status=0")
	else
 		dialogWindow = window.showModalDialog("../CommonLibrary/NumberOfPrintPages.htm", 1, "DialogHeight= 125px; Dialogwidth = 256px; status=0")
	if (dialogWindow)
		return dialogWindow;
	else
		return 1;
}
    
function LeadZero(nNum) {
     return (nNum<10 ? "0" : "" ) + nNum.toString();
}
    
function PrintHeading(Heading, TableWidth, parmShowHome) {
	if (PrintHeading.arguments.length < 3) {
		parmShowHome = true;
	}
	var tmpHTMLBuffer = "";
 	tmpHTMLBuffer = '<table style="BORDER:silver 2px solid;" cellspacing="1" width=' + TableWidth + ' style="WIDTH: ' + TableWidth + '">' ; 
 	tmpHTMLBuffer += '<tr><td Class="PageHeading">' ; 
	if (parmShowHome) {
			tmpHTMLBuffer += '<Span OnClick="location.href=\'../Accounts/default.asp\'" Style="Position: relative; Cursor: Hand; Font: 10px, Verdana; Top: -10px; Left: '  + ((parseFloat(TableWidth) / 2) + ((Heading.length / 2) * 10) - 30) + 'px" Title="Click here to view the main page">Home</Span>';
	}
	tmpHTMLBuffer += Heading + '</td></tr></table>';
	document.write(tmpHTMLBuffer)
}
    
function ValidateTextControl(TextObject, ValidationType, IsBlankAllowed) {
// TextObject - Is the Object to be validated
// ValidationType - Can be Text, Date, Numeric, Money, Picklist
// IsBlankAllowed - If the object has blank value then no validation is done
// In case of Numbers If passed as true then Zero values are allowed
// default is false
    
	if (! TextObject) {
		alert("The Object doesnot exists. Please check it");
		return false;
	}
	TextObject.value = Trim(TextObject.value);
	IsBlankAllowed = (ValidateTextControl.arguments[2]) ? IsBlankAllowed : false;
    	
	if (IsBlankAllowed) {
		if (TextObject.value == "") {
			return true;
		}
	}
	else {
		if (TextObject.value == "") {
			TextObject.className = "Error";
			return false;
		}
		else {
			TextObject.className = "TextBoxMandatory";
		}
	}
    	
	ValidationType = (ValidateTextControl.arguments[1]) ? ValidationType : "Text";
    	
	switch (ValidationType.toUpperCase()) {
		case "TEXT" :
			/*if (TextObject.value == "") {
				TextObject.className = "Error";
			}
			else {
				TextObject.className = "";
			}*/
			return true;
			break;
		case "DATE" :
			if (!validation.validDate(TextObject)) {
				TextObject.className = "Error";
				return false;
			}
			else {
				TextObject.className = "TextBoxMandatory";
			}
 			return true;
			break;
		case "NUMERIC" :
			if (IsBlankAllowed) {
				if (parseFloat(TextObject.value) == 0) {
					//TextObject.className = "";
					return true;
				}
			}
			if (!validation.validNumber(TextObject)) {
				TextObject.className = "Error";
				return false;
			}
			else {
				TextObject.className = "TextBox";
				return true;
			}
			break;
		case "MONEY" :
			if (IsBlankAllowed) {
				if (parseFloat(TextObject.value) == 0) {
					TextObject.className = "TextBoxMandatory";
					return true;
				}
			}
			
			else {
				if (parseFloat(TextObject.value) == 0 || !validation.validDecimalNumber(TextObject)) {
				TextObject.className = "Error";
				return false;
			} 
				// Old code commented by sunita on 05/09/2002
 				//TextObject.className = "TextBoxMandatory"; 
				//TextObject.value = FormatAmount(TextObject.value)
				//return true;
				// *** added by sunita for validating amount's maxlength validation on 05/09/2002.
					TextObject.value = FormatAmount(TextObject.value);
					var StrAmt = new String(TextObject.value);
					
					var StrC;
					for(var i = 0; i < StrAmt.length;i++)
					{
						StrC = StrAmt.charAt(i);
							
						if(StrC == ".")
						{
								
							if(i > 14)
							{
								TextObject.className = "Error";
								alert("You cannot specify such a large amount.");
								TextObject.focus() 
								TextObject.select() 
								return false;
							}
							
							
						}
					}
				
			 }	//*** code added by sunita ends here
			return true;
			break;
		case "PICKLIST" :
			if (TextObject.value == "") {
				TextObject.className = "Error";
				return false;
			}
			else {
				TextObject.className = "Combo";
				return true;
			}
			break;
// Added by sunita for email validation
		case "EMAIL"  :
		    if (!validation.validEmail(TextObject)) {
		       	TextObject.className = "Error";
				return false;
			}
		    else{
		      //  TextObject.className = "";
				return true;
			}
		    break;   	
	}
	alert("No match found")
	return false;
}
    
var ErrorList ='', Counter = 0;
    
function FlushError() {
	ErrorList = "Error List :";
	Counter = 0;
}
    
function AddError(ErrorDescription, RowCount) {
	Counter++;
	if (RowCount) {
		ErrorList += ("\n" + Counter  + ". " + "Row " + RowCount + " : " + ErrorDescription);
	}
	else {
		ErrorList += "\n" + Counter  + ". " + ErrorDescription;
	}
}
    
function ListErrors() {
	if (ErrorList == "Error List :") {
		return true;
	}
	else {
		alert(ErrorList + "\n" + "\n" + "    ......  can not proceed !!!");
		return false;
	}
}
    
//Following two function are addded by Unmesh Dt 07/Feb/2003 For checking the transaction date is within financial year.

function DateAdd(parmInterval, parmNumber, parmDateVal) {
	var tmpDate = ConvertStringToDateObject(parmDateVal)
	
	parmInterval = parmInterval.substr(0,1).toLowerCase()
	
	if (parmInterval == "d"){
		tmpDate = new Date(tmpDate.getFullYear(), tmpDate.getMonth(), tmpDate.getDate() + parmNumber);
	}	
	if (parmInterval == "m"){
		tmpDate = new Date(tmpDate.getFullYear(), tmpDate.getMonth() + parmNumber, tmpDate.getDate());
	}
	if (parmInterval == "y"){
		tmpDate = new Date(tmpDate.getFullYear() + parmNumber, tmpDate.getMonth(), tmpDate.getDate());
	}
	return ConvertDateToStringObject(tmpDate)
}

function checkDateInFinancialYear(parmEnteredDateObject, parmYearEndMonth){
	// This function is checking the date is less than last date of financial year or not....
	var parmEnteredDate = parmEnteredDateObject.value
	var todayDate = new Date();
	var presentYear = todayDate.getYear();
	var presentMonth = todayDate.getMonth() + 1;
	var tmpDate, LastDateOfFinacialYear
	var YearEndMonthNumber = MonthNumber(parmYearEndMonth.substr(0,3));
	if (parseFloat(presentMonth) > parseFloat(YearEndMonthNumber)){
		tmpDate = "01/" + parseFloat(YearEndMonthNumber) + "/" + parseFloat(parseFloat(presentYear) + 1)
	}
	else{
		tmpDate = "01/" + parseFloat(YearEndMonthNumber) + "/" + parseFloat(presentYear) 
	}
	LastDateOfFinacialYear = DateAdd("d", -1, DateAdd("m", 1, tmpDate))
	if (ConvertStringToDateObject(parmEnteredDate) > ConvertStringToDateObject(LastDateOfFinacialYear)) {
		return false;
	}	
	return true;	
}


// Function added by Indraneel // Modified by Unmesh 14/01/2002 For generalised Financial year.
function checkDateInFinancialYearOld(parmdateVal, parmYearEndMonth)
{
	
		var todayDate = new Date();
		var presentYear = todayDate.getYear();
		var presentMonth = todayDate.getMonth() + 1;
		var enteredDate = parmdateVal.value
		var enteredYear	= enteredDate.substr(enteredDate.lastIndexOf("/") + 1, enteredDate.length)	
		var enteredMonth = 	enteredDate.substr(enteredDate.indexOf("/") + 1, 2)
		var FinancialYearEnd
/// Code added by Unmesh to check the entered date within the financial year	///////////
    
		parmYearEndMonth = MonthNumber(parmYearEndMonth.substr(0,3))
    		
		if(parseFloat(parmYearEndMonth) < parseFloat(presentMonth)){
			FinancialYearEnd = parseFloat(presentYear) + 1
		}
		else{
			FinancialYearEnd = parseFloat(presentYear)
		}			
    		
    		
		/// For Complete year i.e. From Jan to Dec.
		if (parseFloat(parmYearEndMonth) == 12) {
			if(parseFloat(enteredYear) == (parseFloat(FinancialYearEnd))){
				return true;
			}
			else{
				return false;
			}
		}
		/// If the Finacial year like Apr to Mar ...i.e. start month  and end month is in between year
		else{
			if(parseFloat(enteredMonth) > parseFloat(parmYearEndMonth)){
				if(parseFloat(enteredYear) == (parseFloat(FinancialYearEnd) -1)){
					return true;
				}	
				else{
					return false;
				}
			}
			else{
				if(parseFloat(enteredYear) == (parseFloat(FinancialYearEnd))){
					return true;
				}	
				else{
					return false;
				}
			}
		}			
/*			if (parseFloat(enteredMonth) >= 1 && parseFloat(enteredMonth) <= parseFloat(parmYearEndMonth)){
 				if(parseFloat(enteredYear) != (parseFloat(presentYear)))	// Check year is same of present year
				{
					return false;
				}
			}
			else{
 				if(parseFloat(enteredYear) != (parseFloat(presentYear)-1)){	//Check year is equal to less than present year. This is for if the entered month is less than present month	 
					return false;
				}
			}
		}
*/		
/// Code for checking fianancial year complete	.....Unmesh 	////
    
    
/*
	Code Commented by Unmesh
    
		if(parseFloat(enteredMonth) <= 3) {
 			if (parseFloat(presentMonth) >= 1 && parseFloat(presentMonth) <=3) {
 				if(parseFloat(enteredYear) < (parseFloat(presentYear))) {
					return false;
				}
			}
			else
			{
				if(parseFloat(enteredYear) <= (parseFloat(presentYear)))
				{
					return false;
				}
			}
		}
    		
*/		
//		return true;
}
// Function added by Indraneel //
    
function ConvertDateToStringObject(parmDateObj) {
	//parmDateObj should be Date object
	return LeadZero(Number(parmDateObj.getDate()))+ "/"+ LeadZero(Number(parmDateObj.getMonth() + 1))  + "/" + parmDateObj.getFullYear().toString();;
}
    
function ConvertStringToDateObject(parmString) {
	//alert(parmString)
	//String should be in DD/MM/YYYY format
	var month,day,year;
	var DateSeparator = ReturnMeSeparator(parmString);
    	
	day = parmString.substr(0, parmString.indexOf(DateSeparator))
	//alert(day)
	month = parmString.substring(parmString.indexOf(DateSeparator) + 1, parmString.lastIndexOf(DateSeparator))
	if(month.substr(0,1) == '0')
	{
		month = month.substr(1,1)
	}
	//alert(month)
	year = parmString.substr(parmString.lastIndexOf(DateSeparator)  + 1, parmString.length)
	//alert(year)
    		
	var tmpDate = new Date(year, parseFloat(month) - 1 , day)
	//alert(tmpDate)
	return tmpDate;
}
    
function FormatDate(dateVal) 
{
	return ConvertDateToStringObject(ConvertStringToDateObject(dateVal));
}
    
// To get coordinates of the control
    
function getTopCoords(AnyObject) {
    BndRct=AnyObject.getBoundingClientRect();
	  return BndRct.top
}
    
function getRightCoords(AnyObject) {
    BndRct=AnyObject.getBoundingClientRect();
	return BndRct.right
}
     
function getBottomCoords(AnyObject) {
    BndRct=AnyObject.getBoundingClientRect();
	  return BndRct.bottom
}
    
function getLeftCoords(AnyObject) {
    BndRct=AnyObject.getBoundingClientRect();
	return BndRct.left
}
    
function getHeight(AnyObject) {
    BndRct=AnyObject.getBoundingClientRect();
	return (parseFloat(BndRct.bottom) - parseFloat(BndRct.top));
}
    
function getWidth(AnyObject) {
    BndRct=AnyObject.getBoundingClientRect();
	return (parseFloat(BndRct.right) - parseFloat(BndRct.left));
}
    
function getCenter(AnyObject) {
    BndRct=AnyObject.getBoundingClientRect();
	return (parseFloat(BndRct.top) + ((parseFloat(BndRct.bottom) - parseFloat(BndRct.top)) / 2));
}
    
function Trim(Text) {
	if (Text == null){
		Text = "";
		return Text;
	}
	while (Text.indexOf(" ") == 0)
	{
		Text = Text.substr(1, Text.length)
	}
	if (Text.length > 0)
	{
		while (Text.lastIndexOf(" ") == (Text.length - 1))
		{
			Text = Text.substr(0, Text.length - 1)
		}
	}
	return Text;
}

// function for validating amount added on 03-sept-2002 by sunita
var clsName;
function fnCheckAmount(psdObj)
{
	
var GetStr = psdObj.id;
	
if(eval("document.all." + psdObj.id).className != "Error")
{
	clsName = eval("document.all." + psdObj.id).className;
}
	
GetStr = GetStr.substr(3);
if(!ValidateTextControl(psdObj,"Money",true))
{
	alert("Please Enter " + GetStr + " in proper format.");
	eval("document.all." + psdObj.id).focus();
	return false;
}
else
{
		
	eval("document.all." + psdObj.id).value = FormatAmount(eval("document.all." + psdObj.id).value);
	var StrAmt = new String(eval("document.all." + psdObj.id).value);
		
	var StrC;
	for(var i = 0; i < StrAmt.length;i++)
	{
		StrC = StrAmt.charAt(i);
			
		if(StrC == ".")
		{
				
			if(i > 14)
			{
					
				alert("You cannot specify such a large amount.");
				eval("document.all." + psdObj.id).className = clsName;
				eval("document.all." + psdObj.id).focus();
				return false;
			}
		}
	}
}
eval("document.all." + psdObj.id).className = clsName;
eval("document.all." + psdObj.id).style.backgroundColor = "white";
return true; 
}

function validateSolicitorRule(parmAcctID, parmTrxDate, parmInOut, parmMatterAcctType, parmEnteredAmount){
var OfficeBalance, DisbursementBalance, ClientBalance, DepositBalance
var objXMLMatterMast, MatterMastList;
	objXMLMatterMast = new ActiveXObject("Microsoft.XMLDOM")
	objXMLMatterMast.async=false;
	
	objXMLMatterMast.load("../Accounts/GetBalanceToDateForMatters.asp?AcctID=" + parmAcctID + "&TrxDate=" + parmTrxDate);
	

	OfficeBalance = objXMLMatterMast.selectSingleNode("ACCOUNTS/ACCOUNT/OFFICE").nodeTypedValue;
	DisbursementBalance = objXMLMatterMast.selectSingleNode("ACCOUNTS/ACCOUNT/DISBURSEMENT").nodeTypedValue;
	ClientBalance = objXMLMatterMast.selectSingleNode("ACCOUNTS/ACCOUNT/CLIENT").nodeTypedValue;
	DepositBalance = objXMLMatterMast.selectSingleNode("ACCOUNTS/ACCOUNT/DEPOSIT").nodeTypedValue;

//parmInout = "In" Contains following Doc type
// CD ---> Cash In
// CI ---> Cheque In
// DI ---> Direct Debit In
// II ---> Internal Transafer In
// TI ---> Telegraphic Transafer In
	
//parmInout = "Out" Contains following Doc type
// CW ---> Cash Out
// CO ---> Cheque Out
// DO ---> Direct Debit Out
// IO ---> Internal Transafer Out
// TO ---> Telegraphic Transafer Out
	
//For Receipt
if (parmInOut == "In"){
							
	//Amount should not be credit in Office Account.
	
	if (parmMatterAcctType == "O"){
		if((-1 * parseFloat(parmEnteredAmount) + parseFloat(OfficeBalance)) < 0 ){
			return  ShouldTransactionProceed(parmMatterAcctType)
			//AddError("The transaction is not allowed as the amount in the Office account is violating the solicitors rule.")
			//alert("The transaction is not allowed as the amount in the Office account is violating the solicitors rule.");
			//return false;
		}
	}
	//Amount should not be credit in Disbursement Account. 
	//BUT it may be credit subject to the balance amount in Office.
	if (parmMatterAcctType == "E"){
		if((-1 *  parseFloat(parmEnteredAmount) + parseFloat(DisbursementBalance)) < 0 ){
			return  ShouldTransactionProceed(parmMatterAcctType)
			//AddError("The transaction is not allowed as the amount in the Disbursement account is violating the solicitors rule.");
			//alert("The transaction is not allowed as the amount in the Disbursement account is violating the solicitors rule.");
			//return false;
		}
	}	
}				
		
//For Payment
if (parmInOut == "Out"){
	//Amount should not be debit in Client Account. 
	if(parmMatterAcctType == "C"){
		if((parseFloat(parmEnteredAmount) + parseFloat(ClientBalance)) > 0 ){
			return  ShouldTransactionProceed(parmMatterAcctType)
			//AddError("The transaction is not allowed as the amount in the Client account is violating the solicitors rule.");
			//alert("The transaction is not allowed as the amount in the Client account is violating the solicitors rule.");
			//return false;
		}
	}
	//Amount should not be debit in Deposit Account. 
	if(parmMatterAcctType == "D"){
		if((parseFloat(parmEnteredAmount) + parseFloat(DepositBalance)) > 0 ){
			return  ShouldTransactionProceed(parmMatterAcctType)
			//AddError("The transaction is not allowed as the amount in the Deposit account is violating the solicitors rule.");
			//alert("The transaction is not allowed as the amount in the Deposit account is violating the solicitors rule.");
			//return false;
		}
	}
}
return true;
}		

function ShouldTransactionProceed(parmMatterAcctType){
	if(GetConfirmationFromUser(parmMatterAcctType) == "CancelTransaction"){
		return false;
	}
	else{
		if(CheckAuthorisedUserPassword() == "ProceedTransaction"){
			return true;
		}
		else{
			return false;
		}
	}
}

function CheckAuthorisedUserPassword(){
	var GetReturnValue = window.showModalDialog("../CommonLibrary/CheckAuthorisedUserPassword.asp","CheckAuthorisedUserPassword","dialogheight:175px; dialogwidth:450px; help:no; status:no; scroll:no;"); 
	if(GetReturnValue){
		if (GetReturnValue == "ProceedTransaction"){
			return "ProceedTransaction"
		}
		else{
			return "CancelTransaction"
		}
	}
	else{
		return "CancelTransaction"
	}
	
} 
function GetConfirmationFromUser(parmBankAccountType){
	var GetReturnValue = window.showModalDialog("../CommonLibrary/ConfirmDialogPage.asp?BankType=" + parmBankAccountType,"ConfirmDialogPage","dialogheight:175px; dialogwidth:450px; help:no; status:no; scroll:no;"); 
	if(GetReturnValue){
		if (GetReturnValue == "Ok"){
			return "CancelTransaction"
		}
		else{
			// Code for Confirmation of Supervisor Password
			return "GoToAuthorisedUserPwd"
			
		}
	}
	else{
		return "CancelTransaction"
	}
}
function Trim(s) {
	return s.replace(/(^\s+)|(\s+$)/g, "");
} 


/* 
function EscapeSingleCharacter(parmString){
	var EscapeSingleCharacter
	if(parmString == "")
		return  "";
	end if
	// EscapeSingleCharacter =  Replace(parmString, "''", "'")
	EscapeSingleCharacter= parmString.replace("''", "'");
	
	if (parmString.indexOf("'") > 0){	
		//EscapeSingleCharacter = Replace(parmString, "'", "\'")
		EscapeSingleCharacter= parmString.replace("''", "\'");
		return EscapeSingleCharacter
	}	
	else{
		EscapeSingleCharacter = parmString
		return EscapeSingleCharacter
	}	
	
}
*/
// functions added by sunita for validating phone no., fax no
function IsValidPhoneNumber(TextObject){
	
	var StrPhone = new String(TextObject.value);
	if (TextObject.value == "" || StrPhone.length <= 0) {
		alert("Please enter the Phone Number.");
		return false;
	}
	var ValidCharacters = "1234567890{}[]- /,()+"
	if(!CharacterValidation(ValidCharacters, TextObject.value)){
		TextObject.className = "Error"
		TextObject.focus();
		return false;
	} 
	return true;
} 
 
  
function CharacterValidation(parmValidChars, parmString) 
{
 var ValidCharacters = parmValidChars;
 var i;
 for(var z = 0; z < parmString.length; z++)
 {
  i = ValidCharacters.indexOf(parmString.charAt(z));
  
  if(i == -1) 
   return false;
 }  
 return true;
}
 
function ReplaceString(replaceString,strText,ReplaceText){
	strn = new String(replaceString)
	var tempstrn='';
	for(i=0;i< strn.length;i++){
		if (strn.substring(i,i+1) == strText){
		tempstrn =  tempstrn + ReplaceText;
		}		
		else{
		tempstrn = tempstrn + strn.substring(i,i+1)
		}
	}
	return(tempstrn)
}
 

/* Commented By Manjiri for changing validation for Year End Procedure. Date - 23-Sep-2004. 
function checkLastYearEndProcedureDate(parmTransactionDate)
{
	if (ConvertStringToDateObject(parmTransactionDate) <= ConvertStringToDateObject(document.all.txtLastYearEndProcedureDate.value)) {
		return false;
	}
	else {
		return true;
	}
}*/	

// Added by Manjiri Hardas for enabling the buttons on Bill/Proforma if validation fails. Date - 10-Sep-2004.

function enableButtons(parmInvno, parmInvstatus, parmCalledFrom)
{
	parent.frames['fraTop'].document.forms['frmTop'].cmdSave.disabled = false;
	parent.frames['fraTop'].document.forms['frmTop'].cmdSavePrint.disabled = false;
	parent.frames['fraTop'].document.forms['frmTop'].cmdClose.disabled = false;
	if (parmInvstatus == 0) 
	{
		if (parmInvno != "") 
		{
			if (parmCalledFrom != "Billing" & parmCalledFrom != "B")
			{
				parent.frames['fraTop'].document.forms['frmTop'].cmdBill.disabled = false;
			}
			parent.frames['fraTop'].document.forms['frmTop'].cmdPrintBill.disabled = false;
			parent.frames['fraTop'].document.forms['frmTop'].cmdView.disabled = false;
		}
		parent.frames['fraTop'].document.forms['frmTop'].cmdEdit.disabled = false;
	}
}

