/**
* @fileOverview Classes, functions for common page in whl sites
*
* @author Whl Member
*/

/**
* @namespace Whl.Site Contains common functions, classes
*/
Whl.Site = {};

Object.extend(Whl.Site, {
    /**
    * Add Events for navigation links: Extra pages, ...
    * @memberOf Whl.Site
    * @param {String} cssClass A selector class of parent navigation link, click on this to show/hide the sub navigation
    *                               If not specified, the default class is 'lnk-nav'
    * @returns {Object} Whl.Site Object
    */
    initNav: function(cssClass) {
        cssClass = cssClass || 'lnk-nav';
        $('.' + cssClass).click(function(event) {
            event.preventDefault();
            var subNav = $('#' + this.id + '-sub');
            if (subNav.hasClass('hide-sub')) subNav.removeClass('hide-sub');
            var nav = $(this).parent();
            if (nav.hasClass('active01')) {
                nav.removeClass('active01');
                subNav.hide();
            } else {
                nav.addClass('active01');
                subNav.show();
            }
        });
        return this;
    },
    /**
    * Initialize all the data in pages
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initPage: function(opt) {
    	window.scrollTo(0,0);
        this.initCurrency(opt)
        .initSkypeCheck(opt)
        .initNewsletter(opt)
        .initOther(opt)
        .initSocialButton(opt);

        return this;
    },
    /**
    * Init portal page
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initPortalPage: function(opt) {
        this.initCurrency(opt)
        .initSearch(opt)
        .initSkypeCheck(opt)
        .initNewsletter(opt)
        .initNav(opt)
        .initOther(opt);

        return this;
    },
    /**
    * Init traveller corner page
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initTravelerPage: function(opt) {
        this.initPage(opt)
        .initBookingInfo(opt);
        return this;
    },
    /**
    * Init booking checkout page
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initBookingPage: function(opt) {
        this.initCurrency(opt)
        .initSkypeCheck(opt)
        .initBookingInfo(opt)
        .initOther(opt);
        return this;
    },
    /**
    * Init booking information
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initBookingInfo: function(opt) {
        //Online security
        $('#online-security-lnk').click(function(event) {
            event.preventDefault();
            var x = Math.floor((screen.width - 800)/2);
            window.open(this.href != '#' ? this.href : '/online_security', "", "width=800,height=700,scrollbars,resizable,center,left="+x);
        });
        // Booking conditions
        $('#booking-conditions-lnk').click(function(event) {
            event.preventDefault();
            var x = Math.floor((screen.width - 800)/2);
            window.open(this.href != '#' ? this.href : '/booking_conditions', "", "width=800,height=700,scrollbars,resizable,center,left="+x);
        });
        // Visa requirment
        $('#visa-requirment-lnk').click(function(event) {
            event.preventDefault();
            var x = Math.floor((screen.width - 800)/2);
            window.open(this.href != '#' ? this.href : '/visa_requirment', "", "width=800,height=700,scrollbars,resizable,center,left="+x);
        });
        // Booking faqs
        $('#booking-faq').click(function(event) {
            event.preventDefault();
            var x = Math.floor((screen.width - 800)/2);
            window.open(this.href != '#' ? this.href : '/booking_faqs', "", "width=800,height=700,scrollbars,resizable,center,left="+x);
        });
        return this;
    },
    /**
    * Init the search box data and events
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initSearch: function(opt) {
        // View search box
        var viewSearchBox = function(accmSearch) {
            if (accmSearch) {
                $('#accm_search').show();
                $('#tour_search').hide();
                $('#accm-name').focus();
            } else {
                $('#accm_search').hide();
                $('#tour_search').show();
                $('#tour-name').focus();
            }
        };
        $('.accm-search-box').click(function() {viewSearchBox(true);});
        $('.tour-search-box').click(function() {viewSearchBox(false);});
        var infoSite = $('#search-destination').length > 0;
        var region = infoSite ? 'search-destination' : 'hotel-area';
        // Set data for accm search from cookie
        var area = Whl.getCookie(region);
        if (!area) area = -1;
        var accmType = Whl.getCookie('accm-type');
        var regionType = new Whl.Combo.Double(region, 'accm-type', hotelType || {}, { defaultItems: Whl.Combo.get('accm-type').getObjValue(),
        complete : function(combo) {
            var srcValue = combo.src.getValue();
            if (srcValue == -1) combo.dest.addItems(hotelTypes);
            if (infoSite) Whl.Combo.get('search-destination-tour').setSelectedItems([srcValue]);
        }
        });
        $('#' + region).val(area).change();
        regionType.dest.setSelectedItems([accmType]);
        if (infoSite) {
            var destTour = Whl.Combo.get('search-destination-tour');
            destTour.setSelectedItems([area]);
            $(destTour).change(function () {
                regionType.src.setSelectedItems([$(this).val()]);
                $(regionType.src).change();
            });
        }
        // Set data for tour search from cookie
        var tourDuration = Whl.getCookie('tour-duration');
        if (!tourDuration) tourDuration = -1;
        Whl.Combo.get('tour-duration').setSelectedItems([tourDuration]);
        // Initialize the calendar
        $('#accm-checkin').datepicker({dateFormat: 'dd M yy', showOn: 'both', buttonImage: '/images/'+vColor+'/'+vLanguage+'/icon_calendar.gif', buttonImageOnly: true, minDate: new Date()
        , onSelect: function(dateText, inst) {
            var date = new Date(dateText);
            var checkOutDate = $('#accm-checkout').datepicker('getDate');
            if (date.getTime() >= checkOutDate.getTime()) {
                date.setDate(date.getDate() + 1);
                //$('#accm-checkout').val((date.getDate() < 10 ? '0' : '') +date.toDateStringExt());
                $('#accm-checkout').val(date.toDateStringExt());
            }
        }
        });
        $('#accm-checkout').datepicker({dateFormat: 'dd M yy', showOn: 'both', buttonImage: '/images/'+vColor+'/'+vLanguage+'/icon_calendar.gif', buttonImageOnly: true, minDate: new Date()
        ,beforeShow: function(input) {
            var date = $('#accm-checkin').datepicker('getDate');
            date.setDate(date.getDate() + 1);
            $(input).datepicker('option', 'minDate', date);
        }});
        $('#tour-date').datepicker({dateFormat: 'dd M yy', showOn: 'both', buttonImage: '/images/'+vColor+'/'+vLanguage+'/icon_calendar.gif', buttonImageOnly: true, minDate: new Date()});
        // Register the events
        $('#accm-search').click(function(event) {
            event.preventDefault();
            if(infoSite){
                if($('#search-destination').val() != -1){
                    $('#frmAccmSearch').attr('target', '_blank');
                    $.ajax({
                        type: "POST",
                        url: "?cmd=accm_search&act=getUrlDest",
                        data: "site_id="+$('#search-destination').val(),
                        success: function(data){
                            var data = eval('('+data+')');
                            //var sub = data.domain.search(/^(.*)\:\/\//)[1];
                            $('#frmAccmSearch').attr('action', 'http://'+data.domain+'/accm_search');
                            //$('#frmAccmSearch').add('<input type="hidden" name="city" id="city" value="'+data.uname+'"/>');
                            $('#frmAccmSearch').submit();
                        }
                    });
                }else{               
                    Whl.Dialog.error({title:Message.Dlg.title2, msg:Message.Error.search_box, hideClose:false, remove:true});                    
                }
            }
            else if($('#hotel-area').isExist()){
                event.preventDefault();
                $('#frmAccmSearch').submit();
            }
        });
        $('#accm-reset').click(function(event) {
            event.preventDefault();
            $('#' + region).get(0).options[0].selected = true;
            regionType.dest.setSelectedItems([-1]);
            var today = new Date();
            today.setDate(today.getDate() + 1);
            //$('#accm-checkin').val((today.getDate() < 10 ? '0' : '') + today.toDateStringExt());
            $('#accm-checkin').val(today.toDateStringExt());
            today.setDate(today.getDate() + 1);
            //$('#accm-checkout').val((today.getDate() < 10 ? '0' : '') + today.toDateStringExt());
            $('#accm-checkout').val(today.toDateStringExt());
            regionType.dest.removeAll().addItem(regionType.opt.defaultDest).addItems(hotelTypes);;
            $('#accm-name').val('');
            $('#accm-instant').attr('checked','');
            Whl.setCookie('search_reset', 1);
        });

        $('#tour-search').click(function(event) {
            if(infoSite){
                if($('#search-destination-tour').val() != -1){
                    $('#frmTourSearch').attr('target', '_blank');
                    $.ajax({
                        type: "POST",
                        url: "?cmd=tour_search&act=getUrlDest",
                        data: "site_id="+$('#search-destination-tour').val(),
                        success: function(data){
                            var data = eval('('+data+')');
                            //var sub = data.domain.search(/^(.*)\:\/\//)[1];
                            $('#frmTourSearch').attr('action', 'http://'+data.domain+'/tour_search');
                            //$('#frmAccmSearch').add('<input type="hidden" name="city" id="city" value="'+data.uname+'"/>');
                            $('#frmTourSearch').submit();
                        }
                    });
                }else{               
                    Whl.Dialog.error({title:Message.Dlg.title2, msg:Message.Error.search_box, hideClose:false, remove:true});                    
                }
            }
            else if($('#hotel-area').isExist()){
                event.preventDefault();
                $('#frmTourSearch').submit();
            }                    
        });
        $('#tour-reset').click(function(event) {
            event.preventDefault();
            if (infoSite) Whl.Combo.get('search-destination-tour').setSelectedItems([-1]);
            var today = new Date();
            today.setDate(today.getDate() + 1);
            //$('#tour-date').val((today.getDate() < 10 ? '0' : '') + today.toDateStringExt());
            $('#tour-date').val(today.toDateStringExt());
            $('#tour-duration').get(0).options[0].selected = true;
            $('#tour-name').val('');
            Whl.setCookie('search_reset', 1);
        });
        return this;
    },
    /**
    * Intialize the global data for controls: currency
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initCurrency: function(opt) {
        //Register event for currency combo box
        $('#currency').change(function() {
            $('#frmCurrency').submit();
        });
        // Add for currency
        var currency = Whl.getCookie('currency');
        if (currency != null && currency != '') {
            $('#currency').val(currency);
        }
        $('#currency-help').tooltip({prefixCont: 'cont-currency', click: true, positionLeft: true, title: Message.Dlg.help});
        return this;
    },
    /**
    * Intialize the skype checking
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initSkypeCheck: function(opt) {
        //Check skype status
        if(typeof skypeId != 'undefined'){
            $.ajax({
                type: "POST",
                url: "?act=getSkypeStatus",
                data: "skype_id="+skypeId,
                success: function(result){
                    if(result == 2)
                    $('#uxIdSkype').html('<img src="/images/'+vColor+'/'+vLanguage+'/online_skype.png" align="absmiddle" style="margin-left:8px; margin-top:0px;" />');
                    else if(result == 3)
                    $('#uxIdSkype').html('<img src="/images/'+vColor+'/'+vLanguage+'/away_skype.png" align="absmiddle" style="margin-left:8px; margin-top:0px;" />');
                    else
                    $('#uxIdSkype').html('<img src="/images/'+vColor+'/'+vLanguage+'/offline_skype.png" align="absmiddle" style="margin-left:8px; margin-top:0px;" />');
                }
            });
        }
        var detect = false;
        var oopsPopup = function() {
            if((navigator.language && navigator.language.indexOf("ja") != -1) || (navigator.systemLanguage && navigator.systemLanguage.indexOf("ja") != -1) || (navigator.userLanguage && navigator.userLanguage.indexOf("ja") != -1)) {
                var URLtoOpen = "http://download.skype.com/share/skypebuttons/oops/oops_ja.html";
            } else {
                var URLtoOpen = "http://download.skype.com/share/skypebuttons/oops/oops.html";
            }
            var windowName = "oops";
            var popW = 540, popH = 305;
            var scrollB = 'no';
            w = screen.availWidth;
            h = screen.availHeight;
            var leftPos = (w-popW)/2, topPos = (h-popH)/2;
            oopswindow = window.open(URLtoOpen, windowName,'width=' + popW + ',height=' + popH + ',scrollbars=' + scrollB + ',screenx=' +leftPos +',screeny=' +topPos +',top=' +topPos +',left=' +leftPos);
            return false;
        };
        // check Skype links
        try{
            if ($.browser.safari || $.browser.opera) {
                detect = true;
            } else if ($.browser.msie) {
                if (new ActiveXObject("Skype.Detection")) detect = true;
            } else {
                if (typeof(navigator.mimeTypes["application/x-skype"]) == "object") detect = true;
            }
        }catch(e){
        }
        $('a[href^="skype:"]').click(function() {
            if (!detect) return oopsPopup;
        });
        return this;
    },
    /**
    * Init other settings
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initOther: function(opt) {
        $('#send-this-page').removeClass('ui-hide').dialog({bgiframe: true, autoOpen: false, width: 620, height: 490, modal: true,
        open: function() { $(this).parents('.ui-dialog-buttonpane button:eq(1)').css('display', '');},
        buttons: { 'Close': function() { $(this).dialog('close'); }, 'Send': function() { $('#frmSendPage').submit(); }}
        });
        // Click event for SendPage button
        $('#btnSendThisPage').click(function(event) {
            event.preventDefault();
            var uri = window.location.href;
            var title = document.title;
            $("#send-this-page").load('/sendpage?uri='+ encodeURIComponent(uri), {}, function() {
                $(this).dialog('open');
                $('#sec_num').forceNumber();
                var validateFields = function() {
                    var fields = [];
                    fields.push(['s_fullname', {blank:Message.Error.blank}]);
                    fields.push(['s_email', {blank:Message.Error.blank, email:Message.Error.invalid}]);
                    fields.push(['r_fullname', {blank:Message.Error.blank}]);
                    fields.push(['r_email', {blank:Message.Error.blank, email:Message.Error.invalid}]);
                    fields.push(['sec_num', {blank:Message.Error.blank}]);
                    fields.push(['message', {blank:Message.Error.blank}]);
                    return Whl.validate(fields);
                };
                if ($.browser.msie) {
                    $('#s_fullname,#s_email,#r_fullname,#r_email,#sec_num').keypress(function(e){
                        if (e.keyCode == 13) { $('#frmSendPage').submit(); }
                    });
                }
                $('#frmSendPage').submit(function(event) {
                    event.preventDefault();
                    if (validateFields()) {
                        Whl.Dialog.msg({id:'send', title:'Sending', msg: '... Please wait for a while ...', hideClose:false, remove:true});
                        var option = {
                            type: 'POST',
                            url: '/sendpage?act=send&page_title='+title,
                            dataType: 'json',
                            data: $("#frmSendPage").serialize(),
                            success: function(response) {
                                if (response.data == 'invalid') $('#sec_numInvalid').html(response.msg);
                                else {
                                    //$('#send_text').html(response.msg);
                                    $('#send-this-page').html(response.msg);
                                    //$(this).parents('.ui-dialog-buttonpane button:eq(1)').css('display', 'none');
                                    setTimeout(function() {$('#send-this-page').dialog('close');}, 5000);
                                }
                                setTimeout(function() { Whl.Dialog.close('send'); }, 500);
                            },
                            error: function(XMLHttpRequest, textStatus, errorThrown) {
                                Whl.Dialog.error({title:'Error', msg:textStatus, hideClose:false, remove:true});
                            }
                        };
                        $.ajax(option);
                    }
                });
            });
        });
        //
        $('#lmd-box').loadService('/?act=ShowLMD');
        $('#so-box').loadService('/?act=ShowSO');
        $('.select-language').click(function(event) {
            event.preventDefault();
            var href = location.href;
            href = href.substr(0, href.indexOf('//') + 2);
            var lang = this.id.split('-');
            lang = lang[1];
            var pathName = location.pathname.match(/^\/([a-zA-Z]{2})\/(.*)$/);
            if (pathName && pathName[1]) pathName = '/' + (pathName[2] ? pathName[2] : '');
            else pathName = location.pathname;
			if(pathName !='/en' && pathName !='/pt')
            href += location.host + '/' + lang + pathName + location.search;
			else 
			href += location.host + '/' + lang + location.search;
            location.href = href;
        });                               
        return this;
    },    
    /**
    * Init General Feedback dialog and form
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initFeedback: function(opt) {
        $('#open-feedback').removeClass('ui-hide').dialog({bgiframe: true, autoOpen: false, width: 660, height: 560, modal: true,
        open: function() {
            $(this).parents('.ui-dialog-buttonpane button:eq(1)').css('display', '');
        },
        buttons: {
        "Close": function() { $(this).dialog('close'); },
        "Send": function() { $('#frmFeedback').submit(); }
        }
        });
        $('#btnOpenFeedback').click(function() {
            $('#open-feedback').load('/feedback', {}, function() {
                $(this).dialog('open');
                $('#sec_num').forceAlphaNumber();
                $('#sec_num').keyup(function(){
                    this.value = this.value.toLowerCase();
                });
                var validateFields = function() {
                    var fields = [];
                    fields.push(['uxFbName', {blank:Message.Error.blank}]);
                    fields.push(['uxFbEmail', {blank:Message.Error.blank, email:Message.Error.invalid}]);
                    fields.push(['uxFbContent', {blank:Message.Error.blank}]);
                    fields.push(['sec_num', {blank:Message.Error.blank}]);
                    return Whl.validate(fields);
                };
                if ($.browser.msie) {
                    $('#uxFbName,#uxFbEmail,#sec_num').keypress(function(e){
                        if (e.keyCode == 13) { $('#frmFeedback').submit(); }
                    });
                }
                $('#frmFeedback').submit(function(event) {
                    event.preventDefault();
                    if (validateFields()) {
                        Whl.Dialog.msg({id:'send', title:'Sending', msg: '... Please wait for a while ...', hideClose:false, remove:true});
                        var option = {
                            type: 'POST',
                            url: '/feedback?act=send',
                            dataType: 'json',
                            data: $("#frmFeedback").serialize(),
                            success: function(response) {
                                if (response.data == 'invalid') $('#sec_numInvalid').html(response.msg);
                                else {
                                    $('#open-feedback').html(response.msg);
                                    //$(this).parents('.ui-dialog-buttonpane button:eq(1)').css('display', 'none');
                                    setTimeout(function() {$('#open-feedback').dialog('close');}, 5000);
                                }
                                setTimeout(function() { Whl.Dialog.close('send'); }, 500);
                            },
                            error: function(XMLHttpRequest, textStatus, errorThrown) {
                                Whl.Dialog.error({title:'Error', msg:textStatus, hideClose:false, remove:true});
                            }
                        };
                        $.ajax(option);
                    }
                });
            });
        });
        return this;
    },
    /**
    * Init newsletter box
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site object
    */
    initNewsletter: function(opt) {
        //Newsletter email
        $('#email-news').focus(function() {
            if (this.value == Message.yourEmail) this.value = '';
        }).blur(function() {
            if (this.value == '') this.value = Message.yourEmail;
        });

        $('#subscribe-news').click(function(event) {
            event.preventDefault();
            if (!$('#email-news').val().isEmail()) {
                Whl.Dialog.msg({title: 'Invalid email.', msg: Message.Error.email, remove: true, callback: function() { $('#email-news').focus();}});
            } else {
                $('#frm-subscribe').submit();
            }
        });
        return this;
    },
    /**
    * Open print page
    *
    * @param {String} page
    * @returns {void}
    */
    print: function(page) {
        arguments[1].preventDefault();
        // --
        var win = window.open("","accommodation_detail","width=780,height=1000,scrollbars,resizable,center,left=20");
        var doc = win.document;
        var html = $('#box_print').html();

        // --
        doc.open();
        doc.write('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
        doc.write('<html xmlns="http://www.w3.org/1999/xhtml">');
        doc.write('<base href="http://' + window.location.hostname + '/" />');
        doc.write('<link href="/css-js/en/style.css" rel="stylesheet" type="text/css" />');
        doc.write('<link href="/css-js/en/accm.css" rel="stylesheet" type="text/css" />');
        doc.write('<link href="/css-js/en/'+page+'_print.css" rel="stylesheet" type="text/css" />');
        doc.write('</head><body>' + html + '</body></html>');
        doc.close();
        // --
        win.focus();
        win.print();
        win.close();
    },
    /**
    * Intialize the global data for controls: currency
    *
    * @param {Object} opt Optional
    * @returns {Object} Whl.Site Object
    */
    initSocialButton: function(opt) {
        //Insert content Facebook button
        //$('#fb_icon').html('<iframe src="http://www.facebook.com/plugins/like.php?href=http://www.'+social_url+'&layout=button_count&show_faces=false&layout=standard&action=like&colorscheme=light&height=21" scrolling="no" frameborder="0"></iframe>');
        if($('#fb_icon').isExist())        
		    $('#fb_icon').html('<div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#appId=198580860188096&amp;xfbml=1"></script><fb:like href="http://'+social_url+'" send="false" layout="button_count" show_faces="false" font=""></fb:like>');		
        //Insert content Tweeter button
        if($('#tweet_icon').isExist())
            $('#tweet_icon').html('<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script><a href="http://twitter.com/share" class="twitter-share-button" data-url="http://'+social_url+'" data-count="horizontal">Tweet</a>');        
        //Insert google+1 button
        if($('#google_1').isExist()){            
            $.getScript('http://apis.google.com/js/plusone.js',function(){});
        }
        return this;
    },
    /**
    * Check instant available for allotment
    * @memberOf Whl.Site
    * @param {String} type String name allotment type need to check
    *
    * @returns {Object} Whl.Site Object
    */
    checkInstant: function(type, Items) {
        var sendData = null;
        if(type == 'normal' || type == 'accm' || type == 'accm_normal')
        sendData = 'site_id='+arrCheckAvl.SiteId+'&svc_type=accm&start_date='+arrCheckAvl.StartDate+'&end_date='+arrCheckAvl.EndDate+'&ids='+accmIds;
        else if(type == 'tour' || type == 'tour_normal')
        sendData = 'site_id='+arrCheckAvl.SiteId+'&svc_type=tour&start_date='+arrCheckAvl.TourDate+'&ids='+tourIds;
        else if(type == 'package' || type == 'package_normal')
        sendData = 'site_id='+arrCheckAvl.SiteId+'&svc_type=package&start_date='+arrCheckAvl.StartDate+'&end_date='+arrCheckAvl.EndDate+'&ids='+packageIds;
        else if(type == 'box')
        sendData = 'site_id='+arrCheckAvl.SiteId+'&svc_type=box&start_date='+arrCheckAvl.StartDate+'&end_date='+arrCheckAvl.EndDate+'&tour_date='+arrCheckAvl.TourDate+'&ids='+elmBox;
        $.ajax({
            type: 'POST',
            url:  '/?act=checkAlmStatus',
            data: sendData,
            success: function(result){
                var ID = null;

                if(type == 'normal' || type == 'accm_normal' || type == 'tour_normal' || type == 'package_normal')
                ID = 'alm_';
                else if(type == 'accm')
                ID = 'alm_accm_';
                else if(type == 'tour')
                ID = 'alm_tour_';
                else if(type == 'package')
                ID = 'alm_package_';
                res = eval('('+result+')');

                var bHasAlm = false;

                for(i=0; i<res.data.length; i++){
                    if(!res.data[i].type){
                        if (res.data[i].num<=0) continue;                        
                        $(".iba[id=" + ID+res.data[i].id + "]").each(function(){                         
                            var curHtml = $(this).html();
                            $(this).html('<img src="/images/'+vColor+'/'+vLanguage+'/instant_wh.gif" title="Available unit: '+res.data[i].num+'"/>'+curHtml);
                        })                        
                    }else{
                        elm = $('#alm_'+res.data[i].type+'_box_'+res.data[i].id);
                        if(elm) {
                            for(var j=0; j < elmBox.length;j++ ){
                                var arrData = elmBox[j].split(';');
                                if(res.data[i].id+';'+res.data[i].type == elmBox[j]) elmBox.splice(j,1);
                            }                            
                            elm.append("<img src='/images/"+vColor+"/"+vLanguage+"/instant.png' title='Available unit: " + res.data[i].num +"' />");
                        }
                    }
                }
                if(type == 'box'){
                    for(var i=0; i < elmBox.length; i++ ){
                        var aData = elmBox[i].split(';');
                        $('#alm_'+aData[1]+'_box_'+aData[0]).remove();
                    }
                }
            }
        });
    },

    /**
    * Check instant available for a room rate
    * @memberOf Whl.Site
    * @param {String} type String name allotment type need to check
    *
    * @returns {Object} Whl.Site Object
    */
    checkRmRateInstant: function() {
            
        var sendData = 'svc_id='+arrCheckAvl.SvcId+'&start_date='+arrCheckAvl.StartDate+'&end_date='+arrCheckAvl.EndDate+'&ids='+arrIds;
        $.ajax({
            type: 'POST',
            url:  '?act=checkAlmRmRate' + ( (typeof isNewHotelSite != 'undefined' && isNewHotelSite)?"&new_hotel_site=true":"" ) ,
            data: sendData,
            success: function(result){                            
                var ID = null;
                res = eval('('+result+')');
                almData = res.data; //store allotment data for new hotel site
                var bHasAlm = false;                
                $.each(arrIds, function(index, catRmId){
                    var almNum = 0;
                    var isCatAlm = (typeof catRmId == 'number'?true:false); //if allotment type is category                             
                    for(var i=0; i<res.data.length; i++){                       
                        if(isCatAlm){//if allotment type is category
                            if(catRmId == parseInt(res.data[i].id) && res.data[i].num > 0){                                 
                                almNum = res.data[i].num;
                                break;                                
                            }
                        }else{//if allotment type is room type
                            if( res.data[i].num > 0 && (catRmId == res.data[i].id || (res.data[i].id.indexOf("_") == -1 && catRmId.indexOf(res.data[i].id) ==0))  ){
                                almNum = res.data[i].num;
                                break;
                            }
                        }
                    }                                        
                    elm = $('img[name=alm_'+catRmId+(isCatAlm?'_0':'')+']');                                                     
                    if(almNum){
                        bHasAlm = true;
                        if(typeof isInstantBookingOnly != 'undefined' && isInstantBookingOnly){ // for new hotel sites
                            var almNumElem = null;
                            if(isCatAlm){ 
                                $("#alm_cat_"+catRmId).html(almNum).parent("span").show();//set category allotment                                 
                                almNumElem = $('span[name=alm_'+catRmId+'_0_num]');                                  
                                if( almNum == 1 ){
                                    $("#alm_cat_"+catRmId).siblings("span.alm_multi").remove();
                                }                              
                            }else{                                
                                almNumElem = $('span[name=alm_'+catRmId+'_num]');                                 
                                almNumElem.html(almNum);                                
                                if( almNum == 1 ){
                                    almNumElem.siblings("span.alm_multi").remove();
                                }  
                                almNumElem.parent().show();                                     
                            }                            
                            almNumElem.closest("tr").children("td.tbl_w04").children("select").children("option:nth-child(" + (almNum+1) + ")").nextAll().remove();
                            $("input[name='"+almNumElem.attr("name")+"_hidden']").val(almNum);
                            elm.attr('src', '/images/'+vColor+'/'+vLanguage+'/point_check.gif'); 
                        }else{
                            elm.attr('src', '/images/'+vColor+'/'+vLanguage+'/point_check.gif');                                
                            elm.attr('title', 'Available unit: '+almNum);                                               
                        }
                    }else{                                          
                        if(typeof isInstantBookingOnly != 'undefined' && isInstantBookingOnly){ // for new hotel sites                            
                            var almNumElem = null;
                            if(isCatAlm){                                
                                $("#alm_cat_"+catRmId).hide();
                                almNumElem = $('span[name=alm_'+catRmId+'_0_num]');                               
                            }else{                                                                    
                                almNumElem = $('span[name=alm_'+catRmId+'_num]');                                
                                
                            }
                            almNumElem.closest("tr").children("td.tbl_w04").children().hide();
                            almNumElem.closest("tr").children("td.tbl_w04").children("a.info_request").show();
                        }
                        elm.remove();
                    }
                })
                if(bHasAlm) {
                    $('#icon_instant').show();
                }else{
                    if(typeof isInstantBookingOnly != 'undefined' && isInstantBookingOnly){
                        $("#book,#add-tour").hide();
                        $("td.tbl_w04 *").show();
                        $("td.tbl_w04 a.info_request").hide();
                    };
                }
                $(".tbl_w04").show();//for new hotel sites
            }
        });
    },
    showDialogPG: function(msg) {
        //Show error dialog for reponse PG return fail
        Whl.Dialog.error({msg: Message.Error.payment_fail+'<br/>'+(msg == ''?'':Message.error+msg)});        
    },
    showDialogPGLebanon: function(msg) {
        //Show error dialog for reponse PG return fail
    	var strMsg = '';
    	if(msg != '')
			strMsg = 'Your payment has been declined for reason: '+msg+'.Please try again.';
		else				
			strMsg = 'Your credit card has been declined. Please try again.';
        Whl.Dialog.error({msg: strMsg});        
    }
});

Whl.Booking = {};

Object.extend(Whl.Booking, {
    /**
    * Remove booking Item
    *
    * @memberOf Whl.Booking
    * @param {Number} svcId Booking item id
    * @param {Number} svcType
    * @returns {void}
    */
    removeItem: function(svcId, svcType, resetCalendar) {
        resetCalendar = resetCalendar || false;
        Whl.Dialog.confirm({
            title: Message.Dlg.delTitle,
            msg: Message.Dlg.delMsg,
            id: 'removeItem',
            buttons: {
                Cancel: function() {
                    $(this).dialog('close');
                },
                Ok: function() {
                    $(this).dialog('close');
                    Whl.Dialog.msg({id: 'remove', title: Message.Dlg.delTitle, msg: Message.Dlg.deleting});
                    var option = {
                        type: 'POST',
                        url: '?act=removeItem',
                        dataType: 'text',
                        data: '&svc_id=' + svcId  + '&svc_type='+ svcType,
                        success: function(response) {
                            if (Whl.isJson(response)) {
                                Whl.Dialog.close('remove');
                                response = eval('(' + response + ')');
                                if (response.result) location.href = response.action;
                                else Whl.Dialog.error({title: Message.Dlg.error, msg: Message.Error[response.error]});
                            } else {
                                response = response.split('<!--bk-info-->');
                                response[0] = $(response[0]);
                                if (resetCalendar && svcType != 6) {
                                    new Whl.Tour.Rate({ setting: {id: svcId,
                                    url: $('#tour-url-' + svcId).attr('href'),
                                    adult: $('#tour-adult').val(),
                                    child: $('#tour-child').val(),
                                    datePicker: $('#tour-date-' + svcId),
                                    departTime: $('#tour-departure-' + svcId),
                                    jsonp: true,
                                    isInit: true,
                                    startDate: $('#tour-start-date').val(),
                                    complete: function() {this.startDate = '';},
                                    calendarOpt: {
                                        numberOfMonths: 1, stepMonths: 1, showOn: 'both', buttonImage: '/images/'+vColor+'/'+vLanguage+'/icon_calendar.gif', buttonImageOnly: true
                                    },
                                    cssClass: 'true'}});
                                    $('#date-' + svcId).show();
                                    $('#added-tour-' + svcId).hide();
                                    $('#add-tour-' + svcId).unbind().click(Whl.Booking.addTourItem.bind(null, svcId));
                                    $('#bk_total_amount').html($('#bk_amount', response[0]).html());
                                    $('#bk_total_amount2').html($('#bk_amount2', response[0]).html());	
                                }
                                $('.remove-item', response[0]).click(function(event) {
                                    event.preventDefault();
                                    var id = this.id.split('-');
                                    Whl.Booking.removeItem(id[1], id[2], resetCalendar);
                                });
                                $('#bk-inf').html(response[0]);
                                $('#payment-info').html(response[1]);
                                Whl.Dialog.close('remove');
                                Whl.Booking.viewPaymentDetail();
                            }
                        },
                        error: function(XMLHttpRequest, textStatus, errorThrown) {
                        }
                    };
                    $.ajax(option);
                }
            },
            remove: true
        });
        return this;
    },
    /**
    * Add Tour Id
    *
    * @param {Number} tourId
    * @returns {void}
    */
    addTourItem: function(tourId) {
        var option = {
            type: 'POST',
            url: '?act=addTourItem',
            dataType: 'text',
            data: 'tour_id=' + tourId + '&start_date=' + $('#tour-date-' + tourId).val() + '&tour_depart=' + $('#tour-departure-' + tourId).val(),
            success:  function(data) {
                Whl.Dialog.closeMsg();
                if (data.length > 4) {
                    $('#bk-inf').html($(data));
                    $('#date-' + tourId).hide();
                    $('#added-tour-' + tourId).show();
                    $('#bk_total_amount').html($('#bk_amount').html());
                    $('#bk_total_amount2').html($('#bk_amount2').html());
                    $('.remove-item').click(function(event) {
                        event.preventDefault();
                        var id = this.id.split('-');
                        Whl.Booking.removeItem(id[1], id[2], true);
                    });
                    Whl.Booking.viewPaymentDetail();
                } else Whl.Dialog.error({title: Message.Dlg.error, msg: Message.Error[data]});
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                Whl.Dialog.closeMsg();
                Whl.Dialog.error({msg: textStatus, remove: true});
            }
        };
        Whl.Dialog.msg({title: Message.Dlg.title3, msg: Message.Dlg.checking});
        $.ajax(option);
    },
    /**
    * View cancellation policy
    *
    * @returns {void}
    */
    viewPolicy: function() {
        var bodyWidth = $("body").width();
        var dialogWidth = bodyWidth > 700? 700: Math.floor(0.9*bodyWidth);
        $('<div id="cancellation-policy" title="' + Message.Dlg.cancellation + '"/>').appendTo('body').dialog({bgiframe: true, autoOpen: false, width:dialogWidth, height: 'auto', modal: true,
        open: function() {
            $(this).parents('.ui-dialog-buttonpane button:eq(1)').css('display', '');
        },
        buttons: {
        "Close": function() { $(this).dialog('close'); }
        }
        });
        $('#view_policy').click(function(event) {
            event.preventDefault();
            $('#cancellation-policy').dialog('open');
            $('#cancellation-policy').html(Message.Dlg.title).load('?act=viewPolicy', function() {
                Whl.toggleContent();
            });
        });
        return this;
    },
    viewPaymentDetail: function() {
        $('.payment_info').tooltip({title: Message.pmDetail, prefixCont: 'payment-detail', positionLeft: true});
        return this;
    }    
});
