var DateOK = (function(){
  var __months = [NaN,31,28,31,30,31,30,31,31,30,31,30,31]
  return (function(Y, M, D){
    return (D <= __months[M])? (D > 0) :
                              (D==29) &&
                               (M==2) &&
      !( ((Y&3)||((Y&15)&&(!(Y%25)))) );
  });
})();
var changecalendar = {
    DSTAdjust : 0,
    oneMinute : 1000 * 60,
    oneDay : 1000 * 60 * 60 * 24,
	bnight : 3,
	night : 1,

	setup : function (type, inputField){
		changecalendar.firstdate = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() +  changecalendar.bnight);
		switch(type){
			case"FromDt":
				changecalendar.FromDt = inputField;
				break;
			case"ToDt":
				changecalendar.ToDt = inputField;
				break;
			case"maxNight":
				changecalendar.maxNight = inputField;
				break;
			case"Night":
				changecalendar.Night = inputField;
				changecalendar.chkcheckin ();
				changecalendar.chknight ();
				Calendar.addEvent($(changecalendar.FromDt), "blur", changecalendar.chkcheckin);
				Calendar.addEvent($(changecalendar.ToDt), "blur", changecalendar.chkcheckout);
				Calendar.addEvent($(changecalendar.Night), "blur", changecalendar.chkcheckin);
				break;
		}
	},
	
	chkcheckin : function (){
		$(changecalendar.FromDt).value = changecalendar.setcharby6char ($(changecalendar.FromDt).value);
		if (!changecalendar.isValidDate ($(changecalendar.FromDt).value))
		{
			$(changecalendar.FromDt).value = "";
		}
		if ($(changecalendar.FromDt).value=="")
		{
			changecalendar.checkin = changecalendar.firstdate;
		} else {
			var txtqsfromdate = $(changecalendar.FromDt).value.split("-");
			changecalendar.checkin = new Date("20"+txtqsfromdate[2], parseFloat(txtqsfromdate[1])-1, txtqsfromdate[0]);
			if (changecalendar.checkin<=changecalendar.firstdate)
			{
				changecalendar.checkin = changecalendar.firstdate;
			}
		}
		$(changecalendar.FromDt).value = changecalendar.numdate2date (changecalendar.checkin);
		changecalendar.chknight ();
	},
	
	chkcheckout : function (){
		$(changecalendar.ToDt).value = changecalendar.setcharby6char ($(changecalendar.ToDt).value);
		if (!changecalendar.isValidDate ($(changecalendar.ToDt).value))
		{
			$(changecalendar.ToDt).value = "";
			changecalendar.chkcheckin ();
			changecalendar.chknight ();
		}
		var txtqstodate = $(changecalendar.ToDt).value.split("-");
		changecalendar.checkout = new Date("20"+txtqstodate[2], parseFloat(txtqstodate[1])-1, txtqstodate[0]);
		if (changecalendar.checkout<=changecalendar.checkin)
		{
			changecalendar.night = 1;
			changecalendar.checkout = new Date(changecalendar.firstdate.getFullYear(), changecalendar.checkin.getMonth(), changecalendar.checkin.getDate() +  changecalendar.night);
		} else {
	        changecalendar.DSTAdjust = (changecalendar.checkout.getTimezoneOffset() - changecalendar.checkin.getTimezoneOffset()) * changecalendar.oneMinute;
		    var diff = Math.abs(changecalendar.checkout.getTime() - changecalendar.checkin.getTime()) - changecalendar.DSTAdjust;
		    changecalendar.night = Math.ceil(diff/changecalendar.oneDay);
			if (changecalendar.night>changecalendar.maxNight)
			{
				changecalendar.night = changecalendar.maxNight;
//				changecalendar.checkin = new Date(changecalendar.checkout.getFullYear(), changecalendar.checkout.getMonth(), changecalendar.checkout.getDate() -  changecalendar.night);
//				$(changecalendar.FromDt).value = changecalendar.numdate2date (changecalendar.checkin);
				changecalendar.checkout = new Date(changecalendar.firstdate.getFullYear(), changecalendar.checkin.getMonth(), changecalendar.checkin.getDate() +  changecalendar.night);
			}
		}
		$(changecalendar.ToDt).value = changecalendar.numdate2date (changecalendar.checkout);		
		$(changecalendar.Night).value = changecalendar.night;
	},
	
	chknight : function (){
		if ($(changecalendar.Night).value=="" || (parseInt($(changecalendar.Night).value)).toString()=="NaN") {$(changecalendar.Night).value = changecalendar.night;}
		changecalendar.night = parseInt($(changecalendar.Night).value);
		changecalendar.night = Math.abs(changecalendar.night);
		if(changecalendar.night<=0) changecalendar.night = 1;
		if(changecalendar.night>changecalendar.maxNight) changecalendar.night = changecalendar.maxNight;
		$(changecalendar.Night).value = changecalendar.night;
		changecalendar.checkout = new Date(changecalendar.checkin.getFullYear(), changecalendar.checkin.getMonth(), changecalendar.checkin.getDate() +  changecalendar.night);
		$(changecalendar.ToDt).value = changecalendar.numdate2date (changecalendar.checkout);
	},

	numdate2date : function (date){
		var dd = date.getDate();
		dd = (dd<10) ? "0" + dd : dd;
		var mm = date.getMonth() + 1;
		mm = (mm<10) ? "0" + mm : mm;
		var yy = date.getFullYear().toString().substr(2,2);
		return dd + "-" + mm + "-" + yy;
	},
	
	isValidDate : function (S) { 
		if (!(S.length==6 || S.length==8)) return false;
		S = S.split(/\D+/)
		var Y = +S[2], M = +S[1], D = +S[0]
		return DateOK(Y, M, D);
	},
	
	setcharby6char : function (str){
		if (str.length==6 ) {
			var d = str.substr(0,2);
			var m = str.substr(2,2);
			var y = str.substr(4,2);
			str = d + "-" + m + "-" + y;
		}
		return str;
	}
}
