/////////////////// Plug-in file for CalendarXP 7.0 /////////////////
// This file is totally configurable. You may remove all the comments in this file to shrink the download size.
/////////////////////////////////////////////////////////////////////

///////////// Calendar Onchange Handler ////////////////////////////
// It's triggered whenever the calendar gets changed.
// d = 0 means the calendar is about to switch to the month of (y,m); 
// d > 0 means a specific date [y,m,d] is about to be selected.
// Return a true value will cancel the change action.
// NOTE: DO NOT define this handler unless you really need to use it.
////////////////////////////////////////////////////////////////////
function fOnChange(y,m,d) {
	if(d>0) fSetDateToInput(y,m,d);
	return false;  // return true to cancel the change.
}


///////////// Calendar AfterSelected Handler ///////////////////////
// It's triggered whenever a date gets fully selected.
// The selected date is passed in as y(ear),m(onth),d(ay)
// NOTE: DO NOT define this handler unless you really need to use it.
////////////////////////////////////////////////////////////////////
function fAfterSelected(y,m,d) {
	//alert(y+'-'+m+'-'+d);
	//alert(gdCtrl.name +"="+gdCtrl.value);
	try{
		gdCtrl.focus();
	}catch(er){}	

	fEvalUserJsFunctionName(y,m,d);
	return;
}


///////////// Calendar Cell OnDrag Handler ///////////////////////
// It triggered when you try to drag a calendar cell. (y,m,d) is the cell date. 
// aStat = 0 means a mousedown is detected (dragstart)
// aStat = 1 means a mouseover between dragstart and dragend is detected (dragover)
// aStat = 2 means a mouseup is detected (dragend)
// Return true to skip the set date action, if any.
// NOTE: DO NOT define this handler unless you really need to use it.
////////////////////////////////////////////////////////////////////
// function fOnDrag(y,m,d,aStat) {}


// ====== Following are self-defined and/or custom-built functions! =======

function fStartPop(startc,endc,ExcludeDate) {
  var sd=fParseDate(endc.value); 
  if (!sd) sd=gEnd;
  if(ExcludeDate && ExcludeDate.value.length>0){
     eval("fPopCalendar(startc, [gBegin,sd,sd,"+ExcludeDate.value+"])");
  }else{
	 fPopCalendar(startc, [gBegin,sd,sd]);
  }//if
}

function fEndPop(startc,endc,ExcludeDate) {
  var sd=fParseDate(startc.value);
  if (!sd) sd=gBegin; 
  if(ExcludeDate && ExcludeDate.value.length>0){
	eval("fPopCalendar(endc, [sd,gEnd,sd,"+ExcludeDate.value+"])");
  }else{
	fPopCalendar(endc, [sd,gEnd,sd]);
  }//if
}

function fBetweenPop(dateCtrl, startc, endc, ExcludeDate){
  var sd=fParseDate(startc.value);
  var ed=fParseDate(endc.value);  
  if(sd && ed){
	  if(ExcludeDate && ExcludeDate.value.length>0){
		  eval("fPopCalendar(dateCtrl, [sd,ed,sd,"+ExcludeDate.value+"])");
	  }else{
		  fPopCalendar(dateCtrl, [sd,ed,sd]);
	  }//if
  }else{
	fPopCalendar(dateCtrl);
  }
}

 function fBetweenPop2(dateCtrl, startc, endc, ExcludeDate){
  var sd=fParseDate(startc.value);
  var ed=fParseDate(endc.value);  
  if(sd && ed){
	  if(ExcludeDate && ExcludeDate.value.length>0){
		  eval("fPopCalendar(dateCtrl, [sd,ed,sd,"+ExcludeDate.value+"])");
	  }else{
		  fPopCalendar(dateCtrl, [sd,ed,sd]);
	  }//if
  }else{
	fPopCalendar(dateCtrl);
  }
  calCheckoutDate(document.frm_searchDEPARTDATE.value,document.frm_search.night.value)
}


//***** Start Calendar - day, month/year **************************************
var dayNameShort=new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
var _daynamec, _dc, _myc;
var _fnName;

var gUserJsFunctionName=null;

function fSetUserJsFunctionName(dataValue) {
	gUserJsFunctionName = dataValue
}//fn

function fEvalUserJsFunctionName(y, m, d) {
	if(gUserJsFunctionName){
		gUserJsFunctionName = gUserJsFunctionName + "(y, m, d)";
		eval("parent."+gUserJsFunctionName);
	}//if
}//fn

//have day{select1} and month/year{select2}
function fBetweenPopType1(objDateCtrl, startc, endc, objDayName, objDaySelect, objMonthYearSelect){
	alert('555');
  _daynamec = objDayName;	_dc = objDaySelect;	_myc = objMonthYearSelect;
  var sd=fParseDate(startc.value);  var ed=fParseDate(endc.value);  
  if(sd && ed){	fPopCalendar(objDateCtrl, [sd,ed,sd]);
  }else{				fPopCalendar(objDateCtrl);		}//if
}//fn

function DaySelect_OnChange(objDateCtrl, objDayName, objDaySelect, objMonthYearSelect){
	fChangeDate(objDayName, objDaySelect, objMonthYearSelect, objDateCtrl);
	fEvalUserJsFunctionName(objMonthYearSelect.value.substr(3,4), objMonthYearSelect.value.substr(0,2), objDaySelect.value);
}//fn

//objMonthYearSelect format is MM/yyyy
function MonthYearSelect_OnChange(objDateCtrl, objDayName, objDaySelect, objMonthYearSelect){
	fGenDate(objDaySelect, objMonthYearSelect.value.substr(3,4), objMonthYearSelect.value.substr(0,2), objDateCtrl, objDayName);
	fEvalUserJsFunctionName(objMonthYearSelect.value.substr(3,4), objMonthYearSelect.value.substr(0,2), objDaySelect.value);
}//fn

//used by fOnChange()
function fSetDateToInput(y,m,d) {
	if(_daynamec && _dc && _myc){
		fGenDate(_dc, y, m, gdCtrl, _daynamec);
		setOptionSelected(_dc, d, true);
		setOptionSelected(_myc, ((gbPadZero&&m<10)?"0"+m:m)+"/"+y, true);	
		
		_daynamec.value = getWeekday(y, m, d);
	}//if
}//fn

//use in fSetDateToInput() and onChange of monthSelect
function fGenDate(objDaySelect, nYear, nMonth, dateCtrl, objDayName){	
	//เอาค่าไปเก็บใน dateCtrl ด้วย
	var tmpDay=1;	var bSelected=false;	var daysInMonth = getDaysInMonth(nYear, nMonth);
	if(dateCtrl){
		if(dateCtrl.value.length > 0){
			var arrDate = dateCtrl.value.split("/");
			if(arrDate[0] > daysInMonth)	arrDate[0] = daysInMonth;
			dateCtrl.value = arrDate[0]+"/"+nMonth+"/"+nYear;
			tmpDay = Math.abs(arrDate[0]);
		}else{//case dateCtrl=""
			dateCtrl.value = "01/"+nMonth+"/"+nYear;
		}//if
	}//if
	//--
	nYear = Math.abs(nYear);	nMonth = Math.abs(nMonth);
	with(objDaySelect){
		options.length = 0;
		for(var iDay=1; iDay<=daysInMonth; iDay++){
			options[options.length] = new Option(iDay, (iDay<10?"0":"")+iDay);	
			if(bSelected==false && tmpDay==iDay){
				options[options.length-1].selected = true;	 bSelected = true;	
			}//if
		}//for
		//case old date is mor than last date in new month
		if(bSelected==false)	options[options.length-1].selected = true;

		//Set DayName
		for(var i=0;i<options.length-1;i++){					
			if(options[i].selected){
				objDayName.value = getWeekday(nYear, nMonth, options[i].value);	break;
			}//if
		}//for
	}//with
}//fn

function fChangeDate(objDayName, objDaySelect, objMonthYearSelect, objDateCtrl){
	//save new DaySelect to DateCtrl
	if(objDateCtrl && objDateCtrl.value.length > 0){
		var arrDate = objDateCtrl.value.split("/");
		objDateCtrl.value = objDaySelect.value + "/" + arrDate[1] + "/" + arrDate[2];		
	}//if

	//Set DayName
	var aDate = objMonthYearSelect.value.split("/");
	objDayName.value = getWeekday(aDate[1], aDate[0], objDaySelect.value);
}//fn

function getDaysInMonth(nYear, nMonth){
	var arrayDate = fDateAdd(("1/"+nMonth+"/"+nYear), -1, 1, 0).split("/");
	return arrayDate[0];
}//fn

function getWeekday(year, month, day){
    var theDate = new Date(Math.abs(year), (Math.abs(month)-1), day);	
    return dayNameShort[theDate.getDay()];
}//fn

//จะทำการ set ค่า selectedVal(true หรือ false) เมื่อ element มีค่าเท่ากับ elementVal ที่กำหนด
function setOptionSelected(elementC, elementCVal, selectedVal ){
	var blnSelected = selectedVal?selectedVal:true;
	with(elementC){
		var length = options.length;		
		for(var i=0;i<length;i++){	
			if(options[i].value == elementCVal){	options[i].selected = blnSelected;	break;	}
		}//end for
	}//with
}//fn

//***** Finish Calendar - day, month/year **************************************

//***** Start function Date util **************************************
function fDateDiff(startDateV ,finishDateV){
	var arrayDate  = startDateV.split("/");
	var _date = (Math.abs(arrayDate[1]))+"/"+(Math.abs(arrayDate[0]))+"/"+(Math.abs(arrayDate[2]));
	var	startDate  = new Date(Date.parse(_date));
	
	arrayDate = finishDateV.split("/");
	_date =  (Math.abs(arrayDate[1]))+"/"+(Math.abs(arrayDate[0]))+"/"+(Math.abs(arrayDate[2]));
	var finishDate = new Date(Date.parse(_date));
	
	return parseInt((finishDate - startDate)/(1000*60*60*24));
}

function fDateAdd(DateV, numDays, numMonths, numYears)
{
	var sdate = DateV.split("/");
	var indate = (Math.abs(sdate[1]))+"/"+(Math.abs(sdate[0]))+"/"+(Math.abs(sdate[2]));
	startDate = new Date(Date.parse(indate));

	var returnDate = new Date(startDate.getTime());
	var yearsToAdd = parseInt(numYears);
	
	var month = parseInt(returnDate.getMonth())+ parseInt(numMonths);

	if (month > 11){
		yearsToAdd = Math.floor((month+1)/12);
		month -= 12*yearsToAdd;
		yearsToAdd += parseInt(numYears);
	}//if
	
	returnDate.setMonth(parseInt(month));
	returnDate.setFullYear(returnDate.getFullYear()+ yearsToAdd);
	returnDate.setTime(returnDate.getTime()+1000*60*60*24*numDays);
	
	if(gbPadZero)
		return (returnDate.getDate()<10?"0"+returnDate.getDate():returnDate.getDate())+"/"+((returnDate.getMonth()+1)<10?"0"+(returnDate.getMonth()+1):returnDate.getMonth()+1)+"/"+(returnDate.getFullYear());
	else
		return (returnDate.getDate())+"/"+(returnDate.getMonth()+1)+"/"+(returnDate.getFullYear());
}//fn
//***** Finish function Date util **************************************