/* Scripts for handling the featured work navigation */

var fadeOutFeaturedNav = true;
var currentPage = 1;
var featuredHeight;

/**
 * Given a JSON string representing a work object, renders the object's properties on the 'featured' page.
 */
var work;

function initFeatured() {
    // Add rollover effect to featured and work drawers
    if(!isMobile) {
        $("#featured_drawer,#work_drawer").hover(function() {
            if($(this).hasClass("can_click")) {
                $(this).find(".drawer_expand img").attr("src", "/static/images/drawer_expand_hover.png");
                $(this).height(25);
                $(this).css("padding-top", "2px");
            }
        }, function() {
            if($(this).hasClass("can_click")) {
                $(this).find(".drawer_expand img").attr("src", "/static/images/drawer_expand.png");
                $(this).height(23);
                $(this).css("padding-top", "0px");
            }
        });
    
    	$("#featured_thumbs .tile").hover(function() {
            $(this).find(".spacer").hide();
            $(this).find(".rollover").show();
    	}, function() {
    	    $(this).find(".rollover").hide();
            $(this).find(".spacer").show();
    	});
    }
	
    $("#featured_drawer").click(function(eventObject) {
	    if($(this).hasClass("can_click") && !$(eventObject.target).is("#featured_nav li a")) {
    	    openDrawer("#" + this.id, {height: 150});
    	}
	});
	
    $("#featured .drawer_close").click(function() {
	    closeDrawer("#featured_drawer");
	});
	
	setTimeout(function() {
	    closeDrawer('#featured_drawer');
	    if(fadeOutFeaturedNav) {
    	    $(".featured_hover").fadeOut();
    	}
	}, 3000);
	
	parseFeaturedWork("" + $("#featured_json").attr("data-json"));
    featuredLoaded();
}

function setFeaturedHeights() {
    //set to height of window
    var imgHeight = $(".featured_item_" + work["order"] + " .featured_img").height();
    featuredHeight = Math.min($(window).height(), imgHeight + 200);
    $(".fixed_height").height(featuredHeight);
    
    $(".featured_calc_height").height(featuredHeight - headerHeight);
    
    //resize video player
    $("#featured_player_wrapper object").attr("width", $(window).width());
    $("#featured_player_wrapper object").attr("height", featuredHeight - headerHeight);
}
 
function parseFeaturedWork(json) {
    //for some reason this gets called twice by IE
    if(json !== undefined) {
        work = $.parseJSON(json)[0]["fields"];
    
        // Check to see if the image height is greater than 0; if so, the image has been loaded already at this point and we need
        // to explicitly call the position function
        if($(".featured_item_" + work["order"] + " .featured_img").height() > 0) {
            positionFeaturedItems();
        }
        $(".featured_item_" + work["order"] + " .featured_img").load(positionFeaturedItems);
    }
}

/**
 *  Absolutely positions the featured items based on the window dimensions (and, subsequently, background image location)
 */
function positionFeaturedItems() { 
    setFeaturedHeights();
    positionItemsWithRatios();
    $(".featured_item_" + work["order"] + " .featured_desc").show();
}

function positionItemsWithRatios() {
    var imgHeight = $(".featured_item_" + work["order"] + " .featured_img").height();
    var startY = featuredHeight - imgHeight;
    // If the image isn't properly loaded
    if(imgHeight == 0) {
        startY = 0;
    }
    
    var desc = $(".featured_item_" + work["order"] + " .featured_desc");
    
    //make sure the image doesn't extend either above or below the featured nav area
    var top = Math.max(startY + calculateTop(work["text_pos_y"]), 50); 
    top = Math.min(top, featuredHeight - desc.height() - 60);
    
    $(desc).css("left", calculateLeft(work["text_pos_x"]));
    $(desc).css("top", top);
}

function calculateTop(position) {
    return Math.round(featuredHeight * position / work["img_height"]);
}

function calculateLeft(position) {
    return Math.round($(window).width() * position / work["img_width"]);
}

function getFeaturedWork(order) {
    if(order == 'next') {
        currentPage = parseInt($("#featured_thumbs .selected").attr("order")) + 1;
        slideFeatured(1);
    } else if(order == 'prev') {
        currentPage = parseInt($("#featured_thumbs .selected").attr("order")) - 1;
        slideFeatured(-1);
    } else {    
        var numToSlide = order - currentPage;
        currentPage = order;
        slideFeatured(numToSlide);
    }
    
    return false;
}

function loadFeatured(callback) {
    $("#featured_next").load(featuredUrl + "?order=" + currentPage, function(response) {
        parseFeaturedWork($("#featured_json", response).attr("data-json"));
        if(callback !== undefined) {
            callback();
        }
    });
}

function slideFeatured(number) {
    var toSlide = $(".featured_item_" + work["order"]);
    var pageWidth = toSlide.outerWidth();
    toSlide.width(pageWidth);
    if(number < 0) {
        toSlide.before('<div id="featured_next"/>');
        loadFeatured(function() {
            $("#featured_item").css("left", -pageWidth);
            toSlide.css("left", pageWidth);
            var nextFeatured = $(".featured_item_" + work["order"]);
            nextFeatured.css("left", 0);
            nextFeatured.width("100%");
            doSlide(toSlide, nextFeatured, {left: 0});
        });
    } else if(number > 0) {
        toSlide.after('<div id="featured_next"/>');
        $("#featured_next").css("left", pageWidth);
        loadFeatured(function() {
            var nextFeatured = $(".featured_item_" + work["order"]);
            nextFeatured.css("left", pageWidth);
            nextFeatured.width("100%");
            doSlide(toSlide, nextFeatured, {left: -pageWidth});
        });
    }
}

function doSlide(toSlide, nextFeatured, slideParams) {
    nextFeatured.show();
    $("#featured_item").animate(slideParams, function() {
        toSlide.remove();
        $("#featured_item").css("left", 0);
        $("#featured_item").width("100%");
        nextFeatured.css("left", 0);
        nextFeatured.unwrap();
        featuredLoaded();
    });
}

/**
 *  Gets called when the featured_work template is loaded.
 */
function featuredLoaded() {
    setFeaturedHeights();
    
    //add rollover and on states 
    if(!isMobile && $(".featured_content .featured_link").attr("data-rollover") !== "/static/") {
        $(".featured_content .featured_link img").hover(function() {
            $(this).attr("src", $(this).parent().parent().attr("data-rollover"));
        }, function() {
            $(this).attr("src", $(this).parent().parent().attr("data-normal"));
        });
    }
    if($(".featured_content .featured_link").attr("data-on") !== "/static/") {
        $(".featured_content .featured_link img").mousedown(function() {
            $(this).attr("src", $(this).parent().parent().attr("data-on"));
        });
        $(".featured_content .featured_link img").mouseup(function() {
            $(this).attr("src", $(this).parent().parent().attr("data-normal"));
        });
    }
    
	if(!isMobile) {
    	//add rollovers to left/right arrows
	    $(".featured_content").mouseenter( function() {
            $(".featured_hover").show();
            fadeOutFeaturedNav = false;
        });
        $(".featured_content").mouseleave( function() {
            $(".featured_hover").hide();
        });
        
        var hovers = $(".featured_hover a");
        hovers.slice(0,1).hover(function() {
            $(this).find("img").attr("src", "/static/images/icon_featured_left_hover.png");
        }, function() {
            $(this).find("img").attr("src", "/static/images/icon_featured_left.png");
        });
        hovers.slice(1,2).hover(function() {
            $(this).find("img").attr("src", "/static/images/icon_featured_right_hover.png");
        }, function() {
            $(this).find("img").attr("src", "/static/images/icon_featured_right.png");
        });
    }
    
    if(work !== undefined) {
        currentPage = work["order"];
    }
    
    //update selections in drawer
    $("#featured_nav li").removeClass("on");
    $("#featured_nav [order='" + currentPage + "']").addClass("on");
    $("#featured_thumbs td").removeClass("selected");
    $("#featured_thumbs [order='" + currentPage + "']").addClass("selected");
}

function loadFeaturedVideo(youTubeVideoId) {
    videos["featuredytplayer"] = {
        "yt_id": youTubeVideoId,
        "wrapperSelector": "#featured_player_wrapper",
        "embed": "featuredYtPlayer"
    };
    
    // Lets Flash from another domain call JavaScript
    var params = { allowScriptAccess: "always", wmode: 'transparent' };
    // The element id of the Flash embed
    var atts = { id: "featuredYtPlayer" };

    $("#featured_player_wrapper").height(featuredHeight - headerHeight);
    $("#featured_player_wrapper").show();
    
    // All of the magic handled by SWFObject (http://code.google.com/p/swfobject/)
    swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=featuredytplayer&version=3", "featured_player_div", $(window).width(), (featuredHeight - headerHeight), "8", null, null, params, atts, function(e) {
        if(!e.success) {
            $("#featured_player_wrapper .hover").hide();
            $("#featured_player_wrapper img.close").css({
                top: "5px",
                right: "5px"
            });
            $("#featured_player_wrapper").css("background-color", $("#featured_item .featured_content").css("background-color"));
    		jwplayer("featured_jw_player").setup({
                file: "http://www.youtube.com/watch?v=" + videos['featuredytplayer']['yt_id'],
                width: $(window).width() - 60,
                height: featuredHeight - headerHeight - 60,
                modes: [{ type: "html5" }],
                controlbar: 'bottom',
                wmode: 'transparent'
            });
            /*
            jwplayer("featured_jw_player").onReady(function() {
                $("#featured_jw_player *").css("z-index", "4");
                var data = "";
                $.each($("#featured_jw_player *"), function(index, value) {
                    data += $(value).attr("nodeName") + " " + $(value).attr("type") + "   ";
                    
                });
                alert(data);
            });*/
        }
    });    
    return false;
}

function closeFeaturedVideo() {
    var ytPlayer = document.getElementById(videos["featuredytplayer"]["embed"]);
    if(ytPlayer === null) {
        jwplayer("featured_jw_player").remove();
        $("#featured_player_wrapper").css("background-color", "");
    } else {
        ytPlayer.pauseVideo();
    }
    $("#featured_player_wrapper").hide();
    return false;
}
