﻿
//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 findebaycategory(openerloc, openerlocid, siteid, openernamelocid, btnsaveid, openerprevcat) {
    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;
    
    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) {
    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';
    }
    
    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;
}
