$(document).ready(function(){
    var hotelWin = null;
    var oprator = null;
    var country = null;
    var region = null;
    var limitHotels = 5;
    var ageRang = [0, 14];
    
    $(':radio[name="operator"]').bind('click', function(){
        oprator = this.value;
        $('#country, #region').attr('disabled', 'disabled').val('').find('>option.datarow').remove();
        $('#hotels').empty();
        $.getJSON(baseUrl + '/travel/countries/',{ 
            operid: this.value
        }, function(data){
            if (!data.rows) return false;
            $('#country').removeAttr('disabled');
            $.each(data.rows, function(i, row){ 
                $('#country').append(
                    $('<option/>').attr('value', row.id).text(row.name).addClass('datarow')
                );
            });
            $('#country').val('');
            validator.refresh();
        });
        this.blur();
    });
    $('#operator_1').click();
    $('#country').bind( 'change', function(){ 
        country = this.value;
        $('#region').attr('disabled', 'disabled').val('').find('>option.datarow').remove();
        $('#hotels').empty();
        $.getJSON(baseUrl + '/travel/regions/',{ 
            operid: oprator, country_id: this.value
        }, function(data){ 
            if (!data.rows) return false;
            $('#region').removeAttr('disabled');
            $.each(data.rows, function(i, row){ 
                $('#region').append(
                    $('<option/>').attr('value', row.id).text(row.name).addClass('datarow')
                );
            });
            $('#region').val('');
            validator.refresh();
        });
        this.blur();
    });
    $('#region').bind( 'change', function(e, limit){ 
        region = this.value;
        if (typeof(limit) == 'undefined') limit = limitHotels;
        $.getJSON(baseUrl + '/travel/hotels/',{ 
            oper_id: oprator, country_id: country, region_id: this.value, limit: limit
        }, function(data){ 
            if (!data.rows) return false;
            $('#hotels').empty();
            var ul = $('<ul/>').addClass('hotels_list').appendTo('#hotels');
            $.each(data.rows, function(i, row){ 
                ul.append(
                    $('<li/>').append(
                        $('<label/>').attr('for', 'hotel_' + row.id)
                        .append(
                            $('<input type="radio" name="hotel"/>').attr({id: 'hotel_' + row.id, value: row.id })
                        ).append(
                            $('<a href="#"/>').text(row.name).bind('click', { id: row.id }, function(e){ 
                                openWindow(baseUrl + '/travel/hotelinfo/id/' + e.data.id, 740, 560);
                                return false;
                            })
                        ).append( getStars(row.stars) )
                    )
                );
            });
            if ((limitHotels < data.total) && (typeof(limit) == 'number')) {
                $('#hotels').append( $('<p>').append(
                    $('<a href="#" style="clear:both; float:left;"/>').text('Полный список').bind('click', function(){
                        $('#region').trigger('change', ['']);
                        return false;
                    }))
                );
            }
            validator.refresh();
        });
        this.blur();
    });
    $('#location_type').bind('change', function(){
        $('p.kid_age').hide().find('>input').removeClass('active');
        $('span.opt_num').show();
        var val = $(this).find('option').index( $(this).find('option:selected').get(0) );
        switch (val) {
            case 3: case 6:case 9:
                $('p.kid_age').slice(0, 1).show()
                .find('>input').addClass('active');
                $('span.opt_num').hide();
                break;
            case 4: case 7:
                $('p.kid_age').slice(0, 2).show()
                .find('>input').addClass('active');
                break;
            case 5:
                $('p.kid_age').slice(0, 3).show()
                .find('>input').addClass('active');
                break;
        }
        validator.refresh();
    });
    $('#food_type').bind('change', function(){
       $('#food_nodes').find('>span').hide().filter('[ftype="' + this.value + '"]').show();
    });
    var validator = $("#travel_form").validate({
        rules: {
            operator: "required",
            country: "required",
            region: "required",
            hotel: "required",
            date_begin: { required: true, date_begin: true },
            date_end: { required: true, date_end: true },
            location_type: { required: true },
            kid1_age: { required: function(){
                return $('#kid1_age').hasClass('active');
            }, number: true, rangeValue:ageRang },
            kid2_age: { required: function(){
                return $('#kid2_age').hasClass('active');
            }, number: true, rangeValue:ageRang },
            kid3_age: { required: function(){
                return $('#kid3_age').hasClass('active');
            }, number: true, rangeValue:ageRang },
            food_type: { required: true },
            hight_num: { required: true },
            email: { required: true, email: true },
            phone: "required"
        },
        messages: {
            country: "Пожалуйста, выбирите страну",
            region: "Пожалуйста, выбирите регион",
            date_begin: {
                required: "Пожалуйста, выбирите дату начала тура",
                date_begin: "Введина не корректная дата начала тура"
            },
            date_end: {
                required: "Пожалуйста, выбирите дату конца тура",
                date_end: "Введина не корректная дата конца тура"
            },
            location_type: { required: "Пожалуйста, выбирите тип размещения" },
            kid1_age: { 
                required: "Пожалуйста, введите возвраст",
                number: "Пожалуйста, вводите только цифры",
                rangeValue: "Ввозвраст ребёнка должен быть от 0 до 14-ти лет "
            },
            kid2_age: { 
                required: "Пожалуйста, введите возвраст",
                number: "Пожалуйста, вводите только цифры",
                rangeValue: "Ввозвраст ребёнка должен быть от 0 до 14-ти лет "
            },
            kid3_age: { 
                required: "Пожалуйста, введите возвраст",
                number: "Пожалуйста, вводите только цифры",
                rangeValue: "Ввозвраст ребёнка должен быть от 0 до 14-ти лет "
            },
            food_type: { required: "Пожалуйста, выбирите тип питания" },
            hight_num: { required: "Пожалуйста, выбирите колличество ночей" },
            email: {
                required: "Пожалуйста, введите адрес электронной почты",
                email: "E-mail введён неверно"
            },
            phone: "Пожалуйста, введите номер телефона"
        },
        errorContainer: $("#err_message"),
        errorPlacement: function(error, element) {
            error.appendTo( element.parent() );
        },
        submitHandler: function(form) {
            $(form).ajaxSubmit({
                dataType: 'json',
                beforeSubmit: function(){
                   $(this).find(':submit').attr('disabled', true);
                },
                success: function(data){
                    if (data.success) {
                        $('#travel_form').hide();
                        $('#on_success').show();
                    }
                    if(data.message) alert(data.message);
                }
            });
            return false;
        }
    });
    jQuery.validator.addMethod("date_begin", function(value, element, params) {
        if ( this.required(element) ) return true;
        var datePattern = new RegExp("^(\\d{1,2})-(\\d{1,2})-(\\d{4})$");
        var result = value.match(datePattern);
        if (result != null && (result.length == 4)) {
            var objBDate = new Date(result[3], result[2]-1, result[1]);
        }
        var objCDate = new Date();
        objCDate.setHours(0,0,0,0);
        if (objBDate && objCDate) {
            return (objBDate.getTime() >= objCDate.getTime());
        } else {
            return false;
        }
	});
    jQuery.validator.addMethod("date_end", function(value, element, params) {
        if ( this.required(element) ) return true;
        var datePattern = new RegExp("^(\\d{1,2})-(\\d{1,2})-(\\d{4})$");
        var result = null;
        result = $('#date_begin').val().match(datePattern);
        if (result != null && (result.length == 4)) {
            var objBDate = new Date(result[3], result[2]-1, result[1]);
        }
        result = value.match(datePattern);
        if (result != null && (result.length == 4)) {
            var objEDate = new Date(result[3], result[2]-1, result[1]);
        }
        if (objBDate && objEDate) {
            return (objBDate.getTime() < objEDate.getTime());
        } else {
            return false;
        }
	});
    $('#date_begin').date_input();
    $('#date_end').date_input();
    $("#loading").ajaxStart(function(){ 
       $(this).show();
    });
    $("#loading").ajaxStop(function(){ 
        $(this).hide();
    });
    function openWindow(url, w, h) {
        var width = w;
        var height = h;
        var left = parseInt((screen.availWidth/2) - (width/2));
        var top = parseInt((screen.availHeight/2) - (height/2));
        var windowFeatures = "width=" + width + ",height=" + height + 
            ",status,resizable=0,left=" + left + ",top=" + top + 
            ",screenX=" + left + ",screenY=" + top + ", scrollbars";
        hotelWin = window.open(url, "subWind", windowFeatures);
    };
    function getStars(stars) {
        var starsSPAN = $('<span/>');
        for (i = 0; i < stars; i++) {
            starsSPAN.append( $('<img/>').attr('src', baseUrl + '/public/images/travel/star.gif') );
        }
        return starsSPAN;
    };
});
