var TIME_IMAGE_TRANSITION = 0;
var TIME_LOADING_TRANSITION = 0;
var TIME_MENU_TRANSITION = 500;

function preload(src,load) {
    var old = false;
    $('body > div.image').each(function(i,v) {
        if ($(v).css('background-image')=='url("'+src+'")') {
            old = true;
            div = v;
        }
    });
    if (!old) {
        //if (load)
            //$('#loading').fadeIn(TIME_LOADING_TRANSITION);
        var div = document.createElement('div');
        $(div).addClass('image');
        var img = document.createElement('img');
        div.appendChild(img);
        $(img).attr('src',src);
        $(img).ready(function() {
            $(div).children().remove();
            $(div).css('background-image','url('+src+')');
            if (load) {
                //$('#loading').fadeOut(TIME_LOADING_TRANSITION);
                show(div);
            }
        });
        document.body.appendChild(div);
    }
    else if (load) {
        show(div);
    }
}

function show(div) {
    $('body > div.image.active, body > div.image:visible').css('z-index',-1);
    $('body > div.image.active, body > div.image:visible').fadeOut(TIME_IMAGE_TRANSITION,function() {
        $(this).removeClass('active');
    });
    $(div).css('z-index',0);
    $(div).fadeIn(TIME_IMAGE_TRANSITION,function() {
        $(this).addClass('active');
    });
}

function hide() {
    $('body > div.image.active, body > div.image:visible').fadeOut(TIME_IMAGE_TRANSITION,function() {
        $(this).removeClass('active');
    });
}

function slideDown(e,fn) {
    var height = e.height()-6;
    e.css({
        height:0,
        overflow:'hidden'
    });
    e.show().animate({
        'margin-bottom':'30px',
        'margin-top':'30px',
        'min-height':height
    },TIME_MENU_TRANSITION,function(){
        e.css({
            height:'auto',
            overflow:'visible'
        });
        if (typeof(fn)=='function')
            fn();
    });
}

function slideUp(e,fn) {
    e.css({
        'min-height':0,
        overflow:'hidden'
    });
    e.animate({
        height:0,
        'margin-bottom':0,
        'margin-top':0
    },TIME_MENU_TRANSITION,function(){
        e.css({
            display:'none',
            height:'auto',
            'margin-bottom':0,
            'margin-top':0,
            overflow:'visible'
        });
        if (typeof(fn)=='function')
            fn();
    });
}

$(document).ready(function() {
    $('ul#menu > li > a').click(function() {
        if ($(this).parent().hasClass('active'))
            return;
        $('ul#menu > li.active').removeClass('active');
        $(this).parent().addClass('active');
        $('ul#menu > li > ul:visible').slideUp(TIME_MENU_TRANSITION);
        $('ul#menu > li > div:visible').slideUp(TIME_MENU_TRANSITION);
        $(this).next().slideDown(TIME_MENU_TRANSITION);
        if ($(this).next().children('ul.images').children().length)
            preload($(this).next().children('ul.images').children().eq(0).text(),true);
        else
            hide();
        $('ul#menu > li > ul > li > a').next().slideUp(TIME_MENU_TRANSITION);
        $('ul#menu > li > ul > li > ul > li > a').next().slideUp(TIME_MENU_TRANSITION);
        $('ul#menu > li .active').removeClass('active');
        $(this).parent().parent().children().each(function(i,v) {
            if (v==this)
                return;
            v.animate({
                'margin-top':'0',
                'margin-bottom':'0'
            },TIME_MENU_TRANSITION);
        });
        $(this).parent().animate({
            'margin-top':'30px',
            'margin-bottom':'30px'
        },TIME_MENU_TRANSITION);
    });
    $('ul#menu > li > ul > li > a').click(function() {
        if ($(this).parent().hasClass('active'))
            return;
        $('ul#menu > li > ul > li.active').removeClass('active');
        $(this).parent().addClass('active');
        $('ul#menu > li > ul > li > ul:visible,ul#menu > li > ul > li > div:visible').each(function(i,v) {
            slideUp($(v));
        });
        slideDown($(this).next());
        $(this).parent().parent().children().each(function(i,v) {
            $(v).children('ul').children().animate({
                'margin-top':'0',
                'margin-bottom':'6px'
            },TIME_MENU_TRANSITION);
        });
        if ($(this).next().children('ul.images').children().length)
            preload($(this).next().children('ul.images').children().eq(0).text(),true);
        /*else
            hide();*/
        slideUp($('ul#menu > li > ul > li:not(.active) > ul > li > a').next());
        $('ul#menu > li > ul > li > ul > li').removeClass('active');
    });
    $('ul#menu > li > ul > li > ul > li > a').click(function() {
        if ($(this).parent().hasClass('active'))
            return;
        $('ul#menu > li > ul > li > ul > li.active').removeClass('active');
        $(this).parent().addClass('active');
        slideUp($('ul#menu > li > ul > li > ul > li > div:visible'));
        slideDown($(this).next());
        var length = $(this).next().children('ul.images').children().length;
        $(this).next().children('ul.images').children().each(function(i,v) {
            preload($(v).text(),i==0);
        });
        $(this).next().children('p.nav').children().children('abbr').html((length?'1':'0')+'/'+length);
    });
    $('ul#menu > li > ul > li > ul > li > div > p.nav a.prev').click(function() {
        var url = $('body > div.image.active').css('background-image').substring(5,$('body > div.image:visible').css('background-image').length-2);
        if (url[0]!='h')
            url = $('body > div.image.active').css('background-image').substring(4,$('body > div.image:visible').css('background-image').length-1);
        var images = $(this).parent().parent().prev().children().length;
        var image = 0;
        var a = this;
        $(this).parent().parent().prev().children().each(function(i,v) {
            i--;
            if ($(v).text()==url)
                image = i-images*Math.floor(i/images);
        });
        url = $(this).parent().parent().prev().children().eq(image);
        $('body > div.image').each(function(i,v) {
            if ($(v).css('background-image')=='url("'+url.text()+'")' || $(v).css('background-image')=='url('+url.text()+')') {
                show(v);
                $(a).next().html((image%images+1)+'/'+images);
            }
        });
    });
    $('ul#menu > li > ul > li > ul > li > div > p.nav a.next').click(function() {
        var url = $('body > div.image.active').css('background-image').substring(5,$('body > div.image:visible').css('background-image').length-2);
        if (url[0]!='h')
            url = $('body > div.image.active').css('background-image').substring(4,$('body > div.image:visible').css('background-image').length-1);
        var images = $(this).parent().parent().prev().children().length;
        var image = 0;
        var a = this;
        $(this).parent().parent().prev().children().each(function(i,v) {
            i++;
            if ($(v).text()==url)
                image = i-images*Math.floor(i/images);
        });
        url = $(this).parent().parent().prev().children().eq(image);
        $('body > div.image').each(function(i,v) {
            if ($(v).css('background-image')=='url("'+url.text()+'")' || $(v).css('background-image')=='url('+url.text()+')') {
                show(v);
                $(a).prev().html((image%images+1)+'/'+images);
            }
        });
    });
    
    $('li.open > a').each(function() {
        $(this).click();
    });
});
