/**
* @title  Touring Nature search results scripts 
*/
(function() {
    $(document).ready(function () {
        
        box.dom('div.carousel').each(function(i, elm) {
            if (this.id == "picturesAddedCarousel") {
                box.ui('carousel').create({
                    element: elm, 
                    horizontal: true, 
                    display: 3,
                    duration: 600,
                    paginate: true
                })
            }
        });
        
        search.init();
        
    });

    var search = {
        bindForms: function(){
            $("#searchForm .header a").click(function(){
                $("#searchForm .header h2").removeClass('on');
                $("#searchForm .containerHighlightInner > div").removeClass('on');
                $(this).parent().addClass('on');
                var lk = $(this).attr("href").split('#')[1];
                $("#searchForm #" + lk).addClass('on');
                return false;
            });
            
            $("#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;
            });
            
            $('.editorial a.openDetails').each(function() {
                var opener = $(this);
                var summary = $(this).closest('.editorial').find('.summary');
                var details = $(this).closest('.editorial').find('.details');
                var closer = details.find('a.closeDetails');
                opener.click(function(e) {
                    e.preventDefault();
                    summary.hide();
                    details.show();
                });
                closer.click(function(e) {
                    e.preventDefault();
                    summary.show();
                    details.hide();
                })
            });
            
            if ($('#searchFlight').length) {
                box.ui('scroll').configure({
                    bar: '<a href="#" class="{$barCls}"><span class="start"></span><span class="end"></span></a>' 
                });
                box.ui('scroll').destroy('companies');
                box.ui('scroll').create({
                    element: '#companies',
                    buttons: true,
                    bar: true
                });
                box.ui('scroll').destroy('arrivalList');
                box.ui('scroll').create({
                    element: '#arrivalList',
                    buttons: true,
                    bar: true
                });
                box.ui('scroll').destroy('departureList');
                box.ui('scroll').create({
                    element: '#departureList',
                    buttons: true,
                    bar: true
                });
            }
            
            // datePickers
            $('.dates .text input').attr('readonly', 'readonly');
            $('.dates .text input').datePicker(); //.val(new Date().asString()).trigger('change')
            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;
                            endDate.dpSetStartDate(d.addDays(dayToAdd).asString());
                        }
                    }
                );
                endDate.bind(
                    'dpClosed',
                    function(e, selectedDates)
                    {
                        var d = selectedDates[0];
                        if (d) {
                            d = new Date(d);
                            startDate.dpSetEndDate(d.addDays(0).asString());
                        }
                    }
                );
            }
            
            //get values from text input
            if ($('.prices input.minimum').val()) {
                var priceMin = $('.prices input.minimum').val();
            } else {
                var priceMin = 0;
            }
            if ($('.prices input.maximum').val()) {
                var priceMax = $('.prices input.maximum').val();
            } else {
                if($('#searchHotel').length) {
                    var priceMax = 200;
                } else {
                    var priceMax = 400;
                }
            }
            if ($('#searchHotel').length) {
                var priceTop = 200;
            } else {
                var priceTop = 400;
            }            
            if ($('.notes input.minimum').val()) {
                var noteMin = $('.notes input.minimum').val();
            } else {
                var noteMin = 0;
            }
            if ($('.notes input.maximum').val()) {
                var noteMax = $('.notes input.maximum').val();
            } else {
                var noteMax = 5;
            }
            
             //init jqueryUI sliders for price ranges
            $('.prices .sliders').slider({
                range: true,
                min: 0,
                max: priceTop,
                step: 25,
                values: [priceMin, priceMax],
                slide : function(event, ui) {
                    $(this).closest('.prices').find('a:first').html(ui.values[0]);
                    if (ui.values[1] == priceTop) {
                        $(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(priceMin).addClass('min');
            $('.prices').find('a:last').html(priceMax + '+').addClass('max');
            
            //init jqueryUI sliders for note ranges
            min = 
            $('.notes .sliders').slider({
                range: true,
                min: 0,
                max: 5,
                values: [noteMin, noteMax],
                slide : function(event, ui) {
                    $(this).closest('.notes').find('a:first').html(ui.values[0]);
                    $(this).closest('.notes').find('a:last').html(ui.values[1]);
                    $(this).closest('.notes').find('input.minimum').attr('value', ui.values[0]);
                    $(this).closest('.notes').find('input.maximum').attr('value', ui.values[1]);
                },
                animate: true
            });
            $('.notes').find('a:first').html(noteMin).addClass('min');
            $('.notes').find('a:last').html(noteMax).addClass('max');     
            
            // Catch pagination link
            $('.pagination a').click(function(){
                search.loadResults($(this).attr("href"));
                return false;
            });

            // Submit results per page
            $('#nbResults, #sortOut').submit(function(){
                var sUrl     = '';
                var sep     = '';
                $('input[type="hidden"]', this).each(function(){
                    sUrl     += sep + $(this).attr('name')+"="+$(this).val();
                    sep     = '&';
                });
                sUrl     += sep +"nbResultPerPage="+$('#nbResultPerPage').val();
                sUrl     += sep +"selectSortingOutBy="+$('#selectSortingOutBy').val();
                sUrl = l10n.url.searchResult+"&"+sUrl;
                search.loadResults(sUrl);
                return false;
            });
        },
        init: function(){
            // Load results
            var aUrl 	= window.location.href.split('?');
            var isCar 	= $('#carFrame').length > 0;
            if(aUrl.length > 1 && !isCar){
                var sUrl = aUrl[1] + jQuery('#searchhidden #urlHidden').val();
                            
                sUrl = sUrl.replace(/(\?|&)option=com_search/, '');
                sUrl = sUrl.replace(/(\?|&)view=search/, '');
                sUrl = sUrl.replace(/(\?|&)format=html/, '');
//                sUrl =  aUrl[0]+"?"+sUrl;
                sUrl = l10n.url.searchResult+"&"+sUrl;
                sUrl = sUrl.split('&&').join('&');
                
                search.loadResults(sUrl);
            }
        },
        onResults: function() {
            search.bindForms();
            document.location.href="#searchResults";
            if($('#asideMap').length){
                // map is hidden by default and shown if needed
                $("#asideMap").hide();
                
                // Load asideMap
                $('#asideMap').load(l10n.url.asideMap, search.onMiniMap);
            }
            if ($("#hotelCity").length) {
                autoCompleteField($("#hotelCity"), l10n.url.autoCompleteData);
            }
            if ($("#carCity").length) {
                autoCompleteField($("#carCity"), l10n.url.autoCompleteData);
            } 
            if ($("#thalassaCity").length) {
                autoCompleteField($("#thalassaCity"), l10n.url.autoCompleteData);
            } 
            if ($("#stayDepartureCity").length) {
                autoCompleteField($("#stayDepartureCity"), l10n.url.autoCompleteData);
            } 
            if ($("#stayArrivalCity").length) {
                autoCompleteField($("#stayArrivalCity"), l10n.url.autoCompleteData);
            }
//            if ($("#stayCity").length) {
//                autoCompleteField($("#stayCity"), l10n.url.autoCompleteData);
//            }
            if ($("#adventureDepartureCity").length) {
                autoCompleteField($("#adventureDepartureCity"), l10n.url.autoCompleteData);
            } 
            if ($("#mySearchCruiseDepartureCity").length) {
                autoCompleteField($("#mySearchCruiseDepartureCity"), l10n.url.autoCompleteData);
            } 
            if ($("#tourDestination").length) {
                autoCompleteField($("#tourDestination"), l10n.url.autoCompleteData);
            }
            if ($("#tourDepartureCity").length) {
                autoCompleteField($("#tourDepartureCity"), l10n.url.autoCompleteData);
            }
            if ($("#flightDepartureCity").length) {
                autoCompleteField($("#flightDepartureCity"), l10n.url.autoCompleteData, 1);
            } 
            if ($("#flightReturnCity").length) {
                autoCompleteField($("#flightReturnCity"), l10n.url.autoCompleteData, 1);
            }  
            if ($("#flightInspirerDepartureCity").length) {
               autoCompleteField($("#flightInspirerDepartureCity"), l10n.url.autoCompleteData, 0);
            } 
            
            /* Disable return date if it's a one way ticket */
            if ($("#flightOneWayTicket").length) {
                if ($("input:radio[name=isDirect]:checked").val() == 1) {
                    if ($("#flightReturnDate").length) {
                        $("#flightReturnDate").attr('disabled','disabled');
                        $("#flightReturnDate").addClass('disabled');
                        $("#flightReturnDate").next().css('visibility','hidden');
                    }
                }
            }
            
            if(typeof(box.ui('form')) != 'undefined'){
                $('form.skinnedForm').each(function() {
                    
                    formId = $(this).attr('id');
                    box.ui('form').destroy(formId);

                    box.ui('form').create({
                        element: '#'+formId
                    }).addReplacement();
                    
                    if(formId == 'searchCar') {
                        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(formId == 'rentSearch') {
                        box.ui('form.rentSearch').mustValidate(function(form) {
//                            form.field('rentCity').mustValidate(function(field) {
//                                if(field.getValue() == '0') {
//                                    return l10n.errors.mandatory;
//                                }
//                            });
//                            return l10n.errors.forms
                        });
                    }
                    if (formId == 'searchFlight') {
                        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
                        });
                    }
                }); 
            }
            
            box.bind({
                'change.field.select.selectSortingOutBy' : function() {
                    $('#sortOut').submit();
                },
                'change.field.select.nbResultPerPage' : function() {
                    $('#nbResults').submit();
                }
            });
            
            /**
             *  @section        popups Map
             */
            $('a.popupMap').click(function(){
                window.open($(this).attr('href'),"popupMap","menubar=no, status=yes, scrollbars=yes, location=no, resizable=yes, width=670, height=740").focus();
                return false;
            });
            
            $(".pagination .resultsLoader").empty();
            
            $('.links a.setAlert').each(function() {
               var link = $(this).attr('href');
               var datas = {};
               datas.url = l10n.url.popinAlert;
               $(this).click(function(e) {
                   e.preventDefault();
                   $.ajax({
                       url: link,
                       success: function() {
                           box.ui('popin.alert').open(datas);
                       }
                   })
               }); 
            });
            
        }, 
        loadResults: function(sUrl){
            $(".pagination .resultsLoader").empty().append('<img src="/templates/touringnature/common/img/picto/results-loader.gif" alt="'+l10n.loading+'" />');
            $('#seachResults').load(sUrl, search.onResults);            
        },
        onMiniMap: function(data){            
            // mini map in the search hotel results
            var dataFileOffers = l10n.url.markersDataSearched + '&sOfferTypeCode=Hotel';
            $.get(dataFileOffers, function(data) {
                currentMap = gMap3;
                currentMap.counter = 1;
                currentMap.imageCounter = 1;
                currentMap.infoWindowEnabled = false;
                
                // display map or not ?
                var bDisplayMap = $(data).find('display').attr('value');
                if (bDisplayMap == 0) {
                    return false;  
                } else {
                    $("#asideMap").show();
                }
                
                var mapCenter = currentMap.getCoords($(data).find('marker:first'));
                var i = 1;
                //alert(lat(mapCenter));
                while (mapCenter == 'undefined' && i<10) {
                    mapCenter = currentMap.getCoords($(data).find('marker').eq(i));
                    i++;
                }
                var myMap = currentMap.init('#miniMap', data, mapCenter, 12);
                $('a.popupMap').click(function(){
                    window.open($(this).attr('href'),"popupMap","menubar=no, status=yes, scrollbars=yes, location=no, resizable=yes, width=670, height=740").focus();
                    return false;
                });
            });
        }
    }

})();



/**
 * 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, _isFlight) {
	_isFlight = _isFlight || 0;
    _field.autocomplete(_dataFileUrl, {
        multiple: false,
        dataType: "json",
        minChars: 3,
        extraParams:{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 " + format(item) + "</p>");
    });
}    

if ($("#hotelCity").length) {
    autoCompleteField($("#hotelCity"), l10n.url.autoCompleteData);
} 
if ($("#carCity").length) {
    autoCompleteField($("#carCity"), l10n.url.autoCompleteData);
} 
if ($("#thalassaCity").length) {
    autoCompleteField($("#thalassaCity"), l10n.url.autoCompleteData);
} 
if ($("#stayDepartureCity").length) {
    autoCompleteField($("#stayDepartureCity"), l10n.url.autoCompleteData);
} 
if ($("#stayArrivalCity").length) {
    autoCompleteField($("#stayArrivalCity"), l10n.url.autoCompleteData);
}
if ($("#stayCity").length) {
    autoCompleteField($("#stayCity"), l10n.url.autoCompleteData);
}
if ($("#adventureDepartureCity").length) {
    autoCompleteField($("#adventureDepartureCity"), l10n.url.autoCompleteData);
} 
if ($("#mySearchCruiseDepartureCity").length) {
    autoCompleteField($("#mySearchCruiseDepartureCity"), l10n.url.autoCompleteData);
} 
if ($("#tourDestination").length) {
    autoCompleteField($("#tourDestination"), l10n.url.autoCompleteData);
}
if ($("#tourDepartureCity").length) {
    autoCompleteField($("#tourDepartureCity"), l10n.url.autoCompleteData);
}
if ($("#flightDepartureCity").length) {
    autoCompleteField($("#flightDepartureCity"), l10n.url.autoCompleteData, 1);
} 
if ($("#flightReturnCity").length) {
    autoCompleteField($("#flightReturnCity"), l10n.url.autoCompleteData, 1);
} 
if ($("#flightInspirerDepartureCity").length) {
    autoCompleteField($("#flightInspirerDepartureCity"), l10n.url.autoCompleteData, 0);
}

