
$(document).ready(function() {    
    $.fn.load_package_booking_data = function(e, dateinput, response) {        
        $(this).data('loaded', true);              
        $.loading_indicator('init', 'track', e);              
        data = new Object();
        data.id = $(this).nextAll('input.id').val();
        var controller = ($(this).nextAll('input.prizepointproduct').length == 1)? 'prizepointproduct' : 'package';        

        if ($(this).nextAll('input.arrival').length > 0)
            data.arrival = $(this).nextAll('input.arrival');
            
        $(dateinput).parents('form').find('input[name=id]').val(data.id);                                                 
                        
        $.json(controller, 'bookinginfo', data, function(r){
            $.locale_number = r.locale_number;                              
            var starttime = new Date(r.starttime.year, r.starttime.month, r.starttime.day);        
            var endtime = new Date(r.endtime.year, r.endtime.month, r.endtime.day);
            var arrival = new Date(r.arrival.year, r.arrival.month, r.arrival.day);            
            $(dateinput).each(function(){
                $(this).data('vacant', r.vacant);
                if ($(this).parents('form.package_booking').length > 0) {
                    this.load_count_options = function(key) {
                        var sel  = $(this).parents('form').find('select');
                        $(sel).html($(sel).find('option:first').clone());
                        var price  = $(this).parents('form').find('input[disabled]');
                        $(price).val('');                        
                        var vacant = $(this).data('vacant');
                        if (vacant[key]) {
                           $(sel).html('');
                           $(sel).data('rawprice', vacant[key].rawprice);                           
                           if($(price).length == 1 && $.locale_number)
                              $(price).val(number_format(vacant[key].rawprice, 2, $.locale_number.decimal, $.locale_number.separator) + ' ' + $.locale_number.currency);                                                   
                           var n = parseInt(vacant[key].resources);
                           for (i = 1; i <= n; i++)
                               $("<option></option>").val(i).text(i).appendTo(sel);
                        }                                     
                    }
                    if ($('input.arrival').length > 0) {
                        var dates = $('input.arrival').val().split('-');
                        var key = dates[0] + '-' + (parseInt(dates[1].replace(/^0/,'')) - 1) + '-' + parseInt(dates[2].replace(/^0/,''));
                        this.load_count_options(key);
                    }
                }
            });                                                               
            $.loading_indicator('init', 'track');    
            $(dateinput).init_datepicker({
                dateFormat: 'dd.mm.yy',
                defaultDate : arrival, 
                minDate: starttime, 
                maxDate: endtime, 
                hideIfNoPrevNext: true,
                beforeShowDay: function(date) {
                   var vacant = $(this).data('vacant');
                   key = date.getFullYear() + '-' + date.getMonth() + '-' + date.getDate();
             			date.setHours(0);//daylight saveing time fix                   
                   return [vacant[key]? true : false, ''];
            
                },
                onSelect : function (datestring, inst) {               
                    if (typeof(this.load_count_options) == 'function') {
                        //marks date input in thixbox form in list & view action                    
                        key = inst.selectedYear + '-' + inst.selectedMonth + '-' + inst.selectedDay;                    
                        this.load_count_options(key);      
                    } else if (typeof(this.on_select) == 'function') {
                        //marks separate date input in view action
                        this.on_select(datestring, inst);             
                    }         
                }
            });
            $.loading_indicator();                                        
            if (typeof(response) == 'function')
                response();                                                                                                   
        });      
    }

    $.fn.package_booking = function() {          
        $('#package_booking form').submit(function(){
            var result = true;
            if ($.trim($(this).find('select').val()) == '') {
                result = false;
                $(this).find('select').parent().addClass('error');
            } else if ($.trim($(this).find('input[type=text]').val()) == '') {
                result = false;
                $(this).find('input[type=text]').parent().addClass('error');
            }
            return result;                   
        });    
        $('#package_booking').find('select').change(function(){
           if ($(this).data('rawprice')) {
               $(this).parents('form').find('input[disabled]').val(number_format($(this).data('rawprice') * parseInt($(this).val()), 2, $.locale_number.decimal, $.locale_number.separator) + ' ' + $.locale_number.currency);                       
           }
        
        });                                                                                                    
                  
            
        $(this).each(function() {
            $(this).click(function(e) {
            
                if ($(this).data('loaded')) {               
                   tb_show(false, '#TB_inline?height=150&width=300&inlineId=' + $(this).data('uniqid') + '&modal=true');
                                        
                } else {  
                    var uniqid = 'pb' + $.unique_id();
                    $(this).data('uniqid', uniqid);
                    var thisclone = $('#package_booking').clone(true);                                                                                                   
                    $(thisclone).attr('id' , uniqid);
                    var packageid = $(this).next().val();
                    $(thisclone).find('form').append('<input type="hidden" name="id" value="' + packageid + '" />');
                    $("body").append(thisclone);                    
                    $(this).load_package_booking_data(e, $(thisclone).find('input[name=arrival]'), function() {
                         tb_show(false, '#TB_inline?height=150&width=300&inlineId=' + uniqid + '&modal=true');
                    });
                }            
                
                $(this).blur();
                return false;                  
            });
        });
        return this; 
    }                         

});

function number_format (number, decimals, dec_point, thousands_sep) {
    // Formats a number with grouped thousands
    //
    // version: 906.1806
    // discuss at: http://phpjs.org/functions/number_format
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://getsprink.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +     bugfix by: Howard Yeend
    // +    revised by: Luke Smith (http://lucassmith.name)
    // +     bugfix by: Diogo Resende
    // +     bugfix by: Rival
    // +     input by: Kheang Hok Chin (http://www.distantia.ca/)
    // +     improved by: davook
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Jay Klehr
    // +     improved by: Brett Zamir (http://brett-zamir.me)
    // +     input by: Amir Habibi (http://www.residence-mixte.com/)
    // +     bugfix by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: number_format(1234.56);
    // *     returns 1: '1,235'
    // *     example 2: number_format(1234.56, 2, ',', ' ');
    // *     returns 2: '1 234,56'
    // *     example 3: number_format(1234.5678, 2, '.', '');
    // *     returns 3: '1234.57'
    // *     example 4: number_format(67, 2, ',', '.');
    // *     returns 4: '67,00'
    // *     example 5: number_format(1000);
    // *     returns 5: '1,000'
    // *     example 6: number_format(67.311, 2);
    // *     returns 6: '67.31'
    // *     example 7: number_format(1000.55, 1);
    // *     returns 7: '1,000.6'
    // *     example 8: number_format(67000, 5, ',', '.');
    // *     returns 8: '67.000,00000'
    // *     example 9: number_format(0.9, 0);
    // *     returns 9: '1'
    // *     example 10: number_format('1.20', 2);
    // *     returns 10: '1.20'
    // *     example 11: number_format('1.20', 4);
    // *     returns 11: '1.2000'
    // *     example 12: number_format('1.2000', 3);
    // *     returns 12: '1.200'
    var n = number, prec = decimals;
 
    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };
 
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
 
    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}

