/*
 * Filename : pupdate.js
 * Company  : Elsevier Inc.
 * Purpose  : This Javascript file validates the Calender dates ,months and years
 *
 ***
 * Author : Satyam
 * Date Created : May 2005
 *
 ***
 * Modification History :
 * -------------------------------------------------------------------------
 * Modified by		Date		Description 
 * * -------------------------------------------------------------------------
 * */

var validatorObject,validatorFormatString
var validatorHolidayArray = new Array() 

function Trim(validatorpString)
{
	var outString="",inString="";

	if (validatorpString == null || validatorpString == "") { return "" }
	if (validatorpString.length >= 1) 
	{
		for(var vCharCount=0; vCharCount<=validatorpString.length-1; vCharCount++)
		{
			if(validatorpString.charAt(vCharCount) != " ")
			{
				if (outString=="") {
					outString = validatorpString.charAt(vCharCount)
					inString = ""  }
				else {
					if (inString != "")
					{  outString += inString;
					inString = "" }
					outString += validatorpString.charAt(vCharCount); }
			}
			else 
			{
				inString += validatorpString.charAt(vCharCount);
			}
		}
		return outString
	}
}

function StringCheck(validatorpString)
{
	if (Trim(validatorpString.length)==0) { alert('Enter String'); return 1 }
	for(var ValidatorInc=0;ValidatorInc < validatorpString.length;ValidatorInc++)
	{
		if (validatorpString.toUpperCase().charCodeAt(ValidatorInc) < 65 || validatorpString.toUpperCase().charCodeAt(ValidatorInc) > 90)
		{	if (validatorpString.toUpperCase().charCodeAt(ValidatorInc) != 32 &&
		        validatorpString.charCodeAt(ValidatorInc) != 39 &&
		        validatorpString.charCodeAt(ValidatorInc) != 45 )
		return 1	}
	}
	return 0
}

function FormatCheck(pFormatIndex)
{
	if( parseFloat(pFormatIndex) == 1 )
		return 'dd/mm/yy'
	else if ( parseFloat( pFormatIndex ) == 2 )
		return 'dd/mm/yy'
	else if ( parseFloat( pFormatIndex ) == 3 )
		return 'mon/dd/yy'
	else if ( parseFloat( pFormatIndex ) == 4 )
		return 'dd/mon/yy'
}

var vValidatorDateArray
var vValidatorMonthNames

function ConvertFormat(pFormatIndex)
{
	switch(pFormatIndex)
	{
		case 1 :
			vValidatorDateArray[0]=Trim(vValidatorDateArray[0])
			vValidatorDateArray[1]=Trim(vValidatorDateArray[1])
			vValidatorDateArray[2]=Trim(vValidatorDateArray[2])
			break
			
		case 2 :
			var vKeepValue=Trim(vValidatorDateArray[0])
			vValidatorDateArray[0]=Trim(vValidatorDateArray[1])
			vValidatorDateArray[1]=vKeepValue
			vValidatorDateArray[2]=Trim(vValidatorDateArray[2])
			break			
			
		case 3 :
			var vCounter
			for(vCounter=0;vCounter<12;vCounter++)
			{
				if( vValidatorMonthNames[vCounter].toUpperCase() == Trim(vValidatorDateArray[0]).toUpperCase() )
				{
					vValidatorDateArray[0]= vCounter+1
					break
				}
			}		
			vValidatorDateArray[1]=Trim(vValidatorDateArray[1])
			vValidatorDateArray[2]=Trim(vValidatorDateArray[2])
			break
			
		case 4 :
			var vCounter,vValidatorMonth
			vValidatorMonth=vValidatorDateArray[1]
			
			vValidatorDateArray[1]=Trim(vValidatorDateArray[0])
			vValidatorDateArray[2]=Trim(vValidatorDateArray[2])
						
			for(vCounter=0;vCounter<12;vCounter++)
			{
				if( vValidatorMonthNames[vCounter].toUpperCase() == Trim(vValidatorMonth).toUpperCase() )
				{
					vValidatorDateArray[0]= parseFloat(vCounter)+1
					break
				}
			}		
			break			
	}
}

function ConvertBack(pFormatIndex)
{
	switch(pFormatIndex)
	{
		case 1:
			validatorObject.value=Trim(vValidatorDateArray[0])+"/"+Trim(vValidatorDateArray[1])+"/"+Trim(vValidatorDateArray[2])
			break
		case 2:
			vValidatorDateArray[0]=parseFloat(Trim(vValidatorDateArray[0])) + parseFloat(Trim(vValidatorDateArray[1]))
			vValidatorDateArray[1]=parseFloat(Trim(vValidatorDateArray[0])) - parseFloat(Trim(vValidatorDateArray[1]))
			vValidatorDateArray[0]=parseFloat(Trim(vValidatorDateArray[0])) - parseFloat(Trim(vValidatorDateArray[1]))
			validatorObject.value=Trim(vValidatorDateArray[0])+"/"+Trim(vValidatorDateArray[1])+"/"+Trim(vValidatorDateArray[2])
			break
		case 3: 
			vValidatorDateArray[0] = Trim(vValidatorMonthNames[parseFloat(vValidatorDateArray[0])-1])
			validatorObject.value=Trim(vValidatorDateArray[0])+"/"+Trim(vValidatorDateArray[1])+"/"+Trim(vValidatorDateArray[2])
			break
		case 4:
			vValidatorDateArray[0]=parseFloat(Trim(vValidatorDateArray[0])) + parseFloat(Trim(vValidatorDateArray[1]))
			vValidatorDateArray[1]=parseFloat(Trim(vValidatorDateArray[0])) - parseFloat(Trim(vValidatorDateArray[1]))
			vValidatorDateArray[0]=parseFloat(Trim(vValidatorDateArray[0])) - parseFloat(Trim(vValidatorDateArray[1]))
			
			vValidatorDateArray[1] = Trim(vValidatorMonthNames[parseFloat(vValidatorDateArray[1])-1])
			validatorObject.value=Trim(vValidatorDateArray[0])+"/"+Trim(vValidatorDateArray[1])+"/"+Trim(vValidatorDateArray[2])
			break 			
	}
}

function DateCheck(pValidatorDateValue,pFormatIndex)
{
	var vValidatorMonthDays,vValidatorMonth,vValidatorGivenDate
	vValidatorMonthDays=new Array(31,28,31,30,31,30,31,31,30,31,30,31)
	vValidatorMonthNames = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
	
	vValidatorDateArray=pValidatorDateValue.split("/")

    
	if( (vValidatorDateArray[0] == "") || (vValidatorDateArray[0] == null) || (vValidatorDateArray[1] == "") || (vValidatorDateArray[1] == null) || (vValidatorDateArray[2] == "") || (vValidatorDateArray[2] == null) || (vValidatorDateArray.length < 3) || (vValidatorDateArray.length > 3) )
		return 1
	else
	{
		ConvertFormat(pFormatIndex)
		if ( vValidatorDateArray.length != 3 )
		    return 1
		else if( ( isNaN( vValidatorDateArray[0] ) ) || ( isNaN( vValidatorDateArray[1] ) ) || ( isNaN( vValidatorDateArray[2] ) ) )
			return 1			
		else if( ( String(vValidatorDateArray[0]).indexOf(".") >=0 ) || ( String(vValidatorDateArray[1]).indexOf(".") >=0 ) || ( String(vValidatorDateArray[2]).indexOf(".") >=0 ) )
			return 1			
		else if(vValidatorDateArray[2].length != 4)
			return "Y"
		else
		{
			if ( ( vValidatorDateArray[0] < 1 ) || ( vValidatorDateArray[0] > 12 ) )
				return "M"
			else
			{
				if( ((parseFloat(vValidatorDateArray[2]) % 4 == 0) && (parseFloat(vValidatorDateArray[2]) % 100 != 0)) || (parseFloat(vValidatorDateArray[2]) % 400 == 0))
					vValidatorMonthDays[1]=29
				vValidatorMonth=parseFloat(vValidatorDateArray[0])-1
				if( ( vValidatorDateArray[1] < 1 ) || ( vValidatorDateArray[1] > vValidatorMonthDays[vValidatorMonth]) )
					return "D"
				else
					return 0 
			}
		}
	}
}


function DateCompare(pDate1,pDate2,pFormatIndex)
{   
	if((DateCheck(pDate1,pFormatIndex) == 0) && DateCheck(pDate2,pFormatIndex) == 0)
	{
		if (DateCheck(pDate1,pFormatIndex) == 0)
			pDate1=new Date(vValidatorDateArray[2],(vValidatorDateArray[0]-1),vValidatorDateArray[1])
	    if (DateCheck(pDate2,pFormatIndex) == 0 )
			pDate2=new Date(vValidatorDateArray[2],(vValidatorDateArray[0]-1),vValidatorDateArray[1])
	    return (pDate2-pDate1)/86400000
	}
	else
	{
		if (DateCheck(pDate1,pFormatIndex) != 0)
			return DateCheck(pDate1,pFormatIndex)
		else if(DateCheck(pDate2,pFormatIndex) != 0)
			return DateCheck(pDate2,pFormatIndex)
	}
}

function HolidayCheck(pDate)
{	
	var vCheck = DateCheck(pDate,2)
      if(vCheck == 0)
	{
		var vDate=new Date(vValidatorDateArray[2],vValidatorDateArray[0]-1,vValidatorDateArray[1])
		if ((vDate.getDay() == 0) || (vDate.getDay() ==6))
		{	
			return 1   }
		else
		{
			for(vCheck=0;vCheck<validatorHolidayArray.length;vCheck++)
			{	if ( DateCompare(pDate,validatorHolidayArray[vCheck],2) == 0 )
				return "H"
			}
			return 0
		}
	}
	else
	{
		if (vCheck == 1)
			return "F"
		else
			return vCheck
	}
}

function CalcLeapYear(year) 
{
	if (year % 4 == 0) 
		return true 
	 
	return false 
}

function Calendar(pFrmName,pFldName,pFormatIndex,pLeft,pTop,pYear,pMonth,pDate)
{
	var calCallingFormField
	calCallingFormField = eval('document.'+pFrmName+'.'+pFldName)
	
	
	if (pFormatIndex < 1 || pFormatIndex > 4 || isNaN(pFormatIndex) )
			pFormatIndex =1


	
	if (calCallingFormField.value != "" && calCallingFormField.value.toString().indexOf("/") != -1)
	{
	
		if (DateCheck(calCallingFormField.value,parseInt(pFormatIndex)) == 0 )
		{
		    
			if (pFormatIndex == 1)
			{
				pMonth=calCallingFormField.value.substr(0,calCallingFormField.value.indexOf("/"))-1
				pDate= calCallingFormField.value.substr(calCallingFormField.value.indexOf("/")+1,(calCallingFormField.value.lastIndexOf("/") - calCallingFormField.value.indexOf("/"))-1)
				pYear= calCallingFormField.value.substr(calCallingFormField.value.lastIndexOf("/")+1)
				
			}
			else if (pFormatIndex == 2)
			{
				pDate=calCallingFormField.value.substr(0,calCallingFormField.value.indexOf("/"))
				pMonth= calCallingFormField.value.substr(calCallingFormField.value.indexOf("/")+1,(calCallingFormField.value.lastIndexOf("/") - calCallingFormField.value.indexOf("/"))-1)
				pMonth=pMonth-1
				pYear= calCallingFormField.value.substr(calCallingFormField.value.lastIndexOf("/")+1)
			}
			else if (pFormatIndex == 3)
			{
				pMonth=calCallingFormField.value.substr(0,calCallingFormField.value.indexOf("/"))
				pMonth=Trim(pMonth.toUpperCase())
				pDate= calCallingFormField.value.substr(calCallingFormField.value.indexOf("/")+1,(calCallingFormField.value.lastIndexOf("/") - calCallingFormField.value.indexOf("/"))-1)
				pYear= calCallingFormField.value.substr(calCallingFormField.value.lastIndexOf("/")+1)				
				
				var vCounter
				for(vCounter=0;vCounter<12;vCounter++)
				{
					if( vValidatorMonthNames[vCounter].toUpperCase() == Trim(pMonth.toUpperCase()) )
					{
						pMonth= vCounter
						break
					}
				}
			}
			else if (pFormatIndex == 4)
			{
				pMonth=calCallingFormField.value.substr(calCallingFormField.value.indexOf("/")+1,(calCallingFormField.value.lastIndexOf("/") - calCallingFormField.value.indexOf("/"))-1)
				pMonth=Trim(pMonth.toUpperCase())
				pDate=calCallingFormField.value.substr(0,calCallingFormField.value.indexOf("/"))
				pYear= calCallingFormField.value.substr(calCallingFormField.value.lastIndexOf("/")+1)				
				var vCounter
				for(vCounter=0;vCounter<12;vCounter++)
				{
					if( vValidatorMonthNames[vCounter].toUpperCase() == Trim(pMonth) )
					{
						pMonth= vCounter
						break
					}
				}
			}
		}
		else
		{
			alert('Date you have entered or changed is incorrect,\n Please select date from Calendar')
			calCallingFormField.value=calCallingFormField.defaultValue
			calDateObj = new Date()
			pYear=calDateObj.getFullYear()
			pMonth=calDateObj.getMonth()
			pDate=calDateObj.getDate()
		}
	}
	else
	{
		var pTempMonth = pMonth
		var pTempYear = pYear
		var pTempDate = pDate
		
		calDateObj = new Date()
		if (pYear == null || isNaN(pYear) || parseInt(pYear) < 1900 || pYear == '' || pTempYear == 'undefined')
			pYear=calDateObj.getFullYear()

		if (pMonth == null || isNaN(pMonth) || pMonth < 1 || pMonth > 12 || pMonth == '' || pTempMonth == 'undefined')
			pMonth=calDateObj.getMonth()
		else
			pMonth = pMonth - 1

		if (pDate == null || isNaN(pDate) || pDate < 1 || pDate > 31 || pDate == '' || pTempDate == 'undefined')
			pDate=calDateObj.getDate()
		
	}
	var vHeight,vWidth
    if (navigator.userAgent.indexOf("Netscape")!= -1)
	{vHeight=220;vWidth=280}
	else if(navigator.userAgent.indexOf("Mozilla/4.7") != -1)
	{vHeight=220;vWidth=280}
	else
	{vHeight=210;vWidth=240}
	var sWnd
	var url="../.././html/calendar.htm?date="+pDate+"&month="+pMonth+"&year="+pYear+"&frmName="+pFrmName+"&fldName="+pFldName+"&FI="+pFormatIndex
	var wname="Calendar"
	var wparams="location=no," +
				"menubar=no," +
				"toolbar=no," +
				"scrollbars=no," +
				"resizable=yes," +
				"left=" + pLeft + "," +
				"top=" + pTop + "," +
				"height=" + vHeight + "," +
				"width=" + vWidth
	open(url,wname,wparams)
}


