/**
 * Visual Vibrations
 *
 * @author http://23JUL.com
 */

var vv_scrollduration = 1000;
var vv_border = 0;
var vv_lastpage = 0;
var vv_screen = "";
var vv_timeout;
var vv_query;
var vv_num;
var vv_speed = "normal";
var vv_delay = 3000;

function startup()
{
    build_navigation();
    var hash = document.location.hash
    if (hash == "") {
        hash = "#!page-splash";
    }
    show_page(hash.substr(2));
    build_events();
}

function build_navigation()
{
    var nav = $(".navigation").html();

    /// traverse all pages ..
    $(".page").each(function(){
        // .. prepend navigation in each page
        $(nav).prependTo($(this));

        // .. round each corners
        $(this).addClass("cornerall");

        // .. add class to each labeled section
        var id = this.id;
        if (id) {
            $("a[href*=" + id + "]", this).addClass("section");
        }
    });
}

function build_events()
{
    // links
    $("a.nn").live("click", function(){
        var hashmark = "#!";
        var href = unescape($(this).attr("href"));
        var link = href.substr(href.indexOf(hashmark) + hashmark.length);
        show_page(link);
    });
    
    // open external links in new window
    $(".linklist a[href^=http]").attr('target','_blank');

    // home
    $("#home").live("click", function(){
         show_page("page-splash");
         document.location = "#!page-splash";
    });
    
    // inverse
    $(".inverse").live("click", function(){
        if ($(".page").hasClass("mask")) {
            $(".page").removeClass("mask");
        } else {
            $(".page").addClass("mask");
        }
    });

    // quote
    $(".quote").hover(
        function(){
            $("#quote-la").hide();
            $("#quote-en").show();
        },
        function(){
            $("#quote-en").hide();
            $("#quote-la").show();
        }
    );

    // vibrate logo
    $("h1").vibrate();

    $("#splash").live('click', function(){
        show_page("page-visualvibrations");
    });

}

function show_page(id)
{
    var screen = null;
    $(".screen").each(function(){
        if ($(this).find("#" + id).length > 0) {
            screen = this;
            $(this).show();
        } else {
            $(this).hide();
        }
    });
    show_screen(screen.id);
    $.scrollTo("#" + id, vv_scrollduration,  {
        "offset": -140,
        "onAfter": function() {}
    });
}

function show_screen(id)
{
    switch (id) {
    case "splash":
        vv_border = 0;
        fbg_showli("#fbg-splash li", 0);
        break;

    case "content":
        vv_border = 0;
        fbg_stop();
        fbg_showli("#fbg-content li", 0, true);
        fbg_page();
        break;

    case "slide1":
        vv_border = 100;
        fbg_stop();
        vv_query = "#fbg-slide1 li";
        vv_num = -1;
        fbg_play();
        break;

    case "slide2":
        vv_border = 100;
        fbg_stop();
        vv_query = "#fbg-slide2 li";
        vv_num = -1;
        fbg_play();
        break;
    }
}

function resize_img(img)
{
    // scale div to windows
    var winW = $(window).width();
    var winH = $(window).height();
    $('#fbg').width(winW).height(winH);

    // border
    var b = vv_border;

    //
    var imgW = 0;
    var imgH = 0;

    if (img.width == 0 && img.height == 0) {
        $(img).parent().fadeIn("normal");
    }

    var initW = img.width;
    var initH = img.height;

    var ratio = initW == 0
              ? .5
              : initH / initW;
    
//    if (typeof f != "undefined") {
//        imgW = winW;
//        imgH = winW * ratio;
//    }
//    if (initH < winH){

    imgH = winH - b;
    imgW = imgH / ratio;
    
//    
//    } else {
//        imgW = winW;
//        imgH = winW * ratio;
//    }
    $(img).width(imgW).height(imgH);
    $(img).css("margin-left", ((winW - imgW) / 2));
    $(img).css("margin-top", (b / 2));
}

function fbg_play()
{
    var num = vv_num
    num++;
    var len = $(vv_query).length;
    if (num >= len) {
        fbg_hideli();
        show_page("page-multimedia");
        vv_num = 0;
        return;
    }
    fbg_showli(vv_query, num);
    vv_timeout = setTimeout(fbg_play, vv_delay);
}

function fbg_page()
{
    var query = ".page:visible";
    var num = isQueryInScreen(query);
    if (num !== null)  {
        fbg_showli(vv_query, num, true);
    }
    vv_timeout = setTimeout(fbg_page, 1000);
}

function fbg_showli(query, num, bhide)
{
    if (vv_query == query && vv_num == num) {
        return;
    }

    var o1;
    var qe = typeof vv_query != "undefined";

    if (qe) {
        o1 = $(vv_query).get(vv_num);
    }
    var o2 = $(query).get(num);

    var img = $(o2).find("img").get(0);
    
    resize_img(img);

    if (qe) {
        if (bhide) {
            $(o1).hide(1000);
        } else {
            $(o1).fadeOut(vv_speed);
        }
        
    }
    $(o2).fadeIn(vv_speed);

    vv_query = query;
    vv_num = num;
}

function fbg_hideli()
{
    var o1 = $(vv_query).get(vv_num);
    $(o1).hide();
}


function fbg_stop()
{
   if (!vv_timeout) {
       clearTimeout(vv_timeout);
       vv_timeout = null;
   }
}

function isQueryInScreen(query)
{
    // height of window
    var wh = parseInt($(window).height() * .6); // 40%

    // current position
    var c1 = parseInt( $(window).scrollTop() );
    var c2 = c1 + wh;
    
    var each, h, t, b;
    var map = {};
    var max, lst;
    $(query).each(function(index){
        each = this;

        // position of page
        t = wh + parseInt( $(each).position().top );

        // height of page
        h = parseInt( $(each).outerHeight() );

        // position + height
        b = t + h;
        
        //$(".redline", each).height(h).offset({top: (t) + "px", left:"40%"});
            
        // for now, only overlap
        if (b > c1 && t < c2) {
            map[index] = h;
        }
    });

    // queue
    max = 0;
    lst = null;
    for (var i in map) {
        if (map[i] > max) {
            max = map[i];
            lst = i;
        }
    }
    
    return lst;
}

