
(function() {
    if (window.addEventListener) {
        window.addEventListener("load", init, false);
    }
    else if (window.attachEvent) {
        window.attachEvent("onload", init);
    }

    var slideshow = {
        play: false,
        info: false,
        obj: {},
        idx: 1,
        load_img: null,
        wait: 2500,
        timeout: null,

        setPlay: function(arg) {
          this.play = arg;
        },

        setObj: function(obj) {
          this.obj = obj;
        },

        start: function(x) {
            this.idx++;
            if (this.idx > this.obj.images) {
                this.idx = 1;
            }
            if(x) {
                this.idx = x;
            }
            if(this.play) {
                this.preload();
            }
        },

        pause: function() {
            this.play = false;
            if(this.timeout) {
                clearTimeout(this.timeout);
            }
            $("#image1").stop(true, true);
        },

        restart: function() {
            this.play = true;
            this.timeout = setTimeout(function() {slideshow.start();}, slideshow.wait);
        },

        forward: function() {
            $("#image1").stop(true, true);
            this.idx++;
            if (this.idx > this.obj.images) {
                this.idx = 1;
            }
            if(slideshow.play == true)
            {
                slideshow.pause();
                $("#play").get(0).src = "images/play-icon.jpg";
            }
            this.preload();
            $("#slideCounter").get(0).innerHTML = " "+slideshow.idx+"/"+slideshow.obj.images;
        },

        back: function() {
            $("#image1").stop(true, true);
            this.idx--;
            if (this.idx < 1) {
                this.idx = this.obj.images;
            }
            if(slideshow.play == true) {
                slideshow.pause();
                $("#play").get(0).src = "images/play-icon.jpg";
            }
            this.preload();
            $("#slideCounter").get(0).innerHTML = " "+slideshow.idx+"/"+slideshow.obj.images;
        },

        preload: function() {
            this.load_img = new Image();
            this.load_img.src = "images/"+this.obj.name+this.idx+".jpg";
            this.checkState();
        },

        checkState: function(){
            if(this.load_img.complete) {
                this.slide();
            }
            else {
                setTimeout(function() {slideshow.checkState();}, 300);
            }
        },

        slide: function() {
            if($("#image1").get(0).style.display == "none") {
                $("#image1").get(0).src = this.load_img.src;
                $("#image1").customFadeIn(600, function(){});
            }
            else {
                $("#image2").get(0).src = this.load_img.src;
                this.load_image = null;
                $("#image1").customFadeOut(600, function(){});
            }
            $("#slideCounter").get(0).innerHTML = " "+slideshow.idx+"/"+slideshow.obj.images;
            if(this.play)
                this.timeout = setTimeout(function() {slideshow.start();}, slideshow.wait);
        },

        toggleInfo: function() {
            if(this.info == false) {
                $("#projectInfo").stop();
                this.info = true;
                $("#projectInfo").get(0).style.display = "block";
                $("#"+this.obj.name+"Info").get(0).style.display = "block";
                $("#projectInfo").animate({
                    height: "416px"
                },600);
            }
            else {
                $("#projectInfo").stop();
                this.info = false;
                $("#projectInfo").animate({
                    height: "0px"
                },600, function(){$("#projectInfo").get(0).style.display = "none";});
            }
        },

        cancelInfo: function() {

            if($("#getProjectDetails").get(0)){
                if("name" in this.obj) {
                    $("#"+this.obj.name+"Info").get(0).style.display = "none";
                }
                this.info = false;
                $("#projectInfo").get(0).style.height = "0px";
                $("#projectInfo").get(0).style.display = "none";
                $("#projectDetails").empty();
            }
        }
    }

    var profil = {
        time: 400,
        idx: 0,
        timeout: null,

        loadprofil: function() {
            this.idx++;
            this.time += 30;
            if(this.idx == 10)
                $("#profilSlide"+this.idx).fadeIn(this.time+200);
            else
                $("#profilSlide"+this.idx).fadeIn(this.time);
            if(this.idx < 10) {
                this.timeout = setTimeout(function() {profil.loadprofil();},this.time-30);
            }
        },

        cancelProfil: function() {
            if(this.timeout)
                clearTimeout(this.timeout);
            this.time = 200;
            this.idx = 0;
            var count = 1;
            while($("#profilSlide"+count).get(0)) {
              $("#profilSlide"+count).get(0).style.display = "none";
              count++;
            }
        }
    }

    var menueControl = {
        timeout : null,
        active : 1,
        myProjects: [],
        portfolioArg: null,
        menueId : "profil",
        menue : [["profil", loadprofil],["portfolio", loadportfolio],["contact",loadcontact],["impressum",loadimpressum],["disclaimer",loaddisclaimer]],

        goTo: function() {
            if(slideshow.play) {
                slideshow.pause();
            }
            slideshow.cancelInfo();
            slideshow.obj = {};
            profil.cancelProfil();
            $("#contextNavi").empty();
            $("#projectDetails").empty();
            $("#info").get(0).style.display = "none";
            $("#thanks").get(0).style.display = "none";
            $("#blende").stop(true, true);
            $("#blende").customFadeIn(200, function(){});
            $("#cmBlende").stop(true, true);
            $("#cmBlende").customFadeIn(200, function(){});
            for (var j = 0; j < this.menue.length; j++) {
                if(this.menue[j][0] !== this.menueId) {
                    this.linkOut($("#"+this.menue[j][0]).get(0));
                }
            }
            this.timeout = setTimeout(function() {
                for (var j = 0; j < menueControl.menue.length; j++) {
                    if(menueControl.menue[j][0] !== menueControl.menueId) {
                        $("#"+menueControl.menue[j][0]+"Content").get(0).style.display = "none";
                    }
                    else {
                        $("#"+menueControl.menueId+"Content").get(0).style.display = "block";
                        menueControl.menue[j][1]();
                    }
                }
                $("#blende").customFadeOut("slow", function(){});
                $("#cmBlende").customFadeOut("slow", function(){});
            }, 200);
        },

        linkOver: function(obj) {
            obj.style.cursor = "pointer";
            obj.style.textShadow = "0px 2px 2px rgb(204,204,204)";
            $("#"+obj.id).animate({color: 'rgb(0,222,222)'}, 400 );
        },

        linkOut: function(obj) {
            obj.style.cursor = "auto";
            obj.style.textShadow = "0px 0px 0px rgb(153,153,153)";
            $("#"+obj.id).stop(true, false).stop(true, false);
            $("#"+obj.id).animate({color: 'rgb(85,85,85)'}, 200 );
        },

        setActive: function(arg) {
            this.active = arg;
        },

        setMenueId: function(arg) {
            this.menueId = arg;
        },

        setPortfolioArg: function(arg) {
            this.portfolioArg = arg;
        }
    }


    function init() {
        (function($) {
            $.fn.customFadeIn = function(speed, callback) {
                $(this).fadeIn(speed, function() {
                        if(jQuery.browser.msie) {
                            $(this).get(0).style.removeAttribute('filter');
                        }
                        if(callback !== undefined) {
                            callback();
                        }
                });
            };
            $.fn.customFadeOut = function(speed, callback) {
                $(this).fadeOut(speed, function() {
                        if(jQuery.browser.msie) {
                            $(this).get(0).style.removeAttribute('filter');
                        }
                        if(callback !== undefined) {
                            callback();
                        }
                });
            };
        })(jQuery);

        var id_sound1;
        swfsound.embedSWF( 'swfsound/swfsound.swf' );
        swfsound.onload = function()
        {
            id_sound1 = swfsound.loadSound( 'mp3/Schreibmaschine.mp3', streamAndAutoPlay = false );
        }

        $("#projectInfo").get(0).style.display = "none";
        $("#blende").get(0).style.display = "none";
        $("#cmBlende").get(0).style.display = "none";
        profil.cancelProfil();

        for (var i = 0; i < menueControl.menue.length; i++) {
            var x = "#"+menueControl.menue[i][0];
            $(x+"Content").get(0).style.display = "none";
            $(x).mouseover(function(){menueControl.linkOver(this);}).mouseout(function() {
                if(this.id !== menueControl.menueId) {
                    menueControl.linkOut(this);
                }
            }).click(function() {
                if(menueControl.menueId != this.id || (menueControl.menueId == "portfolio" && menueControl.active != 1) || (menueControl.menueId == "portfolio" && "name" in slideshow.obj) || (menueControl.menueId == "portfolio" && menueControl.portfolioArg != null )) {
                    menueControl.setActive(1);
                    menueControl.setMenueId(this.id);
                    menueControl.setPortfolioArg(null);
                    menueControl.goTo();
                }
            });
        }
        
        timeout = setTimeout(function() {loadprofil();},200);
        $("#submit").mouseover(function(){
            this.src = "images/submit-button-hover.jpg";
        }).mouseout(function(){
            this.src = "images/submit-button.jpg";
        });
        document.forms[0].onsubmit = function() {
             if(validateMail() && validateNachricht()) {
                 $("#thanks").customFadeIn(200, function(){});
                 return true;
             }
             else {
                 return false;
             }
        };
        $("#mail").get(0).onkeydown = function() {
            swfsound.startSound( id_sound1 );
        };
        $("#mail").get(0).onkeyup = function(){
            if($("#Lmail").get(0).style.color == "rgb(255, 0, 0)" && validateMail()) {
                $("#Lmail").get(0).style.color = "rgb(85,85,85)";
                $("#mail").get(0).style.backgroundColor = "white";
                
            }
        };
        $("#mail").blur(function(){
            validateMail();
        });
        $("#nachricht").get(0).onkeydown = function(){
            swfsound.startSound( id_sound1 );
        };
        $("#nachricht").get(0).onkeyup = function(){
            $("#Lnachricht").get(0).style.color = "rgb(85,85,85)";
            $("#nachricht").get(0).style.backgroundColor = "white";
        };
        $("#nachricht").blur(function(){
            validateNachricht();
        });
        $("#name").get(0).onkeydown = function(){
            swfsound.startSound( id_sound1 );
        }
        $("#subject").get(0).onkeydown = function(){
            swfsound.startSound( id_sound1 );
        }

        $("#profilContent").get(0).style.display = "block";
        $("#content").get(0).style.display = "block";

        var new_image = new Image();
        new_image.src = "images/pager-preview.jpg";
    menueControl.linkOver($("#profil").get(0));

    }

    function validateMail() {
        if(!$("#mail").get(0).value.match(/([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4})/gi)) {
            $("#Lmail").get(0).style.color = "rgb(255,0,0)";
            $("#mail").get(0).style.backgroundColor = "rgb(255,199,199)";
            return false;
        }
        else {
            return true;
        }
    }

    function validateNachricht() {

        if($("#nachricht").get(0).value == "") {
            $("#Lnachricht").get(0).style.color = "rgb(255,0,0)";
            $("#nachricht").get(0).style.backgroundColor = "rgb(255,199,199)";
            return false;
        }
        else {
            return true;
        }
    }

    function createElement(el, id, pa, inner) {
        try {
            var x = document.createElement(el);
            x.id = id;
            if(inner) {
                x.innerHTML = inner;
            }
            $("#"+pa).get(0).appendChild(x);
            return true;
        }
        catch(ex) {
            return false;
        }
    }

    function loadprofil() {
        profil.loadprofil();
    }

    function loadportfolio() {
        $("#slides").get(0).style.display = "none";
        if(menueControl.portfolioArg) {
            var projects = getProjects();
            menueControl.myProjects = [];
            var p = 0;
            for(var k = 0; k < projects.length; k++) {
                $("#"+projects[k].name+"Info").get(0).style.display = "none";
                for(var l = 0; l < projects[k].tag.length; l++) {
                    if(projects[k].tag[l] === menueControl.portfolioArg) {
                       menueControl.myProjects[p] = projects[k];
                       p++;
                    }
                }
            }
        }
        else {
            menueControl.myProjects = getProjects();
            for(var m = 0; m < menueControl.myProjects.length; m++) {
                $("#"+menueControl.myProjects[m].name+"Info").get(0).style.display = "none";
            }
        }
        var n = Math.ceil(menueControl.myProjects.length/4);
        for(var i=1; i<=n; i++) {
            if(createElement("span",i,"contextNavi",i+" ")) {
                $("#"+i).mouseover(function() {menueControl.linkOver(this);});
                $("#"+i).mouseout(function() {
                    if(this.id != menueControl.active) {
                        menueControl.linkOut(this);
                    }
                });
                $("#"+i).click(function()
                {
                    if(this.id != menueControl.active) {
                        clearTimeouts();
                        var prevs = generatePreview(this.id);
                        var k = 1;
                        while($("#"+k).get(0)) {
                            if(k != this.id) {
                                menueControl.linkOut($("#"+k).get(0));
                            }
                            k++;
                        }
                        setTimeout(function() {clearPreview(4, prevs);}, 1);
                    }
                    menueControl.setActive(this.id);
                });
            }
        }
        menueControl.linkOver($("#"+menueControl.active).get(0));
        menueControl.linkOver($("#portfolio").get(0));
        var initPrevs = generatePreview(menueControl.active);
        for(var j=1; j<=4; j++) {
            $("#b"+j).get(0).style.display = "none";
        }
        timeout = setTimeout(function() {$("#preBoxes").get(0).style.display = "block";loadPreview(initPrevs);}, 200);
    }

    function generatePreview(id){
        var prevs = [];
        for(var j=0; j<=3; j++) {
            if(menueControl.myProjects[j+((id-1)*4)]) {
                prevs[j] = menueControl.myProjects[j+((id-1)*4)];
            }
            else {
                prevs[j] = "images/blank-preview.jpg";
            }
        }
        return prevs;
    }

    function loadPreview(obj) {
        var pos = Math.abs(obj.length - 5);
        if(obj[0].preview) {
            var str = obj[0].preview;
            $("#b"+pos).unbind();
            $("#b"+pos).get(0).src = str.substr(0,str.length-12)+"1.jpg";
            $("#b"+pos).get(0).style.height = "213px";
            $("#b"+pos).get(0).style.width = "307px";
            var curObj = obj[0];
            $("#box"+pos).mouseover(function(){this.style.cursor = "pointer";}).mouseout(function(){this.style.cursor = "auto";});
            $("#b"+pos).click(function(){
                if(!slideshow.play) {
                    for(var i = 1; i <=4; i++) {
                        $("#b"+i).unbind();
                    }
                    clearTimeouts();
                    var id = this.id
                    timeout = setTimeout(function() {
                        $("#cmBlende").customFadeIn(200,function(){});
                    },300);
                    timeout = setTimeout(function() {
                        $("#contextNavi").empty();
                        $("#info").empty();
                        loadProject(id, curObj);
                    },500);
                }
            });
            setTimeout(function(){registerPreviewEvent(curObj, pos, str)},600);
        }
        else
        {
            $("#b"+pos).get(0).src = obj[0];
            $("#b"+pos).unbind();
        }
        setTimeout(function(){$("#b"+pos).customFadeIn("slow", function(){});},50);
        obj.shift();
        if(obj[0]) {
            timeout = setTimeout(function() {loadPreview(obj);}, 200);
        }
    }

    function registerPreviewEvent(curObj, pos, str) {
        $("#b"+pos).mouseover(function()
            {
                $(this).stop(true, false);
                $("#info").stop(true,true);
                $("#image1").get(0).src = str.substr(0,str.length-12)+"1.jpg";
                $("#info").get(0).style.display = "none";
                $("#info").get(0).innerHTML = curObj.info;
                $("#info").customFadeIn(300, function(){});
                $(this).animate( {width:"624px", height: "436px" }, 550);
            });
            $("#b"+pos).mouseout(function()
            {
                $(this).stop(true, false);
                $("#info").stop(true,true);
                $(this).animate( {width:"307px", height: "213px" }, 300);
                $("#info").customFadeOut(300, function(){});
            });
    }

    function clearPreview(i, obj) {
        $("#b"+i).customFadeOut("slow", function(){});
        $("#b"+i).unbind();
        if(i>=1) {
            timeout = setTimeout(function() {clearPreview(--i, obj);}, 200);
        }
        else if(obj) {
            timeout = setTimeout(function() {$("#b1").get(0).src = obj[0].preview; loadPreview(obj); }, 400);
        }
        else {
            $("#preBoxes").customFadeOut("slow", function(){});
        }
    }

    function loadProject(id,obj) {
        clearTimeouts();
        id = parseInt(id.substr(3,4));
        $("#slides").get(0).style.display = "block";

        if(createElement("img","back","projectDetails")) {
            var b = $("#back").get(0);
            if(obj.images > 1) {
                b.src = "images/back-icon.jpg";
                $("#back").mouseover(function() {
                    b.style.cursor = "pointer";
                    b.src = "images/back-hover-icon.gif";
                }).mouseout(function() {
                    b.style.cursor = "auto";
                    b.src = "images/back-icon.jpg";
                }).click(function() {
                    b.src = "images/back-hover-icon.gif";
                    slideshow.back();
                });
            }
            else {
                b.src = "images/back-disabled-icon.jpg";
            }
        }

        createElement("span","whitespace1","projectDetails"," &nbsp; ");

        if(createElement("img","play","projectDetails")) {
            var p = $("#play").get(0);
            if(obj.images > 1) {
                p.src = "images/pause-icon.jpg";
                $("#play").mouseover(function() {
                    p.style.cursor = "pointer";
                    if(slideshow.play == false) {
                        p.src = "images/play-hover-icon.gif";
                    }
                    else {
                        p.src = "images/pause-hover-icon4.gif";
                    }
                }).mouseout(function() {
                    p.style.cursor = "auto";
                    if(slideshow.play == false) {
                        p.src = "images/play-icon.jpg";
                    }
                    else {
                        p.src = "images/pause-icon.jpg";
                    }
                }).click(function() {
                    if(slideshow.play == false) {
                            slideshow.restart();
                            p.src = "images/pause-hover-icon4.gif";
                    }
                    else {
                            slideshow.pause();
                            p.src = "images/play-hover-icon.gif";
                    }
                });
            }
            else {
                p.src = "images/play-disabled-icon.jpg";
            }
        }

        createElement("span","whitespace2","projectDetails"," &nbsp; ");

        if(createElement("img","forward","projectDetails")) {
            var f = $("#forward").get(0);
            if(obj.images > 1) {
                f.src = "images/forward-icon.jpg";
                $("#forward").mouseover(function() {
                    f.style.cursor = "pointer";
                    f.src = "images/forward-hover-icon.gif";
                }).mouseout(function() {
                    f.style.cursor = "auto";
                    f.src = "images/forward-icon.jpg";
                }).click(function() {
                    f.src = "images/forward-hover-icon.gif";
                    slideshow.forward();
                });
            }
            else {
                f.src = "images/forward-disabled-icon.jpg";
            }
        }

        if(createElement("span","getProjectDetails","info","<i>info</i> einblenden")) {
            $("#info").get(0).style.display = "block";
            $("#getProjectDetails").mouseover(function() {
                $("#getProjectDetails").get(0).style.cursor = "pointer";
                menueControl.linkOver(this);
            }).mouseout(function() {
                $("#getProjectDetails").get(0).style.cursor = "auto";
                menueControl.linkOut(this);
            }).click(function() {
                slideshow.toggleInfo();
                if(this.innerHTML == "<i>info</i> ausblenden")
                    this.innerHTML = "<i>info</i> einblenden";
                else
                    this.innerHTML = "<i>info</i> ausblenden";
            });
        }

        if(createElement("img","goBackToProtfolio","contextNavi")) {
            var gbtp = $("#goBackToProtfolio").get(0);
            gbtp.src = "images/backToPortfolio-icon.jpg";
            $("#goBackToProtfolio").mouseover(function() {
                gbtp.style.cursor = "pointer";
                gbtp.src = "images/backToPortfolio-hover-icon.gif";
            }).mouseout(function() {
                gbtp.style.cursor = "auto";
                gbtp.src = "images/backToPortfolio-icon.jpg";
            }).click(function() {
                backToPortfolio();
            });
        }

        createElement("span","objInfo","contextNavi"," &nbsp;&nbsp; "+obj.info+" &nbsp;");
        createElement("span","slideCounter","contextNavi"," "+slideshow.idx+"/"+slideshow.obj.images);

        $("#cmBlende").customFadeOut(1000,function(){});
        clearPreview(4);
        slideshow.setObj(obj);
        slideshow.setPlay(true);
        slideshow.start(1);
    }

    function backToPortfolio() {
        menueControl.goTo();
    }

    function clearTimeouts() {
        clearTimeout(timeout);
    }

    function loadcontact(){
    }
    function loadimpressum(){}

    function loaddisclaimer() {
        for(var k=1; k<=2; k++) {
            createElement("span",k,"contextNavi",k+" ");
            $("#"+k).mouseover(function() {
                menueControl.linkOver(this);
            }).mouseout(function() {
                if(this.id != menueControl.active) {
                    menueControl.linkOut(this);
                }
            }).click(function() {
                if(this.id == 1 && this.id != menueControl.active) {
                    menueControl.setActive(1);
                    $("#blende").stop(true, true);
                    $("#blende").customFadeIn(200, function(){});
                    timeout = setTimeout(function() {
                        $("#disContent2").get(0).style.display = "none";
                        $("#disContent1").get(0).style.display = "block";
                        $("#blende").customFadeOut(200, function(){});
                    }, 200);
                    menueControl.linkOut($("#2").get(0));
                }
                else if(this.id == 2 && this.id != menueControl.active) {
                    menueControl.setActive(2);
                    $("#blende").stop(true, true);
                    $("#blende").customFadeIn(200, function(){});
                    timeout = setTimeout(function() {
                        $("#disContent1").get(0).style.display = "none";
                        $("#disContent2").get(0).style.display = "block";
                        $("#blende").customFadeOut(200, function(){});
                    }, 200);
                    menueControl.linkOut($("#1").get(0));
                }
            });
        }
        $("#disContent2").get(0).style.display = "none";
        $("#disContent1").get(0).style.display = "block";
        menueControl.linkOver($("#1").get(0));
        menueControl.setActive(1);
    }

    function project() {
        this.name = "";
        this.info = "";
        this.preview = "";
        this.images = 0;
        this.tag = [];
    }

    function getProjects() {
        var projects = [];

        var edaview = new project();
        edaview.name = "edaview";
        edaview.info = "edaview";
        edaview.preview = "images/edaview-preview.jpg"
        edaview.images = 11;
        edaview.tag = ["Javascript","PHP","AJAX","Google Maps","HTML","CSS","SQL","Photoshop","Prototype","Scriptaculous"];
        projects[0] = edaview;

        var spacecab = new project();
        spacecab.name = "spacecab";
        spacecab.info = "Spacecab";
        spacecab.preview = "images/spacecab-preview.jpg"
        spacecab.images = 6;
        spacecab.tag = ["Maya"];
        projects[1] = spacecab;

        var maze3d = new project();
        maze3d.name = "maze3d";
        maze3d.info = "MAZE.3D";
        maze3d.preview = "images/maze3d-preview.jpg"
        maze3d.images = 6;
        maze3d.tag = ["C++","wxWidgets","openGL","Photoshop"];
        projects[2] = maze3d;

        var wetter = new project();
        wetter.name = "wetter";
        wetter.info = "Das Wetter";
        wetter.preview = "images/wetter-preview.jpg"
        wetter.images = 9;
        wetter.tag = ["Flash","Actionscript","Illustrator","Photoshop"];
        projects[3] = wetter;

        var pager = new project();
        pager.name = "pager";
        pager.info = "Pager";
        pager.preview = "images/pager-preview.jpg"
        pager.images = 1;
        pager.tag = ["Photoshop"];
        projects[4] = pager;

        var iconDesign = new project();
        iconDesign.name = "iconDesign";
        iconDesign.info = "Icon-Design";
        iconDesign.preview = "images/iconDesign-preview.jpg"
        iconDesign.images = 1;
        iconDesign.tag = ["Photoshop"];
        projects[5] = iconDesign;

        var crowncrow = new project();
        crowncrow.name = "crowncrow";
        crowncrow.info = "Crow'n'Crow";
        crowncrow.preview = "images/crowncrow-preview.jpg"
        crowncrow.images = 6;
        crowncrow.tag = ["Illustrator","Corporate Design"];
        projects[6] = crowncrow;

        var museumOfLowResolution = new project();
        museumOfLowResolution.name = "museumOfLowResolution";
        museumOfLowResolution.info = "SONY's MOLR";
        museumOfLowResolution.preview = "images/museumOfLowResolution-preview.jpg"
        museumOfLowResolution.images = 1;
        museumOfLowResolution.tag = ["Photoshop"];
        projects[7] = museumOfLowResolution;

        return projects;
    }
})();
