var month = ["JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"];
var month_count = ["31","28","31","30","31","30","31","31","30","31","30","31"];

var now = new Date();
var isRetChanged = false;
var objArray = new Array();
var monthStartCount = 0;
var monthCount = 12; // should be multiples of 12
var dayDiff=0;

function getMonthId(monthVal){
	switch(monthVal.toUpperCase())
	{
	
		case 'JAN': return 0;
		case 'FEB': return 1;
		case 'MAR': return 2;
		case 'APR': return 3;
		case 'MAY': return 4;
		case 'JUN': return 5;
		case 'JUL': return 6;
		case 'AUG': return 7;
		case 'SEP': return 8;
		case 'OCT': return 9;
		case 'NOV': return 10;
		case 'DEC': return 11;
	}
}

function getWeekDay(dayVal)
{
	switch(dayVal)
	{
		case 0: return "Sun";
		case 1: return "Mon";
		case 2: return "Tue";
		case 3: return "Wed";
		case 4: return "Thu";
		case 5: return "Fri";
		case 6: return "Sat";
	}
}

function populateWeekDay(month_val,cnt,day_val,id)
{
	//alert(month_val+","+cnt+","+day_val);
	var myDate=new Date();
	myDate.setFullYear(parseInt(month_val.split("-")[1]),cnt,day_val);
	var today = getWeekDay(myDate.getDay());
	var txt_id = "dayTxt_"+id;
	var txtObj = document.getElementById(txt_id);
	txtObj.value = today;
	//txtObj.innerHTML = today;
}

function populateDay(monthObj,childId,refId,isRestrict) {	
	
	var month_id = monthObj.id;
	var id  = month_id.split('_')[1];
	var day_id = "day_"+id;
	var cnt = getMonthId(monthObj.value.split("-")[0]);
	var day_cnt = month_count[cnt];
	
	day_cnt = isLeapYear(monthObj);	
	var obj = document.getElementById(day_id);

	var new_day = parseInt(obj.value);	
	if(parseInt(obj.value)>day_cnt)
	{
		// changed on 24-May
		/*new_day = parseInt(obj.value) - day_cnt;
		cnt = cnt+1;
		var day_cnt = month_count[cnt];
		if(monthObj.selectedIndex<(monthCount-1))
			monthObj.selectedIndex = monthObj.selectedIndex+1;
		else
			monthObj.selectedIndex = 0;*/
	}
	
	
	// changed on 19-Jul for checking condition of restrict="n"
	if(isRestrict.toUpperCase()!="N")
	{
		// changed on 24-May		
		var status = chkDates(obj.getAttribute("calStrDte"),obj.value+"-"+getMonthId(monthObj.value.split('-')[0])+"-"+monthObj.value.split('-')[1]);
		if(status=="failure")
		{		
			//alert("Selected Date cannot be before current date. Date will be reset to current date.");
			obj.value = parseFloat(obj.getAttribute("calStrDte").split('-')[0]);
			monthObj.value = month[parseFloat(obj.getAttribute("calStrDte").split('-')[1])]+"-"+obj.getAttribute("calStrDte").split('-')[2];		
			month_val = monthObj.value;	
			cnt = getMonthId(month_val.split("-")[0]);
			day_cnt = isLeapYear(monthObj);	
			new_day = parseInt(obj.value);	
		}
	}

	obj.options.length=0;	
	addDaysCollection(day_id,day_cnt,new_day);

	var dayObj = document.getElementById("day_"+month_id.split("_")[1]);
	var monthObjNew = document.getElementById(month_id);
	var monVal = monthObjNew.value;
	var dayVal = dayObj.value;
	cnt = getMonthId(monVal.split("-")[0]);
	populateWeekDay(monVal,cnt,dayVal,month_id.split("_")[1]);
	
	setCompHidValue(id);
	
	var isStateChanged = getStateValue(monthObj.id.split('_')[1],refId);
	
	//if(childId!=null && !isStateChanged)
	if(childId!=null)
	{
		var cldMobj = document.getElementById("month_"+childId);			
		//var newDay = parseInt(dayObj.value)+1;
		var newDay = parseFloat(dayObj.value)+dayDiff;
		cldMobj.value = monVal;				
		repopulateDays(cldMobj,newDay);
		
		setCompHidValue(childId);
	}		
}

function getStateValue(objId,refId)
{
	for(var i=0;i<objArray.length;i++)
	{
		var tmpArray = objArray[i];		
		if(refId!=null)
		{
			if(tmpArray[0]==refId)
			{
				objArray[i][1] = "true";
				return false;
			}
		}
		else  
		{
			if(tmpArray[0]==objId)
			{
				return stringToBoolean(tmpArray[1]);
			}
		}
	}
}

function stringToBoolean(state)
{
	if(state=="true")
		return true;
	else
		return false;
}

function populateMonth(dayObj,childId,refId,isRestrict) {
	
	var day_val = dayObj.value;
	var day_id = dayObj.id;
	var id  = day_id.split('_')[1];
	var month_id = "month_"+id;
	var monthObj = document.getElementById(month_id);
	month_val = monthObj.value;	
	var cnt = getMonthId(month_val.split("-")[0]);
	var day_cnt = isLeapYear(monthObj);		
	
	// changed on 19-Jul for checking condition of restrict="n"
	if(isRestrict.toUpperCase()!="N")
	{
		// changed on 24-May
		var status = chkDates(dayObj.getAttribute("calStrDte"),dayObj.value+"-"+getMonthId(monthObj.value.split('-')[0])+"-"+monthObj.value.split('-')[1]);
		if(status=="failure")
		{		
			//alert("Selected Date cannot be before current date. Date will be reset to current date.");
			dayObj.value = parseFloat(dayObj.getAttribute("calStrDte").split('-')[0]);
			var nextMonth=parseFloat(dayObj.getAttribute("calStrDte").split('-')[1]); 
			var year=dayObj.getAttribute("calStrDte").split('-')[2]
			nextMonth++;
			if(nextMonth>11){
				nextMonth-=12;
				year++;
			}
			
			monthObj.value = month[nextMonth]+"-"+year;		
			month_val = monthObj.value;	
			cnt = getMonthId(month_val.split("-")[0]);
			day_cnt = isLeapYear(monthObj);	
			if(day_val>dayObj.value){
			day_val = dayObj.value;	
			}	
		}
	}
		
	dayObj.options.length=0;	
	addDaysCollection(day_id,day_cnt,day_val);	
	populateWeekDay(month_val,cnt,day_val,id);
	
	setCompHidValue(id);
	
	var isStateChanged = getStateValue(monthObj.id.split('_')[1],refId);	
	
	if(childId!=null)
	{	
		var cldMobj = document.getElementById("month_"+childId);
		var cldDobj = document.getElementById("day_"+childId);		
		cldMobj.value = month_val;		
		//var new_day = parseInt(day_val)+1;			
		var new_day = parseFloat(day_val)+dayDiff;			
		repopulateDays(cldMobj,new_day);	
		
		setCompHidValue(childId);
	}		
}

function addMonthCollection(id,day_id,ref_id,isCurMonth,calStartDte,yrCount)
{
	monthCount = parseFloat(yrCount) * 12;
	
	var len = 0;
	var cur_year = now.getFullYear();
	len = month.length;
	var monthIndex = now.getMonth();
	len = monthCount;
	
	// changed on 24-May	
	var tmpYear = parseFloat(calStartDte.split('-')[2]);	
	monthIndex = parseInt(calStartDte.split('-')[1]);
	cur_year = tmpYear;	
	var x = 0;

	for(var i=0,j=monthIndex;i<len;i++,j++)
	{
		var option0;

		if(j>=month.length)
		{
			j=0;
			tmpYear+=1;
			cur_year = tmpYear;
		}

		option0 = new Option(month[j]+"-"+cur_year, month[j]+"-"+cur_year);
		
		if(j==now.getMonth() && cur_year==now.getFullYear())
		{				
			x = i;
		}	
		
		eval("document.getElementById('"+id+"').options[i]=option0" );
	}	
	
	document.getElementById(id).selectedIndex = x;		
	document.getElementById(day_id).setAttribute("calStrDte",calStartDte);
	
	if(ref_id!=null)
	{				
		//var day_value = document.getElementById(ref_id).value;		
		var day_value = parseFloat(document.getElementById(ref_id).value)+dayDiff;				
		setDayValues(day_id,id,day_value);		
	}
		
	if(ref_id==null)
	{
		var day_value = document.getElementById(day_id).value;			
		var cur_date = now.getDate();			
		var useragent = navigator.userAgent;
		cur_date = cur_date+monthStartCount;	
		if(isCurMonth!=null)
			cur_date = now.getDate();
		
		if(day_value!=cur_date)
		{			
			if(day_value>parseInt(month_count[now.getMonth()]) || day_value==1)
			{			
				if(document.getElementById(id).selectedIndex<(monthCount-1))
					document.getElementById(id).selectedIndex +=1;
			}
		}			
		
		setDayValues(day_id,id,cur_date);			
	}
}

function setDayValues(day_id,id,daySel)
{		
	document.getElementById(day_id).options.length=0;			
	var mVal = document.getElementById(id).value;			
	var dId = getMonthId(mVal.split("-")[0]);		
	var dayCnt = month_count[dId];			
	dayCnt = isLeapYear(document.getElementById(id));
	
	if(parseInt(daySel)>dayCnt)
	{
		daySel = parseInt(daySel) - dayCnt;
		var obj = document.getElementById(id);
		if(obj.selectedIndex<(monthCount-1))
			obj.selectedIndex = obj.selectedIndex+1;
		else
			obj.selectedIndex = 0;
		dayCnt = isLeapYear(document.getElementById(id));
	}	

	for(var i=1,j=0;i<=dayCnt;i++,j++)
	{
		var option0 = new Option(i, i);			
		eval("document.getElementById('"+day_id+"').options[j]=option0" );
	}		
	document.getElementById(day_id).value = daySel;
}

function isLeapYear(monthObj)
{
	var month_val = monthObj.value;	
	var cnt = getMonthId(month_val.split("-")[0]);		
	var day_cnt = month_count[cnt];
	
	var selYear = parseInt(month_val.split("-")[1]);
	if((parseInt(selYear)%4)==0)
	{
		if(parseInt(day_cnt)==28)
		{
			day_cnt=29;
		}
	}
	
	return day_cnt;
}

function getInitDates(selDay,ref_id,id)
{	
	var cur_date = now.getDate();		

	var useragent = navigator.userAgent;
	if(useragent.indexOf("MSIE")!=-1)
	{
		cur_date = cur_date;
	}

	if(selDay!=null)
	{
		cur_date = selDay;
	}
	
	if(ref_id!=null)
	{
		var refObj = document.getElementById(ref_id);
		var ref_value = refObj.value;		
		if(parseInt(ref_value)==parseInt(refObj.options.length))
		{			
			cur_date = 1;
		}
		else
		{				
			cur_date = parseInt(ref_value)+1;			
		}		
	}
	
	return cur_date;
}

var isEntry = false;

function addDaysCollection(id,specId,selDay,mon_id,ref_id)
{	
	var cur_month = now.getMonth();
	var days = month_count[cur_month];	
	if(specId!=null)
	{
		days = specId;
	}
	var cur_date = getInitDates(selDay,ref_id,id);	
	if(selDay!=null)
	{
		cur_date = selDay;
	}
	if(parseInt(cur_date)>parseInt(days))
	{
		// changed on 24May
		//cur_date = cur_date - days;
		//alert("Invalid date. The date will be reset to the last day of the selected month.");
		cur_date = days;
		
		isEntry = true;		
	}	
	
	for(var i=1,j=0;i<=days;i++,j++)
	{
		var option0 = new Option(i, i);		
		eval("document.getElementById('"+id+"').options[j]=option0" );
	}	
	
	document.getElementById(id).value = cur_date;		
}

function callCalendar(obj,top,left,startDte,endDte,restrict,showId)
{		
	var itemArr = obj.name.split("@@");
	var mObj = document.getElementById(itemArr[1]);
	var dObj = document.getElementById(itemArr[0]);
	var newDate = dObj.value+"-"+getMonthId(mObj.value.split("-")[0])+"-"+mObj.value.split("-")[1];		
	show_calendar(obj.name,top,left,"true",newDate,startDte,endDte,restrict,parseFloat(showId));
}

function checkRange(dateStr,obj)
{
	var elems = dateStr.split("-");
	var dateNew = elems[1]+"-"+elems[2];
	
	for(var i=0;i<obj.length;i++)
	{
		if(obj.options[i].value.toUpperCase()==dateNew.toUpperCase())
		{
			return true;			
		}
	}
	return false;
}

function setDateValues(calendarDate,fieldStr,changeState)
{		
document.getElementById(fieldStr).value=calendarDate;
closeLayer(); 
//validateWgtEL(document.getElementById(fieldStr));
 closeLayer();
//if(document.all) 
// focusNext(document.getElementById(fieldStr)); 
 

return false;
	
}
 
 
 function focusNext(el){
 
 
	  var elements=el.form.elements; 
	  var nextElement=null;
	  for(var i=0;i<elements.length;++i){
		  if(el==elements[i]&&i<elements.length-1){
		 	focusNextItem(elements, i);
		 	return;
		  }
	  }
     
 }
 function focusNextItem(elements, index){
	 var nextEl=null;
	 var error=null;
	 for(var i=index+1;i<elements.length;++i){
		 try{		  
		 	 
			 elements[i].focus();	  	
		 }catch(e){		
		 error=e;}
		 if(error==null){
		  	return;
		 }
		 error=null;
	 	
	 }
	 
 }

/**
	For related components
	calendarDate - new date to be set in component
	cmpId - unique id of the component
	cldId - unique id of the child if present, else put null
	refId - unique id of the parent if present, else put null
	
	ex: setDateFrmJs("20-Sep-2006","5",null,null);
**/
function setDateFrmJs(calendarDate,cmpId,cldId,refId)
{	
	var monthObj = document.getElementById("month_"+cmpId);
	var dayObj = document.getElementById("day_"+cmpId);	
	var values = calendarDate.split("-");			
	var changeState = null;
	
	if(checkRange(calendarDate,monthObj))
	{			
		monthObj.value = values[1].toUpperCase()+"-"+values[2];					
		repopulateDays(monthObj,parseFloat(values[0]));				
		if(changeState==null)
		{			
			if(cldId!=null)
			{			
				var monVal = monthObj.value;
				var dayVal = dayObj.value;
				//var newDayVal = parseInt(dayVal)+1;		
				var newDayVal = parseFloat(dayVal)+dayDiff;		
				document.getElementById("month_"+cldId).value = monVal;
				document.getElementById("day_"+cldId).value = dayVal;			
				repopulateDays(document.getElementById("month_"+cldId),newDayVal);	
				
				setCompHidValue(cldId);
			}		
		}	
		
		var id = monthObj.id.split('_')[1];
		setCompHidValue(id);		
	}
	else
	{
		//alert("Select Date between "+monthObj.options[0].value+" and "+monthObj.options[monthObj.length-1].value);
	}
}

/**
	For unrelated components
	calendarDate - new date to be set in component
	dayObjTmp - the day object to which date is to be set
	monthObjTmp - the month object to which date is to be set
	
	ex: setDateFrmJsSingle("20-Sep-2006",document.forms[0].testd5,document.forms[0].testm5);
**/
function setDateFrmJsSingle(calendarDate,dayObjTmp,monthObjTmp)
{		
	var monthObj = monthObjTmp;
	var dayObj = dayObjTmp;	
	var values = calendarDate.split("-");		
		
	if(checkRange(calendarDate,monthObj))
	{			
		monthObj.value = values[1].toUpperCase()+"-"+values[2];					
		repopulateDays(monthObj,parseFloat(values[0]));						
		var id = monthObj.id.split('_')[1];
		setCompHidValue(id);	
	}
	else
	{
		//alert("Select Date between "+monthObj.options[0].value+" and "+monthObj.options[monthObj.length-1].value);
	}
}

function setCompHidValue(id)
{
	if(document.getElementById('compNameHid_'+id))
	{
		document.getElementById('compNameHid_'+id).value = document.getElementById('day_'+id).value +'-'+ document.getElementById('month_'+id).value;
	}
}

function repopulateDays(objMonth,newDayVal) {	
	var month_id = objMonth.id;
	var id  = month_id.split('_')[1];
	var day_id = "day_"+id;
	var cnt = getMonthId(objMonth.value.split("-")[0]);
	var day_cnt = month_count[cnt];
	var selYear = parseInt(objMonth.value.split("-")[1]);
	day_cnt = isLeapYear(objMonth);	
	
	var obj = document.getElementById(day_id);
	var new_day = newDayVal;	
	if(newDayVal>day_cnt)
	{	//new_day = parseInt(newDayVal) - day_cnt;
		new_day = day_cnt;
	
		cnt = cnt+1;
		var day_cnt = month_count[cnt];		
		if((parseInt(selYear)%4)==0)
		{
			if(day_cnt==28)
				day_cnt=29;
		}
		
		/*if(objMonth.selectedIndex<(monthCount-1))
			objMonth.selectedIndex = objMonth.selectedIndex+1;
		else
			objMonth.selectedIndex = 0;*/
	}

	obj.options.length=0;	
	addDaysCollection(day_id,day_cnt,new_day);

	var dayObj = document.getElementById("day_"+month_id.split("_")[1]);
	var monthObj = document.getElementById(month_id);
	var monVal = monthObj.value;
	var dayVal = dayObj.value;
	cnt = getMonthId(monVal.split("-")[0]);
	populateWeekDay(monVal,cnt,dayVal,month_id.split("_")[1])
}

function setPointerType(obj) {

	var ua;    
	ua = navigator.userAgent.toLowerCase();    
	if ((i = ua.indexOf("msie")) >= 0 && navigator.appName.toLowerCase().indexOf("netscape")==-1) {    		
		obj.style.cursor = 'hand';    
	}
	else {	
		obj.style.cursor = 'pointer';
	} 
		
}
function getNextYearDate(curDate){
		var dates=curDate.split("-");
		var date=parseInt(dates[0]);
		var monthIndex=getMonthId(dates[1]);
		if(date==month_count[monthIndex]){
		if(monthIndex==0) 
		monthIndex=12;
			date=month_count[monthIndex-1]
		}
		var year= parseInt(dates[2])+1;		
		return date+"-"+monthIndex+"-"+year;
		
	}
