/*****************************************************************************************************/
/*                                                                                                   */
/*                                'AVAILABILITY PANEL' CLASS                                         */          
/*                                                                                                   */
/*****************************************************************************************************/

function AVAILABILITY_GINFO(parent){
	var JSObject = this;
	this.type = "Availability"; 
	this.form = document.getElementById("availability_form");
	this.ajax = false;
	
	this.arr_inputs = ["_inp_StartDay","_inp_StartMonth","_inp_StartYear","_inp_EndDay","_inp_EndMonth","_inp_EndYear"]
		
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                  FUNCTION CREATE AVAILABILITY PANEL                               */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.initCreate = function(){
		this.limit_startdate = document.getElementById("limit_startdate").value;
		//this.limit_enddate = document.getElementById("limit_enddate").value;
		
		
		this._inp_StartDay = this.form["checkin_day"];
		//this._inp_StartDay.onchange = this.validateStartDate;
		
		this._inp_StartMonth = this.form["checkin_month"];
		//this._inp_StartMonth.onchange = this.validateStartDate;
			
		this._inp_StartYear = this.form["checkin_year"];
		//this._inp_StartYear.onchange = this.validateStartDate;
		
		this._inp_EndDay = this.form["checkout_day"];
		//this._inp_EndDay.onchange = this.validateEndDate;
		
		this._inp_EndMonth = this.form["checkout_month"];
		//this._inp_EndMonth.onchange = this.validateEndDate;
		
		this._inp_EndYear = this.form["checkout_year"];
		//this._inp_EndYear.onchange = this.validateEndDate;
		
		this.setDate("start", this.limit_startdate);
		this.setDate("end", this.getNextDay(this.limit_startdate));
		
	}
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                  FUNCTION SET DATE                                                */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.setDate = function(type, date){
		
		var day = Number(date.split("/")[0]);
		var month = Number(date.split("/")[1]);
		var year = Number(date.split("/")[2]);
		
		switch (type){
			case "start":
				this._inp_StartDay.selectedIndex = this.getDateIndex(this._inp_StartDay, day);
				this._inp_StartMonth.selectedIndex = this.getDateIndex(this._inp_StartMonth, month);
				this._inp_StartYear.selectedIndex = this.getDateIndex(this._inp_StartYear, year);
				
				break;
			
			case "end":
				this._inp_EndDay.selectedIndex = this.getDateIndex(this._inp_EndDay, day);
				this._inp_EndMonth.selectedIndex = this.getDateIndex(this._inp_EndMonth, month);
				this._inp_EndYear.selectedIndex = this.getDateIndex(this._inp_EndYear, year);
			
				break;
				
			default:
			
				break;
			
		}
		
		
	}
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                  FUNCTION GET DATE INDEX                                          */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.getDateIndex = function(selectObj, Value){
		for (var i=0; i<selectObj.options.length; i++){
			if (Number(selectObj.options[i].value) == Number(Value)){
				return i;
				break;
			}
		}
		
		return -1;
	}
	
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                  FUNCTION GET DATE                                                */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.getDate = function(Value, format){
		var Months_en = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
		var Months_ro = ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"];
		
		switch (format){
			
			case "dd/mm/yyyy":
				var day = Value.split("/")[0];
				var month = eval("Months_"+language)[Number(Value.split("/")[1]) - 1];
				var year = Value.split("/")[2]
				
				return day + " "+month + " "+year;
				break;
			
			default :
				
				break;
			
		}
		
	}
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                       FUNCTION GET NUMBER OF DAYS BETWEEN 2 DATES                                 */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.DaysBetween2Dates = function(s_yr, s_mo, s_dy, e_yr, e_mo, e_dy){
	
		var d, r, t1, t2, t3;            //Declare variables.
		
		var MinMilli = 1000 * 60         //Initialize variables.
		
		var HrMilli = MinMilli * 60
		
		var DyMilli = HrMilli * 24
		
		t1 = Date.UTC(s_yr, s_mo - 1, s_dy)    //Get milliseconds since 1/1/1970.
		
		t2 = Date.UTC(e_yr, e_mo - 1, e_dy)    //Get milliseconds since 1/1/1970.
		
		if (t2 >= t1) t3 = t2 - t1;
		else return 0;
		
		r = Math.round(t3 / DyMilli);
		
		return(r+1);                       //Return difference.
	
	}
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                    FUNCTION GET NEXT DAY                                          */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.getNextDay = function(date){
		var day  = Number(date.split("/")[0]);
		var month = Number(date.split("/")[1]);
		var year = Number(date.split("/")[2]);
		
		var newDay = day + 1;
		var newMonth = month;
		var newYear = year;
		var date = new String();
		var valid = date.isDate(month,newDay,year);
				
		//daca data este valida prin incrementarea zilei cu o unitate
		if (valid){
			//
		}
		else{
			newDay = 1;
			newMonth = month+1;
			var date = new String();
			var valid = date.isDate(newMonth,newDay,year);
			
			//daca data este valida prin incrementarea lunii cu o unitate
			if (valid){
				//
			}
			else{
				newDay = 1;
				newMonth = 1;
				newYear = year+1;
				var date = new String();
				var valid = date.isDate(newMonth,newDay,year);
				
				//daca data este valida prin incrementarea lunii cu o unitate
				if (valid){
					//	
				}
			}
		}
		
		return newDay + "/"+newMonth + "/"+newYear;
		
	}
	
	
	
		
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                  FUNCTION GET DATE                                                */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.changeDayOptions = function(monthfield, dayfield, yearfield){
		
		var form = this.form;
		
		var selectmonth = monthfield;
		var selectday = dayfield;
		var selectyear = yearfield;
		
		var selectedmonth = selectmonth.options[selectmonth.selectedIndex].value;
		var selectedyear = selectyear.options[selectyear.selectedIndex].value;
		
		var nodays = 31;
		
		var selectedDayIndex = selectday.selectedIndex;
		
		
		switch (parseInt(selectedmonth)) {
			case 2:
					if ((selectedyear%4==0)&&(selectedyear%100!=0)||(selectedyear%400==0))
						nodays = 29;
					else  
						nodays = 28;
					break;	
			case 4:  nodays = 30; break;	
			case 6:  nodays = 30; break;	
			case 9:  nodays = 30; break;
			case 11: nodays = 30; break;
			default: break;
		}
		
		
		
		while (selectday.options.length > nodays) {
			var i = selectday.options.length - 1;
			selectday.remove(i);
		}
		
		for (var i=selectday.options.length+1; i<=nodays; i++) {
			var oOption = document.createElement("OPTION");
			selectday.options.add(oOption);
			oOption.innerText = i;
			oOption.value = i;
		}
		//selectday.selectedIndex = selectedDay;
		
			
	}
	
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                 FUNCTION VALIDATE START DATE                                      */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.validateStartDate = function(){
		//validam data din punct de vedere calendaristic
		
		JSObject.changeDayOptions(JSObject._inp_StartMonth, JSObject._inp_StartDay, JSObject._inp_StartYear);
		var date = new String();
		var valid = date.isDate(Number(JSObject._inp_StartMonth.value),Number(JSObject._inp_StartDay.value),Number(JSObject._inp_StartYear.value));
		if (!(valid)) return false;
		
		//comparam data cu limita inferioara 'this.limit_startdate'
		var days = JSObject.DaysBetween2Dates(Number(JSObject.limit_startdate.split("/")[2]),
											Number(JSObject.limit_startdate.split("/")[1]),
											Number(JSObject.limit_startdate.split("/")[0]),
											JSObject._inp_StartYear.value, 
											JSObject._inp_StartMonth.value, 
											JSObject._inp_StartDay.value);
		//daca data este mai mica decat limita inferioara
		if (days < 1){
			if (language == "en"){
				alert("Check in date must be greater than " + JSObject.getDate(JSObject.limit_startdate, "dd/mm/yyyy"));
			}
			else{
				alert("Data sosirii trebuie sa fie mai mare decat " + JSObject.getDate(JSObject.limit_startdate, "dd/mm/yyyy"));
			}
			JSObject.setDate("start", JSObject.limit_startdate);
			return false;
		}
		
		
		//comparam data cu data de sfarsit
		var days = JSObject.DaysBetween2Dates(JSObject._inp_StartYear.value, 
											JSObject._inp_StartMonth.value, 
											JSObject._inp_StartDay.value,
											JSObject._inp_EndYear.value, 
											JSObject._inp_EndMonth.value, 
											JSObject._inp_EndDay.value);
		
		if (days <= 1){
			this.setDate("end", JSObject.getNextDay(JSObject._inp_StartDay.value+"/"+JSObject._inp_StartMonth.value+"/"+JSObject._inp_StartYear.value));
			return false;
		}
		
		return true;
		
	}
	
	
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                                 FUNCTION VALIDATE END DATE                                        */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.validateEndDate = function(){
		//validam data din punct de vedere calendaristic
		
		JSObject.changeDayOptions(JSObject._inp_EndMonth, JSObject._inp_EndDay, JSObject._inp_EndYear);
		var date = new String();
		var valid = date.isDate(Number(JSObject._inp_EndMonth.value),Number(JSObject._inp_EndDay.value),Number(JSObject._inp_EndYear.value));
		if (!(valid)) return false;
		
		//comparam data cu limita superioara 'this.limit_enddate'
		/*var days = JSObject.DaysBetween2Dates(JSObject._inp_EndYear.value, 
											JSObject._inp_EndMonth.value, 
											JSObject._inp_EndDay.value,
											Number(JSObject.limit_enddate.split("/")[2]),
											Number(JSObject.limit_enddate.split("/")[1]),
											Number(JSObject.limit_enddate.split("/")[0]));
		//daca data este mai mica decat limita inferioara
		if (days < 1){
			if (language == "en"){
				alert("Check out date must be smaller than " + JSObject.getDate(JSObject.limit_enddate, "dd/mm/yyyy"));
			}
			else{
				alert("Data de sfarsit trebuie sa fie mai mica decat "+ JSObject.getDate(JSObject.limit_enddate, "dd/mm/yyyy"));
			}
			JSObject.setDate("end", JSObject.limit_enddate);
			return false;
		}*/
		
		
		//comparam data cu data de inceput
		var days = JSObject.DaysBetween2Dates(JSObject._inp_StartYear.value, 
											JSObject._inp_StartMonth.value, 
											JSObject._inp_StartDay.value,
											JSObject._inp_EndYear.value, 
											JSObject._inp_EndMonth.value, 
											JSObject._inp_EndDay.value);
		
		if (days <= 1){
			if (language == "en"){
				alert("Check out date must be greater than Check in date ");
			}
			else{
				alert("Data plecarii trebuie sa fie mai mare decat data sosirii")	
			}
			this.setDate("end", JSObject.getNextDay(JSObject._inp_StartDay.value+"/"+JSObject._inp_StartMonth.value+"/"+JSObject._inp_StartYear.value));
			return false;
		}
		
		
		return true;
	}
	
	
	
	
	
	
	
	/*****************************************************************************************************/
	/*                                                                                                   */
	/*                          FUNCTION VALIDATE AVAILABILITY INTERVAL                                  */          
	/*                                                                                                   */
	/*****************************************************************************************************/
	this.validate = function(){
		var valid = true;
		if (!(this.validateStartDate())){ 
			valid = false;
			return;
		}
		if (!(this.validateEndDate())){ 
			valid = false;
			return;
		}
		
		
		
		
		if (valid == true){
			this.form.submit();	
		}
		
	}
	
}
