/**
 * Get specific cookie value by key
 * @return null | string
 */
function getCookie(key) {
   var c_pairs = document.cookie.split(';');
   var c_data  = [];
   for(var i=0; i<c_pairs.length; i++) {
	   var pair = c_pairs[i].split('=');
	   c_data[$.trim(pair[0])] = pair[1];
   }

   var c_target_v;
   if (c_data[key] != undefined) {
      c_target_v = c_data[key];
   } else {
      var pair = document.cookie.split('=');
      if (pair.length > 0) {
         c_target_v = pair[1];
      } else {
         c_target_v = null;
         alert(c_target_v);
      }
   }

   return c_target_v == null ? null : decodeURIComponent(c_target_v);
}

/**
 * Set cookie
 */
function setCookie(name, value) {
	var argv    = setCookie.arguments;
	var argc    = setCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path    = (argc > 3) ? argv[3] : null;
	var domain  = (argc > 4) ? argv[4] : null;
	var secure  = (argc > 5) ? argv[5] : false;

	document.cookie = name + "=" + encodeURIComponent(value) +
					  ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
                      ((path == null)    ? "" : ("; path=" + path)) +
                      ((domain == null)  ? "" : ("; domain=" + domain)) +
                      ((secure == true)  ? "; secure" : "");
}

/**
 * Set cookies
 * @param string c_key cookies key
 * @param string c_value cookies value
 */
function executeCookie(c_key, c_value) {
    var myDomain = '/';
    var largeExpDate = new Date ();
    largeExpDate.setTime(largeExpDate.getTime() + (7 * 24 * 3600 * 1000));
    setCookie(c_key, c_value, largeExpDate, myDomain);
}


function search_tabs_switcher() {
    var tab_active = getCookie('main_tab');

    if (tab_active == 'hotels') {
       $('#search_tab_hotels').attr('class', 'search_tab_hotels_on');
       $('#search_tab_holidays').attr('class', 'search_tab_holidays_off');
       $('#search_type_hotels').attr('checked', 'checked');
       $('#search_type_holidays').removeAttr('checked');
       $('#form_package').hide();
       $('#form_hotel').show();
    } else if (tab_active == 'holidays') {
       $('#search_tab_holidays').attr('class', 'search_tab_holidays_on');
       $('#search_tab_hotels').attr('class', 'search_tab_hotels_off');
       $('#search_type_holidays').attr('checked', 'checked');
       $('#search_type_hotels').removeAttr('checked');
       $('#form_hotel').hide();
       $('#form_package').show();
    }

}

$(function(){
    //Reads cookie and shows active tab at page loading
    search_tabs_switcher();

    //Search tab click  - hotels/holidays
	$('.box_search_tabs :input[name=search_type]').click(function(e){
        var tab_type = e.target.id;
        var tab_active = getCookie('main_tab');
		try {
			if (tab_type == 'search_type_hotels') {
                tab_active != 'hotels' ? executeCookie('main_tab', 'hotels') : false;
                search_tabs_switcher();
			} else {
                tab_active != 'holidays' ? executeCookie('main_tab', 'holidays') : false;
                search_tabs_switcher();
			}
		} catch(e) {
		}
	});

    //Datepickers set up
    try {
        //hotels picker
		var hotels_day = $('#hotels-date-day').val();
		var hotels_my = $('#hotels-date-month').val();
        var m_y_pair = hotels_my.split('-');
        var hotels_month = m_y_pair[0];
        var hotels_year = m_y_pair[1];
	    $("#datepicker-hotels").val(hotels_day + '.' + hotels_month + '.' + hotels_year);

        //holidays
  		var holidays_day = $('#holidays-date-day').val();
		var holidays_my = $('#holidays-date-month').val();
        var m_y_pair = holidays_my.split('-');
        var holidays_month = m_y_pair[0];
        var holidays_year = m_y_pair[1];
	    $("#datepicker-holidays").val(holidays_day + '.' + holidays_month + '.' + holidays_year);
	}catch(e){}

    function mindate(id_el_day, id_el_my) {
		var day_el = $('#' + id_el_day).get(0);
		var my_el  = $('#' + id_el_my).get(0);

        try {
            var day = day_el.options[0].value;
            var my  = my_el.options[0].value;

            var m_y_pair = my.split('-');
            var month    = m_y_pair[0] - 1;
            var year     = m_y_pair[1];
        } catch(e) {};

        return {d:day, m:month, y:year};
    }

    function maxdate(id_el_day, id_el_my) {
		var day_el = $('#' + id_el_day).get(0);
		var my_el  = $('#' + id_el_my).get(0);

        try {
            var day = day_el.options[day_el.options.length-1].value;
            var my  = my_el.options[my_el.options.length-1].value;

            var m_y_pair = my.split('-');
            var month    = m_y_pair[0] - 1;
            var year     = m_y_pair[1];
        } catch(e){};
        return {d:day, m:month, y:year};
    }

    function pickerValueSetter(picker) {
        var day = $("#" + picker + "-date-day").val();
        var my = $("#" + picker + "-date-month").val();
        var m_y_pair = my.split('-');
        var month    = m_y_pair[0];
        var year     = m_y_pair[1];

        $("#datepicker-" + picker).val(day + '.' + month + '.' + year);
    }

    var min_hot_date =  mindate('hotels-date-day', 'hotels-date-month');
    var max_hot_date =  maxdate('hotels-date-day', 'hotels-date-month');
    var min_hol_date =  mindate('holidays-date-day', 'holidays-date-month');
    var max_hol_date =  maxdate('holidays-date-day', 'holidays-date-month');

	$("#datepicker-hotels").datepicker({
		showOn: 'button',
		buttonImage: '/images/icon_calendar.gif',
		buttonImageOnly: true,
		buttonText: 'Calendar', //'alt' and 'title' attributes
		defaultDate: new Date(hotels_year, hotels_month, hotels_day),
		minDate: new Date(min_hot_date.y, min_hot_date.m, min_hot_date.d),
		maxDate: new Date(max_hot_date.y, max_hot_date.m, max_hot_date.d),
		dateFormat: 'dd.mm.yy',

		onSelect: function(dateText) {
			var d =	dateText.split('.');
            try {
    			$('#hotels-date-day').children('[value=' + d[0] + ']').attr('selected', 'selected');
        		$('#hotels-date-month').children('[value=' + d[1] + '-' + d[2] + ']').attr('selected', 'selected');
            } catch (e) {
            }
		},

		//updates calendar 'start' date
		beforeShow: function(input) {
			var d =	input.value.split('.');
            try {
                $("#datepicker-hotels").datepicker('setDate', new Date(d[2], d[1]-1, d[0]));
            } catch (e) {
            }
		}
	});

    $('#hotels-date-day, #hotels-date-month').change(function(e){
        pickerValueSetter('hotels');
	});

        //holidays picker

	$("#datepicker-holidays").datepicker({
		showOn: 'button',
		buttonImage: '/images/icon_calendar.gif',
		buttonImageOnly: true,
		buttonText: 'Calendar', //'alt' and 'title' attributes
		defaultDate: new Date(holidays_year, holidays_month, holidays_day),
		minDate: new Date(min_hol_date.y, min_hol_date.m,  min_hol_date.d),
		maxDate: new Date(max_hol_date.y, max_hol_date.m,  max_hol_date.d),
		dateFormat: 'dd.mm.yy',

		onSelect: function(dateText) {
			var d =	dateText.split('.');
            try {
    			$('#holidays-date-day').children('[value=' + d[0] + ']').attr('selected', 'selected');
        		$('#holidays-date-month').children('[value=' + d[1] + '-' + d[2] + ']').attr('selected', 'selected');
            } catch (e) {
            }
		},

		//updates calendar 'start' date
		beforeShow: function(input) {
			var d =	input.value.split('.');
            try {
                $("#datepicker-holidays").datepicker('setDate', new Date(d[2], d[1]-1, d[0]));
            } catch (e) {
            }
		}
	});
    $('#holidays-date-day, #holidays-date-month').change(function(e){
        pickerValueSetter('holidays');
	});

});