ns4 = (document.layers);
ie4 = (document.all && !document.getElementById);
ie5 = (document.all && document.getElementById);
ff1 = (!document.all && document.getElementById);

domDetect = false;
if (ie5 || ff1) {
    domDetect = true;
}

document.isDirty = false;

perWindow = null;
clickedCell = null;
selectedCount = 0;
timerID = null;

wmsgId = null;
wmsgFontSize = 15;
wmsgPadding = 15;

/**
 *
 */
function getElement(id) {
    // W3C - Explorer 5+ and Netscape 6+
    if (ie5 || ff1) {
        return document.getElementById(id);
    }
    // Explorer 4
    else if (ie4) {
        return document.all[id];
    }
    // Netscape 4
    else if (ns4) {
        return document.layers[id];
    }
}

/**
 *
 */
function getElementFromWindow(win, id) {
    // W3C - Explorer 5+ and Netscape 6+
    if (ie5 || ff1) {
        return win.document.getElementById(id);
    }
    // Explorer 4
    else if (ie4) {
        return win.document.all[id];
    }
    // Netscape 4
    else if (ns4) {
        return win.document.layers[id];
    }
}

/**
 *
 */
function getElementsByNameFromWindow(win, tag, name) {
    var elems = null;

    if (typeof(win.document.getElementsByTagName) != "undefined") {
        var aux = win.document.getElementsByTagName(tag);
        elems = new Array();
        elemsCnt = aux.length;

        var j = 0;
        for (var i = 0; i < elemsCnt; i++) {
            if (aux[i].name.search(name) != -1) {
                elems[j] = aux[i];
                j++;
            }
        }
    }

    return elems;
}

/**
 *
 */
function getElementsByName(tag, name) {
    return getElementsByNameFromWindow(window, tag, name);
}

/*************************************
* Set background color functionality *
*************************************/

/**
 *
 */
function setRowBackground(id, cName) {
    var theRow = getElement(id);

    if (theRow == null) {
        return;
    }

    theRow.className = cName;
}

/**
 *
 */
function resetStyle() {
    var elems = null;

    if (typeof(document.getElementsByTagName) == "undefined") {
        return false;
    }

    elems = document.getElementsByTagName('tr');

    for (var i = 0; i < elems.length; i++) {
        if (elems[i].id.charAt(0) == "r") {
            setRowBackground(elems[i].id, "");
        }
    }
}

/****************************************
* Check / uncheck, toggle functionality *
****************************************/

/**
 * checkElement(id)
 */
function checkElement(id) {
    var elem = getElement(id);

    if (elem != null) {
        elem.checked = true;
        setRowBackground("r" + id, "selected");
    }
}

/**
 * uncheckElement(id)
 */
function uncheckElement(id) {
    var elem = getElement(id);

    if (elem != null) {
        elem.checked = false;
        setRowBackground("r" + id, "");
    }
}

/**
 * isAllChecked()
 */
function isAllChecked() {
    var cnt = getElement('cnt').value;

    for (var i = 0; i < cnt; i++) {
        var elem = getElement("c" + i);

        if (!elem.checked) {
            uncheckElement("all");
            return false;
        }
    }

    checkElement("all");
    return true;
}

/**
 * isAnyChecked()
 */
function isAnyChecked() {
    var cnt = getElement("cnt").value;

    for (var i = 0; i < cnt; i++) {
        var elem = getElement("c" + i);

        if (elem.checked) {
            return true;
        }
    }

    return false;
}

/**
 * getCheckedSize()
 */
function getCheckedSize() {
    var cnt = getElement("cnt").value;
    var result = 0;

    for (var i = 0; i < cnt; i++) {
        var elem = getElement("c" + i);

        if (elem.checked) {
            result++;
        }
    }

    return result;
}

/**
 * toggleAll(elem)
 */
function toggleAll(elem) {
    var cnt = getElement("cnt").value;

    elem.checked = !elem.checked;

    for (var i = 0; i < cnt; i++) {
        var e = getElement("c" + i);

        if (elem.checked) {
            checkElement(e.id);
        } else {
            uncheckElement(e.id);
        }
    }
}

/**
 * toggleElement(id)
 */
function toggleElement(id) {
    var elem = getElement(id);

    if (elem != null) {
        if (elem.checked) {
            uncheckElement(id);
        } else {
            checkElement(id);
        }
        isAllChecked();
    }
}

/************************************
* Timed disappearance of an element *
************************************/

/**
 *
 */
function hideElem(id) {
    var elem = getElement(id);

    if (elem != null) {
        elem.style.fontSize = wmsgFontSize;
        elem.style.padding = wmsgPadding;

        wmsgId = id;
        timerID = setInterval("decHeight()", 1);
    }

}

/**
 *
 */
function decHeight() {
    var elem = getElement(wmsgId);

    if (elem != null) {

        if (wmsgFontSize > 4) {
            wmsgFontSize -= 2;
            elem.style.fontSize = wmsgFontSize;

            if (wmsgPadding > 4) {
                wmsgPadding -= 2;
                elem.style.padding = wmsgPadding;
            } else {
                elem.style.padding = 0;
            }

        } else {

            elem.style.display = 'none';
            clearInterval(timerID);
        }

    } else {
        clearInterval(timerID);
    }
}

/***********************************
* Show/hide advanced functionality *
***********************************/

/**
 *
 */
function setAdvanced(idA, idB, idC, isAdvanced) {
    setVisible(idA, isAdvanced);
    setVisible(idB, !isAdvanced);
    setVisible(idC, isAdvanced);
}

/**
 *
 */
function setVisible(id, isVisible) {
    var elem = getElement(id);

    if (elem != null) {
        if (isVisible) {
			switch (elem.nodeName) {
				case "DIV":
		            elem.style.display = 'inline';
		            break;

		        case "TR":
		        	if (ff1) {
			            elem.style.display = 'table-row';
					} else {
			            elem.style.display = 'inline';
					}
		            break;

				default:
		            elem.style.display = '';
		            break;
			}
        } else {
            elem.style.display = 'none';
        }

        return true;
    }

    return false;
}

/****************************
* Delete form functionality *
****************************/

/**
 *
 */
function del(elem) {
    var cmd = getElement('cmd');
    var size = getCheckedSize();
    //### Todo: Internationalisation
    var confirmText = "Are you sure you want to delete " + (size > 1 ? "these " + size + " pictures" : "this picture") + "?";

    if (cmd != null && isAnyChecked() && confirm(confirmText)) {
        cmd.value = 1;
        elem.form.submit();
    }
}

/**************************
* Move form functionality *
**************************/

/**
 *
 */
function moveToAlbum(elem) {
    var cmd = getElement('cmd');
    var selectedIndex = elem.selectedIndex;
    var value = elem.options[selectedIndex].value;

    if (value > 0 && cmd != null && isAnyChecked()) {
        cmd.value = 2;
        elem.form.submit();
    } else if (value == -1) { //Create New Album
        cmd.value = 0;
        window.location.href = '/poze/?mode=22&limit=-1';
    } else if (value == -2) { //Advanced Move
        setAdvanced("moveAlbumAdv", "moveAlbumId", true);
        getElement("moveChckAdv").checked = true;
        elem.selectedIndex = 0;
        cmd.value = 2;
    } else {
        cmd.value = 0;
        elem.selectedIndex = 0;
    }
}

/**
 *
 */
function toggleMoveAdvanced(elem) {
    setAdvanced("moveAlbumAdv", "moveAlbumId", elem.checked);

    if (!elem.checked) {
        getElement('cmd').value = 0;
    }
}

/**
 *
 */
//function setWinHeight() {
//    getElement('thumb').style.height =
//        Math.max(parseInt(getElement('ifpoze').style.height) + 30, getElement('albumList').offsetHeight + 80) + 'px';
//}

/**
 *
 */
function toggleDisplay(obj, id) {
    elem = getElement(id)
    if (elem.className == "current") {
        obj.className = ""
        elem.className = ""
    } else {
        obj.className = "current"
        elem.className = "current"
    }

    updateExpList()
//    setWinHeight()
}

/**
 *
 */
function updateExpList() {
    aux = document.getElementsByTagName("h3")
    expList = ""

    for (i = 0; i < aux.length; i++) {
        if (aux[i].className == "current") {
            expList += "1"
        } else {
            expList += "0"
        }
    }
    now = new Date()
    fixDate(now)
    now.setTime(now.getTime() + 60 * 60 * 1000 * 24) // 24 hours
    setCookie("el", expList, now, "/", "", "")
}

/*********************************
* Permissions form functionality *
*********************************/

/**
 *
 */
function openWindow(obj) {
    perWindow = window.open('', 'editPerm', 'toolbar=0,loction=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=1,width=500,height=350');
    perWindow.location.href = '/poze/set_perm.php';
    perWindow.focus();

    clickedCell = obj;
    selectedCount = 0;

    var cnt = document.per_form.cnt.value;
    for (var i = 0; i < cnt; i++) {
        var selCheckBox = getElement('c' + i);

        if (selCheckBox.checked) {
            selectedCount++;
        }
    }

}

/**
 *
 */
function setPermissions(cmd) {
    var parent = window.opener;
    var sel = getElement('dest');
    var cnt = getElementFromWindow(parent, 'cnt').value;

    for (var i = 0; i < cnt; i++) {
        var selCheckBox = getElementFromWindow(parent, 'c' + i);

        if (selCheckBox.checked) {
            var txtarea = getElementFromWindow(parent, 'u' + i);
            var users = stringToArray(txtarea.value);

            switch (cmd) {
                case 1:
                    users = addUser(sel, users);
                    break;

                case 2:
                    users = replaceUser(sel, users);
                    break;

                case 3:
                    users = removeUser(sel, users);
                    break;
            }

            users = removeDuplicates(users);
            users.sort();
            txtarea.value = users.join(', ');
            var elemPublic = getElementFromWindow(parent, 'p' + i);
            elemPublic.checked = txtarea.value.length == 0;
        }
    }

    window.close();
}

/**
 *
 */
function closeWindow(win) {
    if (win) {
        win.close();
    }
}

/**
 *
 */
function addUser(sel, users) {
    for (var i = 0; i < sel.options.length; i++) {
        users.push(sel.options[i].value);
    }

    return users;
}

/**
 *
 */
function replaceUser(sel, users) {
    return addUser(sel, new Array(0));
}

/**
 *
 */
function removeUser(sel, users) {
    var result = new Array(0);

    for (var i = 0; i < users.length; i++) {
        var found = false;
        for (var j = 0; j < sel.options.length && !found; j++) {
            if (users[i] == sel.options[j].value) {
                found = true;
            }
        }
        if (!found) {
            result.push(users[i]);
        }
    }

    return result;
}

/**
 *
 */
function moveItem(itemIdx, src, dest) {
    if (src.options[itemIdx].value != '#') {
        newItem = new Option(src.options[itemIdx].text, src.options[itemIdx].value);
        insertItem(newItem, dest);
        deleteItem(itemIdx, src);

        if (dest.options[0].value == '#') {
            deleteItem(0, dest);
        }
    }
}

/**
 *
 */
function moveSelectedItem(src, dest, isAll) {
    dest = getElement(dest);
    for (var i = 0; i < src.options.length; i++) {
        if (src.options[i].value != '#' && (src.options[i].selected || isAll)) {
            newItem = new Option(src.options[i].text, src.options[i].value);
            insertItem(newItem, dest);
            deleteItem(i--, src);
        }
    }

    if (dest.options[0].value == '#') {
        deleteItem(0, dest);
    }
}

/**
 *
 */
function insertItem(newItem, dest) {
    var idx = 0;

    for (var i = dest.options.length - 1; i >= 0; i--) {
        if (dest.options[i].text > newItem.text) {
            dest.options[i + 1] = new Option(dest.options[i].text, dest.options[i].value);
        } else {
            idx = i + 1;
            i = 0;
        }
    }

    dest.options[idx] = newItem;
}

/**
 *
 */
function deleteItem(itemIdx, sel) {
    sel.options[itemIdx] = null;
    initSelect(sel);
}

/**
 *
 */
function deleteAllItems(sel) {
    while (sel.options[0] != null) {
        sel.options[0] = null;
    }
    initSelect(sel);
}

/**
 *
 */
function findItem(value, src) {
    for (var i = 0; i < src.options.length; i++) {
        if (src.options[i].value == value) {
            return i;
        }
    }

    return -1;
}

/**
 *
 */
function populateList(mode) {
    var parent = window.opener;
    var src = getElement('src');
    var dest = getElement('dest');
    var cnt = getElementFromWindow(parent, 'cnt').value;
    var itemList = new Array(0);
    var piccell = getElement('piccell');

    initialiseSource(src);
    deleteAllItems(dest);
    initSelect(dest);

    if (mode == 3) { //Copy first
        var initTextArea = getElementFromWindow(parent, 'u' + parent.clickedCell);
        itemList = stringToArray(initTextArea.value);
        if (getElement("mode").value == 11) {
            piccell.innerHTML = "<img src='show_thumb.php?id=" + getElementFromWindow(parent, 'pic' + parent.clickedCell).value + "'>";
        } else {
            piccell.innerHTML = "<table cellpadding=0 cellspacing=0><tr><th width=150 height=120>" + parent.selectedCount + " " + getElement("pictxt").value + "</th></tr></table>";
        }
    } else {
        if (parent.selectedCount != 1) {
            piccell.innerHTML = "<table cellpadding=0 cellspacing=0><tr><th width=150 height=120>" + parent.selectedCount + " " + getElement("pictxt").value + "</th></tr></table>";
        }

        var nth = 0;
        for (var i = 0; i < cnt; i++) {
            var selCheckBox = getElementFromWindow(parent, 'c' + i);

            if (selCheckBox.checked) {
                var txtarea = getElementFromWindow(parent, 'u' + i);
                var newItems = stringToArray(txtarea.value);

                switch (mode) {
                    case 1: //Unification
                        for (var j = 0; j < newItems.length; j++) {
                            itemList.push(newItems[j]);
                        }
                        break;

                    case 2: //Intersection
                        if (nth == 0) {
                            nth++;
                            for (var j = 0; j < newItems.length; j++) {
                                itemList.push(newItems[j]);
                            }
                        } else {
                            var result = new Array(0);
                            for (var k = 0; k < itemList.length; k++) {
                                var found = false;
                                for (var j = 0; j < newItems.length && !found; j++) {
                                    if (newItems[j] == itemList[k]) {
                                        result.push(newItems[j]);
                                        found = true;
                                    }
                                }
                            }
                            itemList = result;
                        }
                }
            }
        }
    }

    itemList = removeDuplicates(itemList);

    for (i = 0; i < itemList.length; i++) {
        var itemIdx = findItem(itemList[i], src);

        if (itemIdx == -1) {
            var newItem = new Option(itemList[i], itemList[i]);
            insertItem(newItem, dest);

            if (dest.options[0].value == '#') {
                deleteItem(0, dest);
            }
        } else {
            moveItem(itemIdx, src, dest);
        }
    }
}

/**
 *
 */
function removeDuplicates(list) {
    var result = new Array(0);

    for (var i = 0; i < list.length; i++) {
        if (list[i] != '#') {
            var found = false;
            for (var j = 0; j < result.length && !found; j++) {
                if (list[i] == result[j]) {
                    found = true;
                }
            }
            if (!found) {
                result.push(list[i]);
            }
        }
    }

    return result;
}

/**
 *
 */
function stringToArray(str) {
    if (str) {
        var list = str.split(/\W+/);
        return removeDuplicates(list);
    }

    return new Array(0);
}

/**
 *
 */
function initSelect(sel, mesg) {
    if (sel.options.length == 0) {
        insertItem(new Option(getElement('msg' + sel.id).value, '#'), sel);
    }
}

/**
 *
 */
function initialiseSource(src) {
    var elems = getElementsByName('input', 'users');
    deleteAllItems(src);
    for (var i = 0; i < elems.length; i++) {
        var newItem = new Option(elems[i].value, elems[i].id);
        insertItem(newItem, src);
    }

    if (src.options[0].value == '#') {
        deleteItem(0, src);
    }
}

/**
 *
 */
function showRadioPicture() {
    var parent = window.opener;

    document.writeln("<div style='padding:5'>");
    document.writeln("<table><tr><th id='piccell' width=152 height=154>");

    if (parent.selectedCount == 1 && getElement("mode").value == 11) {
        document.writeln("<img src='show_thumb.php?id=" + getElementFromWindow(parent, 'pic' + parent.clickedCell).value + "'>");
    }

    document.writeln("</th><td align='left' nowrap>");
    document.writeln("<input type='radio' id='r1' name='ptype' onClick='populateList(1)' " + (parent.selectedCount == 1 ? "disabled" : "checked") + ">");
    document.writeln("<label for='r1'>" + getElement("rtxt1").value + "</label><br>");
    document.writeln("<input type='radio' id='r2' name='ptype' onClick='populateList(2)' " + (parent.selectedCount == 1 ? "disabled" : "") + ">");
    document.writeln("<label for='r2'>" + getElement("rtxt2").value + "</label><br>");
    document.writeln("<input type='radio' id='r3' name='ptype' onClick='populateList(3)' " + (parent.selectedCount == 1 ? "disabled checked" : "") + ">");
    document.writeln("<label for='r3'>" + getElement("rtxt3").value + "</label><br>");
    document.writeln("</td></tr></table>");
    document.writeln("</div>");
}

/************************************
* Upload file preview functionality *
************************************/

/**
 *
 */
function updatePreview(src) {
    if (src.length == 0) {
        document.images['preview'].src = "img/s/4.gif";
        document.images['preview'].width = "45";
        document.images['preview'].height = "45";

        return;
    }
    if (src.indexOf("/") != 0) {
        src = "/" + src;
    }
    src = "file://" + src;
    document.images['hiddenPreview'].src = src;
}

/**
 *
 */
function setPreview(src) {
    var rawImg = document.images['hiddenPreview'];
    var rawWidth = rawImg.width;
    var rawHeight = rawImg.height;
    var maxDim = Math.max(rawWidth, rawHeight);
    var prev = document.images['preview'];

    prev.width = Math.floor(150.0 * rawWidth / maxDim);
    prev.height = Math.floor(150.0 * rawHeight / maxDim);
    prev.src = src;
}

/***************************
* Slide-show functionality *
***************************/

/**
 *
 */
function slideShow(picId, strPlay, strPause) {
    document.strPlay = strPlay
    var aElem = getElement("show")
    if (typeof(document.showTimeout) == "undefined" || document.showTimeout == null) {
        var voteForm = getElement("picVote")
        voteForm.slideShow.value = "on"
        var elem = getElement("next")
        if (elem != null) {
            aElem.innerHTML = strPause
            document.cachedPic = new Image()
            document.cachedPic.src = "/poze/show_picture.php?id=" + picId
            document.showTimeout = setTimeout("goNext()", 5000)
        }
    } else {
        stopShow()
    }

    return false
}

/**
 *
 */
function stopShow(isInvisible) {
    clearTimeout(document.showTimeout)
    if (!isInvisible) {
        var voteForm = getElement("picVote")
        voteForm.slideShow.value = "off"
        if (typeof(document.strPlay) != "undefined") {
            var aElem = getElement("show")
            aElem.innerHTML = document.strPlay
            document.showTimeout = null
        }
    }
}

/**
 *
 */
function goNext() {
    var elem = getElement("next");
    if (elem != null) {
        if (document.cachedPic.complete) {
//            window.location.href = elem.href + "&slideShow=on#p";
            window.location.href = elem.href + "&slideShow=on";
        } else {
            document.showTimeout = setTimeout("goNext()", 1000);
        }
    }
}

/**
 *
 */
function logger(msg) {
    var el = getElement("logger");
    el.innerHTML = el.innerHTML + msg;
}

/******************************
* DHTML ToolTip functionality *
******************************/

var initialise = 0
var ttShow = true

function moveToolTip(fromTop, fromLeft) {
    getElement("ToolTip").style.top = fromTop + document.documentElement.scrollTop + 20 + "px"
    getElement("ToolTip").style.left = fromLeft + "px"
}

function activate() {
    initialise = 1
}

function deActivate() {
    initialise = 0
    ttShow = true
}

function overhere(e) {
    clearTimeout(document.ttTimeout)
    if (initialise) {
        if (document.ttKind == 0) {
            document.ttLeft = e.clientX
            document.ttTop = e.clientY
            if (ttShow) {
                document.ttTimeout = setTimeout("showToolTip()", 500)
            } else {
                document.ttTimeout = setTimeout("hideToolTip()", 5000)
            }
        } else {
            document.ttLeft = e.clientX
            document.ttTop = e.clientY
            moveToolTip(document.ttTop, document.ttLeft)
            document.getElementById("ToolTip").style.visibility = 'visible'
        }
    } else {
        hideToolTip()
    }
    document.screenX = e.screenX
    document.screenY = e.screenY
}

function showToolTip() {
    ttShow = false
    getElement("ToolTip").style.visibility = 'visible'
    moveToolTip(document.ttTop, document.ttLeft)
    document.ttTimeout = setTimeout("hideToolTip()", 5000)
}

function hideToolTip() {
    moveToolTip(0, 0)
    getElement("ToolTip").style.visibility = 'hidden'
}

function toolTip(content) {
    document.ttKind = 0
    getElement("ToolTip").innerHTML = '<span class=\"toolTip\">'+content+'</span>'
}

function cPic(picId, w, h) {
    document.ttKind = 1
    if (w) {
        w = ' width="' + w + '"'
    } else {
        w = ''
    }
    if (h) {
        h = ' height="' + h + '"'
    } else {
        h = ''
    }
    getElement("ToolTip").innerHTML = '<img src="/poze/show_thumb.php?id='+picId+'"'+w+h+'>'
}

/********************
* Cookie Management *
********************/

/**
 *
 */
function setCookie(name, value, expires, path, domain, secure) {
    curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "")
    document.cookie = curCookie
}

/**
 *
 */
function getCookie(name) {
    prefix = name + '='
    c = document.cookie
    nullstring = ''
    cookieStartIndex = c.indexOf(prefix)
    if (cookieStartIndex == -1) {
        return nullstring
    }
    cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length)
    if (cookieEndIndex == -1) {
        cookieEndIndex = c.length
    }
    return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex))
}

/**
 *
 */
function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT"
    }
}

/**
 *
 */
function fixDate(date) {
    base = new Date(0)
    skew = base.getTime()
    if (skew > 0)
        date.setTime(date.getTime() - skew)
}

/**
 *
 */
function setDirty() {
    document.isDirty = true
    if (document.title.charAt(0) != "*") {
        document.title = "* " + document.title
    }
}

/**
 *
 */
function checkDirty() {
    if (document.isDirty) {
        return confirm(strDiscardComment)
    }

    return true
}

/**
 *
 */
function rmbrMe(form) {
    if (form) {
        if (form.rememberMe.checked) {
            zaCookie = form.author.value + "@|#" + form.email.value + "@|#" + form.notify.checked
            now = new Date()
            fixDate(now)
            now.setTime(now.getTime() + 31536000000) // 1 year
            setCookie("rememberMe", zaCookie, now, "/", "", "")
        } else {
            deleteCookie("rememberMe", "/", "")
        }
    }
}

/**
 *
 */
function openSmiley() {
    var x = Math.min(screen.width - 400, document.screenX - 20)
    var y = Math.max(0, document.screenY - 290)
    var smileyWindow = window.open('', 'smileyWindow', 'toolbar=0,loction=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,width=385,height=230,left=' + x + ',top=' + y)
    smileyWindow.location.href = '/poze/smiley.html'
    smileyWindow.focus()

    return false
}

/**
 *
 */
function iS(str) {
    window.close()
    var parent = window.opener
    var textElem = getElementFromWindow(parent, 'msg')
    insertTags(textElem, str, "", "", parent)
    parent.setDirty()
}