// Reverse Funktion in jQuery
jQuery.fn.reverse = [].reverse

/**
 * Setzt die Sprache (oder einen anderen Wert) fuer die angegebene Select-Box
 **/
setLanguage = function(id_from, id_to, url, replaceString )
{
    var val=$('#' + id_from).val();
    var load_url=encodeURI(url.replace(replaceString, val));
    $.get(load_url, function(data){
        $('#' + id_to + ' option[value='+ data +']').attr('selected', true);
    });
}

$(document).ready(function(){

    /**
     * Hide alls Elements with class jshide
     * These should be elements (like links or buttons, who helps user without javascript
     */
    $(".jshide, .hiddenContent").hide()

    /**
     * Hide some white Boxes, if JavaScript is activated.
     */
    if(!($.browser.msie && parseInt($.browser.version)<8)) {
        $(".outlineBox .hidden").toggleClass("hidden hiddenJS")
        $(".direction").toggleClass("direction directionJS")
    }
    /**
     * Show all elements with class jsshow
     * These should be elements, which have javascript functions
     */
    $(".jsshow").show()

    $("#toggleOutline").click(function(){
        $("#outline").toggle();
        $("#toggleOutline").toggleClass("outlineHidden");
    })


    if ($.browser.msie) {
        $(".toggleBox .beigeBoxContent .headline").live('click', function(){
            $(this)
                .find('.arrow')
                    .toggleClass('up down')
                .end()
                .siblings()
                /*.slideToggle(250)*/
                /*.animate({height:'toggle'},250)*/
                .toggle();
            return false;
        })
    } else {
        $(".toggleBox .beigeBoxContent .headline").live('click', function(){
            $(this)
                .find('.arrow')
                    .toggleClass('up down')
                .end()
                .siblings()
                .slideToggle(250);
                /*.animate({height:'toggle'},250)*/
                /*.toggle();*/
            return false;
        })
    }

    $(".outlineBox .whiteBoxContent .headline").live('click', function(){
        if(!($.browser.msie && parseInt($.browser.version)<8)) {
            $(this)
                .parents('.whiteBoxContent')
                    .toggleClass('hiddenJS show')
        }
    })

})

$(document).ready(function(){
 /**
     * Show all child-elements with class tooltip by hovering the object with class hover_tooltip
     */
    $(".hover_tooltip").live('mouseenter', function(eventObj){
        tooltip = $("body > #tooltip_elem");
        if(tooltip.size() == 0)
        {
            $("body").append('<div id="tooltip_elem" class="tooltip"></div>');
            tooltip = $("body > #tooltip_elem");
        }
        html = $(this).children(".tooltip").html();
        if(html != null && html.length > 0)
        {
            tooltip.html(html)
            .css({
                'top': eventObj.pageY + 20,
                'left': eventObj.pageX + 20
            })
            .show();
        }
    })
    .live('mouseleave', function()
    {
        $("body #tooltip_elem").hide()
    })
})
$(document).ready(function(){

    /*
     * Ajax Playbutton bei Lectures
     */

    $('.imageBlock a.playbutton')
    .bind('click', function(){
        url = $(this).attr('href');
        dialog = $('#videoplayer_window');
        if(dialog.length == 0)
        {
            width = $(window).width() - 200;
            height = $(window).height() - 200;
            dialog = $('<div id="videoplayer_window" title="Play video"><div>'
                + '<iframe></iframe>'
                + '</div></div>').appendTo('body');
            dialog.dialog({
                autoOpen: false,
                modal: true,
                height: height,
                width: width
            });
        }
        dialog.find('iframe')
        .attr('src', url + '?raw=1');
        dialog.dialog('open');

        return false;
    })

    /*
     * ende Ajax Playbutton bei Lectures
     */
})
$(document).ready(function(){
    $(".autocompleter").each(function(){
        thisObj = $(this);
        thisObj
        .autocomplete(thisObj.attr('href'));
    });
})
var SELECTED_FORM = 0;
var REQUEST_NO = 0;

var load_results = function(obj) {
    SELECTED_FORM = obj;
    window.setTimeout('send_search_request("' + obj.attr("value") + '")',400);
}

var load_more_results = function() {
    window.setTimeout('send_more_results_request("'+SELECTED_FORM.attr("value") + '")', 400);
}

var hide_all_results = function(obj) {
    obj.children(".results").children(".resultsVisible").toggleClass("resultsVisible resultsHidden");
}

var show_gui = function(obj) {
    sd = get_searchdiv();
    sd.children(".switchResult").show();
    sd.children(".moreResults").show();
}

var hide_gui = function(obj) {
    sd = get_searchdiv();
    sd.children(".switchResult").hide();
    sd.children(".moreResults").hide();
}

var show_load_image = function(obj) {
    hide_all_results(obj);
    hide_gui(obj);
    obj.addClass("ajax_load");
    obj.show();
};

var hide_load_image = function(obj) {
    obj.removeClass("ajax_load");
    show_gui();
}

var select_first_entry = function() {
    change_hover($(".resultsVisible .entry:first-child"));
}

var change_hover = function(obj) {
    $("#searchdiv .selected").removeClass("selected");
    obj.addClass("selected");
}

var changeQuicksearch = function(direction, actual_show) {

    if (direction == "prevResults") {
        actual_show.prev().toggleClass("resultsVisible resultsHidden");
    }
    if (direction == "nextResults") {
        actual_show.next().toggleClass("resultsVisible resultsHidden");
    }
    actual_show.toggleClass("resultsVisible resultsHidden");
    select_first_entry();
    refresh_navigation();
    return false;
}

var is_last_request = function() {
    return REQUEST_NO == parseInt($("#searchdiv .results").attr("title"));
}

var refresh_navigation = function(obj) {
    searchdiv = get_searchdiv();
    visibleElement = $("#searchdiv .resultsVisible");

    // show prev results
    if (visibleElement.size() == 0 || visibleElement.prev().size() == 0) {
        get_searchdiv().children(".prevResults").addClass("passive");
    } else {
        get_searchdiv().children(".prevResults").removeClass("passive");
    }

    // show next results
    if ( is_last_request() & (visibleElement.size() == 0 || visibleElement.next().size() == 0)) {

        get_searchdiv().children(".nextResults").addClass("passive");
    } else {
        get_searchdiv().children(".nextResults").removeClass("passive");
    }
}

var nextResults = function() {
    actual_show = $("#searchdiv .resultsVisible");
    if (actual_show.next().size() != 0){
        changeQuicksearch("nextResults", actual_show);
    } else if (!is_last_request()) {
        load_more_results();
    }

}

var prevResults = function() {
    actual_show = $("#searchdiv .resultsVisible");
    if (actual_show.prev().size() != 0) {
        changeQuicksearch("prevResults", actual_show);
    }

}

var create_hidden_searchdiv = function() {
    $("body").append('<div id="searchdiv" class="ajax_search"></div>');
    return $("body > #searchdiv").hide();
}

var get_searchdiv = function() {
    searchdiv = $("body > #searchdiv");
    if(searchdiv.size() == 0){
        searchdiv = create_hidden_searchdiv();
    }
    return searchdiv;
}

var positionate = function(obj) {
    var offset = $(".quicksearch").offset();
    if ($(".quicksearch").parents(".attachInputField").size() != 0) {
        $("body > #searchdiv").css({
            'top': offset.top + 21,
            'left': offset.left
        })
    } else {
        $("body > #searchdiv").css({
            'top': offset.top + 24,
            'left': offset.left - 82
        })
    }
}

var follow_link = function(obj) {
    if (obj.attr("href")) {
        window.location.href = obj.attr("href")
    }
}

var check_query_length = function(obj) {
    /* Einbinden der Box */
    query = obj.attr("value")
    searchdiv = get_searchdiv();
    positionate(searchdiv);
    if (query.length <= 2) {
        searchdiv.hide();
    } else {
        searchdiv.show();
    }
    return false;
}

var quicksearch_keydown = function(key, obj) {
    if (key.which == 13 && $("#searchdiv .selected").size() > 0) {
        return false;
    }
    /* Bildlauf hoch; Pfeiltaste links */
    else if ((key.which == 33) || (key.which == 37)){
        prevResults();
        return false;
    }

    /* Bildlauf unten; Pfeiltaste rechts */
    else if ((key.which == 34) || (key.which == 39)){
        nextResults();
        return false;
    }
}

var select_upper = function(key) {
    sel = get_searchdiv().children(".results").children(".resultsVisible").children(".selected");
    prev = sel.prev();
    if (prev.size() != 0) {
        sel.removeClass("selected");
        prev.addClass("selected");
    } else {
        prevResults();
    }
}

var select_lower = function(key) {
    sel = get_searchdiv().children(".results").children(".resultsVisible").children(".selected");
    if(sel.size() == 0)
    {
        select_first_entry();
    }
    else
    {
        next = sel.next();
        if (next.size() != 0) {
            sel.removeClass("selected");
            next.addClass("selected");
        } else {
            nextResults();
        }
    }

}

var add_to_query = function(key, obj){
    /* Change moreResults-Message */
    $("#searchdiv .moreResults span").html(obj.attr("value"));

    /* Lade nur bei Aenderung und Mindestlaenge 3. */
    if (obj.attr("value").length > 2) {
        load_results(obj);
    } else {
        get_searchdiv().hide();
    }
}

var quicksearch_keyup = function(key, obj) {
    searchdiv = get_searchdiv();
    if (key.which == 13) {
        return false;
    }

    /* ESCape-Taste */
    else if (key.which == 27){
        searchdiv.hide()
    }

    /* Pfeiltaste nach oben */
    else if (key.which == 38){
        select_upper()
    }

    /* Pfeiltaste nach unten */
    else if (key.which == 40){
        select_lower()
    }
    /* Abfangen von rechts, links, bild hoch, bild runter */
    else if ((key.which == 33) || (key.which == 34) || (key.which == 37 || (key.which == 39))){

    }
    /* andere Taste */
    else {
        add_to_query(key, obj)
    }
}

var window_height = function() {
    if (window.innerHeight) {
        return window.innerHeight;
    } else if (document.body && document.body.offsetHeight) {
        return document.body.offsetHeight;
    } else {
        return 0;
    }
}

var shorten_titles = function() {
    $(".results .entry .title")
    .each(function(){
        $(this).textTruncate(170,"...");
    });
}

var post_load_functions = function() {
    searchdiv = get_searchdiv();
    hide_load_image(searchdiv);

    classToAdd = SELECTED_FORM.attr("id");
    $('#searchdiv').children(".entry").each(function(){
        $(this).addClass(classToAdd);
    })

    select_first_entry();
    shorten_titles();
    refresh_navigation(null);
}

$(document).ready(function(){
    $("#topNavSearch .quicksearch").keyup(function(key){
        /* Wenn Entertaste gedrueckt wird */
        if (key.which == 13) {
            if($("#searchdiv .selected").size() > 0)
            {
                window.location.href = $("#searchdiv .selected").attr("href");
            }
        }
    })

    send_search_request = function(query){
        if(SELECTED_FORM.attr("value") == query) {
            searchdiv = get_searchdiv();
            myself = SELECTED_FORM;

            /* Stelle die Anfrage */
            size = parseInt(($(window).height() - 200) / 50);
            show_load_image(searchdiv);
            $.get(myself.attr("title")+'?query='+query+'&size='+size, function(data) {

                $('#searchdiv').html(data);
                REQUEST_NO = 1;

                post_load_functions();
            });

        }
    }

    send_more_results_request = function(query) {
        searchdiv = get_searchdiv();
        myself = SELECTED_FORM;
        REQUEST_NO = REQUEST_NO + 1;
        show_load_image(searchdiv);
        $.get(myself.attr("title") + REQUEST_NO + '/?query='+query+'&size='+size, function(data) {
            hide_all_results(searchdiv);
            $('#searchdiv .results').append($(data));
            post_load_functions();
        });
    }

    $("body > #searchdiv .resultsVisible .entry").live('hover', function(){
        change_hover($(this))
    })
    $("body > #searchdiv .follow").live("click", function(){
        follow_link($(this))
    })
    $("body > #searchdiv .prevResults").live('click',function() {
        prevResults();
        return false
    })
    $("body > #searchdiv .nextResults").live('click',function() {
        nextResults();
        return false
    });
    $("body").live("click", function(){
        get_searchdiv().hide();
    });

    $(".quicksearch").bind('focusin',function(){
        check_query_length($(this));
    })
    .bind('click', function(){
        return false
    })
    .keydown(function(key){
        quicksearch_keydown(key, $(this))
    })
    .keyup(function(key){
        quicksearch_keyup(key, $(this))
    });

})

function jumpToSlide(slideID)
{
    console.log('slideId');
    console.log(slideID);
    console.log($(".slideInfo").children()[slideID]);
    seekvideo($(".slideInfo").children()[slideID].innerHTML);
//    return false;
}

$(function()
{
    $(".slideBox").scrollable({mousewheel: true}).navigator();

    $("a.slideGallery").fancybox({
        'titleShow'     : false,
        'transitionIn'	: 'elastic',
        'transitionOut'	: 'elastic',
        'easingIn'      : 'easeOutBack',
        'easingOut'     : 'easeInBack'
    });
});

function switch_tabs(tab_id){
    var list = document.getElementsByTagName('li');
    var contents = document.getElementsByTagName('div');

    for (var i = 0, j = list.length; i < j; i++) {
        if (list[i].id.toString().indexOf('tab') != -1) {
            if(list[i].id == tab_id)
            {
                list[i].className="active";

            }else{
                list[i].className="";
            }
        }
    }

    var lindex = tab_id.toString().lastIndexOf("_");
    var ident = tab_id.toString().substring(lindex+1, tab_id.toString().length);

    for (var i = 0, j = contents.length; i < j; i++) {
        if (contents[i].id.toString().indexOf('tab') != -1) {
            var index = contents[i].id.toString().lastIndexOf("_");
            var ident_content = contents[i].id.toString().substring(index+1, contents[i].id.toString().length);
            if(ident_content == ident)
            {
                contents[i].style.display="block";

            }else{
                contents[i].style.display="none";
            }
        }
    }


}
