jQuery(document).ready(function($) {

    // Contact form with changeable fields
    if($('#contact-js').length)
    {
        $("#contact-js").validationEngine();
        var choosenVal = $('#contact-js .please-choose').val();
        changeFormVisibleFields($('#contact-js'), choosenVal);
        
        $('#contact-js .please-choose').change(function() {
            var choosenVal = $('#contact-js .please-choose').val();
            changeFormVisibleFields($('#contact-js'), choosenVal);
        });
        
        $("#contact-js #date").datepicker({ dateFormat: 'dd.mm.yy' });

    }

    // move button to the right place for correct floating
    if($('#button').length)
    {
        var button = $('#button').detach();
        $('#content-text').prepend(button);
        $('#button').show();
    }

    // tell ie6 there's an element and that he please
    if($.browser.msie  && (jQuery.browser.version.substr(0,3)=="6.0")){
        $('#header').css('display', 'block');
    }

    if($.browser.msie && $.browser.version < 7)
    {
        $('#button img').attr('src', '/fileadmin/layouts/main/public/gfx/e-mail-button_einzeln_neu.gif');
    }
    
    activateFancybox($('a.lightbox'));
    
    $('#slideshow').cycle({ slideExpr: 'img', timeout: 6500, speed: 2000 });

    // transform Labels to placeholder values
    formLabelToValue($('#sidebar form .mailform li'));
    
    // empty input fields on click
    formEmptyInputOnClick($('#sidebar input.text'));

    $('#sidebar form').bind("submit", function(e) {
        var errors = formValidation($(this));
        if(errors)
        {
            e.preventDefault();
            return false;
        }
    });
    
    /*  FOOTER CALLBACK FORM  start */
    
    // transform Labels to placeholder values
    formLabelToValue($('#callback-footer form .mailform li'));
    
    // empty callback input fields on click and refill, if no input given
    formEmptyInputOnClick($('#callback-footer form .mailform li input.text'));
    
    $('#callback-footer form').bind("submit", function(e) {
        var errors = formValidation($(this));
        if(errors)
        {
            e.preventDefault();
            return false;
        }
    });
    
    /*  FOOTER CALLBACK FORM  end */
    
    /* DOCK NAVIGATION start */
    
    if($('#navi-icondock').length > 0)
    {
        $('#navi-icondock').jqDock({
            duration: '100',
            size: '63',
            //distance: '60',
            labels: true,
            align: 'bottom',
            source: function(i){ return this.src.replace(/_inaktiv/,"_aktiv"); }
        });
        
        $('#navi-icondock').css({ 'left':'30px' });
        $('#navi-icondock a>img').bind('click', function(){
            var Href = $(this).parent().get(0).href;
            //I don't have any hrefs that are not straightforward links, but for the sake of completeness,
            //one could take this as being indicative of the likelihood that there is no click handler...
            if(Href && !/^javascript:/i.test(Href)){ //change location...
              location.href = Href;
            }else{ //trigger a click handler?...
              $(this).parent().trigger('click');
            }
            return false;
          });
        
        setTimeout('fixHeightIconDock()', 400);
        //fixHeightIconDock();
    }
    
    /* DOCK NAVIGATION end */
    
    
    $('#MyFlowGallery').append('<div class="btn-right"></div>');
    $('#MyFlowGallery').append('<a class="thickbox" rel="imageflow" id="MyFlowGallery-clicklink" href="#"></a>');
    $('#MyFlowGallery').prepend('<div class="btn-left"></div>');
    $('#MyFlowGallery .btn-right').bind("click", function() { $('#MyFlowGallery_next').trigger('click') });
    $('#MyFlowGallery .btn-left').bind("click", function() { $('#MyFlowGallery_previous').trigger('click') });
    
    // Immer Bildunterschrift verwenden bei Fancybox
    // Wenn keine Bildunterschrift gesetzt, title-Tag leer lassen
    $('#content-wrap a.lightbox').each(function() {
        $(this).attr('title', '');
        $(this).find('img').attr('alt', '');
        var caption = $(this).closest('dt').next('.csc-textpic-caption').find('span').text();
        if (caption.length < 1)
        {
            // für tt_news
            var caption = $(this).next('.csc-textpic-caption').text();
        }
        if (caption.length > 0)
        {
            $(this).attr('title', caption);
        }

    });
    
    var lastElemColSide = $('#col-side .inner div:last').prev();
    if(lastElemColSide.hasClass('csc-textpic')) {
        lastElemColSide.css( { 'margin-bottom' : '0.1em' } );
    }

    // tt_news pagebrowser anpassen
    var lastElem = jQuery('.browseLinksWrap a, .browseLinksWrap span').last();
    var firstElem = jQuery('.browseLinksWrap a, .browseLinksWrap span').first();
    if(lastElem.text() == ">")
    {
        lastElem.remove();
    }
    if(firstElem.text() == "<")
    {
        firstElem.remove();
    }
    
    naviStretch('#navi-main', 0);
    
    if($('#navi-main').length > 0)
    {
        $('#navi-main').superfish();
    }


    /* Sidebar Daten nachladen, wenn Docknavi-Mouseover */

    var originalSidebarData = $("#col-side .inner").html();
    
    function handleAjaxData(contentText)
    {
        $("#col-side .inner").html(contentText);
    }
    
   
    $.dockCache = {};
    $('#navi-icondock a:first-child').hover(
        function ()
        {
            var path = $(this).attr('href');
            if (!$.dockCache[path])
            {
                $.ajax({
                    type: 'GET',
                    async: true,
                    url: path + '?&type=64',
                    data: 'getid=true',
                    success: function(data)
                    {
                        data = $(data).find('#ajax-loaded').html();
                        $.dockCache[path] = data;
                        handleAjaxData(data);
                        Cufon.replace('#col-side h1');
                    }
                });
            }
            else
            {
                handleAjaxData($.dockCache[path]);
               
            }
            activateFancybox($('#col-side .inner a.lightbox'));
            Cufon.replace('#col-side h1');
        },
        function() {
        }
    );
    $('#navi-icondock').mouseleave(
        function() {
            $("#col-side .inner").html(originalSidebarData);
            activateFancybox($('#col-side .inner a.lightbox'));
            Cufon.replace('#col-side h1');
        }
    );

    
    // Sidebar fixieren
    $(window).bind("scroll", function() {
        if($('#content').height() > 749)
        {
            var scroll = $('#content').height() - $(window).scrollTop();
            var maxScroll = 455; // Wie weit soll der Container mitscrollen?
            if($(window).scrollTop() > 180 )
            {
                if(scroll > maxScroll)
                {
                    $('#col-side').css ({
                        'top' :  '0px',
                        'position' : 'fixed'
                    });
                }
                else {
                    $('#col-side').css ({
                        'bottom' :  '54px',
                        'top' : 'auto',
                        'position' : 'absolute'
                    });
                }
            }
            else {
                $('#col-side').css ({
                    'position' : 'relative'
                });
            }
        }
    });
    
});

function activateFancybox(selector) {
    selector.fancybox(
    {
         'zoomSpeedIn': 300,
         'zoomSpeedOut': 300,
         'overlayShow': true
    }
    );
}

function setLinkForFancybox(linkTarget, linkTitle) {
    var attributes = {
        href: linkTarget
    }
    if (linkTitle)
    {
        attributes.title = linkTitle;
    }
    $('#MyFlowGallery-clicklink').attr(attributes);
}

function formEmptyInputOnClick(elem) {
    // empty callback input fields on click
    // refill with default value if empty
    // trigger validation for that element
    elem.focus(function () {
        if(formIsLabelEqualToValue($(this))) {
            $(this).attr('value','');
        }
    }).blur(function() {
        if($(this).attr('value') == '')
        {
            var labelText = $(this).prev('label').text();
            $(this).attr('value', labelText + ' ...');
            
        }
        if(!formElementValidation($(this)))
        {
            formSetElementError($(this));
        }
    });
}

function formElementValidation(elem) {
    // FIXME add validation for other fields than text
    elem.next('.form-error-message').hide();
    if(formIsLabelEqualToValue(elem) || elem.length == 0) {
        formSetElementError(elem);
        return false;
    }
    return true;
}

function formValidation(form) {
    var hasErrors = false;

    form.find('input.required').each(function() {
        if(!formElementValidation($(this)))
        {
            hasErrors = true;
        }
    });
    
    return hasErrors;
}

function formSetElementError(elem) {
    elem.addClass('error');
    elem.next('.form-error-message').show();
}

function formIsLabelEqualToValue(elem) {
    // FIXME return true, if labels are shown normally and not hidden by javascript
    var inputText = elem.attr('value');
    var labelText = elem.prev('label').text() + ' ...'; // FIXME make suffix configurable
    
    if((inputText == labelText)) {
        return true;
    }
    
    return false;
}

function formLabelToValue(elem) {
    elem.each(function(){

        var labelText = $(this).find('label').text();
        labelText = labelText + ' ...'
        $(this).find('label').css({
            position: 'absolute',
            left: '-9999px'
        });
        $(this).find('label').next('input').attr('value',labelText);
    });
    
}

function fixHeightIconDock() {
    $('.jqDock').css( { 'height':'auto'} );
}


/*
    Main Navigation
*/

function naviStretch( naviclass, paddingOuter ) {
    paddingOuter = paddingOuter || 0;
    var a = getNaviChildren(naviclass);
    var naviWidthIs = getNaviWidth(a);
    var naviWidthShould = $(naviclass).outerWidth();
 
    if (!(paddingOuter >= 0))
    {
        var addWidth = (Math.ceil((naviWidthShould - naviWidthIs) / a.length));
        for (var i = 0; i < a.length; i++) {
            $(a[i]['element'])
            .width
            (
                (a[i]['width'] + addWidth) + 'px'
            )
            .css
            ({
                'text-align' : 'center'
            });
        }
    }
    else
    {
        var addWidth = Math.ceil( (naviWidthShould - naviWidthIs - (2 * paddingOuter )) / (a.length - 1) );
        for (var i = 0; i < a.length; i++) {
            if (i == 0)
            {
                addWidthTemp = Math.ceil((addWidth / 2) + paddingOuter);
                $(a[i]['element']).css
                ({
                    'padding-left' : paddingOuter + 'px',
                    'text-align' : 'left'
                });
            }
            else if (i == a.length-1)
            {
                addWidthTemp = Math.ceil((addWidth / 2) + paddingOuter);
                $(a[i]['element']).css
                ({
                    'padding-right' : paddingOuter + 'px',
                    'text-align' : 'right'
                });
            }
            else
            {
                addWidthTemp = addWidth;
                $(a[i]['element']).css
                ({
                    'text-align' : 'center'
                });
            }
            $(a[i]['element']).width((a[i]['width'] + addWidthTemp - paddingOuter) + 'px');
        }
    }
 
    //calculate new width for last element
    var a = getNaviChildren(naviclass);
    var addLastWidth = naviWidthShould - getNaviWidth(a) -1;
 
    $(a[a.length - 1]['element']).width( a[a.length - 1]['width'] + addLastWidth - paddingOuter);
    
    $('.navi-sub').each
    (
        function()
        {
            
            var graphicWidth = jQuery(this).parent().find('img').width();
            var liElemWidth =  jQuery(this).parent().width();
            var paddingLeft = (liElemWidth -graphicWidth)/2;
            

            if(!$(this).parents('ul > li').hasClass('first') && !$(this).parents('ul > li').hasClass('last')) {
                $(this).css( { 'margin-left' : paddingLeft} );
            }
            if($(this).parents('ul > li').hasClass('last')) {
                $(this).css( { 'margin-left' : paddingLeft*2 } );
                if($.browser.msie)
                    $(this).css( { 'margin-left' : paddingLeft*2 } );
            }
            
            max = 0;
           
            $(this).find('li > a').each
            (
                function()
                {
                    max = ($(this).width() > max) ? $(this).width() : max;
                }
            );
            
            $(this).find('li > a').each
            (
                function()
                {
                    $(this).width(max + 'px');
                }
            )
        }
    );
 
 
}
 
function getNaviChildren(naviclass) {
    var a = [];
    $(naviclass).children().children('a').each (
        function() {
            a.push({
                'element' : this,
                'class'   : $(this).attr('class'),
                'width'   : $(this).outerWidth()
            });
        }
    );
    return a;
}
 
function getNaviWidth(a) {
    var navitopWidth = 0;
    for (var i = 0; i < a.length; i++) {
        navitopWidth += a[i]['width'];
    }
    return navitopWidth;
}

function changeFormVisibleFields(theForm, choosenVal) {
    var choosenVal = choosenVal.toLowerCase();
    
    var validateClass = 'validate[required]';
    
    $('.formError').remove();
    theForm.find('li input, li textarea').removeClass(validateClass);
    
    theForm.find('li.name input').addClass(validateClass);
    theForm.find('li.email input').addClass(validateClass);
    
    if(choosenVal == 'callback')
    {
        theForm.find('li.tel input').addClass(validateClass);
        theForm.find('li.nachricht #nachricht').addClass(validateClass);
    }
    if(choosenVal == 'meeting')
    {
        theForm.find('li.tel input').addClass(validateClass);
        theForm.find('li.date input').addClass(validateClass);
    }
    if(choosenVal == 'email')
    {
        theForm.find('li.email input').addClass(validateClass);
    }    
    if(choosenVal == 'seminar')
    {
        theForm.find('li.subject input').addClass(validateClass);
        theForm.find('li.strasse input').addClass(validateClass);
        theForm.find('li.plz input').addClass(validateClass);
        theForm.find('li.ort input').addClass(validateClass);
    }
    $("#contact-js").validationEngine();
    
    var visibleFields = 'type-' + choosenVal;
    $(theForm).find('.mailform li').hide();
    $(theForm).find('.mailform li').each(function() {
        if($(this).hasClass(visibleFields)) {
            $(this).show();
        }
    });
    $(theForm).find('.mailform li.type-all').show();
    
    
    
}

