/*
	Site Script La Vie Manie
	Copyright © 2010 Jurek Raben / Virtual Creations
	All rights reserved.
*/

var pageTracker;
var trackStartTime;
var scrollToXTimeout;
var topperTimeout;
var setBackWidthTimeout;
var descTimeout;
var sumWidthTimeout;
var sumWidth = 0;
var sumWidthSlide = 0;
var animDuration = 1000;
var numImgsLoaded = 0;
var imgStartNum;
var useResize = true;

var contentSizes = {
    1: {
        width:266,
        left:32,
        right:64
    },
    2: {
        width:100,
        left:22,
        right:22
    },
    3: {
        width:220,
        left:32,
        right:32
    },
    4: {
        width:80,
        left:22,
        right:22
    },
    5: {
        width:220,
        left:32,
        right:32
    },
    9: {
        width:300,
        left:0,
        right:0
    }
};


// preload images
jQuery.fn.onImagesLoaded = function(_cb) { 
    return this.each(function() {
        var $imgs = $(this),_cont = $(this).children().first(),i = 0,
        _done=function() {
            if( typeof _cb === 'function' ) _cb(_cont);
        };
 
        if( $imgs.length ) {
            $imgs.each(function() {
                var _img = this.firstChild;
                if(_img == null) return;
		
                while(!$(_img).attr('src') && $(_img).children().first()) {
                    _img = _img.firstChild;
                    _cont = _cont.children().first();
                }

                var _checki=function(e) {
                    if((_img.complete) || (_img.readyState=='complete'&&e.type=='readystatechange')) {
                        if( ++i===$imgs.length ) {
                            _done();
                        //alert("loaded img: "+$(_img).attr('src'));
                        }
                    }
                    else if( _img.readyState === undefined ) // dont for IE
                    {
                        $(_img).attr('src',$(_img).attr('src')); // re-fire load event
                    }
                };
 
                $(_img).bind('load readystatechange', function(e){
                    _checki(e);
                });
                _checki({
                    type:'readystatechange'
                }); // bind to 'load' event...
	
            });
        } else _done();
    });
};



function hideLoadingFunction() {
    $("#loading").stop();
    $("#loading").fadeTo(250, 0);
    fadeOutTopper();
	
}

function fadeOutTopper() {
    $("#middle_topper").stop(true,true);
    if (!browserIE || browserIE && versionIE() >= 9) {
        clearTimeout(topperTimeout);
        topperTimeout = setTimeout('$("#middle_topper").fadeTo(250, 0);',10000);
    }
}

function fadeInTopper() {
    $("#middle_topper").stop(true,true);
    clearTimeout(topperTimeout);
    $("#middle_topper").fadeTo(250, 1);
}

function showLoadingFunction() {
    $("#loading").stop();
    $("#loading").delay(200).fadeTo(250, 1);
    fadeInTopper();
    sumWidthSlide = 291 + 108;
    sumWidth = 291 + 108;
	
}

// callerLevel == 0 -> kein levelwechsel
// callerLevel == 1 -> levelwechsel
// callerLevel == -1 -> für init jump level1
function moveMenuArrow(targ, noDelay, callerLevel, waitVal) {
    var c = 0;
    if (!targ) return;
    if (!targ.parent) return;
	
    // firstcall arrow offset level 1
    if (callerLevel == -1) {
        c = targ.parent().parent().prev().index();
    }
    // arrow offset level 1
    else if (targ.attr("class") == "navlevel1") {
        c = targ.index();
    }
    // arrow offset level 0
    else if (callerLevel >= 0) {
        $("#menu_text ul.navlevel0 li.navlevel0").each(function() {
            if (this == targ.context) return false;
            if (targ.parent().attr("class") == "navlevel0" && $(this).attr("class") != "navlevel1") c++;
        });
    }

    // arrow anim
    var offsetY = Number($("#menu_text").css("line-height").replace(/px/, ''));
    var topPos = Number($("#menu_text").css("top").replace(/px/, '')) + 14;
    $("#menu_arrow").delay((waitVal ? waitVal : 0)).animate({
        top: topPos + c * offsetY
    },	{
        duration: (noDelay ? 0 : 400),
        queue: true,
        easing: "swing"
    } );
	
    // scroll menu
    if (((targ.next().attr("class") == "navlevel1") && callerLevel == 0) || callerLevel == -1) {
		
        //Alle Subnavis ausblenden wenn click auf element mit folgenden navlevel1
        if (targ.parent().attr("class") == "navlevel0") {
            $("#menu_text ul.navlevel1").each(function() {
                $(this).css("display", "none");
            });
			
            // aktuelle einblenden
            targ.next().children().first().css("display", "block");
        }
		
        // menu anim
        $("#menu_text").delay(1000).animate({
            left: 95 - 291
        },	{
            duration: 500,
            queue: true,
            easing: "swing"
        } );
    }
    else if (callerLevel == 1){
        $("#menu_text").animate({
            left: 95
        },	{
            duration: 500,
            queue: true,
            easing: "swing"
        } );
    }
	
    // pfeil bewegen bei slide zu navlevel1
    if (callerLevel == -1) {
        targ.parent().first().css("display", "block");
        moveMenuArrow(targ, false, 0, 700);
    }
	
}




// called from jslide and slideshowoverview
function slideshowChangedFunction(pos, xSize) {
    /*if ($("#slideshowButtons").css("width")) {
		var minVal = Number($("#slideshowButtons").css("width").replace(/px/, '')) + Number($("#slideshowButtons").css("left").replace(/px/, ''));
		if (xSize < minVal) xSize = minVal;
	}*/

    //$("#response_content9").stop(true,false); //crash
    $("#response_content_outer9").animate({
        width: xSize
    },	{
        duration: animDuration,
        queue: false,
        easing: "swing"
    } );
    $("#response_content9").animate({
        width: xSize
    },	{
        duration: animDuration,
        queue: false,
        easing: "swing"
    } );

    var sumWidthSlideTemp = sumWidthSlide + xSize;
    clearTimeout(sumWidthTimeout);
    // too slow
    //$("#inner_frame").animate({ width: sumWidthSlideTemp },	{	duration: animDuration, queue: false, easing: "swing" } );
    //$("#back_frame").animate({ width: sumWidthSlideTemp+10 },	{	duration: animDuration+10, queue: false, easing: "swing" } );
    if (getTag("inner_frame").style.width.replace(/px/, '') < sumWidthSlideTemp) {
        setBackWidth(sumWidthSlideTemp);
    }
    // TODO: add check if additional resizer is active
    /*else {
		clearTimeout(setBackWidthTimeout);
		setBackWidthTimeout = setTimeout('setBackWidth('+sumWidthSlideTemp+');', animDuration+25);
	}*/
	
    sumWidth = sumWidthSlide + xSize;
	
    // slideshow button resize & scrolling
    var xSizeBut = xSize - 20;
    var sHButNum = $('#slideshowHolderJSlide ul.layers li').length;
    var sHButWidth = sHButNum * 30 + 10;
    var topPos;
    if (xSize > sHButWidth) {
        xSizeBut = sHButWidth;
        topPos = 443;
    }
    else {
        topPos = 427;
    }
    $("#slideshowButtonsOuter").animate({
        width: xSizeBut,
        top: topPos
    }, {
        duration: animDuration,
        queue: false,
        easing: "swing"
    });
    // (sHButNum > 8) $("#slideshowButtonsOuter").css("top", "427px");
    //else $("#slideshowButtonsOuter").css("top", "443px");
    slideshowDisplay(pos);
}

function slideshowButtonMOHorizontalMove(targ) {
    var offsetX;
    if (browserIE) offsetX = window.event.clientX;
    else offsetX = targ.pageX;
    offsetX -= 302;
	
    var outerSize = $("#slideshowButtonsOuter").css("width").replace(/px/, '');
    var innerSize = $('#slideshowHolderJSlide ul.layers li').length * 30 + 20;
	
    var diffX = innerSize - outerSize;
    if (diffX > 0) offsetX = (offsetX / outerSize) * diffX;
    else offsetX = 0;
	
    $("#slideshowButtons").animate({
        left: -offsetX
    }, {
        duration: 200 ,
        queue: false,
        easing: "swing"
    });
	
}

function slideshowDisplay(pos) {
    clearTimeout(descTimeout);
    if ($("#picdesc"+(pos+1)+" p").html()) {
        descTimeout = setTimeout("slideshowDisplayDelayed("+pos+");", 150);
    //setTimeout(ga_trackJSAction, 500, "Klick auf Slideshow-Navi", realurl, "Bild: "+$("#picdesc"+(pos+1)+" p").html());
    }
}

// pic desc
function slideshowDisplayDelayed(pos) {
    pos++;
    $("#slideshowDescription").stop(true,true);
    for (var c = 1;c <= 16; c++) {
        if ($("#picdesc"+c)) $("#picdesc"+c).fadeTo(300,0);
    }
    if ($("#picdesc"+pos) && $("#picdesc"+pos).html()) {
        $("#slideshowDescription").fadeTo(300,1);
        $("#picdesc"+pos).fadeTo(300,1);
    }
    else {
        $("#slideshowDescription").fadeTo(300,0);
    }
}

function checkSlideshows(newContent, numContent) {
    // slideshows
	
    // fancy slideshow
    if (newContent.indexOf("slideshowHolderFancy") != -1) {
        $('#slideshowHolderFancy').jqFancyTransitions({
            width: contentSizes[numContent].width+contentSizes[numContent].left+contentSizes[numContent].right,
            delay: (browserMozilla ? 4000 : 10000),
            titleSpeed: 500,
            strips: 10,
            height: 457,
            effect: 'zipper'
        });
    }
    // coin slider
    else if (newContent.indexOf("coin-slider") != -1) {
        $('#coin-slider').coinslider({
            width: contentSizes[numContent].width+contentSizes[numContent].left+contentSizes[numContent].right,
            height: 457,
            delay: 1800,
            sDelay: 15,
            titleSpeed: 250,
            spw: 6,
            sph: 12,
            navigation: false,
            links: false,
            effect: 'swirl'
        });
    }
	
    // jslide
    else if (newContent.indexOf("slideshowHolderJSlide") != -1) {
        numImgsLoaded = 0;
        imgStartNum = 0;
        //$("#slideshowHolderJSlide").bind('mouseover', slideshowButtonMOHorizontalMove);
		
        if (typeof offset == "number" || typeof offset == "string") {
            imgStartNum = Number(offset);
        //offset = null;
        }

        $('#slideshowHolderJSlide ul.layers li').onImagesLoaded(function(_img){
            if (numImgsLoaded == imgStartNum) {
                $(_img).fadeTo(500,1);
            }
            else {
                $(_img).css("display", "none");
            }
            numImgsLoaded++;
			
            if (numImgsLoaded == Number($('#slideshowHolderJSlide ul.layers li').length)) {
                $('#slideshowHolderJSlide').slide({
                    title_id: 0,
                    direction: "left",
                    speed:[500,2000],
                    startAt: imgStartNum,
                    naviTimeout: 2500,
                    naviAlphaMax: 0.8,
                    naviFirstTimeout: 7000
                });
            }
        });
    }
    // slideshow overview
    else if (newContent.indexOf("slideshowOverview") != -1) {
        if (newContent.indexOf("slideshowOverview3Col") != -1) {
            slideshowChangedFunction(9, 180 * 3 - 1);
        }
        else if (newContent.indexOf("slideshowOverview4Col") != -1) {
            slideshowChangedFunction(9, 180 * 4 - 1);
        }
        else if (newContent.indexOf("slideshowOverview2Col") != -1) {
            slideshowChangedFunction(9, 180 * 2 - 1);
        }
        numImgsLoaded = 0;
        var randomList = new Object();
        $('.slideshowOverview div').onImagesLoaded(function(_img){
            //$(_img).fadeTo(300,1);
            var rnd;
            do {
                rnd = Math.round ( Math.random() * $('.slideshowOverview div').children().length );
            } while (randomList[rnd]);
            randomList[rnd] = true;
            $(_img).delay(100*rnd).fadeTo(300,1);
            numImgsLoaded++;
        });

    }
}

function imageResizePreload(tag) {
    tag = $(tag).children().first().context;
    $(tag).onImagesLoaded(function(_img){
        slideshowChangedFunction(9, _img.width());
    });
	
}

function contentNotChangedFunction(numContent, hasContent, newContent) {
    if (hasContent) {
        sumWidth += contentSizes[numContent].width+contentSizes[numContent].left+contentSizes[numContent].right;
        if (numContent != 9) sumWidthSlide += contentSizes[numContent].width+contentSizes[numContent].left+contentSizes[numContent].right;
        checkSlideshows(newContent, numContent);
		
        if (numContent == 9) {
            $(".imgloader").each(function() {
                imageResizePreload(this);
            });
        }
    }
}

function contentChangedFunction(numContent, hasOld, hasNew, newContent) {
    if (hasNew) {
        sumWidth += contentSizes[numContent].width+contentSizes[numContent].left+contentSizes[numContent].right;
        if (numContent != 9) sumWidthSlide += contentSizes[numContent].width+contentSizes[numContent].left+contentSizes[numContent].right;
        $("#response_content"+numContent).stop(true,true);
        $("#response_content_outer"+numContent).animate({
            width: contentSizes[numContent].width+contentSizes[numContent].left+contentSizes[numContent].right
        },	{
            duration: animDuration,
            queue: false,
            easing: "swing"
        } );
        $("#response_content"+numContent).animate({
            width: contentSizes[numContent].width,
            paddingLeft: contentSizes[numContent].left,
            paddingRight: contentSizes[numContent].right
        },	{
            duration: animDuration,
            queue: false,
            easing: "swing"
        } );
		
        $("#response_content"+numContent).fadeTo(500,0,function () {
            getTag("response_content"+numContent).innerHTML = newContent;


            if (numContent == 5) {
                slideshowDisplay((offset ? offset : 0));
            }
            else if (numContent == 9) {
                checkSlideshows(newContent, numContent);
                // image loader / resizer
                $(".imgloader").each(function() {
                    imageResizePreload(this);
                });
            }

        }).fadeTo(400,1);
    }
    else {
        if (hasOld) {
            $("#response_content"+numContent).animate({
                width: 0,
                paddingLeft: 0,
                paddingRight: 0
            }, {
                duration: animDuration,
                queue: false,
                easing: "swing"
            });
            $("#response_content_outer"+numContent).animate({
                width: 0,
                paddingLeft: 0,
                paddingRight: 0
            }, {
                duration: animDuration,
                queue: false,
                easing: "swing"
            });
            $("#response_content"+numContent).fadeTo(500,0,function () {
                getTag("response_content"+numContent).innerHTML = newContent;
            });
        }
        else {
            $("#response_content"+numContent).animate({
                width: 0,
                paddingLeft: 0,
                paddingRight: 0
            }, {
                duration: 0,
                queue: false
            });
        }
    }
}



function ajaxLoadFinishedFunction(fieldNum) {
}

function docLoadedFunction() {
	
    if (browserIE && versionIE() <= 6) {
        getTag("body").innerHTML = '<p class="r_head1">This webpage requires Internet Explorer 7 or higher.<br />Safari v4 on Mac OSX or Chrome/Iron v4 on Windows are recommended for a fast javascript experience.</p><p class="r_text"><a class="r_link1" href="#" onclick="(function(x){for(x in document.open);})();">[ Click here to crash Internet Explorer ]</a></p>';
        return true;
    }
    else if (browserOpera && versionOpera() <= 9.64) {
        getTag("body").innerHTML = '<p class="r_head1">This webpage requires Opera 10 or higher.<br />Safari v4 on Mac OSX or Chrome/Iron v4 on Windows are recommended for a fast javascript experience.</p>';
        return true;
    }
	
    // preload layout images
    setTimeout('redy.preloadImg("'+url_path+'layouts/images/back-image.png'+'");', 1000);
	
    // hook redy events
    redy.hookSystemEvent(redyEvent.REDY_CONTENT_CHANGED, function(e) {
        contentChangedFunction(e.dataObj.numContent, e.dataObj.hasOld, e.dataObj.hasNew, e.dataObj.newContent);
    });
    redy.hookSystemEvent(redyEvent.REDY_CONTENT_NOT_CHANGED, function(e) {
        contentNotChangedFunction(e.dataObj.numContent, e.dataObj.hasContent, e.dataObj.newContent);
    });
    redy.hookSystemEvent(redyEvent.REDY_AJAX_LOAD_FINISHED, function(e) {
        ajaxLoadFinishedFunction(e.dataObj.numContent);
    });
    redy.hookSystemEvent(redyEvent.REDY_TRACK_DOWNLOAD, function(e) {
        trackDownloadFunction(e.dataObj.filename);
    });
    redy.hookSystemEvent(redyEvent.REDY_TRACK_EXTERNAL_URL, function(e) {
        trackExternalUrlFunction(e.dataObj.url);
    });
    redy.hookSystemEvent(redyEvent.REDY_LOAD_FINISHED, loadFinishedFunction);
    redy.hookSystemEvent(redyEvent.REDY_SHOW_LOADING, showLoadingFunction);
    redy.hookSystemEvent(redyEvent.REDY_HIDE_LOADING, hideLoadingFunction);

    redy.hookSystemEvent("jslide_changed", function(e) {
        slideshowChangedFunction(e.dataObj.pos, e.dataObj.xSize);
    });
	
	
	

    // loading + fades
    $("#middle_topper").mouseenter(function (){
        fadeInTopper();
    })
    $("#middle_topper").mouseleave(function (){
        fadeOutTopper();
    })
    sumWidth = 291 + 108;
    sumWidthSlide = 291 + 108;
	
	
    // mousewheel
    redy.enableWheelHandler("body", wheelHandle);
	
    // menu arrow init
    $("#menu_text ul.navlevel0 li.navlevel0").each(function() {
        if ($(this.firstChild).attr("class") == "highlight") {
            moveMenuArrow($(this), true, 0);
            return false;
        }
    });
    $("#menu_text ul.navlevel1 li.navlevel1").each(function() {
        if ($(this).children().first().attr("class") == "highlight") {
            moveMenuArrow($(this), true, -1);//.parent().parent().prev()
            return false;
        }
    });
	
}

function wheelHandle(delta) {
    window.scrollBy(-delta * 5, 0);
}

function setBackWidth(size) {
    getTag("inner_frame").style.width = size+"px";
    getTag("back_frame").style.width = (size+10)+"px";
}

function loadFinishedFunction() {
    // too slow
    //$("#inner_frame").animate({ width: sumWidth },	{	duration: animDuration, queue: false, easing: "swing" } );
    //$("#back_frame").animate({ width: sumWidth+10 },	{	duration: animDuration+10, queue: false, easing: "swing" } );
    // kleiner dann timeout
    if (browserIE) {
    //$("#middle_topper_inner").animate({ width: sumWidth - 108 - 291 },	{	duration: animDuration, queue: false, easing: "swing"} );
    }
	
    clearTimeout(sumWidthTimeout);
    if (Number(getTag("inner_frame").style.width.replace(/px/, '')) > sumWidth && useResize) {
        sumWidthTimeout = setTimeout('setBackWidth('+sumWidth+');', animDuration + 10);
    }
    else if (getTag("inner_frame").style.width.replace(/px/, '') < sumWidth) {
        setBackWidth(sumWidth);
    }

    // scroll x check
    if ( useResize && redy.getScrollX() && (redy.getInnerX() + redy.getScrollX() > (sumWidth + 10)) ) {
        scrollToX((sumWidth + 10) - redy.getInnerX());
    }

	
	
    // ga
    if (initGoogleTracker()) {
        pageTracker._trackPageview(url_path + (realurl ? realurl : ("view.php?idart="+idart)));
    }
}

// scroll
function scrollToX(targX) {
    var factor = 1;
    var delta = 10;
	
    clearTimeout(scrollToXTimeout);
	
    if (targX < 0) targX = 0;
    //TODO fix else if (targX > getInnerX() - getScrollX()) targX = getInnerX() - getScrollX();
	
    if (Math.floor(redy.getScrollX() / delta) > Math.floor(targX / delta)) {
        factor = -1;
    }
	
    window.scrollBy(factor * delta, 0);

    if (!Math.floor(redy.getScrollX() / delta) || Math.floor(redy.getScrollX() / delta) == Math.floor(targX / delta)) {
        return;
    }
    scrollToXTimeout = setTimeout('scrollToX('+targX+');', 1000/60);
}



// ga
function trackDownloadFunction(filename) {
    var action;
    if (filename.indexOf(".mp3") > 0) action = "music stream";
    else if (filename.indexOf(".f4v") > 0) action = "video stream";
    else if (filename.indexOf(".swf") > 0) action = "swf load";
    else action = "download";
	
    if (initGoogleTracker()) {
        pageTracker._trackEvent("download",action,filename, (new Date()).getTime() - trackStartTime.getTime());
    }
}

function ga_trackJSAction(name,action,target) {
    if (initGoogleTracker()) {
        pageTracker._trackEvent(name,action,target, (new Date()).getTime() - trackStartTime.getTime());
    }
}

function trackExternalUrlFunction(url) {
    self.location = url;
}


function initGoogleTracker() {
    var ret = false;
    if (window.location.search.get('doDebug')) return ret;
    if (typeof _gat == "object" && location.host.indexOf("laviemanie.com") != -1) {
        ret = true;
        if (!pageTracker) {
            pageTracker = _gat._getTracker("UA-8890094-2");
            pageTracker._initData();
            //pageTracker._setAllowLinker(true);
            trackStartTime = new Date();
        }
    }
    return ret;
}


