/**
 * @title           home.js
 * @description     javascript file for home.php & home-offers.php
 */
box.dom(document).ready(function() {
    /**
     * @section       Carousels
     * @note          Manage carousels
     */
    // boucler sur tous les div ayant une classe "carousel"
    box.dom('div.carousel').each(function(i, elm) {
        if (this.id == "ourFavoritesCarousel") {
            box.ui('carousel').create({ 
                element: elm, 
                horizontal: true, 
                display: 4,
                duration: 600,
                paginate: true
            });
        }
        if (this.id == "picturesAdded") {
            box.ui('carousel').create({
                element: elm, 
                horizontal: true, 
                display: 3,
                duration: 600,
                paginate: true
            })
        }
    });
    
    /**
     * @section       Tabs
     */
    box.ui('tabs').create({
        element: '#tabsTOC'
    });
    
});

(function() {
    $(document).ready(function () {
        if ($('#topDestinations .carousel').length) {
            slideShow.init('#topDestinations .carousel');
        }
        search.init();
        $("#picturesTabs .header a").click(function(){
            $("#picturesTabs .header h2").removeClass('on');
            $("#picturesTabs .containerHighlightInner > div").removeClass('on');
            $(this).parent().addClass('on');
            $("#picturesTabs .containerHighlightInner " + $(this).attr("href")).addClass('on');
            return false;
        });
    });
    
    var slideShow = {
        duration: 400, // fading time (ms)
        interval: 7000, // interval between two fades (ms)
        alea: false, // if true, next item defined randomly else sequentialy
        firstItem: 1, // firstItem to be display. If 0 first item is set randomly
        currentItem:1, // Item currently displayed
        nextItem:2, // Next item to display
        nbItems:1, // Total item
        init: function (elmt) {
            if ($(elmt + " .carouselInner ul").hasClass('alea')) {
                slideShow.alea = true;
            }
            if ($(elmt + " .carouselInner ul").hasClass('firstItem')) {
                slideShow.firstItem = 1;
            }
            
            slideShow.nbItems = $(elmt + " .carouselInner ul li").length;
            slideShow.firstItem = (slideShow.firstItem > slideShow.nbItems) ? 0 : slideShow.firstItem;
            slideShow.currentItem = slideShow.firstItem;
            if (slideShow.firstItem == 0) {
                slideShow.currentItem = Math.floor(Math.random() * slideShow.nbItems) + 1;
            }
            
            // Pagination
            
            var pagination = '<div class="pagination"><ul>';
            for (var i=1; i <= slideShow.nbItems; i++) {
                strClassOn = (i == slideShow.currentItem) ? " class='on'" : '';
                pagination += '<li'+strClassOn+'><a href="#">'+i+'</a></li>';
            }
            pagination += '</ul></div>';
            
            
            $(elmt).find('.carouselInner').before(pagination);
            
            // Initialize items display
            var aLi = $(elmt).find('.carouselInner ul li');
            slideShow.setBackgroundImage(aLi[slideShow.currentItem - 1]);
            for (var j=0; j < slideShow.nbItems; j++) {
                cpt = j+1;
                if (cpt != slideShow.currentItem) {
                    $(aLi[j]).hide();
                }
            }
            
            // Bind click
            slideShow.bindClick(elmt);
            
            // Go to next slide
            if (slideShow.nbItems > 1) {
                slideShow.nextSlide(elmt);
            }
        },
        bindClick: function (elmt) {
            $(elmt).find('.pagination a').click(function () {
                if(!$(elmt).hasClass('move') && !$(this).parent().hasClass('on')) {
                    slideShow.nextItem = parseInt($(this).text());
                    slideShow.slide(elmt);
                }
                return false;
            });
        },
        nextSlide: function(elmt) {
            if (slideShow.alea) {
                // randomly
                slideShow.nextItem = slideShow.currentItem;
                while (slideShow.nextItem == slideShow.currentItem) {
                    slideShow.nextItem = Math.floor(Math.random() * slideShow.nbItems) + 1;
                }
            } else {
                // sequentialy
                if (slideShow.currentItem == slideShow.nbItems ) {
                    slideShow.nextItem = 1;
                } else {
                    slideShow.nextItem = slideShow.currentItem + 1;
                }
            }
            if (this.timer) {
               clearTimeout(this.timer);
            }
            this.timer = setTimeout(function(){slideShow.slide(elmt)}, slideShow.interval);
        },
        slide: function (elmt) {
            $(elmt).addClass('move');
            var aLi = $(elmt).find('.carouselInner ul li');
            var aLiNewIndex = slideShow.nextItem - 1;
            var aLiOldIndex = slideShow.currentItem - 1;
            
            slideShow.setBackgroundImage(aLi[aLiNewIndex]);

            $(aLi[aLiNewIndex]).fadeIn(slideShow.duration);
            $(aLi[aLiOldIndex]).hide();
            
            // Update pagination
            var aPages = $(elmt).find('.pagination ul li');
            $(aPages[aLiOldIndex]).removeClass('on');
            $(aPages[aLiNewIndex]).addClass('on');

            // Update Slideshow
            slideShow.currentItem = slideShow.nextItem;
            $(elmt).removeClass('move');
            
            // Next slide
            slideShow.nextSlide(elmt);
        },
        setBackgroundImage: function (elmt) {
            // set images
            if ($(elmt).css('background-image') == 'none') {
                var lk = $(elmt).find('a.backgroundLayer').attr('href');
                $(elmt).css('background-image', 'url(' + lk + ')');
            };
        }
    };
    
    var search = {
        init: function() {
        
            if($('#searchCar').length) {
                box.ui('form.searchCar').mustValidate(function(form) {
                    form.field('carCity').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errors.mandatory;
                        }
                    });
                    return l10n.errors.forms
                });
            }
            if($('#rentSearch').length) {
                box.ui('form.rentSearch').mustValidate(function(form) {
//                    form.field('rentCity').mustValidate(function(field) {
//                       	if(field.getValue() == '0' || field.current == '0') {
//                            return l10n.errors.mandatory;
//                        }
//                    });
//                    return l10n.errors.forms
                });
            }
            if ($('#searchFlight').length) {
                box.ui('form.searchFlight').mustValidate(function(form) {
                    form.field('flightDepartureCity').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errors.required.city;
                        }
                    });
                    form.field('flightReturnCity').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errors.required.city;
                        }
                    });
                    return l10n.errors.forms
                });
            }
            
            //datePickers
            
            if ($('#hotelArrivalDate').length && $('#hotelDepartureDate').length) {
            	$('.dates .text input#hotelArrivalDate').datePicker().val(new Date().asString()).trigger('change');
            	$('.dates .text input#hotelDepartureDate').datePicker().val(new Date().addDays(1).asString()).trigger('change');
            }else{
            	$('.dates .text input').datePicker().val(new Date().asString()).trigger('change');
            }
            $('.dates input').attr('readonly', 'readonly');
            var startDate=null, endDate=null;
            if ($('#hotelArrivalDate').length && $('#hotelDepartureDate').length) {
                startDate   = $('#hotelArrivalDate');
                endDate     = $('#hotelDepartureDate');
            }
            if ($('#flightDepartureDate').length && $('#flightReturnDate').length) {
                startDate   = $('#flightDepartureDate');
                endDate     = $('#flightReturnDate');
            }
            // allow user to only pick up a start date antecedent to end date
            if (startDate != null && endDate != null) {
                startDate.bind(
                    'dpClosed',
                    function(e, selectedDates)
                    {
                        var d = selectedDates[0];
                        if (d) {
                            d = new Date(d);
                            var isFlight 	= $('#searchFlight').length == 1;
                            var dayToAdd	= isFlight ? 0 : 1;
                            var daysEnd = d.addDays(dayToAdd).asString();
                            endDate.dpSetStartDate(daysEnd);
                            if ($('#hotelArrivalDate').length && $('#hotelDepartureDate').length) {
                            	$('.dates .text input#hotelDepartureDate').val(daysEnd); 
//                            	startDate.dpSetEndDate(daysEnd);
                            }
                        }
                    }
                );
                endDate.bind(
                    'dpClosed',
                    function(e, selectedDates)
                    {
                        var d = selectedDates[0];
//                        if (d) {
//                            d = new Date(d);
//                            startDate.dpSetEndDate(d.addDays(0).asString());
//                        }
                    }
                );
                if ($('#hotelArrivalDate').length && $('#hotelDepartureDate').length) {
                	endDate.dpSetStartDate(new Date().addDays(1).asString());
                }
            }
            
            
            //jqueryUI sliders for price ranges
            var iMaxPrice = 400;
            $('.prices').find('input.minimum').attr('value', 0);
            $('.prices').find('input.maximum').attr('value', iMaxPrice);
            $('.prices .sliders').slider({
                range: true,
                min: 0,
                max: iMaxPrice,
                step: 25,
                values: [0, 400],
                slide : function(event, ui) {
                    $(this).closest('.prices').find('a:first').html(ui.values[0]);
                    if (ui.values[1] == iMaxPrice) {
                        $(this).closest('.prices').find('a:last').html(ui.values[1]+'+');
                    } else {
                        $(this).closest('.prices').find('a:last').html(ui.values[1]);
                    }
                    $(this).closest('.prices').find('input.minimum').attr('value', ui.values[0]);
                    $(this).closest('.prices').find('input.maximum').attr('value', ui.values[1]);
                }
            });
            $('.prices').find('a:first').html(0).addClass('min');
            $('.prices').find('a:last').html(iMaxPrice + '+').addClass('max');
            
            var iMaxPriceHotel = 200;
            if($('#searchHotel').length) {
                $('.prices .sliders').slider({
                    max: iMaxPriceHotel,
                    values: [0, iMaxPriceHotel],
                    slide : function(event, ui) {
                        $(this).closest('.prices').find('a:first').html(ui.values[0]);
                        if (ui.values[1] == iMaxPriceHotel) {
                            $(this).closest('.prices').find('a:last').html(ui.values[1]+'+');
                        } else {
                            $(this).closest('.prices').find('a:last').html(ui.values[1]);
                        }
                        $(this).closest('.prices').find('input.minimum').attr('value', ui.values[0]);
                        $(this).closest('.prices').find('input.maximum').attr('value', ui.values[1]);
                    }
                });
                $('.prices').find('a:last').html(iMaxPriceHotel + '+').addClass('max');
            }
            
            //jqueryUI sliders for note ranges
            $('.notes').find('input.minimum').attr('value', 0);
            $('.notes').find('input.maximum').attr('value', 5);
            $('.notes .sliders').slider({
                range: true,
                min: 0,
                max: 5,
                values: [0, 5],
                slide : function(event, ui) {
                    $(this).closest('.sliders').find('a:first').html(ui.values[0]);
                    $(this).closest('.sliders').find('a:last').html(ui.values[1]);
                    $(this).next().find('input.minimum').attr('value', ui.values[0]);
                    $(this).next().next().find('input.maximum').attr('value', ui.values[1]);
                },
                animate: true
            });
            $('.notes').find('a:first').html(0).addClass('min');
            $('.notes').find('a:last').html(5).addClass('max');
            
                       
            //inspirer toggler
            $('.inspirer').click(function(e) {
                var toggler = $(this);
                inspirer.toggle(e, toggler);
            });
            
            //launches ajax load
            $('#searchMenu a').click(function(e) {
				// Do not load ajax for car
				if(!$(this).parent().hasClass('car')){
					search.manage(e);
				}
            });
            
            
            
            //search.autoComplete();
        },
        openLoader: function(elmt) {
            var formId = $('#searchForm').find('form').attr('id');
            box.ui('form').destroy(formId);
            /**
             * @description  changes the block to be loaded with a loader
             */
            var h = $('#'+elmt).height();
            var w = $('#'+elmt).width();
            $('#' + elmt).replaceWith('<div id="' + elmt + '"><img src="' + l10n.url.transparent + '" alt="' + l10n.loading + '" style="height:'+h+'px; width:'+w+'px; background:url(' + l10n.url.loaderSearch + ') no-repeat 50% 50%" /></div>');
        },
        manage: function(e) {
            e.preventDefault();
            var t = e.target;
            search.change(e, t);
        },
        change: function(e, lk) {
            search.openLoader('searchForm');
            /**
             * @description     loads the content of #searchForm with the selected form
             */
            var paramsVals = lk.href.replace(/.+\?/, '').split('&');
            var paramval = new Array();
            var oMyVars = {};
            for (i=0; i<paramsVals.length; i++) {
                paramval[i] = paramsVals[i].split('=');
                oMyVars[paramval[i][0]] = paramval[i][1];
            }
            $.get(l10n.url.searchForm, 
                oMyVars,
                function(data){
                    $('#searchForm').replaceWith('<div id="searchForm">' + data + '</div>');
                    
                    //form replacement
                    formId = $('#searchForm').find('form').attr('id');
                    box.ui('form').create({
                        element: '#'+formId
                    }).addReplacement();
                    
                    search.init();
                    
                    if ($("#hotelCity").length) {
                        search.autoComplete($("#hotelCity"), l10n.url.autoCompleteData, 0);
                    } 
                    if ($("#carCity").length) {
                        search.autoComplete($("#carCity"), l10n.url.autoCompleteData, $("#carCountry").val());
                    } 
                    if ($("#stayCity").length) {
                        search.autoComplete($("#stayCity"), l10n.url.autoCompleteData, $("#stayCountry").val());
                    } 
                    if ($("#flightDepartureCity").length) {
                        search.autoComplete($("#flightDepartureCity"), l10n.url.autoCompleteData, 0, 1);
                    } 
                    if ($("#flightReturnCity").length) {
                        search.autoComplete($("#flightReturnCity"), l10n.url.autoCompleteData, 0, 1);
                    } 
                    if ($("#flightInspirerDepartureCity").length) {
                        search.autoComplete($("#flightInspirerDepartureCity"), l10n.url.autoCompleteData, 0);
                    } 
                    //png fix
                    if (window.ie6) {
                        $("#searchForm form").correctPNG();
                    };
                }
            ); 
        },
        autoComplete : function(_field, _dataFileUrl, _countryId, _isFlight) {
        	_isFlight = _isFlight || 0;
        	_field.autocomplete(_dataFileUrl, {
        		multiple: false,
        		dataType: "json",
        		minChars: 3,
        		extraParams:{country:_countryId, isFlight:_isFlight},
        		parse: function(data) {
        			return $.map(data, function(row) {
        				return {
        					data: row,
        					value: row.key,
        					result: row.key
        				}
        			});
        		},
        		formatItem: function(item) {
        			return item.val;
        		}
        	}).result(function(e, item) {
        		$("#content").append("<p>selected " + item + "</p>");
        	});
        }
    }
    
    var inspirer = {
        toggle: function(e, toggler) {
            toggler.toggleClass('off').toggleClass('on');
            var closing = toggler.parent().find('form.on');
            var opening = toggler.parent().find('form.off');
            closing.removeClass('on').addClass('off');
            opening.removeClass('off').addClass('on');
        }
    }
    
})();

$(function() {
    /**
     * Site         http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
     * Doc          http://docs.jquery.com/Plugins/Autocomplete
     * Options      http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions
     */
    var autoCompleteField = function (_field, _dataFileUrl, _countryId, _isFlight) {
    	_isFlight = _isFlight || 0;
        _field.autocomplete(_dataFileUrl, {
    		multiple: false,
    		dataType: "json",
    		minChars: 3,
    		extraParams:{country:_countryId, isFlight:_isFlight},
    		parse: function(data) {
    			return $.map(data, function(row) {
    				return {
    					data: row,
    					value: row.val,
    					result: row.val
    				}
    			});
    		},
    		formatItem: function(item) {
    			return item.val;
    		}
    	}).result(function(e, item) {
    		$("#content").append("<p>selected " + item.val + "</p>"); // format(item) 
    	});
    }	
    
    if ($("#hotelCity").length) {
        autoCompleteField($("#hotelCity"), l10n.url.autoCompleteData, 0);
    } 
    if ($("#carCity").length) {
        autoCompleteField($("#carCity"), l10n.url.autoCompleteData, $("#carCountry").val());
    } 
    if ($("#rentCity").length) {
        autoCompleteField($("#rentCity"), l10n.url.autoCompleteData, $("#rentCountry").val());
    } 
    if ($("#thalassaCity").length) {
        autoCompleteField($("#thalassaCity"), l10n.url.autoCompleteData, $("#thalassaCountry").val());    	
    } 
    if ($("#stayCity").length) {
        autoCompleteField($("#stayCity"), l10n.url.autoCompleteData, $("#stayCountry").val());
    } 
    if ($("#flightDepartureCity").length) {
        autoCompleteField($("#flightDepartureCity"), l10n.url.autoCompleteData, 0, 1);
    } 
    if ($("#flightReturnCity").length) {
        autoCompleteField($("#flightReturnCity"), l10n.url.autoCompleteData, 0, 1);
    } 
    if ($("#flightInspirerDepartureCity").length) {
        autoCompleteField($("#flightInspirerDepartureCity"), l10n.url.autoCompleteData, 0);
    } 
});
