/* 
### General functions & Classes ###
*/

/*+++++++++++++++++++++++++
    display default value in input field
+++++++++++++++++++++++++*/
function dV(obj,val){
    obj.value = (obj.value==val)? '':(obj.value=='')? val:obj.value;
}


/*+++++++++++++++++++++++++++++++++
	themenspezial kw-ansicht wochennavigation handler    
+++++++++++++++++++++++++++++++++++*/

function CalendarWeekNavigation() {
    this.pages = $('.topic-search-calendar-week div.calendar-week');
    this.pageCount = this.pages.size();
    var activePage = $('.topic-search-calendar-week div.calendar-week.active');
    if (activePage.size() == 0 && this.pages.size() > 0) {
        this.activePageIndex = 0;
        $(this.pages.get(0).addClass('active'));
    }
    else {
        this.activePageIndex = this.pages.index(activePage);
    }
    this._setActive(this.activePageIndex);
}

CalendarWeekNavigation.prototype._setInactive = function(index) {
    $(this.pages.get(index)).removeClass('active');
}

CalendarWeekNavigation.prototype._setActive = function(index){
    $(this.pages.get(index)).addClass('active');
    this.activePageIndex = index;
    if (index <= 0) {
        $('.topic-search-calendar-week a.prev').removeClass('active');
    }
    else {
        $('.topic-search-calendar-week a.prev').addClass('active');
    }
    if (index >= this.pageCount-1) {
        $('.topic-search-calendar-week a.next').removeClass('active');
    }
    else {
        $('.topic-search-calendar-week a.next').addClass('active');
    }
}

CalendarWeekNavigation.prototype._toggleActive = function(fromIndex,toIndex) {
    this._setInactive(fromIndex);
    this._setActive(toIndex);
}

CalendarWeekNavigation.prototype.next = function() {
    if (this.hasNext()) {
        this._toggleActive(this.activePageIndex, this.activePageIndex + 1);
    }
}

CalendarWeekNavigation.prototype.previous = function() {
    if (this.hasPrevious()) {
        this._toggleActive(this.activePageIndex, this.activePageIndex - 1);
    }
}

CalendarWeekNavigation.prototype.hasNext = function() {
    return this.activePageIndex < this.pageCount - 1;
}

CalendarWeekNavigation.prototype.hasPrevious = function() {
    return this.activePageIndex > 0;
}

CalendarWeekNavigation._getInstance = function() {
    if (!CalendarWeekNavigation.INSTANCE) {
        CalendarWeekNavigation.INSTANCE = new CalendarWeekNavigation();
    }
    return CalendarWeekNavigation.INSTANCE;
}

CalendarWeekNavigation._setupActiveElements = function() {
    $('.topic-search-calendar-week div.calendar-week:first').addClass('active');
    if ($('.topic-search-calendar-week div.calendar-week').size() > 0) {
        $('.topic-search-calendar-week a.next').addClass('active');
    }
}

CalendarWeekNavigation._createHandler = function(isForPrevious) {
    return function(event) {
        event.preventDefault();
        if (isForPrevious) {
            CalendarWeekNavigation._getInstance().previous();
        }
        else {
            CalendarWeekNavigation._getInstance().next();
        }
		
    }
}

CalendarWeekNavigation.init = function() {
    if ($('.topic-search-calendar-week').size() > 0) {
        CalendarWeekNavigation._setupActiveElements();
        $('.topic-search-calendar-week a.prev').click(CalendarWeekNavigation._createHandler(true));
        $('.topic-search-calendar-week a.next').click(CalendarWeekNavigation._createHandler(false));
    }
}

/*
 * 
 *     $('.anzahl_p_page').change(function() {
        $('#hidden_per_page_field').attr("value", $(this).attr("value"));
        $('#themenfinderForm').submit();
    });

    $('.tsf_month_select').change(function() {
        $('#hidden_month_select').attr("value", $(this).attr("value"));
        $('#themenfinderForm').submit();
    });
 * 
 */

$.fn.clearForm = function() {
    return this.each(function() {
        var type = this.type, tag = this.tagName.toLowerCase();
        if (tag == 'form')
            return $(':input',this).clearForm();
        if (type == 'text' || type == 'password' || tag == 'textarea')
            this.value = '';
        else if (type == 'checkbox' || type == 'radio')
            this.checked = false;
        else if (tag == 'select')
            this.selectedIndex = -1;
    });
};


/*+++++++++++++++++++++++++
    initialisation
+++++++++++++++++++++++++*/
$(window).ready(function(){

    /*+++++++++++++++++++++++++++++++++
    	themenspezial kw-ansicht wochennavigation
	+++++++++++++++++++++++++++++++++++*/

    CalendarWeekNavigation.init();

    $('div.tx-paiqmextensions-pi-themenfinder a.reset').click(function(event){
        event.preventDefault();
        $('#themenfinderForm').clearForm();
        $('#hidden_per_page_field').attr("value", $('.anzahl_p_page').attr("value"));
        $('#hidden_month_select').attr("value",   $('.tsf_month_select').attr("value"));
     });
	
    /*+++++++++++++++++++++++++++++++++
    	themenspezial finder overlay
	+++++++++++++++++++++++++++++++++++*/
	
    /*$('div.cntContentLeft div.tx-paiqmextensions-pi-themenfinder table div.overlay').overlay({
			loadSpeed: 100,
			mask: {
				color: '#000',
				loadSpeed: 50,
				opacity: 0.7
			},
			onClose: function(event) {
				event.preventDefault();
			},
			opacity: 0.5
	}); */	
	
	
    $('div.cntContentLeft div.tx-paiqmextensions-pi-themenfinder table a.overlay-trigger').click(function(event) {
        event.preventDefault();
        if (jQuery.browser.msie) {
            $('select:visible').css("visibility", "hidden").addClass("rememberToMakeMeVisibleAgain");
        }
        var overlayTrigger = $(this);
        var overlay = overlayTrigger.next('.overlay');
		
        $(this).next('.overlay').lightbox_me({
            onClose: function() {
                overlayTrigger.after(overlay);
                if (jQuery.browser.msie) {
                    $('.rememberToMakeMeVisibleAgain').css("visibility", "visible").removeClass("rememberToMakeMeVisibleAgain");
                }
            }
        });
    });
		

    /*+++++++++++++++++++++++++
    	toggling teasers
	+++++++++++++++++++++++++*/
	
    /* alter the toggle function -> no animated width */
    jQuery.fn.extend({
        toggle: function( fn, fn2 ){
            return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
            this._toggle.apply( this, arguments ) :
            fn ?
            this.animate({
                height: "toggle",
                opacity: "toggle"
            }, fn, fn2) :
            this.each(function(){
                jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
            });
        }
    });
	
    /* smooth scrolling links */
    $.localScroll();
	
    toggleClassExpand = function(element){
        element.toggleClass('active');
    }
	
    $('.cntExpand').each(function(){
        $(this).css({
            display:'none'
        })
    });
    $('.cntExpandActive').each(function(){
        $(this).css({
            display:'block'
        })
    });
	
    if(location.href.match(/emactive=c(\d+)/i)){
        var cntExpandObj = $('#c'+RegExp.$1).next();
        cntExpandObj.find('div.cntExpand').toggle(500, toggleClassExpand(cntExpandObj.find('a.toggle')));
    };

    $('a.toggle').click(function(event) {
        event.preventDefault();
        $(this).next().toggle(500, toggleClassExpand($(this)));
    });
	
    /*+++++++++++++++++++++++++
    	print link
	+++++++++++++++++++++++++*/
    $('li.print a').click(function(event) {
        event.preventDefault();
        window.print();
    });
    
    /*+++++++++++++++++++++++++
    	Downloads ga tracking 
	+++++++++++++++++++++++++*/
    $('div.tsrMarginColDownload li a').click(function(event) {
        var href = $(this).attr('href');
        var suffix = (/[.]/.exec(href))? /[^.]+$/.exec(href):undefined;
        var suffixCropped = String((/[\?]/.exec(suffix))? /[^\?]+/.exec(suffix):suffix).toUpperCase();
        _gaq.push(['_trackEvent', 'Downloads - Teaserspalte', suffixCropped, href]);
    });
    
    /*+++++++++++++++++++++++++
    	date picker
	+++++++++++++++++++++++++*/
    var updateSelects = function (selectedDate) {
        var selectedDate = new Date(selectedDate);
        $('#zeitraum_von_d option[value=' + selectedDate.getDate() + ']').attr('selected', 'selected');
        $('#zeitraum_von_m option[value=' + (selectedDate.getMonth()+1) + ']').attr('selected', 'selected');
        $('#zeitraum_von_y option[value=' + (selectedDate.getFullYear()) + ']').attr('selected', 'selected');
    }
    var updateSelects2 = function (selectedDate) {
        var selectedDate = new Date(selectedDate);
        $('#zeitraum_bis_d option[value=' + selectedDate.getDate() + ']').attr('selected', 'selected');
        $('#zeitraum_bis_m option[value=' + (selectedDate.getMonth()+1) + ']').attr('selected', 'selected');
        $('#zeitraum_bis_y option[value=' + (selectedDate.getFullYear()) + ']').attr('selected', 'selected');
    }
	
    $('#date-pick1')
    .datePicker({
        createButton:false,
        startDate:'01/01/2005',
        endDate:'31/12/2015'
    }).bind(
        // when the link is clicked display the date picker
        'click',
        function(){
            updateSelects($(this).dpGetSelected()[0]);
            $(this).dpDisplay();
            return false;
        }).bind(
        // when a date is selected update the SELECTs
        'dateSelected',
        function(e, selectedDate, $td, state)
        {
            updateSelects(selectedDate);
            var d2 = new Date(
                $('#zeitraum_bis_y').val(),
                $('#zeitraum_bis_m').val()-1,
                $('#zeitraum_bis_d').val()
                );
            if(selectedDate>d2){
                updateSelects2(selectedDate);
                $('#date-pick2').dpSetSelected(selectedDate.asString());
            }
            $('#date-pick2').dpSetStartDate(selectedDate.addDays(1).asString());
        }
        ).bind(
        'dpClosed',
        function(e, selected)
        {
            updateSelects(selected[0]);
        }
        );
		
	
    // listen for when the selects are changed and update the picker
    $('#zeitraum_von_d, #zeitraum_von_m, #zeitraum_von_y')
    .bind(
        'change',
        function()
        {
            var d = new Date(
                $('#zeitraum_von_y').val(),
                $('#zeitraum_von_m').val()-1,
                $('#zeitraum_von_d').val()
                );
            var d2 = new Date(
                $('#zeitraum_bis_y').val(),
                $('#zeitraum_bis_m').val()-1,
                $('#zeitraum_bis_d').val()
                );
            if(d>d2){
                updateSelects2(d);
            }
            $('#date-pick2').dpSetStartDate(d.addDays(1).asString());
            $('#date-pick1').dpSetSelected(d.asString());
        }
        );
	
    // default the position of the selects to today
    var today = new Date();
    // updateSelects(today.getTime());
	
    // and update the datePicker to reflect it...
    $('#zeitraum_von_d').trigger('change');
	
	
    $('#date-pick2')
    .datePicker({
        createButton:false,
        startDate:'01/01/2005',
        endDate:'31/12/2015'
    }).bind(
        // when the link is clicked display the date picker
        'click',
        function(){
            updateSelects2($(this).dpGetSelected()[0]);
            $(this).dpDisplay();
            return false;
        }).bind(
        // when a date is selected update the SELECTs
        'dateSelected',
        function(e, selectedDate, $td, state)
        {
            updateSelects2(selectedDate);
            var d = new Date(
                $('#zeitraum_von_y').val(),
                $('#zeitraum_von_m').val()-1,
                $('#zeitraum_von_d').val()
                );
            if(selectedDate<d){
                updateSelects(selectedDate);
                $('#date-pick1').dpSetSelected(selectedDate.asString());
            }
        }
        ).bind(
        'dpClosed',
        function(e, selected)
        {
            updateSelects2(selected[0]);
        }
        );
		

    // listen for when the selects are changed and update the picker
    $('#zeitraum_bis_d, #zeitraum_bis_m, #zeitraum_bis_y')
    .bind(
        'change',
        function()
        {
            var d = new Date(
                $('#zeitraum_bis_y').val(),
                $('#zeitraum_bis_m').val()-1,
                $('#zeitraum_bis_d').val()
                );
            $('#date-pick2').dpSetSelected(d.asString());
        }
        );
	
    // default the position of the selects to today
    var today = new Date();
    // defaults are set in t3 plugin
    // updateSelects2(today.getTime());
	
    // and update the datePicker to reflect it...
    $('#zeitraum_bis_d').trigger('change');
    
    /*+++++++++++++++++++++++++
    	tooltip
	+++++++++++++++++++++++++*/
    // create custom animation algorithm for jQuery called "bouncy"
    $.easing.bouncy = function (x, t, b, c, d) { 
        var s = 1.70158; 
        if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 
        return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 
    } 
 
    // create custom tooltip effect for jQuery Tooltip 
    $.tools.tooltip.addEffect("bouncy", 
        
        // opening animation 
        function(done) { 
            this.getTip().animate({
                top: '+=15'
            }, 500, 'bouncy', done).show();
        }, 
     
        // closing animation 
        function(done) { 
            this.getTip().animate({
                top: '-=15'
            }, 500, 'bouncy', function()  {
                $(this).hide(); 
                done.call(); 
            }); 
        } 
        );


    $('a.tooltip').tooltip({
        tip: '#cntTooltip',
        effect: 'bouncy',
        position: "top right",
        relative:true
    });




    // *****************************************************************************
    // THEMENSPECIALFINDER
    // *****************************************************************************

    /* init selects */
    
    /* create temp selects and store the real values in there */
    $('<select id="tmpObjekte">').appendTo('body');
    $('#objekte option').each(function(){
        $(this).appendTo($('#tmpObjekte'));
    });
    $('#objekte_gattungen option').each(function(){
        $(this).appendTo($('#tmpObjekte'));
    });
    
    
    /* bind event listeners */
    $('.tsf_category_select').change(function(){
        var tmp = ''
        $('.tsf_category_select option:selected').each(function(){
            tmp = tmp+$(this).attr('value')+' ';
        });
        showSubsForCategory(tmp.split(' ').join(','));
    });
    
    $('.tsf_gattungen_select').change(function(){
        var tmp = ''
        $('.tsf_gattungen_select option:selected').each(function(){
            tmp = tmp+$(this).attr('value')+' ';
        });
        showSubsForGattungen(tmp.split(' ').join(','));
    });
    
    
    function showSubsForCategory(cat){
        cats = cat.split(',');
        $('#objekte').empty();
        $.each(cats,function(intIndex,objValue){
            if (objValue!='') $('#tmpObjekte').find('.parent_cat_'+objValue).clone().appendTo('#objekte');
        });
        
        /* sort list contents */
        $('#objekte option').sortElements(function(a, b){
            return $(a).text() > $(b).text() ? 1 : -1;
        });
        /* alternating rows */
        $('#objekte option:even').addClass('even');
        /* deselect options */
        $('#objekte option').attr('selected', '');
    }
    
    function showSubsForGattungen(cat){
        cats = cat.split(',');
        $('#objekte_gattungen').empty();
        $.each(cats,function(intIndex,objValue){
            if (objValue!='') $('#tmpObjekte').find('.gattung_'+objValue).clone().appendTo('#objekte_gattungen');
        });
        
        /* sort list contents */
        $('#objekte_gattungen option').sortElements(function(a, b){
            return $(a).text() > $(b).text() ? 1 : -1;
        });
        /* alternating rows */
        $('#objekte_gattungen option:even').addClass('even');
        /* deselect options */
        $('#objekte_gattungen option').attr('selected', '');
    }
    
    
    // calendar view
    $('.kw_change_link').click(function(event) {
        $('.kw_nav_container').hide();
        $('.kw_content_rows').hide();
        $('#week_page_'+$(this).attr('href')).show();
        $('.week_page_'+$(this).attr('href')).show();
        event.preventDefault();
    });

    $('.kw_nav_container:first').show();
    $('.week_page_'+$('#start_cweek').attr('name')).show();


    
    // Select Box "items per page"
    $('.anzahl_p_page').change(function() {
        $('#hidden_per_page_field').attr("value", $(this).attr("value"));
        $('#themenfinderForm').submit();
    });

    $('.tsf_month_select').change(function() {
        $('#hidden_month_select').attr("value", $(this).attr("value"));
        $('#themenfinderForm').submit();
    });

    // *****************************************************************************
    // THEMENSPECIALFINDER end
    // *****************************************************************************


    // EMAIL SPAM PROTECTION

    // *****************************************************************************
    // AFFINITY
    // *****************************************************************************

    periodSelect = "";
    targetSelect = "";
    
    $(".affinityform #targetSelect").change(function() {
        if(periodSelect != "set") {
            $(".affinityform #periodSelect").attr("disabled", "disabled");
            $.ajax({
                type: "POST",
                url: "./?eID=tx_paiqmextensions_piAffinity",
                data: { "tx_paiqmextensions_piAffinity[selectedTarget]": $(this).val() },
                success: function(response) {
                    $(".affinityform #periodSelect").removeAttr("disabled");
                    $(".affinityform #periodSelect").html(response);
                },
                error: function(response) {
                    $(".affinityform #periodSelect").removeAttr("disabled");
                    $(".affinityform #periodSelect").html(response);
                }
            });
            targetSelect = "set";
        }
    });
    
    $(".affinityform #periodSelect").change(function() {
        if(targetSelect != "set") {
            $(".affinityform #targetSelect").attr("disabled", "disabled");
            $.ajax({
                type: "POST",
                url: "./?eID=tx_paiqmextensions_piAffinity",
                data: { "tx_paiqmextensions_piAffinity[selectedPeriod]": $(this).val() },
                success: function(response) {
                    $(".affinityform #targetSelect").removeAttr("disabled");
                    $(".affinityform #targetSelect").html(response);
                },
                error: function(response) {
                    $(".affinityform #targetSelect").removeAttr("disabled");
                    $(".affinityform #targetSelect").html(response);
                }
            });
            periodSelect = "set";
        }
    });
    
    if($("a.toggleSearch.inactive")) {
        $("a.toggleSearch.inactive").next().hide();
    }
    
    $("a.toggleSearch").click(function() {
        if($(this).next().is(":hidden")) {
            $(this).removeClass("inactive").addClass("active");
            $(this).next().slideDown("fast");
        } else {
            $(this).removeClass("active").addClass("inactive");
            $(this).next().slideUp("fast");
        }
    });
    
    /*if($(".affinityresultCnt").length > 0) {
        $("#affinityFormular").addClass("collapsed");
        $("<a class=\"toggleSearch\" style=\"background: #EDEEEE url(/fileadmin/images/spr_icons.png) no-repeat scroll 716px -52px; display: block;\"></a>").prependTo("#affinityFormular");
        
    }*/

    // *****************************************************************************
    // AFFINITY end
    // *****************************************************************************
    
    
    // *****************************************************************************
    // TKP
    // *****************************************************************************
    
    $(".tkpform #targetSelect").change(function() {
        if(periodSelect != "set") {
            $(".tkpform #periodSelect").attr("disabled", "disabled");
            $.ajax({
                type: "POST",
                url: "./?eID=tx_paiqmextensions_piTKP",
                data: { "tx_paiqmextensions_piTKP[selectedTarget]": $(this).val() },
                success: function(response) {
                    $(".tkpform #periodSelect").removeAttr("disabled");
                    $(".tkpform #periodSelect").html(response);
                },
                error: function(response) {
                    $(".tkpform #periodSelect").removeAttr("disabled");
                    $(".tkpform #periodSelect").html(response);
                }
            });
            targetSelect = "set";
        }
    });
    
    $(".tkpform #periodSelect").change(function() {
        if(targetSelect != "set") {
            $(".tkpform #targetSelect").attr("disabled", "disabled");
            $.ajax({
                type: "POST",
                url: "./?eID=tx_paiqmextensions_piTKP",
                data: { "tx_paiqmextensions_piTKP[selectedPeriod]": $(this).val() },
                success: function(response) {
                    $(".tkpform #targetSelect").removeAttr("disabled");
                    $(".tkpform #targetSelect").html(response);
                },
                error: function(response) {
                    $(".tkpform #targetSelect").removeAttr("disabled");
                    $(".tkpform #targetSelect").html(response);
                }
            });
            periodSelect = "set";
        }
    });

    // *****************************************************************************
    // TKP end
    // *****************************************************************************
});




    // decrypt helper function
    function decryptCharcode(n,start,end,offset)	{
        n = n + offset;
        if (offset > 0 && n > end)	{
            n = start + (n - end - 1);
        } else if (offset < 0 && n < start)	{
            n = end - (start - n - 1);
        }
        return String.fromCharCode(n);
    }
    // decrypt string
    function decryptString(enc,offset)	{
        var dec = "";
        var len = enc.length;
        for(var i=0; i < len; i++)	{
            var n = enc.charCodeAt(i);
            if (n >= 0x2B && n <= 0x3A)	{
                dec += decryptCharcode(n,0x2B,0x3A,offset);	// 0-9 . , - + / :
            } else if (n >= 0x40 && n <= 0x5A)	{
                dec += decryptCharcode(n,0x40,0x5A,offset);	// A-Z @
            } else if (n >= 0x61 && n <= 0x7A)	{
                dec += decryptCharcode(n,0x61,0x7A,offset);	// a-z
            } else {
                dec += enc.charAt(i);
            }
        } 
        return dec;
    }
    // decrypt spam-protected emails
    function linkTo_UnCryptMailto(s) {
        location.href = decryptString(s,-1);
    }
