﻿
//var gecko = /gecko/i.test(navigator.userAgent);
//var ie = /MSIE/.test(navigator.userAgent);
var dom = document.getElementById ? true : false;

function getbyid(id) {
    return dom ? document.getElementById(id) : document.all[id];
}

function getbyidp(p, id) {
    return dom ? p.getElementById(id) : p.all[id];
}

function ie() {
    return document.all && document.getElementById;
}

function ns6() {
    return !document.all && document.getElementById;
}

function toggledisplay(e, btn, type, onText, offText) {
    var element = getbyid(e);

    if (element) {
        if (element.style.display == 'none' || element.style.display == '') {
            element.style.display = type;

            if (btn)
                btn.value = onText;
        }
        else {
            element.style.display = 'none';

            if (btn)
                btn.value = offText;
        }
    }

    return false;
}

function toggledisplaye(expr, elementid) {
    var element = getbyid(elementid);

    if (element && expr) {
        element.style.display = 'block';
    } else {
        element.style.display = 'none';
    }

    return false;
}

function trtoggle(id, source, ontext, offtext) {
    var elements = new Array();

    if (isarray(id)) {
        for (var i = 0; i < id.length; ++i)
            elements[i] = id[i];
    }
    else elements[0] = id;

    for (var i = 0; i < elements.length; ++i) {
        var e = getbyid(elements[i]);

        if (e) {
            var expand = e.style.display == '';

            e.style.display = expand ? 'none' : '';

            if (source)
                source.value = expand ? offtext : ontext;
        }
    }

    return false;
}

function characterdisplay(maxlength, elementid, format) {
    var element;

    if ((element = getbyid(elementid)) == null)
        return;

    return format.replace(/\{0\}/, (maxlength - element.value.length));
}

function thumbcheck(siteBaseUrl, eid, errorEId, checkE) {
    var element = getbyid(eid);
    var errorElement = getbyid(errorEId);
    var checkElement = getbyid(checkE);

    if (element) {
        // if empty do nothing.
        if (element.value.length == 0) {
            return;
        }

        // is it hosted externally?
        if (element.value.substring(0, siteBaseUrl.length) != siteBaseUrl) {
            var estr = "Sorry, the '<em>click to enlarge</em>' thumbnail feature only works with images hosted with us.";

            if (errorElement) {
                errorElement.innerHTML = "<p>" + estr + "</p>";
            } else {
                alert(estr);
                return;
            }
        }

        if (checkElement.checked) {
            if (element.value.indexOf("&show=thumb") > -1) {
                return;
            } else {
                element.value += "&show=thumb";
            }
        } else {
            var index;

            if ((index = element.value.indexOf("&show=thumb")) > -1) {
                element.value = element.value.replace("&show=thumb", "");
            }
        }
    }
}

function findimage(level, imageloc) {
    var options = 'toolbar=0,width=800,height=600,resizable=1,scrollbars=1';
    var title = 'Find_Image';
    var url = '';

    if (level > 0) {
        for (var i = 0; i < level; ++i) {
            url += '.';
        }

        url += '/';
    }

    url += 'imagepopup.aspx?imageloc=' + imageloc;
    window.open(url, title, options);
    return false;
}

function findimage_beta(level, imageloc) {
    var options = 'toolbar=0,width=800,height=600,resizable=1,scrollbars=1';
    var title = 'Find_Image';
    var url = '';

    if (level > 0) {
        for (var i = 0; i < level; ++i) {
            url += '.';
        }

        url += '/';
    }

    url += 'imagepopup_beta.aspx?imageloc=' + imageloc;
    window.open(url, title, options);
    return false;
}

function finditemspecifics(listing, categoryID, append) {
    var options = 'toolbar=0,width=800,height=600,resizable=1,scrollbars=1';
    var title = 'Item_Specifics';
    var url = 'ebayinput_itemspecifics.aspx?listing=' + parseInt(listing) + '&categoryID=' + categoryID + '&append=' + (append ? 'true' : 'false');

    window.open(url, title, options);
    return false;
}

function findebaycategory(openerloc, openerlocid, siteid, openernamelocid, btnsaveid, openerprevcat, btnitemspec) {
    var options = 'toolbar=0,width=800,height=600,resizable=1,scrollbars=1';
    var title = 'Select_Category';
    var url = 'ebayinput_selectcategory.aspx?openerloc=' + openerloc + "&openerlocid=" + openerlocid + "&siteid=" + siteid;

    if (openernamelocid.length > 0)
        url += '&openernamelocid=' + openernamelocid;

    if (btnsaveid.length > 0)
        url += '&btnsaveid=' + btnsaveid;

    if (openerprevcat.length > 0)
        url += '&openerprevcat=' + openerprevcat;

    if (btnitemspec.length > 0) {
        url += '&btnitemspec=' + btnitemspec;
    }

    window.open(url, title, options);
    return false;
}

function findstorecategory(openerloc, openerlocid, siteid, openernamelocid, btnsaveid) {
    var options = 'toolbar=0,width=800,height=600,resizable=1,scrollbars=1';
    var title = 'Select_Category';
    var url = 'ebayinput_selectstorecategory.aspx?openerloc=' + openerloc + "&openerlocid=" + openerlocid + "&siteid=" + siteid;

    if (openernamelocid.length > 0)
        url += '&openernamelocid=' + openernamelocid;

    if (btnsaveid.length > 0)
        url += '&btnsaveid=' + btnsaveid;

    window.open(url, title, options);
    return false;
}

function selectebaycategory(openerloc, openerlocid, categoryid, categoryname, openernamelocid, btnsaveid, openerprevcat, btnitemspec) {
    var e = getbyidp(window.opener.document, openerloc);
    var ide = getbyidp(window.opener.document, openerlocid);

    if (!e || !ide) { return false; }

    e.style.display = 'block';
    e.innerHTML = "You selected <em>" + categoryname + "</em>";
    ide.value = categoryid;

    var chk = getbyidp(window.opener.document, openernamelocid);

    if (chk) {
        chk.value = categoryname;
    }

    var btnsave = getbyidp(window.opener.document, btnsaveid);

    if (btnsave) {
        btnsave.style.display = 'inline';
    }

    var prevcat = getbyidp(window.opener.document, openerprevcat);

    if (prevcat) {
        prevcat.style.display = 'none';
    }

    var itemspec = getbyidp(window.opener.document, btnitemspec);

    if (itemspec) {
        itemspec.style.display = 'inline';
    }

    window.close();
    window.opener.focus();
    return false;
}

function findimage_beta2(level, imageloc) {
    var options = 'toolbar=0,width=800,height=600,resizable=1,scrollbars=1';
    var title = 'Find_Image';
    var url = '';

    url += level + 'imagepopup_beta.aspx?imageloc=' + imageloc;
    window.open(url, title, options);
    return false;
}

function popupWindow(url) {
    var options = 'toolbar=0,width=800,height=600,resizable=1,scrollbars=1';

    window.open(url, '', options);

    return false;
}

function escapeHtml(str) {
    var div = document.createElement('div');
    var text = document.createTextNode(str);

    div.appendChild(text);

    return div.innerHTML;
}

function selectimage(index, imageid, siteurl) {
    var url = siteurl + 'image.aspx?imageid=' + imageid;

    var isInt = /^\d+$/;

    if (isInt.test(index)) {
        index = parseInt(index);
        window.opener.document.forms[0][index].value = url;
    } else {
        for (var i = 0; i < window.opener.document.forms[0].length; ++i) {
            if (window.opener.document.forms[0][i].id == index) {
                window.opener.document.forms[0][i].value = url;
                break;
            }
        }
    }

    window.close();
    window.opener.focus();
}

function updateHtml(elementID, textControlID) {
    var preview = document.getElementById(elementID);
    var textControl = document.getElementById(textControlID);

    if (!preview || !textControl) return;

    preview.innerHTML = bbcodeToHtml(textControl.value);
}

function newlineToBr(text) {
    return text.replace(/\r/g, "").replace(/\n/g, "<br />");
}

function strReplace(search, replace, subject) {
    for (var i = 0; i < search.length; ++i) {
        if (replace[i].length > 0) {
            subject = subject.replaceAll(search[i], replace[i]);
        }
        else {
            subject = subject.replaceAll(search[i], "");
        }
    }

    return subject.replace(/&quot;/g, '"');
}

function bbcodeToHtml(text) {
    var bbcode = new Array(
        "[image=\"", "[/image]", "[IMAGE=\"", "[/IMAGE]",
        "[b]", "[/b]", "[B]", "[/B]",
        "[color=\"", "[/color]", "[COLOR=\"", "[/COLOR]",
        "[center]", "[/center]", "[CENTER]", "[/CENTER]",
        "[link=\"", "[/link]", "[LINK=\"", "[/LINK]",
        "[i]", "[/i]", "[I]", "[/I]",
        "[u]", "[/u]", "[U]", "[/U]",
        "[size=\"", "[/size]", "[SIZE=\"", "[/SIZE]",
        "[heading]", "[/heading]", "[HEADING]", "[/HEADING]",
        "]"
    );

    var html = new Array(
        "<img style=\"border:none;\" alt=\"\" src=\"", "", "<img style=\"border:none;\" alt=\"\" src=\"", "",
        "<b>", "</b>", "<b>", "</b>",
        "<span style=\"color:", "</span>", "<span style=\"color:", "</span>",
        "<center>", "</center>", "<center>", "</center>",
        "<a style=\"border:none;\" target=\"_blank\" href=\"", "</a>", "<a style=\"border:none;\" target=\"_blank\" href=\"", "</a>",
        "<i>", "</i>", "<i>", "</i>",
        "<u>", "</u>", "<u>", "</u>",
        "<span style=\"font-size:", "</span>", "<span style=\"font-size:", "</span>",
        "<h2 style=\"margin:0;padding:0;\">", "</h2>", "<h2 style=\"margin:0;padding:0;\">", "</h2>",
        ">"
    );

    return newlineToBr(strReplace(bbcode, html, text));
}

String.prototype.replaceAll = function(search, subject) {
    var text = this;
    var index = text.indexOf(search);

    while (index != -1) {
        text = text.replace(search, subject);
        index = text.indexOf(search);
    }

    return text;
}

String.prototype.insert = function(index, str) {
    var newString = '';

    for (var i = 0; i < this.length; ++i) {
        if (i == index) {
            newString += str.toString();
        }

        newString += this.charAt(i);
    }

    return newString;
}

String.prototype.toArray = function() {
    var ret = new Array();

    for (var i = 0; i < this.length; ++i) {
        ret[i] = this.charAt(i);
    }

    return ret;
}

function getCursorPos(el) {
    var pos = -1;

    if (document.selection && document.selection.createRange) {
        var range = document.selection.createRange().duplicate();

        if (range.parentElement() == el) {
            range.moveStart('textedit', -1);
            pos = range.text.length;
        }
    }
    else if (el.selectionStart) {
        pos = el.selectionStart;
    }

    if (ie) {
        return pos - 771; // lol
    }

    return pos;
}

function insertAtCaret(objid, text, move) {
    if (!dom) return;

    var obj = document.getElementById(objid);

    if (!obj) return;

    if (move == null) {
        move = 0;
    }

    if (document.selection) {
        obj.focus();
        var marker = String.fromCharCode(28);

        var range = document.selection.createRange();
        var selectedText = range.text;
        range.text = text + marker;

        var index = obj.value.indexOf(marker);
        obj.value = obj.value.replace(marker, "");
        // preserve selected text. +3 for the chars surrounding a closed tag. [/]
        obj.value = obj.value.insert(index - (getBBCodeTagName(text).length + 3), selectedText);

        var start = index - text.length;
        var end = index - move;

        var brackIndex = text.indexOf(']');

        if (brackIndex > -1) {
            text = text.insert(brackIndex + 1, selectedText);

            switch (getBBCodeTagName(text)) {
                case 'size':
                case 'color':
                case 'link':
                    move += (selectedText.length);
                    break;
            }
        }

        setCaretTo(obj, end, countnl(obj.value, index));
    }
    else if (obj.selectionStart >= 0) {
        var start = obj.selectionStart;
        var end = obj.selectionEnd;

        var selectedText = obj.value.substr(start, end - start);
        var brackIndex = text.indexOf(']');

        if (brackIndex > -1) {
            text = text.insert(brackIndex + 1, selectedText);

            switch (getBBCodeTagName(text)) {
                case 'size':
                case 'color':
                case 'link':
                    move += (selectedText.length);
                    break;
            }
        }

        obj.value = obj.value.substr(0, start)
			+ text
			+ obj.value.substr(end, obj.value.length);

        setCaretTo(obj, start + text.length, move);
    }
    else {
        obj.value = text;
        setCaretTo(obj, text.length, move);
    }
}

function getBBCodeTagName(text) {
    var tagName = '';

    for (var i = 1; i < text.length; ++i) {
        if (text.charAt(i) == ']' || text.charAt(i) == '=') {
            break;
        }

        tagName += text.charAt(i);
    }

    return tagName.toLowerCase();
}

function countnl(str, index) {
    if (index > str.length)
        return 0;

    var count = 0;

    for (var i = 0; i < index; ++i) {
        if (str.charAt(i) == "\n") {
            ++count;
        }
    }

    return count;
}

function setCaretTo(obj, pos, move) {
    if (move > 0) {
        pos = pos - move;
    }

    if (obj.createTextRange) {
        var range = obj.createTextRange();
        range.move('character', pos);
        range.select();
    }
    else if (obj.selectionStart) {
        obj.scrollTop = obj.scrollHeight - obj.clientHeight;
        obj.focus();
        obj.setSelectionRange(pos, pos);
    }
}

// hours
function timezone() {
    return new Date().getTimezoneOffset() / 60;
}

function isarray(o) {
    return o.constructor.toString().indexOf("Array") > -1;
}

function getTarget(e) {
    var target = null;

    if (window.event && window.event.srcElement) {
        target = window.event.srcElement;
    } else if (e && e.target) {
        target = e.target;
    }

    return target;
}
