//This file contains JavaScript functionality related to photo album page functionality of http://www.projecttree.com/album.html
//This code maybe reused and modified so long as this note remains here
//Copyright 2003-2005 Mike Radin, with much input and code from Mark Mentovai (jackassofalltrades.com)

var thumbsWidth;
var defaultOffset = 5;
var desc = new Array();
var albums = new Array();
var imgroot = "./img/";
var holder = "holder.jpg";
var currentalbum;
var currentimg = new Image();
var currentpage = 0;
var timer;
var pagesize;
var debug = 0;
var badbrowser = (window && window.createPopup) ? 1 : 0;
var photowindow = null;
var title = "";
var list = 0; // drop/list 0/1
var pop = 0; // overlay/pop/show 0/1/2

function init(){
    if(debug){ alert("bad browser: " + badbrowser); }
    loadalbums();
    var albumnumber = 0;
    var picnumber = 0;
    var arg_pairs = parsequery();
    if(arg_pairs != 0){
        albumnumber = getqueryparam(arg_pairs, 'album');
        picnumber = getqueryparam(arg_pairs, 'img');
    }

    pagesize = getpagesize();

    if(list == 1){ listalbums(); }
    else{ dropalbums(albumnumber); }

    setalbum(albumnumber);

    if(pop == 0){
        document.getElementById('top').style.display = "none";
        document.getElementById('pic').style.display = "none";
    }

    initsizes();

    if(picnumber >= 1){
        loadpage(Math.floor((picnumber - 1 / pagesize) / pagesize));
        droppages();
        loadpic(((picnumber - 1) % pagesize) + 1);
    }else{
        loadpic(1);
    }

    return;
}
function forceprops(listopt, popopt, mainroot){
    list = listopt;
    pop = popopt;
    if(mainroot != null && mainroot != ''){ imgroot = mainroot; }
    return;
}
function initsizes(){
    thumbsWidth = document.getElementById('thumbs').offsetWidth;
    if(debug){ alert("thumbsWidth: " + thumbsWidth); }

    if(pop ==0){
        document.getElementById('top').style.height = thumbsWidth;
        document.getElementById('top').style.width = thumbsWidth;
        document.getElementById('pic').style.height = thumbsWidth;
        document.getElementById('pic').style.width = thumbsWidth;

        document.getElementById('thumbs').style.left = defaultOffset;
        document.getElementById('thumbs').style.top = defaultOffset;
        document.getElementById('top').style.left = defaultOffset;
        document.getElementById('top').style.top = defaultOffset;
        document.getElementById('pic').style.left = defaultOffset;
        document.getElementById('pic').style.top = defaultOffset;
    }
}
function overlaypic(id){
    if(!currentimg.complete){
        clearInterval(timer);
        timer = setInterval("overlaypic(" + id + ")", 300);
        return;
    }else{
        clearInterval(timer);
        timer = null;
    }
    document.getElementById('top').style.display = "";
    if(badbrowser){ document.getElementById('top').filters.alpha.opacity = 80; }
    else{ document.getElementById('top').style.MozOpacity = 0.8; }

    width = currentimg.width;
    height = currentimg.height;
    initsizes();

    document.getElementById('pic').style.left = (thumbsWidth - width)/2+5;
    document.getElementById('pic').style.top = (thumbsWidth - height)/2+5;

    if(currentalbum.source){ var name = imgroot + currentalbum.root + "/" + currentalbum.source[parseInt(id + (currentpage * pagesize))] + ".jpg"; }
    else{ var name = imgroot + currentalbum.root + "/" + currentalbum.prefix + parseInt(id + (currentpage * pagesize)) + ".jpg" }

    if(debug){ alert("opening: " + name); }
    document.getElementById('fullpic').innerHTML = "<img src=\"" + name + "\">";
    //document.getElementById('fulldesc').innerHTML = currentalbum.desc[(id + (currentpage * pagesize))];
    document.getElementById('pic').style.display = "";
    if(debug){ alert("opened: " + id + " at " + ((thumbsWidth - width)/2 + 5) + "," + ((thumbsWidth - height)/2 + 5)); }
    return;
}
function poppic(id){
    if(!currentimg.complete){
        clearInterval(timer);
        timer = setInterval("poppic(" + id + ")", 300);
        return;
    }else{
        clearInterval(timer);
        timer = null;
    }

    var length = ((currentalbum.desc) ? currentalbum.desc.length : currentalbum.source.length);
    if(parseInt(id + (currentpage * pagesize)) > length - 1){ return; }

    if(currentalbum.source){ var name = imgroot + currentalbum.root + "/" + currentalbum.source[parseInt(id + (currentpage * pagesize))] + ".jpg"; }
    else{ var name = imgroot + currentalbum.root + "/" + currentalbum.prefix + parseInt(id + (currentpage * pagesize)) + ".jpg" }

    if(debug == 1){ alert("name: " + name); }
    if(photowindow && !photowindow.closed){
		photowindow.close();
        photowindow = self.open('pic.html?pic=' + name, 'photo', 'width=500,height=375,status=no,scrollbars=no,resizable=no,screenX=30,screenY=30,left=30,top=30');
		photowindow.focus();
    }else{
        photowindow = self.open('pic.html?pic=' + name, 'photo', 'width=500,height=375,status=no,scrollbars=no,resizable=no,screenX=30,screenY=30,left=30,top=30');
		photowindow.focus();
    }
    return;
}
function showpic(id){
    if(!currentimg.complete){
        clearInterval(timer);
        timer = setInterval("showpic(" + id + ")", 300);
        return;
    }else{
        clearInterval(timer);
        timer = null;
    }

    if(currentalbum.source){ var name = imgroot + currentalbum.root + "/" + currentalbum.source[parseInt(id + (currentpage * pagesize))] + ".jpg"; }
    else{ var name = imgroot + currentalbum.root + "/" + currentalbum.prefix + parseInt(id + (currentpage * pagesize)) + ".jpg" }

    document.getElementById('fullpic').innerHTML = "<img src=\"" + name + "\">";
    document.getElementById('pic').style.display = "";
    return;
}
function selectpic(id, state){
    var length = ((currentalbum.desc) ? currentalbum.desc.length : currentalbum.source.length);
    if(length - 1 < id){ return; }
    if(state == 1){
        document.getElementById("photo" + id).style.border = "2px solid #FF0000";
        document.getElementById("photo" + id).style.padding = "1px";
    }else if(state == 0){
        document.getElementById("photo" + id).style.border = "1px solid #000000";
        document.getElementById("photo" + id).style.padding = "2px";
    }
    return;
}
function getpagesize(){
    var i = 0;
    while(true){
        if(document.getElementById('photo' + (++i)) == null){ break; }
    }
    return i - 1;
}
function hide(){
    if(pop == 0){
        document.getElementById('top').style.display = "none";
        document.getElementById('pic').style.display = "none";
    }else if(pop == 1){
        if(photowindow && !photowindow.closed){ photowindow.close(); }
    }else if(pop == 2 && (holder == null || holder == "")){
        document.getElementById('pic').style.display = "none";
    }else if(pop == 2 && (holder != null || holder != "")){
        document.getElementById('fullpic').innerHTML = "<img src=\"" + imgroot + holder + "\">";
        document.getElementById('pic').style.display = "";
    }
    return;
}
function setalbum(id){
    id = ((null == id) ? id = document.getElementById('albumdrop').value : id);
    currentalbum = albums[id];
    document.title = currentalbum.name;
    hide();

    if(list == 1){ listpages(); }
    else{ droppages(); }
    loadpage(0);
    //loadpic(1);
    return;
}
function loadpage(pagenumber){
    if(pagenumber == null){
        pagenumber = document.getElementById('pagedrop').value;
    }
    var albumstart = 1 + (pagenumber * pagesize);
    var pagestart = 1;
    currentpage = pagenumber;
    while(true){
        var present = false;
        if(currentalbum.desc && currentalbum.desc[albumstart] != null){ present = true; }
        else if(currentalbum.source && currentalbum.source[albumstart] != null){ present = true; }

        if(document.getElementById('photo' + pagestart) && present){
            if(currentalbum.source){ var name = imgroot + currentalbum.root + "/" + currentalbum.prefix + currentalbum.source[parseInt(albumstart)] + "t.jpg"; }
            else{ var name = imgroot + currentalbum.root + "/" + currentalbum.prefix + albumstart + "t.jpg"; }
            document.getElementById('photo' + pagestart).innerHTML = "<img src=\"" + name + "\">";
            if(debug){ alert("thumb: " + name); }
        }else if(document.getElementById('photo' + pagestart) && !present){
            document.getElementById('photo' + pagestart).innerHTML = "<img src=\"./img/white.jpg\">";
        }else{ break; }
        pagestart++;
        albumstart++;
    }
    hide();
    return;
}
function dropalbums(id){
    var dropcontent = "<select class=\"form-element\" onchange=\"setalbum()\" id=\"albumdrop\">";
    for(var i = 0; i < albums.length; i++){
        if(id != null && i == id){
            dropcontent += "<option value=\"" + i + "\" selected=\"selected\">" + albums[i].name + "</option>"
        }else{
            dropcontent += "<option value=\"" + i + "\">" + albums[i].name + "</option>"
        }
    }
    dropcontent += "</select>";
    document.getElementById('albums').innerHTML = dropcontent;
    return;
}
function listalbums(){
    var listcontent = "[ ";
    for(var i = 0; i < albums.length; i++){
        listcontent += "<a href=\"#\" onclick=\"setalbum(" + i + ")\">" + albums[i].name + "</a>";
        if(i + 1 < albums.length){ listcontent += " | "; }
    }
    listcontent += " ]"
    document.getElementById('albums').innerHTML = listcontent;
    return;
}
function droppages(){
    var length = ((currentalbum.desc) ? currentalbum.desc.length : currentalbum.source.length);
    var j = (length - 1)/ pagesize;
    var dropcontent = "";
    if(j > 1){
        dropcontent = "<select onchange=\"loadpage()\" id=\"pagedrop\">";
        for(var i = 0; i <= j; i++){
            if(i == currentpage){
                dropcontent += "<option value=\"" + i + "\" selected=\"selected\">" + "page " + (i + 1) + "</option>";
            }else{
                dropcontent += "<option value=\"" + i + "\">" + "page " + (i + 1) + "</option>";
            }
        }
        dropcontent += "</select>";
    }
    document.getElementById('pages').innerHTML = dropcontent;
    return;
}
function listpages(){
    var length = ((currentalbum.desc) ? currentalbum.desc.length : currentalbum.source.length);
    var j = (length - 1) / pagesize;
    var pages = "";
    if(j > 1){
        pages += "pages: [ ";
        for(var i = 0; i <= j; i++){
            pages += "<a href=\"#\" onclick=\"loadpage(" + i + ")\">" + (i + 1) + "</a>";
            if(i + 1 <= j){ pages += " | "; }
        }
        pages += " ]";
    }
    document.getElementById('pages').innerHTML = pages;
    return;
}
function loadpic(id){
    if(timer != null){ return; }
    id = ((id < 0) ? 1 : id);
    var length = ((currentalbum.desc) ? currentalbum.desc.length : currentalbum.source.length);
    if(length - 1 < (parseInt(id) + (currentpage * pagesize))){ return; }
    currentimg = new Image();

    if(debug){ alert("currentdir: " + imgroot + currentalbum.root + "/"); }

    if(currentalbum.source){
        var name = imgroot + currentalbum.root + "/" + currentalbum.source[parseInt(id + (currentpage * pagesize))] + ".jpg";
        if(debug){ alert("currentimg: " + currentalbum.source[parseInt(id + (currentpage * pagesize))] + ".jpg"); }
    }else{
        var name = imgroot + currentalbum.root + "/" + currentalbum.prefix + parseInt(id + (currentpage * pagesize)) + ".jpg";
        if(debug){ alert("currentimg: " + currentalbum.prefix + parseInt(id + (currentpage * pagesize)) + ".jpg"); }
    }

    currentimg.src = name;

    if(pop == 0){ timer = setInterval("overlaypic(" + id + ")", 500); }
    else if(pop == 1){ timer = setInterval("poppic(" + id + ")", 500); }
    else if(pop == 2){ timer = setInterval("showpic(" + id + ")", 500); }
    return;
}

