////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
var lastScroll = 0;
var scrollInterval = 100;
var scrollFrame = 15; // time to register multiple keys, fe up+left
var scrollTimeout = false;
var scrollTimes = new Array();
var is_scrolling_animation = false;
var TempMouseDownHandle = null; // this is used by the video player volume
scrollTimes["up"] = 0;
scrollTimes["down"] = 0;
scrollTimes["left"] = 0;
scrollTimes["right"] = 0;

function handleKeyDown(e) {
    if(is_in_slideshow_state == true) {
        return false;
    }
    var currTime = new Date().getTime();
    var keycode = e.keyCode;
    var doTimeout = true;
    var param = {};// {'easing':'elasout'};
    switch(keycode) {
        case 38: // up
            doPageScroll("up");
            break;
        case 40: // down       
            doPageScroll("down");
            break;             
        case 37: // left       
            doPageScroll("left");
            break;             
        case 39: // right
            doPageScroll("right");
            break;
        default: 
            doTimeout = false;
    }
    return !doTimeout;
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function doPageScroll(direction){
    // first we have to find the nearest object (rectangle collusion)
    var bl = $(document).scrollLeft();
    var bt = $(document).scrollTop();
    var current_item = null;
    var current_item_dist = null;
    var current_item_index = 0;
    $('.grid-item').each(function(e){
       if(current_item == null){
           current_item = this;
           var deltaX = bl - $(this).offset().left;
           var deltaY = bt - $(this).offset().top;           
           current_item_dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
       }else{
           var deltaX = $(this).offset().left - bl;
           var deltaY = $(this).offset().top - bt;
           var dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
           if(dist < current_item_dist){
               current_item = this;
               current_item_dist = dist;
               current_item_index = e;
           }
       }
    });
    
    if(direction == "up"){        
        var above_item_dist = null;
        var above_item_index = current_item_index;
        var bl = $(current_item).offset().left;
        var bt = $(current_item).offset().top - 1000;    
        $('.grid-item').each(function(e){
           var deltaX = $(this).offset().left - bl;
           var deltaY = $(this).offset().top - bt;
           var dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
           if(above_item_dist == null || dist < above_item_dist){
               above_item_dist = dist;
               above_item_index = e;
           }
        });
        if(current_item_index != above_item_index) {
            scrollToGrid('.grid-item:eq('+above_item_index+')', 400);
        }
    }
    else if(direction == "down"){
        var below_item_dist = null;
        var below_item_index = current_item_index;
        var bl = $(current_item).offset().left;
        var bt = $(current_item).offset().top + 1000;    
        $('.grid-item').each(function(e){
           var deltaX = $(this).offset().left - bl;
           var deltaY = $(this).offset().top - bt;
           var dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
           if(below_item_dist == null || dist < below_item_dist){
               below_item_dist = dist;
               below_item_index = e;
           }
        });
        if(current_item_index != below_item_index) {
            scrollToGrid('.grid-item:eq('+below_item_index+')', 400);
        }
    }
    else if(direction == "left"){
        var left_item_dist = null;    
        var left_item_index = current_item_index;
        var bl = $(current_item).offset().left - 1250;
        var bt = $(current_item).offset().top;     
        //console.log("current_item_dist: " + current_item_dist + ", current_item_index: " + current_item_index); 
        $('.grid-item').each(function(e){
           var index = e;
           var deltaX = $(this).offset().left - bl;
           var deltaY = $(this).offset().top - bt;
           var dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
           //console.log("index: " + index + ", bl: " + bl + ", bt: "+ bt + ", deltaX: "+ deltaX + ", deltaY: "+ deltaY + ", dist: "+ dist);
           if(left_item_dist == null || dist < left_item_dist){
               left_item_dist = dist;
               left_item_index = index;
           }
        });
        //console.log("currIndex: " + current_item_index + ", left_item_index: "+ left_item_index);
        if(current_item_index != left_item_index) {
            scrollToGrid('.grid-item:eq('+left_item_index+')', 400);
        }
        // var ind = current_item_index - 1;
        // if(ind < 0) ind = 0;
        // scrollToGrid('.grid-item:eq('+ind+')', 500); 
    }
    else if(direction == "right") {
        var right_item_dist = null;    
        var right_item_index = current_item_index;
        var bl = $(current_item).offset().left + 1250;
        var bt = $(current_item).offset().top;     
        $('.grid-item').each(function(e){
           var index = e;
           var deltaX = $(this).offset().left - bl;
           var deltaY = $(this).offset().top - bt;
           var dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
           if(right_item_dist == null || dist < right_item_dist){
               right_item_dist = dist;
               right_item_index = index;
           }
        });
        if(current_item_index != right_item_index) {
            scrollToGrid('.grid-item:eq('+right_item_index+')', 400);
        }
        // var ind = current_item_index + 1;
        // scrollToGrid('.grid-item:eq('+ind+')', 500);
    }
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function startvideo(id, file) {
    $(id).flowplayer(
        getBaseURL() + 'flowplayer-3.1.5.swf', file);
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function stopAllPlayers() {
    $f("*").each(function() {
        this.stop();
    });   
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function closeAllPlayers() {
    $f("*").each(function() {
        this.close();
    });
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

function scrollToGridDesktop(target, dur) {
    // stop all playing videos :)
    stopAllPlayers();
    
    var ajaxtarget = target;
    target = target.replace("#/", "#");
    
    if($(target).hasClass('grid-item') == true) {
        var newx = $(target).offset().left;
        var newy = $(target).offset().top;
        var is_grid_item = true;
    } else {
        var newx = $(target).parent('.grid-item').offset().left;
        var newy = $(target).parent('.grid-item').offset().top; 
        var is_grid_item = false;
    }
    //offset based on screen width
    var sw = $(window).width();
    var sh = $(window).height();
    var gridwidth = 980;     // assume these dimensions
    var gridheight = 630;
    if (sw > gridwidth) {
        newx -= ((sw - gridwidth) / 2);
    } else if (sw < gridwidth) {
        newx += ((gridwidth - sw) / 2);
    }
    if (sh > gridheight) {
        newy -= ((sh - gridheight) / 2);
    }
    var tarpos = {'left' : newx, 'top' : newy };
    
    if (is_grid_item == true) {
        var dir_id = $(target).children("div:first").attr("id");
        if (dir_id != undefined) {
            ajaxtarget = "/" + dir_id;
            //console.log("dir_id:" + dir_id);
            //console.log("ajaxtarget:"+ajaxtarget);
        } else if (dir_id != undefined && dir_id.indexOf("grid-item") < 0) {
            ajaxtarget = ajaxtarget;
        } else {
            ajaxtarget = window.location.hash;
        }
    }
    
    if(movementEnabled == false) {
        //$.scrollLeft(newx).scrollRight(newy);
        $.scrollTo(tarpos, 0, {
            'queue': false, 
            'onAfter': function(){
                // window.location.hash = scrollToGridDesktop_target;
                // $.scrollTo(scrollToGridDesktop_tarpos, 0, {'queue': false});
            }    
        });
    }else{
        is_scrolling_animation = true;
        $.scrollTo(
            tarpos, 
            dur, 
            {
                'queue': true, 
                'axis': 'yx', 
                'onAfter':function(){
                    is_scrolling_animation = false;
                    // console.log("onAfter:target:"+scrollToGridDesktop_target+":"+scrollToGridDesktop_dur);
                    // // check if this is the inital index
                    // if(scrollToGridDesktop_dur == 0 && scrollToGridDesktop_target == "#index"){return;}
                    // window.location.hash = scrollToGridDesktop_target;
                    // $.scrollTo(scrollToGridDesktop_tarpos, 0, {'queue':false});
                }
            });
    }
    window.location.hash = ajaxtarget;
    // proload images
    checkLazyLoadDesktop($(target));
    return false;
}
function scrollToGrid(target, dur) {
    scrollToGridDesktop(target, dur);
}

////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function checkLazyLoadDesktop(elem){
    if(elem != null) {
        // check based on within this element (used for when we know what we
        // are scrolling to
        $(".projectlist-sl-notloaded", elem).each(function(){
            $(".smallthumb", elem).each(function(index, Element){
                bgurl = $(Element).attr("bgurl");
                if(bgurl != undefined) {
                    $(Element)
                        .css("background-image", "url(\"" + bgurl + "\")")
                        .removeAttr("bgurl");
                }
            });
            $(this).removeClass("projectlist-sl-notloaded");
        });
    } else {
        // check based on window coordinates
        var wind = $(window);
        var sw = wind.width();
        var sh = wind.height();
        var xmin = wind.scrollLeft();
        var xmax = xmin + sw;
        var ymin = wind.scrollTop();
        var ymax = ymin + sh;
        var xpos,ypos,offset;
        $(".projectlist-sl-notloaded").each(function(){
            offset = $(this).offset();
            xpos = offset.left + ($(this).width() / 2);
            ypos = offset.top;
            if(xpos >= xmin && xpos <= xmax && ypos >= ymin && ypos <= ymax) {
                $(".smallthumb", this).each(function(index, Element){
                    bgurl = $(Element).attr("bgurl");
                    if(bgurl != undefined) {
                        $(Element)
                            .css("background-image", "url(\"" + bgurl + "\")")
                            .removeAttr("bgurl");
                    }
                });
                $(this).removeClass("projectlist-sl-notloaded");
            } 
        });
    }
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function handleClipFinishedGlobal(vid_uid){
    var vid_box = $("#vid-box-" + vid_uid);
    var dir_box = vid_box.parents(".dirbox");
    var links = $(".project-li a", dir_box);
    var next_video_flag = false;
    var curr;
    links.each(function() {
        curr = $(this);
        if(next_video_flag == true) {
            loadProject(curr.attr("dir_uid"), curr.attr("proj_uid"), curr.attr("cat"));
            next_video_flag = false;
            return false;
        } else if(curr.attr("proj_uid") == vid_uid) {
            next_video_flag = true;
        }
    });
}
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
$(document).ready(function() {
    // add keyboard navigation
    $(this).keydown(handleKeyDown);
    
    // now do a lazy load
    $(window).scroll(function(e){
        if(is_scrolling_animation == false) {
            checkLazyLoadDesktop(null);
        }
    });
    
    // setup gallery plugin
    $(".gallery-link").colorbox({
        transition: "fade",
        speed: 200,
        opacity: .75, 
        onOpen:function(){ is_in_slideshow_state = true; },
        onClosed:function(){ is_in_slideshow_state = false; }
    });
    
    // setup gallery captions
    $("#gallery .smallthumb")
        .mouseenter(function(){
            $(this).fadeTo(400, 1);
            $('.gallery-caption', this).fadeTo(400, .8);
        })
        .mouseleave(function(){
            $(this).fadeTo(600, .75);
            $('.gallery-caption', this).fadeTo(600, 0);
        });
    
    // load thumb images all at once instead of lazy load
    // var bgurl = "";
    // $(".smallthumb").each(function(index, Element){
    //     bgurl = $(this).attr("bgurl");
    //     if(bgurl != undefined) {
    //         $(this).css("background-image", "url(\"" + bgurl + "\")");
    //     }
    // });
});
////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
