/**
 * (c) Slideshow for http://www.houie.com
 * Copyright (c) 2006 Hou-En Han. All rights reserved.
 */

var expDays = 30;
var exp = new Date();
exp.setTime(exp.getTime() + (expDays*24*60*60*1000));

var rankKey   = "RANKID";

function getCookieVal(offset) {
    var endstr = document.cookie.indexOf (";", offset);
    if (endstr == -1)
        endstr = document.cookie.length;
    return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie(name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;
        if (document.cookie.substring(i, j) == arg)
            return getCookieVal (j);
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return null;
}

function SetCookie(name, value) {
    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;
    var expires = (argc > 2) ? argv[2] : null;
    var path    = (argc > 3) ? argv[3] : null;
    var domain  = (argc > 4) ? argv[4] : null;
    var secure  = (argc > 5) ? argv[5] : false;
    document.cookie = name + "=" + escape (value) +
        ((expires == null)  ? "" : ("; expires=" + expires.toGMTString())) +
        ((path    == null)  ? "" : ("; path=" + path)) +
        ((domain  == null)  ? "" : ("; domain=" + domain)) +
        ((secure  == false) ? "" : ("; secure"));
}

function DeleteCookie(name) {
    var exp = new Date();
    exp.setTime (exp.getTime() - 1);
    var cval = GetCookie (name);
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

function setRank(rank) {
    var photo = getCurrentPhoto();
    var rankValue = (photo+"="+rank);
    var today = new Date();
    var expire = new Date();
    expire.setTime(today.getTime() + 3600000*24*90);

    var oldValue = GetCookie(rankKey);
    if (oldValue) {
        var index = oldValue.indexOf(photo);
        if (index == -1) {
            newValue = oldValue+","+rankValue;
        }
        else {
            var prefix = "";
            if (index > 0)
                prefix = oldValue.substr(0,index);

            var suffix = "";
            var endIndex = oldValue.indexOf(",",index);
            if (endIndex > 0) {
                suffix = oldValue.substr(endIndex+1);
                if (suffix)
                    suffix = ","+suffix;
            }

            newValue = prefix + rankValue + suffix;
        }
    }
    else {
        newValue = rankValue;
    }

    SetCookie(rankKey, newValue, expire);
    showRank();
}

function showStarByKey(key, id) {
    fnToggleCursor(true);
    for (i=1; i<=5; i++) {
        var element = document.getElementById(key+i);
        if (id>(i-0.25))
            element.src = star_on;
        else if (id>(i-0.75))
            element.src = star_half;
        else
            element.src = star_off;
    }
}

function showStar(id) {
    showStarByKey("rank", id);
}

function getRanks() {

    var result = new Array();

    var rankValue = GetCookie(rankKey);
    if (rankValue) {
        var ranks = rankValue.split(",");
        for (i=0; i<ranks.length; i++) {
            var rankItem = ranks[i].split("=");
            var photo = rankItem[0];
            var rank  = rankItem[1];

            if (photo && rank)
                result[photo] = rank;
        }
    }
    return result;
}

function getCurrentPhoto() {
    var p = document.getElementById("p");
    return p.value;
}

function getCurrentRank() {
    var r = document.getElementById("r");
    return r.value;
}

function getOwnCurrentRank() {
    var r = document.getElementById("own_rank");
    return r.value;
}

function showOwnRank() {
    var ranks = getRanks();
    var photo = getCurrentPhoto();
    var rank  = ranks[photo];
    if (!rank) rank = getOwnCurrentRank();
    showStarByKey("rank", rank);
    fnToggleCursor(false);
}

function normalize(value) {
    var normal_value= Number(value);
    if (isNaN(normal_value)) normal_value = 0;
    return normal_value;
}

function showRank() {

    var avg_rank_el  = document.getElementById("avg_rank");
    var avg_rank     = (avg_rank_el) ? normalize(avg_rank_el.value) : 0;

    var avg_count_el = document.getElementById("avg_count");
    var avg_count    = (avg_count_el) ? normalize(avg_count_el.value) : 0;

    var own_rank_el  = document.getElementById("own_rank");
    var own_rank     = (own_rank_el) ? normalize(own_rank_el.value) : 0;

    var ranks = getRanks();
    var cookie_rank_s  = ranks[getCurrentPhoto()];
    if (cookie_rank_s) {
        var cookie_rank = normalize(cookie_rank_s);

        var actual_count = (cookie_rank != 0 && own_rank == 0) ? avg_count+1 : avg_count;
        avg_rank  = ((avg_rank * avg_count) - own_rank + cookie_rank)/(actual_count);
        avg_count = actual_count;
        own_rank  = cookie_rank;
    }

    showStarByKey("avg",  avg_rank);

    var avg_count_disp = document.getElementById("avg_count_disp");
    if (avg_count_disp)
        avg_count_disp.innerHTML = "("+avg_count+" votes)";

    showStarByKey("rank", own_rank);
}

function clearCookie() {
    DeleteCookie(rankKey);
}

function fnToggleCursor(isOn) {
    if (isOn)
        document.body.style.cursor = 'pointer';
    else
        document.body.style.cursor = 'default';
}
