// jQuery Funktionen
jQuery.noConflict();
jQuery(function($) {
	
//Datepicker Initialisieren
$( "#datepickerVon" ).datepicker(getDatepickerOptions('von'));
$( "#datepickerBis" ).datepicker(getDatepickerOptions('bis'));

// jQuery Funktionen -- BUTTON
$("button, a.button, input[type='submit']").button();		

// jQuery Funktionen -- TOOLTIP
$("img.piktogramm[title] , img.infowindow[title]").tooltip();
$(".infowindow_xxl[title]").tooltip({
	tipClass:'tooltip_xxl'
});

//limitiert Texte in Textareas
$('textarea.textlimit').live('keyup',textLimit);

// jQuery iframe Overlay
$('a.booking, input.booking').click(handleBuchung);

//Sobald ein Tagungslogin eingegeben wird, werden alle anderen Suchfelder gesperrt.
$('#tagungslogin').keyup (handleTagungslogin);
	
//Initialisiert Flowplayer, falls ein #player Element vorhanden ist.
if ($('#player').length > 0) {
    flowplayer("player", {
		src: "typo3conf/ext/nl_tisgastgeberportal/js/flowplayer-3.2.5.swf",
		wmode:'transparent'
	}, {
        clip: {
            autoPlay: false,
            autoBuffering: true
        }
    });
}
	
// Initialize Galleria
$('#galleria').galleria();

//Tooltips sofort ausblenden, wenn man mit der Maus drüberfährt.
$('body > div.tooltip,body > div.tooltip_xxl').live('hover',function(){
    $(this).hide();
});

//Wird in der Detailansicht verwendet um eine andere Objektvorlage auszuwählen.	
$('#select_objektvorlage_auswahl').live("change",function(event){
	event.preventDefault();
	var selectedOption = $(this).find('option:selected');
	var link = $(selectedOption).data("link");
	document.location = link;
	return;
});
	
var filterUtils = {};
    
var u = {
    filter: {ort: {}, unterkunft: {}, ausstattung: {}},
	filtered:{},
    
    init: function(){
        $('table.nl_tisgastgeberportal_liste > tbody > tr').each(function(){
            u.setOrt($(this));
            u.setUnterkunft($(this));
            u.setAusstattung($(this));
        });
        //zuerst wird die liste einmal gefilteret		
		u.onFilterChange();
		//jetzt wird werden noch die event listener gesetzt, damit auch bei veraendern der filter nochmal gefiltert wird
        $('.searchfilter_unterkunftart :checkbox, .searchfilter_ausstattung :checkbox, #ort').live('change', u.onFilterChange);
    },
    
    onFilterChange: function(){
        var unterkunfte = new Array();
        var ausstattunge = new Array();

        var f_orte = new Array();
        var f_unterkunfte = new Array();
        var f_ausstattunge = new Array();
        
        unterkunfte = u.getUnterkunfteByKeys($('.searchfilter_unterkunftart :checked'));
        
	    f_orte = u.getOrteByKeys([$('#ort').val()]);
        
        //Unterkünfte nur beachten, wenn Orte gefunden wurden
        f_unterkunfte = u.filterUnterkunfte(unterkunfte,f_orte);
        
        //Unterkünfte zu Orten nur Filtern
        ausstattunge = u.getAusstattungeByOrt(f_unterkunfte,f_orte);
        
        //Ausstattung nur Filtern, wenn 
        f_ausstattunge = u.filterAustattunge(f_unterkunfte, ausstattunge);

        
		u.filtered = f_ausstattunge;
		u.showFiltered(f_ausstattunge);
		reorderList();
    },
	
	showFiltered: function(filter){
		$(u.filter.ort[0]).hide();
		if ($(filter).length == 0) {
			if ($('table.nl_tisgastgeberportal_liste > tbody > tr').length > 0) {
				$('#emptyList').show();
			}
		}
		else {
			$('#emptyList').hide();
		}
	    $(filter).show();
	},
	
    getUnterkunfteByKeys: function(keys){
        var unterkunfte = new Array();
        keys.each(function(k,key){
            var f = $(key).parents('.checkboxContainer').find('label').text();
			var funterkunfte = u.filter.unterkunft[f] || new Array();
            unterkunfte = $.merge(unterkunfte, funterkunfte);
        });
        unterkunfte = $.unique(unterkunfte);
        return unterkunfte;
    },
	
    getOrteByKeys: function(keys){
        var orte = new Array();
        $(keys).each(function(k,key){
			var forte = u.filter.ort[key] || new Array();
            orte = $.merge(orte, forte);                
        });
        return orte;
    },
	
    filterAustattunge: function(f_unterkunfte,ausstattunge){
		if($('.searchfilter_ausstattung :checked').length==0){
			return f_unterkunfte;
		}
        var f_ausstattung = new Array();
        $(f_unterkunfte).each(function(k,f_unterkunft){
            var push = true;
            $(ausstattunge).each(function(k,ausstattung){
                if($.inArray(f_unterkunft, ausstattung)=="-1"){
                    push = false;
                }
            });
            if(push){
                f_ausstattung.push(f_unterkunft);
            }
        }); 
        return f_ausstattung;
    },
	
    filterUnterkunfte: function(unterkunfte,orte){
		if(unterkunfte.length==0){
			return orte;
		};
        var funterkunfte = new Array();
        $(unterkunfte).each(function(k,unterkunft){
            if($.inArray(unterkunft, orte)!="-1"){
                funterkunfte.push(unterkunft);
            };
        });
        return funterkunfte;
    },
	
    getAusstattungeByOrt: function(unterkunfte,orte){
	   var ausstattunge = new Array();
        if(unterkunfte.length == 0)
            unterkunfte = orte;
        $('.searchfilter_ausstattung :checked').each(function(){
            var f = $(this).parents('.checkboxContainer').find('img').attr('src');
			if (u.filter.ausstattung[f]) {
				ausstattunge.push(u.filter.ausstattung[f]);
			} else {
			    //falls element nicht gefunden wird hier ein leeres ergebnis zurueckliefern;
				ausstattunge.push([]);
			}
        });
        return ausstattunge;
    },
    
    setOrt: function(el){
        var ref = el.find('.Fort').attr('ref');
        u.setValue(u.filter.ort, el, ref);
		u.setValue(u.filter.ort, el, 0);
    },
    
    setUnterkunft: function(el){
        var ref = el.find('.unterkunftart').text();
        var refs = ref.split(",");
        $(refs).each(function(k,v){
            if(v){
                v = $.trim(v);
                u.setValue(u.filter.unterkunft, el, v);
            }
        })
    },
    
    setAusstattung: function(el){
        el.find('img.piktogramm').each(function(){
            var ref = $(this).attr('src');
            u.setValue(u.filter.ausstattung, el, ref);
        });
    },
    
    setValue: function(filter, el, ref){
        var n = filter[ref] || [];
        n.push(el[0]);
        filter[ref] = n;            
    }
	
}
$.extend(filterUtils, u);

var sf = $('#sorting_container select.sortfield'); //sortfield
var sd = $('#sorting_container select.sorting'); //sortdirection
var sortingUtils = {};
var tbody = $('table.nl_tisgastgeberportal_liste > tbody');
var s = {
	
	init : function(){
		//einmal beim initialisieren aufrufen
		s.sortFilteredFields();
		//Handler anhängen
		var handler = s.sortFilteredFields;
		sf.live("change",handler);
		sd.live("change",handler);
	},
	
	sortFilteredFields : function(){
		var field = s.getSortingField();
		var filtered = s.getFiltered();
		switch (field) {
			case 'hotelname':
                var sorthandler = s.sortHotelname;
			break;
			case 'preis':
                var sorthandler = s.sortPreise;
			break;
			case 'ort':
                var sorthandler = s.sortOrt;
			break;
			default:
				var sorthandler = s.sortHotelname;
				break;
		}
		filtered.sort(sorthandler);
		s.showSorted(filtered);
	},
	
    standardNumberFilter : function(compA,compB){
		compA = parseInt(compA);
		compB = parseInt(compB);
        var dir = s.getSortingDirection();
        switch(dir){
            case 'desc':
              var ret = ((compA > compB) ? -1 : (compA < compB) ? 1 : 0);
            break;
            default:
              var ret = ((compA < compB) ? -1 : (compA > compB) ? 1 : 0);
            break;
        };
        return ret;
	},
	
	standardTextFilter : function(compA,compB){
		var compA = compA.toUpperCase();
        var compB = compB.toUpperCase();
		var dir = s.getSortingDirection();
        switch(dir){
            case 'desc':
              var ret = ((compA > compB) ? -1 : (compA < compB) ? 1 : 0);
            break;
            default:
              var ret = ((compA < compB) ? -1 : (compA > compB) ? 1 : 0);
            break;
        };
        return ret;
	},
	
	sortOrt : function(a,b){
		var compA = $(a).find('.hotelortplz .Fort').text().toUpperCase();
        var compB = $(b).find('.hotelortplz .Fort').text().toUpperCase();
        var ret = s.standardTextFilter(compA,compB);
        return ret;
	},
	
	sortHotelname: function(a, b){
		var compA = $(a).find('.hotelname .hotellink').text().toUpperCase();
		var compB = $(b).find('.hotelname .hotellink').text().toUpperCase();
		var ret = s.standardTextFilter(compA,compB);
		return ret;
	},
	
	sortPreise: function(a, b){
		var compA = $(a).find('.hoteloptions .cheapest_preis').text().toUpperCase();
        var compB = $(b).find('.hoteloptions .cheapest_preis').text().toUpperCase();
        var ret = s.standardNumberFilter(compA,compB);
        return ret;
	},
	
	showSorted:function(sorted){
		$(sorted).each(function(k,item){
            tbody.append(item);
		});
		reorderList();
	},
	
	getFiltered : function(){
		var filter = $('table.nl_tisgastgeberportal_liste > tbody > tr:visible').get();
		return filter;
	},
	
	getSortingField : function(){
	   var field = sf.val();
	   return field;	
	},
	
    getSortingDirection : function(){
		var dir = sd.val();
		return dir;
	}
}
$.extend(sortingUtils, s);

//Filter INITIALISIEREN 
filterUtils.init(); 
sortingUtils.init(); 

//limitiert Textareas auf den wert maxlength
function textLimit(event){
	 var field = $(this);
     var maxlimit = field.attr('maxlength');
     var length = field.val().length;
     if (length > maxlimit)
         field.val(field.val().substring(0, maxlimit)); //verhindert das mehr text als maxlength eingegeben werden kann
         field.scrollTop(field[0].scrollHeight);
}

//Datepicker Optionen vorbereiten
function getDatepickerOptions(field){
    var datepickerOptions = {};
    //Standardoptionen
    datepickerOptions = {
        showOn: "button",
        buttonImage: "typo3conf/ext/nl_tisgastgeberportal/css/images/calendar.png",
        buttonImageOnly: true,
        dateFormat: 'dd.mm.yy',
        buttonText: 'Zeitraum auswählen',
        monthNames: ['Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
        dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
        dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
        showOn: 'both'
    };
    switch(field){
        case 'von':
            datepickerOptions['minDate']=0;
            datepickerOptions['onSelect'] = function(dateText, inst){
                if(inst.id=='datepickerVon'){
                    var splitDate = dateText.split(".");
                    date = new Date(splitDate[2],(splitDate[1]-1),splitDate[0]);
                    newdate = date;
                    newdate.setDate(date.getDate()+1);
                    newDateText = newdate.getDate()+'.'+(newdate.getMonth()+1)+'.'+newdate.getFullYear();
                    $( "#datepickerBis" ).datepicker("option","minDate",newDateText);
                    $( "#datepickerBis" ).datepicker("refresh");
                }
            };
            
        break;
        case 'bis':
            datepickerOptions['minDate']=1;
        break;
    };
    return datepickerOptions;
};

//In der Listenansicht werden die Tabellenzeilen immer mit den richtigen Farben angezeigt.
function reorderList(){
  var activeTrs = $('table.nl_tisgastgeberportal_liste > tbody > tr:visible');
  var count = 0;
    $(activeTrs).each(function(key,item){
        $(item).removeClass('row_0 row_1');
        newclass = 'row_'+(count%2);
        $(item).addClass(newclass);
        count++;
    });        
}

//Öffnet das Iframe für Buchungen / Reservierungen
function handleBuchung(event){
    event.preventDefault();
    var $this = $(this);
    var horizontalPadding = 0;
    var verticalPadding = 0;
    var form = $(this).closest('form');
    var formdata = form.serialize();
    var url = $(form).attr('action')+'?'+formdata;
    var iframe = $('<iframe id="bookingwindow" frameborder="0" border="0" src="' + url + '" />');
    iframe.dialog({
        title: ($this.attr('title')) ? $this.attr('title') : 'Tourist Information Schweinfurt 360°',
        autoOpen: true,
        width: 900,
        height: 550,
        modal: true,
        draggable: false,
        resizable: false,
        autoResize: true,
        overlay: {
            opacity: 0.5,
            background: "white"
        },
		//dialogClass:'bookingdialog',
		close:function(){
			$(this).dialog("destroy");
			$('#bookingwindow').remove();
		}
    }).width(900 - horizontalPadding).height(550 - verticalPadding);
}

$('.ui-widget-overlay').live('click', function() {
    console.log("destroy");
    $('#bookingwindow').dialog( "close" );
});

//Behandelt den Tagungslogin.
function handleTagungslogin(event){
    var fields = $('#datepickerVon, #datepickerBis, #anzahl, #ort, #belegungals, #unterkunftart, #kategorie');
    if ($(this).val() == "") {
        $(fields).removeAttr("disabled"); 
    } else {
        $(fields).attr("disabled", true); 
    }
}

$('#suche_form #ort,#suche_form #unterkunftart').multiselect();
$("#suche_form #belegungals,#suche_form #kategorie").multiselect({
	   multiple: false,
	   header: "Auswahloptionen",
	   noneSelectedText: "Auswahloptionen",
	   selectedList: 1
	});
});
