jQ(document).ready(function() {

    /************************
    ** BOOKING *
    *************************/

    onReadyBooking();

    /* ************************************ */
    /* UDALOSTI NA JEDNOLIVA POLE FORMULARE */
    /* ************************************ */
    
    eventNights();
    eventNumberRoom();
    setActualDate();
});

/**
 * Akce na zmenu pole s datumem
 */
function eventCheckIn() {
    jQ('#departure0_ibs').change(function() {
        if (checkDate()) {
            setCheckOutDate();
        }
    });
}

/**
 * Akce na zmenu pole s pocetem noci
 */
function eventNights() {
    jQ('#hotelNights').change(function() {
        setCheckOutDate();
    });
}

/**
 * Udalosti na pole pocet pokoju
 */
function eventNumberRoom() {
    jQ('#rooms').change(function() {
        enableTypeRoom();
    })  
}

/**
 * Nastavuje datum do textoveho pole pro Check-out
 */
function setCheckOutDate() {
    
    // Hodnota dotumu
    var strDate = jQ('#departure0_ibs').val();
    // Pocet noci
    var numberNights = jQ('#hotelNights').val();

    var dateCheckIn = getCorrectDate(strDate);

    if (0 <= numberNights && numberNights < 1000) {
        dateCheckIn.setTime(dateCheckIn.getTime() + (1000 * 24 * 3600 * numberNights));
        
        var strCheckOutDate = dateCheckIn.getDate() + '.' + (dateCheckIn.getMonth() + 1) + '.' + dateCheckIn.getFullYear()
        
        jQ('#hotelDateCheckOut').text(strCheckOutDate);
        
        jQ('#hotelDateCheckOutForm').val(strCheckOutDate);
    }
    
}

/**
 * Zobrazuje/Skryva formulare dle poctu zvolenych pokoju
 */
function enableTypeRoom() {
    
    // Pocet pokoju
    var valNumberRooms = jQ('#rooms').val();
    
    jQ('#hotelRoomType2, #hotelRoomType3, #hotelRoomType4').addClass('hide').removeClass('show');
    
    if (valNumberRooms == 2) {
        jQ('#hotelRoomType2').addClass('show').removeClass('hide');
    } else if (valNumberRooms == 3) {
        jQ('#hotelRoomType2, #hotelRoomType3').addClass('show').removeClass('hide');    
    } else if (valNumberRooms == 4) {
        jQ('#hotelRoomType2, #hotelRoomType3, #hotelRoomType4').addClass('show').removeClass('hide');
    }
}

/**
 * Nastavuje aktualni den do formulare
 */
function setActualDate() {
    var actDate = new Date();
    //na zaklade tasku cislo 21789 - +2 dny pocatecni datum
    actDate.setDate(actDate.getDate()+2);
    
    jQ('#departure0_ibs').val(
        actDate.getDate() + '.' + (actDate.getMonth() + 1) + '.' + actDate.getFullYear()
    )
    
    jQ('#bookingDay0').val(actDate.getDate());
    jQ('#bookingMonthSel0').val(
        (actDate.getMonth()+1)
    );   
    
    setCheckOutDate();
	
}

/**
 * Vraci datum
 *
 * @param string strDate
 * @return Date
 */
function getCorrectDate(strDate) {
	
	var testDate = null;
	
	var checkReg = RegExp('^(([0-3][0-9]|[0-9])\.([1]{1}[0-2]{1}|[0]{1}[1-9]{1}|[1-9]{1})\.[2]{1}[0]{1}[0-9]{2})$');
    if (checkReg.test(strDate) == true) {

       	var viewDate = new Date();
        
        var parseDate = strDate.split('.', 3);
   		for (var index in parseDate) {
			intValue = parseDate[index] * 1;
			index = index * 1;
			switch(index) {
				case 0:
				  viewDate.setDate(intValue);
				  var day = intValue;
				  break;
				case 1:
    			  intValue = intValue - 1; // Index mesice 0..11
				  var month = intValue;					
				  viewDate.setMonth(intValue);
				  break;
				case 2:
				    var year = intValue;		
					viewDate.setFullYear(intValue);
				  break;
			}
   		}
   		
   		if ( 
   		    day == (viewDate.getDate() * 1) &&
   		    month == (viewDate.getMonth() * 1) &&
            year == (viewDate.getFullYear() * 1)
   		) {
   		    testDate = viewDate;
   		}
   	}

	return testDate;
}


/**
STARE FUNKCE
**/

function setPopularCity(textdata) {
    var obj = document.forms['hotels'].FreeSearch;
    if (obj) obj.value = textdata; 
}


/* Boxik rezervace hotelu */
	DOMHelper = {
	    DGE:function(x){
		    return document.getElementById(x)
	    }
	}
	var dh = DOMHelper;
    dh.b = dh.DGE;
	
	Date.prototype.isNorthAmerica = function(){
            return (this.getTimezoneOffset() < 660 && this.getTimezoneOffset() > 180);
            //return false;
	}
	Date.prototype.octopusDisplayFormat = function(){
	  var mm = this.getMonth()+1;
	  if(mm < 10) mm = "0" + mm;
	  var dd = this.getDate();
	  if(dd < 10) dd = "0" + dd;
	  if(this.isNorthAmerica()){
	      return mm + "/" + dd + "/" + this.getFullYear();
	  }
	  else{
	      return dd + "." + mm + "." + this.getFullYear();
	  }
	}

	var today = new Date();
	var dFormat = today.isNorthAmerica()?"mm/dd/yyyy":"dd/mm/yyyy";


	function makeEuroDate(str){
      var vals = str.split("/");
      var nDateString = vals[1] + "/" + vals[0] + "/" + vals[2];
      return new Date(nDateString);
	}
	function formatDateForURL(d){
	    var month = d.getMonth() + 1;
	    if(month < 10) month = "0" + month;
	    var date = d.getDate();
	    if(date < 10) date = "0" + date;
	    return date + "." + month + "." + d.getFullYear();
	}

	function getSelectedValue(id){
	    try{
	        var theSelect = DGE(id);
	        return theSelect.options[theSelect.options.selectedIndex].value;
	    }
	    catch(Error){
	       return null;
	    }
	}
	
	var expDate = /^\d{1,2}\/\d{1,2}\/\d{2,4}$/
	
	function DGE(x){
	    return document.getElementById(x)
	}

	function validateDate(dateStr){
	    if(!expDate.test(dateStr)) {return false;}
	    var monthNumStr = today.isNorthAmerica() ? dateStr.split("/")[0]:dateStr.split("/")[1];
	    var dateNumStr = today.isNorthAmerica()?dateStr.split("/")[1]:dateStr.split("/")[0];
	    var yearNum = parseFloat(dateStr.split("/")[2]);
	    var monthNum = parseFloat(monthNumStr);
	    var dateNum = parseFloat(dateNumStr);
	    var maxDate = 31;
	    if(monthNum == 4 || monthNum == 5 || monthNum ==  6 || monthNum == 9 || monthNum == 11){
	      maxDate = 30;
	    }
	    else if (monthNum == 2){
	      if(yearNum %4 ==0) {maxDate = 29;}
	      else{
	         maxDate = 28;
	      }
	    }
	    var bValid= (dateNum <= maxDate && dateNum > 0 && monthNum <= 12 && monthNum > 0);
        return bValid;
	}

	function unselectRadios(){
       	var theRadio = null;
       	var radios = document.getElementsByName("destinationRadio");
       	for(var i=0;i<radios.length;i++){
          	if(radios[i].checked==true) {
              theRadio = radios[i];
          		}
                 }
       	if(theRadio != null) theRadio.checked=false;
	}

	function resetDestination(){
    	var d = dh.b("destination");
    	d.options.selectedIndex=0;
	}
	
	function setCheckout() {
	    //var aSpan = document.getElementById("alertSpan");
	    var aSpan = DGE("alertSpan");
	    //alert(aSpan);
	    //aSpan.innerHTML = "";
	    var numNights = parseInt(DGE("hotelNights").value);
	    if(!isNaN(numNights)){
	        var checkinDateVal = DGE("bookingDay0").value+"/"+DGE("bookingMonthSel0").value+"/"+(new Date().getFullYear()+(new Date().getMonth() > DGE("bookingMonthSel0").value ? 1 : 0));
	        if(!expDate.test(checkinDateVal)){
	            alert(checkinDateVal);
                aSpan.innerHTML = "";
	        }
	        else if(!validateDate(checkinDateVal)){
	            //alert("err2");
	           aSpan.innerHTML = "";
	        }
            else{
	            var tDate = today.isNorthAmerica()?new Date(checkinDateVal):makeEuroDate(checkinDateVal);
	            tDate.setDate(tDate.getDate() + numNights);
              DGE("checkout").innerHTML = tDate.octopusDisplayFormat();
              checkoutDateArg = tDate.octopusDisplayFormat();
            }
	    }
	    else{
	        aSpan.innerHTML = "";
	    }
	}
	function makeURL(){
	    //var aSpan = DGE("alertSpan");
	    //aSpan.innerHTML = "";
	    var destinationVal = getSelectedValue("destination");
            var dradios = document.getElementsByName("destinationRadio");
            var dradioVal = "";
            for(var i=0;i<dradios.length;i++){
               if(dradios[i].checked == true){
                 destinationVal= dradios[i].value;
                
               }
            }
        var checkinVal = DGE("bookingDay0").value+"/"+DGE("bookingMonthSel0").value+"/"+(new Date().getFullYear()+(new Date().getMonth() > DGE("bookingMonthSel0").value ? 1 : 0));
	    var nightsVal = DGE("hotelNights").value;
	    var roomtypeVal = new Array();
    	    roomtypeVal.push(getSelectedValue("roomtype_1"));
    	    roomtypeVal.push(getSelectedValue("roomtype_2"));
    	    roomtypeVal.push(getSelectedValue("roomtype_3"));
    	    roomtypeVal.push(getSelectedValue("roomtype_4"));
    	var roomsVal = getSelectedValue("rooms");
	    var starratingVal = getSelectedValue("starrating");
	    var languageVal = document.getElementById("language").value;
	    var currencyVal = document.getElementById("currency").value;
            var bErrors = false;
            var errorMsg = "";
            var linebreak = "\n";
	    if(destinationVal == 0){
	        errorMsg = "Пожалуйста, выберите Город\r\n"  + linebreak;
	        bErrors = true;
	    }
	    if(!expDate.test(checkinVal) ){
	        errorMsg += "Пожалуйста, укажите Въезд в отель в необходимом\r\n" + dFormat + "формате. \r\n"  + linebreak;
	        bErrors = true;
	    }
	    if(!validateDate(checkinVal)){
	        errorMsg += "";
	        bErrors = true;
	    }
	    if(isNaN(parseInt(nightsVal)))
	    {
	        errorMsg += "Пожалуйста, укажите количество суток.\r\n"  + linebreak;
	        bErrors = true;
	    }
	    if(bErrors){
	        //aSpan.innerHTML = errorMsg;
	        alert(errorMsg);
	        return;
	    }
	    var destinationArg = "&ctyt=" + destinationVal; //destination
        var checkinArg = "";
	        if(!expDate.test(checkinVal)){
                aSpan.innerHTML = "Дата Въезда в отель должна быть указана в необходимом \r\n" + dFormat + "формате. \r\n";
	        }
	        else if(!validateDate(checkinVal)){
	           aSpan.innerHTML = "Укажите, пожалуйста, правильную дату.\r\n";
	        }
            else{
	            var tDate = today.isNorthAmerica()?new Date(checkinVal):makeEuroDate(checkinVal);
                checkinArg = "&in=" + formatDateForURL(tDate); //checkin
            }
	    var nightsArg= nightsVal == ""?"":"&nights=" + nightsVal;
	    var roomtypeArg = '';
        var n;
        for(var i=0; i< roomsVal; i++){
            n = i+1;
            roomtypeArg += "&r"+n+"=" + roomtypeVal[i]; //rooms
        }
	    var roomsArg = "&rms=" + roomsVal; //rooms
	    var starratingArg = starratingVal == 0?"":"&str=" + starratingVal; //starrating
	    var currencyArg = currencyVal == "0"?"":"&currency=" + currencyVal;
	    var langArg= languageVal == "0"?"":"&l=" + languageVal; //language
	    checkoutDateArg = DGE("hotelDateCheckOutForm").value;

	    var checkoutArg = "&out="+ checkoutDateArg;
	    //var URLRoot = "http://www.octopustravel.com/HotelLink?country=CZ&siteid=csaairtour";
var URLRoot = "http://flight-hotel.czechairlines.com/searchcriteriaall.aspx?country=CZ&siteid=csaairtour&type=s&searchtype=2"; //country=CZ&siteid=csaairtour
	    var sendURL = URLRoot + destinationArg + checkinArg + checkoutArg + nightsArg + roomtypeArg + roomsArg + starratingArg + langArg; //+ currencyArg
//DGE("alertSpan").innerHTML = URL;
	    //alert("The constructed URL is : \n" + URL);
          window.open(sendURL,"_blank");
	}
	
	function init(){
	   var co = DGE("checkout")
	   var ci = DGE("checkin");
	   var ciDate = new Date(today);
	   ciDate.setDate(ciDate.getDate() + 1)
	   ci.value = ciDate.octopusDisplayFormat();
	   ciDate.setDate(ciDate.getDate() + 1);
	   co.innerHTML = ciDate.octopusDisplayFormat();

	}
    function openCal(x){
      document.onkeypress = customizeCal;
      var maxdate = new Date();
      maxdate.setMonth(maxdate.getMonth() +futureMonthLimit);
      if(self.gfPop)  gfPop.fLimitPop(today.octopusDisplayFormat(),x,maxdate.octopusDisplayFormat());
    }

    function customizeCal(e){
    	if (!self.gfPop) return;
    	else gfPop.fHideCal();
    	document.onkeypress=null;
    }
    var futureMonthLimit=13;

function transform() {
    var obj1 = document.forms['hotels'].Arrival;
    var obj2 = document.forms['hotels'].Departure;
    var date1 = correctDates('hotels', 1);
    var date2 = correctDates('hotels', 2);
    if (obj1 && date1) {
        obj1.value = String(date1.getFullYear());
        if (date1.getMonth() < 9) obj1.value += '0';
        obj1.value += String(date1.getMonth()+1);
        if (date1.getDate() < 10) obj1.value += '0';
        obj1.value += String(date1.getDate());
    }
    if (obj2 && date2) {
        obj2.value = String(date2.getFullYear());
        if (date2.getMonth() < 9) obj2.value += '0';
        obj2.value += String(date2.getMonth()+1);
        if (date2.getDate() < 10) obj2.value += '0';
        obj2.value += String(date2.getDate());
    }
    return true;
}
function correctDates(frmname, number, force) {
    //alert(clndrSetDates);
    var dobj, mobj, pref;
    if (frmname == 'booking') {
        if (number == 1) pref = 'dep';
        else pref = 'arr';
        eval("dobj = document.forms[frmname]."+pref+"Day;");
        eval("mobj = document.forms[frmname]."+pref+"Month;");
    } else if (frmname == 'hotels') {
        eval("dobj = document.forms[frmname].checkinDay;");
        eval("mobj = document.forms[frmname].checkinMonth;");
    }
    if (!force & ((dobj.value == 'ДД') || (mobj.value == 'ММ'))) return;
    var today = new Date();
    var d = dobj.value * 1;
    if (!d) d = today.getDate();
    var m = mobj.value * 1;
    if (!m) m = today.getMonth()+1;
    var lastDay = new Date();
	lastDay.setTime(Date.UTC(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0) + (331*24*60*60*1000));
    var y = today.getFullYear();
    if (m < today.getMonth()+1) y++;
    var date = new Date(y, m-1, d, 0, 0, 0);
    if (date > lastDay) date = lastDay;
    if (date < today) date = today;
    if (dobj.value != date.getDate()) dobj.value = date.getDate();
    if (mobj.value != date.getMonth()+1) mobj.value = date.getMonth()+1;
    if (number == 1) clndrSetDates[encodeURIComponentFull(stringDep)] = date.getDate() + '.' + String(date.getMonth()+1) + '.' + date.getFullYear();
    else if (number == 2) clndrSetDates[encodeURIComponentFull(stringArr)] = date.getDate() + '.' + String(date.getMonth()+1) + '.' + date.getFullYear();
    return date;
}
function setRoomSelection(ide,total){
    var num = getSelectedValue(ide);   
    for(var i=1; i <= total; i++){
       var d = DGE('roomtype_'+i); //nacteni selectionu
       if(i <= num ){
        d.style.display = 'block';
       }else{
        d.style.display = 'none'; 
       }
    }
}
