/**
* name: jquery calendar
* version: 1.01
* date: 2010-12-17
* author: marty @ svist21
* desc: input ve strance musi mit tridu class="calendarComboNew"
* changelog: 
*   1) doplneny, jazyky de,pl,nl
*   2) automaticke doplnovani datumu odjezdu, pri vyplneni datumu prijezdu
**/

$(document).ready(function() { 

    /** kvuli IE nasteni vsech selectu a skryti **/
    var combos = $('select:visible');

    $('.calendarComboNew').css({'background':'#EFF2F4 url(data:image/gif;base64,R0lGODlhEgASAIABAAABW////yH5BAEAAAEALAAAAAASABIAAAIWjI+py+0Po5w0gosBzNpe2lXiSJZkAQA7) top right no-repeat','border':'1px solid #999','cursor':'pointer','width':'100px'});
    $('.calendarComboNew').attr("autocomplete", "off");
    $('.calendarComboNew').bind('click',function(event){
        var inputfield = $(this)
        /* quickchoice defaultni hodnota odjezdu */
        if( inputfield.attr('id')=='id-dateto' && $(this).val()=='') $(this).val( $("input[id=id-datefrom]").val() );
        var inputfield_offset = inputfield.offset();
        if(!$("#id-calendar-combo-container").length){
            $('body').append('<div id="id-calendar-combo-container"></div>')
            $("#id-calendar-combo-container").css({
                'position':'absolute',
                'top':'0',
                'left':'0',
                'zIndex':'9999',
//                'background':'black',
//                'opacity':'.50',
//                'filter':'alpha(opacity=50)',
                'padding':'0'
            })
            .width('100%')
            .height('100%').bind('click',function(event){
                $(this).hide();
                $('#id-calendar-combo-area').hide();
                combos.css('visibility','visible');
            });
        }
        if(!$("#id-calendar-combo-area").length){$('body').append('<div id="id-calendar-combo-area"><span id="id-calendar-arrow-month-minus">&laquo;</span><select id="id-calendar-combo-month"></select><span id="id-calendar-arrow-month-plus">&raquo;</span><span id="id-calendar-arrow-year-minus">&laquo;</span><select id="id-calendar-combo-year"></select><span id="id-calendar-arrow-year-plus">&raquo;</span><table id="id-calendar-calendar" cellspacing="0"><thead></thead><tbody></tbody></table></div>')}
        $("#id-calendar-combo-area").css({'position':'absolute','zIndex':'10000','left':inputfield_offset.left,'top':inputfield_offset.top+20});

        $("#id-calendar-combo-container").show();
        $("#id-calendar-combo-area").hide();
 
        switch(lang){
            case 'cs' :
                var month_name = {0:'Leden',1:'Únor',2:'Březen',3:'Duben',4:'Květen',5:'Červen',6:'Červenec',7:'Srpen',8:'Září',9:'Říjen',10:'Listopad',11:'Prosinec'}
                var day_name = {0:'Po',1:'Út',2:'St',3:'Čt',4:'Pá',5:'So',6:'Ne'}
            break;
            case 'de' :
                var month_name = {0:'Januar',1:'Februar',2:'März',3:'April',4:'Mai',5:'Juni',6:'Juli',7:'August',8:'September',9:'Oktober',10:'November',11:'Dezember'}
                var day_name = {0:'Mo',1:'Di',2:'Mi',3:'Do',4:'Fr',5:'Sa',6:'So'}
            break;
            case 'pl' :
                var month_name = {0:'Styczeń',1:'Luty',2:'Marzec',3:'Kwiecień',4:'Maj',5:'Czerwiec',6:'Lipiec',7:'Sierpień',8:'Wrzesień',9:'Październik',10:'Listopad',11:'Grudzień'}
                var day_name = {0:'Po',1:'Wt',2:'Śr',3:'Cz',4:'Pi',5:'So',6:'Ni'}
            break;
            case 'nl' :
                var month_name = {0:'Januari',1:'Februari',2:'Maart',3:'April',4:'Kan',5:'Juni',6:'Juli',7:'Augustus',8:'September',9:'Oktober',10:'November',11:'December'}
                var day_name = {0:'Ma',1:'Di',2:'Wo',3:'Do',4:'Vr',5:'Za',6:'Zo'}
            break;
            case 'en':
            default:
                var month_name = {0:'January',1:'February',2:'March',3:'April',4:'May',5:'June',6:'July',7:'August',8:'September',9:'October',10:'November',11:'December'}
                var day_name = {0:'Mo',1:'Tu',2:'We',3:'Th',4:'Fr',5:'Sa',6:'Su'}
        }
        
        var jquery_calendar = function(inputdate){

            combos.css('visibility','hidden');
            
            var d = new Date();
            var re = new RegExp('^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{2,4})?$');
            if( match = inputdate.match(re) ){
                var day = parseInt(match[1])>0?parseInt(match[1]):d.getDate();
                var month = parseInt(match[2])>0?parseInt(match[2]):d.getMonth()+1;
                var year = parseInt(match[3]);
                if(isNaN(year)||year==0){year = d.getFullYear();}else if(year<100){year=parseInt(year+1900);}
            }else{
                var day = d.getDate();
                var month = d.getMonth()+1;
                var year = d.getFullYear();                
            }
            $("#id-calendar-combo-area *").unbind('click');
            $("#id-calendar-combo-area *").unbind('change');
                        
            /** roky **/
            var select = $('<select>').attr('id','id-calendar-combo-year');
            for(i=year-5;i<=year+10;i++){$('<option>').attr({'value':i,'selected':i==year?'selected':null}).html(i).appendTo(select);}    
            $('#id-calendar-combo-year').replaceWith(select);
            $('#id-calendar-combo-year').bind('change',function(){jquery_calendar(day+'.'+month+'.'+$(this).val())});
            
            /** mesice **/
            var select = $('<select>').attr('id','id-calendar-combo-month');
            for(i=0;i<12;i++){$('<option>').attr({'value':i+1,'selected':i==month-1?'selected':null}).html(month_name[i]).appendTo(select);}
            $('#id-calendar-combo-month').replaceWith(select);
            $('#id-calendar-combo-month').bind('change',function(){jquery_calendar(day+'.'+$(this).val()+'.'+year)});
            
            /** dny v tydnu **/
            $('#id-calendar-calendar thead tr').remove();
            var tr = $('<tr>');
            for(i=0;i<=6;i++){
                $('<th>').html(day_name[i]).appendTo(tr);
            }
            tr.appendTo($('#id-calendar-calendar thead'));
            
            var d = new Date(year,month-1,1); 
            var dow = d.getDay();
            var current_month = dow!=1;
            var current_day = 2 - dow;
            
            /** kalendar **/
            $('#id-calendar-calendar tbody tr').remove();
            while(true){
                var tr = $('<tr>');
                for(i=1;i<=7;i++){
                    d.setFullYear(year,month-1,current_day);
                    $('<td>').attr('rel',d.getDate()+'.'+(d.getMonth()+1)+'.'+d.getFullYear() ) 
                             .addClass((d.getMonth()+1)!=month ? 'ntm':'day')
                             .addClass( i==6 ? 'saturday' : null)
                             .addClass( i==7 ? 'sunday' : null)
                             .addClass( current_day==day ? 'today' : null )
                             .html(d.getDate())
                             .appendTo(tr);
                    current_day++
                }
                tr.appendTo($('#id-calendar-calendar tbody'));
                if( (d.getMonth()+1)!=month ) break;
            }

            $('#id-calendar-calendar td').bind('click',function(){
                inputfield.val( $(this).attr('rel') );
                if( inputfield.attr('name')=='o_checkin' ) $("input[name=o_checkout]").val( $(this).attr('rel') );
                if( inputfield.attr('name')=='datefrom' ) $("input[name=dateto]").val( $(this).attr('rel') );
                $("#id-calendar-combo-area").fadeOut('fast',function(){
                    $("#id-calendar-combo-container").hide();
                    combos.css('visibility','visible');
                });
            });
            
            /** sipky **/
            $('#id-calendar-arrow-month-minus').bind('click',function(){if(month==1){jquery_calendar(day+'.12.'+(year-1))}else{ jquery_calendar(day+'.'+(month-1)+'.'+year)}});
            $('#id-calendar-arrow-month-plus').bind('click',function(){if(month==12){jquery_calendar(day+'.1.'+(year+1))}else{jquery_calendar(day+'.'+(month+1)+'.'+year)}});
            $('#id-calendar-arrow-year-minus').bind('click',function(){jquery_calendar(day+'.'+month+'.'+(year-10));});
            $('#id-calendar-arrow-year-plus').bind('click',function(){jquery_calendar(day+'.'+month+'.'+(year+10));});
            
            $("#id-calendar-combo-area").fadeIn('fast');
        }
        
        jquery_calendar( $(this).val() );

    });

});

