/*
 *		@TODO Revoir animation bulle tweet
 */

/*
 *		Variables Global
 */
                var startMenu;
		var nbSlideMax;
		var onLogo = false;
		var worksArr = new Array();
                var workID;
                var thumb = "";
                var nbSlide = 0;
		
		var contentSupOpen = false;
		var contentSupName;
		
                var pathArr = new Array();
                var path = "";
                var work = "";
                var alertNavigator = false;
                var urlMaj = "";
                var slideInterval = null;
                
                var preloadImg = new Array();
                
                var BrowserDetect = {
                    init: function () {
                            this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
                            this.version = this.searchVersion(navigator.userAgent)
                                    || this.searchVersion(navigator.appVersion)
                                    || "an unknown version";
                            this.OS = this.searchString(this.dataOS) || "an unknown OS";
                            if(this.browser=="Firefox"){
                                if(this.version<4){
                                    urlMaj = "http://support.mozilla.com/fr/kb/Mettre%20%C3%A0%20jour%20Firefox";
                                    alertNavigator = true;
                                }
                            }
                            else if(this.browser=="Chrome"){
                                if(this.version<12){
                                    urlMaj = "http://www.google.com/support/chrome/bin/answer.py?hl=fr&answer=95414";
                                    alertNavigator = true;
                                }
                            }
                            else if(this.browser=="Safari"){
                                if(this.version<4){
                                    urlMaj = "http://www.apple.com/fr/safari/";
                                    alertNavigator = true;
                                }
                            }
                            else if(this.browser=="Opera"){
                                if(this.version<10){
                                    urlMaj = "http://help.opera.com/Windows/10.20/fr/autoupdate.html";
                                    alertNavigator = true;
                                }
                            }
                            else if(this.browser=="Explorer"){
                                if(this.version<9){
                                    urlMaj = "http://www.microsoft.com/france/windows/internet-explorer/telecharger-ie9.aspx";
                                    alertNavigator = true;
                                }
                            }
                            else if(this.OS=="iphone"){
                                document.location = "http://m.juliencolson.com/";
                            }
                            if(alertNavigator){
                                contentSupName = "alert-navigator";
                                $(".alert-navigator a[name='url-maj']").attr("href",urlMaj).append(urlMaj);
                                $(".alert-navigator").show();
                                $("#content-sup").show(300);
                                contentSupOpen = true;
                            }
                    },
                    searchString: function (data) {
                            for (var i=0;i<data.length;i++)	{
                                    var dataString = data[i].string;
                                    var dataProp = data[i].prop;
                                    this.versionSearchString = data[i].versionSearch || data[i].identity;
                                    if (dataString) {
                                            if (dataString.indexOf(data[i].subString) != -1)
                                                    return data[i].identity;
                                    }
                                    else if (dataProp)
                                            return data[i].identity;
                            }
                    },
                    searchVersion: function (dataString) {
                            var index = dataString.indexOf(this.versionSearchString);
                            if (index == -1) return;
                            return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
                    },
                    dataBrowser: [
                            {
                                    string: navigator.userAgent,
                                    subString: "Chrome",
                                    identity: "Chrome"
                            },
                            {   
                                    string: navigator.userAgent,
                                    subString: "OmniWeb",
                                    versionSearch: "OmniWeb/",
                                    identity: "OmniWeb"
                            },
                            {
                                    string: navigator.vendor,
                                    subString: "Apple",
                                    identity: "Safari",
                                    versionSearch: "Version"
                            },
                            {
                                    prop: window.opera,
                                    identity: "Opera",
                                    versionSearch: "Version"
                            },
                            {
                                    string: navigator.vendor,
                                    subString: "iCab",
                                    identity: "iCab"
                            },
                            {
                                    string: navigator.vendor,
                                    subString: "KDE",
                                    identity: "Konqueror"
                            },
                            {
                                    string: navigator.userAgent,
                                    subString: "Firefox",
                                    identity: "Firefox"
                            },
                            {
                                    string: navigator.vendor,
                                    subString: "Camino",
                                    identity: "Camino"
                            },
                            {		// for newer Netscapes (6+)
                                    string: navigator.userAgent,
                                    subString: "Netscape",
                                    identity: "Netscape"
                            },
                            {
                                    string: navigator.userAgent,
                                    subString: "MSIE",
                                    identity: "Explorer",
                                    versionSearch: "MSIE"
                            },
                            {
                                    string: navigator.userAgent,
                                    subString: "Gecko",
                                    identity: "Mozilla",
                                    versionSearch: "rv"
                            },
                            { 		// for older Netscapes (4-)
                                    string: navigator.userAgent,
                                    subString: "Mozilla",
                                    identity: "Netscape",
                                    versionSearch: "Mozilla"
                            }
                    ],
                    dataOS : [
                            {
                                    string: navigator.platform,
                                    subString: "Win",
                                    identity: "Windows"
                            },
                            {
                                    string: navigator.platform,
                                    subString: "Mac",
                                    identity: "Mac"
                            },
                            {
                                    string: navigator.userAgent,
                                    subString: "iPhone",
                                    identity: "iPhone/iPod"
                            },
                            {
                                    string: navigator.platform,
                                    subString: "Linux",
                                    identity: "Linux"
                            }
                     ]
                };

/*
 *		Init
 */
		$(document).ready(function(){
                    BrowserDetect.init();
                    navigation();
		    bulle();
                    loadWorks();
                    showContentSup();
		});

/*
 *		Resize
 */
		$(window).resize(function() {
                    //Works
                    navGallery()
                    
                    if(!startMenu){
                        leftNav = $('header').width()-295;
                        $('nav').css({left:leftNav});
                        topNavSup = $('#wrap-content').height()+265;
                        $('#nav-sup').css({top:topNavSup,bottom:auto});
                        leftFooter = $('header').width()+15;
                        topFooter = $('#wrap-content').height()-60;
                        $('footer').css({right: auto, left: leftFooter, top: topFooter});
                    }
		});
		
/*
 *		Fonctions
 */
		            
	//** Animation logo
		function bulle(){
                    var user = 'julien_colson';
		
		    // using jquery built in get json method with twitter api, return only one result
		    $.getJSON('http://twitter.com/statuses/user_timeline.json?screen_name=' + user + '&count=1&callback=?', function(data)      {
		          
		        // result returned
		        var tweet = data[0].text;
		      
		        // process links and reply
		        tweet = tweet.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, function(url) {
		            return '<a href="%27+url+%27">'+url+'</a>';
		        }).replace(/B@([_a-z0-9]+)/ig, function(reply) {
		            return  reply.charAt(0)+'<a href="http://twitter.com/%27+reply.substring%281%29+%27">'+reply.substring(1)+'</a>';
		        });
		      
		        // output the result
		        $("#bulle span").html(tweet);
		    });
                    
                    var affBulle = false;
		    $("#coco, #perso").mouseenter(function(){
		        if(!affBulle){
		            $("#perso").stop().animate({left:'67px'},{ //11px
                                duration:400,
                                easing:'easeOutExpo',
                                complete:function(){
                                    $("#bulle").fadeIn(200);
                                    $("#arrow").fadeIn(400);
                                    $("#bulle").animate({bottom:'92px'},{duration:400,easing:'easeOutExpo'}) //102px
                                    //$("#bulle").animate({bottom:'102px'},{duration:400,easing:'easeOutExpo',complete:function(){$('#perso img').attr('src','img/logo/perso2.png')}})
                                }
                            });
		            affBulle = true;
		        }
		        onLogo = true;
		    });
		    $("footer").mouseleave(function(){
		        $("#bulle").stop().animate({bottom:'80px'},{duration:400,easing:'easeOutExpo'});
		        $("#arrow").css("display","none");
		        $("#bulle").fadeOut(200);
		        //$('#perso img').attr('src','img/logo/perso1.png');
		        $("#perso").stop().animate({left:'87px'},{duration:400,easing:'easeOutExpo'}); //51px
		        affBulle = false;
		        onLogo = false;
		    });
		}
                
                
        //*** Menu Secondaire + Affichage contenu
		function showContentSup(){
		    $("#nav-sup a").click(function(){
		    	if(contentSupOpen){
                            $("#content-sup").hide(300);
                            $("."+contentSupName).hide();
		    	}
                        contentSupName = $(this).attr("name");
                        $("."+contentSupName).show();
                        $("#content-sup").show(300);
                        contentSupOpen = true;
		    });
		    $("a[name=\"close\"]").click(function(){
		    	$("#content-sup").hide(300);
		    	$("."+contentSupName).hide();
		    	contentSupOpen = false;
		    });
		    
		    $("#content-sup").draggable({containment: 'document'});
		}
                
		
	//** Gestion navigation
		function navigation(){
                    $.address.init(function(event){
                        linkName = event.value;
                        linkName = linkName.replace("/","");
                        $("nav a[name='"+linkName+"']").trigger("click");
                    });
                    $.address.change(function(){
                        pathArr = $.address.pathNames();
                        if(pathArr[0]!=undefined){
                            if(pathArr[1]!=undefined){
                                genSingleView(workID);
                            }
                            else{
                                ajaxLoader(pathArr[0]);
                            }
                        }
                    }); 
                    
                    //Menu principal
                    if($("nav").attr("class") == "start"){
		        $("nav.start").delay(500).animate({opacity:1},500);
		        startMenu = true;
		    }
		    else{
		        $("header").css("opacity","1");
		    }
                    
		    $("nav a").bind("click",function(e){
                        e.preventDefault();
		        var titleNav = $(this).text();
		        if(startMenu == true){
		            $("header h1").text(titleNav);
		            $("nav.start").removeClass();
		            
		            startMenu = false;
		        }
		        else{
		            $("nav a").removeClass();
		            $("header h1").text(titleNav);
		        }
		        $(this).addClass("active");
                        $.address.value($(this).attr('href'));
		    });
                    
                    //Galerie works
                    var showMask = true;
		    $(".thumb").live("mouseover",function(){
		        if(showMask){
		            $(".thumb-title").css("cursor","pointer");
		            $(this).find(".thumb-mask").show("blind",100);
		            $(".thumb-title").delay(200).animate({opacity:1},500);
		        }
		        showMask = false;
		    }).live("mouseleave",function(){
		        $(".thumb-title").css("opacity","0");
		        $(this).find(".thumb-mask").delay(100).hide("blind",100);
		        showMask = true;
		    });
                    
                    $(".thumb-title").live("click",function(){
                        workID = $(this).attr("id");
                        workID = parseInt(workID);
                        $.address.value("/works/"+worksArr[workID]["name"]);
                        slideInterval = setInterval(auto,5000);
                    });
                    
		    $(".arrow-up img").live("click",function(){
		    	if(nbSlide>0){
		    		$("#slide-thumbs").animate({top:"+=193px"});
					nbSlide--;
		    	}
		    }).live("mouseover",function(){
		        $(this).parent().stop().animate({opacity:1},200);
		    }).live("mouseleave",function(){
		        $(this).parent().stop().animate({opacity:.1},100);
		    });
		    
		    $(".arrow-down img").live("click",function(){
		    	if(nbSlide<nbSlideMax){
                            $("#slide-thumbs").animate({top:"-=193px"});
                            nbSlide++;
		    	}
		    }).live("mouseover",function(){
		        $(this).parent().stop().animate({opacity:1},200);
		    }).live("mouseleave",function(){
		        $(this).parent().stop().animate({opacity:.1},100);
		    });
                    
                    //Single view
                    $(document).live("mousemove",function(e){
		        var maxY = ($(window).height()-(-$("#coco").css("top").replace("px", "")))-55;
		        var mousePosY = e.pageY;
		        if(mousePosY > maxY){
		            $(".arrow-right, .arrow-left").stop().animate({top:maxY},{duration:400,easing:'easeOutExpo'});
		        }
		        else if(mousePosY < 175){
		            $(".arrow-right, .arrow-left").stop().animate({top:"175px"},{duration:400,easing:'easeOutExpo'});
		        }
		        else if(!onLogo){
		            $(".arrow-right, .arrow-left").stop().animate({top:mousePosY-15},{duration:400,easing:'easeOutExpo'});
		        }
		    });
                    
                    $(".arrow-right").mouseenter(function(){
		        $(".thumb-right").stop().show().animate({opacity:0.8},{duration:1000,easing:'easeOutExpo'});
		    }).mouseleave(function(){
		    	$(".thumb-right").stop().animate({opacity:0},{duration:300,easing:'easeOutExpo',complete:function(){$(this).hide()}});
		    }).click(function(){
                        navSingleView("-500px","500px",true);
                    });
                    
		    $(".arrow-left").mouseenter(function(){
		        $(".thumb-left").stop().show().animate({opacity:0.8},{duration:1000,easing:'easeOutExpo'});
		    }).mouseleave(function(){
		    	$(".thumb-left").stop().animate({opacity:0},{duration:300,easing:'easeOutExpo',complete:function(){$(this).hide()}});
		    }).click(function(){
                        navSingleView("500px","-500px",false);
                    });
                    
                    $(window).bind("keypress",function(e){
                        if ((e.keyCode || e.which) == 37){
                            if(workID > 0) navSingleView("500px","-500px",false);
                        }
                        if ((e.keyCode || e.which) == 39){
                            if(workID < worksArr.length-1) navSingleView("-500px","500px",true);
                        }
                    });
		}
                

/*
 *		Appel Ajax, génération code HTML (works-single view)
 */
                
                function loadWorks(){
                    $.getJSON("js/works.json",function(data){
                        $.each(data.works, function(i){
                            worksArr[i] = [];
                            worksArr[i]["title"]=data.works[i].title;
                            worksArr[i]["name"]=data.works[i].name;
                            worksArr[i]["description"]=data.works[i].description;
                            worksArr[i]["context"]=data.works[i].context;
                            worksArr[i]["task"]=data.works[i].task;
                            worksArr[i]["langages"]=data.works[i].langages;
                            worksArr[i]["poster"]=data.works[i].poster;
                            worksArr[i]["thumb"]=data.works[i].thumb;
                            worksArr[i]["slideshow"]=data.works[i].slideshow;

                            thumb += "<div class='thumb'><div class='thumb-mask'><span id='"+i+"' class='thumb-title'>+ infos<br />"+worksArr[i]["title"]+"</span></div>";
                            thumb += "<img src='"+worksArr[i]["poster"]+"' alt='"+worksArr[i]["title"]+"' /></div>";
                        });
                        preload();
                    });
                }
                
                function preload(){
                    var k=0;
                    for(i=0;i<worksArr.length-1;i++){
                        for(j=0;j<worksArr[i]["slideshow"].length;j++){
                            preloadImg[k] = worksArr[i]["slideshow"][j];
                            k++;
                        }
                        preloadImg[k] =worksArr[i]["poster"];
                        k++;
                        preloadImg[k] =worksArr[i]["thumb"];
                        k++;
                    }
                    $.preLoadImages(preloadImg);
                }
                
		function ajaxLoader(page){
                    $("#ajax-content").animate(
                        {opacity:0},
                        {
                            duration:100,
                            complete:function(){
                                $(this).empty()
                                $(".arrow-left, .arrow-right").hide();
                                if(page=="works"){
                                    genGallery()
                                }
                                else{
                                    $.ajax({
                                        url: page+'.html',
                                        type:'GET',
                                        dataType:'html',
                                        success: function(codehtml) {
                                                $(codehtml).find("#wrap-content").appendTo("#ajax-content");
                                                $("#ajax-content, header, #nav, #nav-sup").animate({opacity:1},{duration:150});
                                        }
                                    });
                                }
                                if(slideInterval!=null) clearInterval(slideInterval);
                            }
                        }
                    );
		}
                
                function genGallery(){
                    codeGallery = "<div id='wrap-content'><div id='thumbs'><div id='slide-thumbs'>";
                    codeGallery += "</div><div id='nav-gallery'>";
                    codeGallery += "<div class='arrow-up'><img src='img/design/up.png' alt='up' /></div>";
                    codeGallery += "<div class='arrow-down'><img src='img/design/down.png' alt='down' /></div>";
	            codeGallery += "</div></div></div>";
                    
                    $("#ajax-content").append(codeGallery);
                    $("#slide-thumbs").append(thumb);
                    
                    nbSlide = 0;
                    navGallery();
                    $("#ajax-content, header, #nav, #nav-sup").animate({opacity:1},{duration:150});
                }
                
                function navGallery(){
                    nbSlideMax = $("#slide-thumbs").height()/$("#thumbs").height();
                    nbSlideMax=Math.floor(nbSlideMax)+1;
                }
                
                function genSingleView(workID){
                    $("#ajax-content").animate({opacity:1},{duration:150});
                    if(workID<0)workID=0;
                    else if(workID>worksArr.length-1)workID=worksArr.length-1;
                    $("header h1").text("Works /"+worksArr[workID]["title"]);
                    $("#wrap-content").empty();
                    codeSingleView = "<div id='slideshow'>";
                    for(i=0;i<worksArr[workID]["slideshow"].length;i++){
                        codeSingleView += "<img src='"+worksArr[workID]["slideshow"][i]+"' alt='"+worksArr[workID]["title"]+"' />";
                    }
                    codeSingleView += "</div>";
                    codeSingleView += "<div id='descr-work'><h2>"+worksArr[workID]["title"]+"</h2><div class='underline'></div>";
                    codeSingleView += worksArr[workID]["description"];
                    codeSingleView += "<div class='descr-tech'><div class='underline'></div>";
                    codeSingleView += "<p>"+worksArr[workID]["context"]+"<br />"+worksArr[workID]["task"]+"<br /><span>"+worksArr[workID]["langages"]+"</span></p>";
                    codeSingleView += "</div></div>";
                    
                    $("#wrap-content").append(codeSingleView);
                    
                    if(workID==0){
                        $(".arrow-left").hide();
                        $(".thumb-right img").attr("src",worksArr[workID+1]["thumb"]);
                        $(".arrow-right").show();
                    }
                    else if(workID==worksArr.length-1){
                        $(".arrow-right").hide();
                        $(".thumb-left img").attr("src",worksArr[workID-1]["thumb"]);
                        $(".arrow-left").show();
                    }
                    else{
                        $(".thumb-left img").attr("src",worksArr[workID-1]["thumb"]);
                        $(".thumb-right img").attr("src",worksArr[workID+1]["thumb"]);
                        $(".arrow-left, .arrow-right").show();
                    }
                    slideshow();
                }
                
                function navSingleView(left1,left2,sens){
                    $("#wrap-content").animate({
                            left:left1,
                            opacity:0
                        },
                        {
                            duration:500,
                            easing:'easeOutExpo',
                            complete: function(){
                                if(sens)workID = workID+1;
                                else workID = workID-1;
                                $.address.value("/works/"+worksArr[workID]["name"]);
                                $(this).css("left",left2).delay(500);
                                $(this).animate({opacity:1,left:"30px"},{duration:800,easing:'easeOutExpo'});
                                //$("header h1").text("Works /"+worksArr[workID]["title"]);
                        }
                    });
                }
                
                function slideshow(){
                    $("#slideshow img").css("position","absolute");
                    $("#slideshow img:gt(0)").hide();
                }
                function auto() {
                    var $image_suivante = $("#slideshow img:visible").next("img");
                    if($image_suivante.length<1) $image_suivante = $("#slideshow img:first");
                    $("#slideshow img:visible").fadeOut();
                    $image_suivante.fadeIn();
                }
