blnOpera = blnIE = blnMozilla = blnFireFox = false;

strUserAgent = navigator.userAgent.toLowerCase();
if (strUserAgent.indexOf("opera") != -1) {
    blnOpera = true;
} else if (strUserAgent.indexOf("msie") != -1) {
    blnIE = true;
} else if (strUserAgent.indexOf("firefox") != -1) {
    blnFireFox = true;
} else if (strUserAgent.indexOf("mozilla") != -1) {
    blnMozilla = true;
}

function findElement(varElement) {
    var objEl;
    if (typeof(varElement) == "object") {
        if (varElement.nodeType || varElement == window) {
            objEl = varElement;
        }
    } else if (typeof(varElement) == "string") {
        objEl = document.getElementById(varElement);
    }
    return objEl;
}

// Shortcut function for pulling a specific element off the page
var $ = $ || function(el) {
    return findElement(el);
};

function setEventHandler(varElement, strEventName, fnHandler) {
    var objElement = findElement(varElement);
    if (objElement.addEventListener) {
        objElement.addEventListener(strEventName, fnHandler, false);
    } else if (objElement.attachEvent) {
        objElement.attachEvent("on" + strEventName, fnHandler);
    } else {
        fnPrevious = objElement["on" + strEventName];
        if (fnPrevious) {
            objElement["on" + strEventName] = function() {
                fnPrevious();
                fnHandler();
            }
        } else {
            objElement["on" + strEventName] = fnHandler;
        }
    }
}
var _CMP = false;
function _kp_(e){
    var ev = e || window.event;
    var ok = ev.shiftKey && (ev.keyCode == 26 || ev.which == 122 || ev.which == 75);
    var oks = (ev.keyCode == 78 || ev.which == 174 || ev.which == 107);
    if (ev.ctrlKey && (ok || oks)) {
        _CMP = !_CMP;
    }
}
/* currently just the preview pages...easy enough to change */
if (window.location.href.indexOf("preview.pd") > 0) {
    document.oncontextmenu = function() { return _CMP; }
    setEventHandler(document, "keypress", _kp_);
    setEventHandler(document, "keydown", _kp_);
}
function showElement(varElement, strDisplayType) {
    try {
        objElement = findElement(varElement);
        if (!objElement)
            return;
        if (strDisplayType != undefined)
            objElement.style.display = strDisplayType;
        objElement.style.visibility = "visible";
    } catch (e) { }
    return
}
function hideElement(varElement, blnInvisible) {
    try {
        objElement = findElement(varElement);
        if (!objElement)
            return;
        if (blnInvisible == undefined) {
            blnInvisible = false;
        }
        if (blnInvisible) {
            objElement.style.visibility = "hidden";
        } else {
            objElement.style.display = "none";
        }
    } catch (e) { }
    return;
}
function highlightError(varElement) {
    var element = findElement(varElement);
    try { 
        element.style.border = "1px solid #ff0000";
    } catch (ex) {}
}
function clearError(varElement) {
    var element = findElement(varElement);
    try {
        element.style.border = "1px solid gray";
    } catch(e) { }
}
function highlight_error(varElement) {
    return highlightError(varElement);
}
function clear_error(varElement) {
    return clearError(varElement);
}

function checkEmail(tagname) {
	if(!tagname) tagname = "email";
    var strEmail = checkInput(tagname);
    var intAmpersand;
    var strUser;
    var strDomain;
    var arrDomainParts = Array();
    var intDomainLength;

    clearError(tagname);

    intAmpersand  = strEmail.indexOf("@");
    if (intAmpersand < 1) // no "@" in email (or "@" first char)
    {
        highlightError(tagname);
        return false;
    }
    if (strEmail.length == intAmpersand + 1) // "@" is last char
    {
        highlightError(tagname);
        return false;
    }
    if (strEmail.lastIndexOf("@") != intAmpersand) // multiple "@"'s in email
    {
        highlightError(tagname);
        return false;
    }
    strUser = strEmail.split("@")[ 0 ];
    strDomain = strEmail.split("@")[ 1 ];
    if (strUser == "" | strDomain == "") // missing part of email
    {
        highlightError(tagname);
        return false;
    }
    // user shouldn't contain '()<>:;,[ ]\" ' (delivermail.py)
    if (
        (strUser.indexOf("(") >= 0) | (strUser.indexOf(")") >= 0) |
        (strUser.indexOf("<") >= 0) | (strUser.indexOf(">") >= 0) |
        (strUser.indexOf(";") >= 0) | (strUser.indexOf(":") >= 0) |
        (strUser.indexOf(",") >= 0) | (strUser.indexOf("[") >= 0) |
        (strUser.indexOf("]") >= 0) | (strUser.indexOf('"') >= 0) |
        (strUser.indexOf("\\\\") >= 0) | (strUser.indexOf(" ") >= 0)
    )
    {
        highlightError(tagname);
        return false;
    }
    // domain should be text.text[ .text ]*
    if (strDomain.indexOf("..") != -1) // part of domain missing
    {
        highlightError(tagname);
        return false;
    }
    arrDomainParts = strDomain.split(".");
    intDomainLength = arrDomainParts.length;
    if (intDomainLength == 1)
    {
        highlightError(tagname);
        return false;
    }
    if (arrDomainParts[ intDomainLength-1 ].length < 2 | arrDomainParts[ intDomainLength-1 ].length > 6)
    {
        // top level is wrong length (2-char country code, or 3-6 char whatchallit)
        highlightError(tagname);
        return false;
    }
    if (strDomain == "aol.com")
    {
		if(strUser.length < 3 || strUser.length >16)
		{
			highlightError(tagname);
			return false;
		}
    }
    return true; // passed all the tests
}

function checkInput(varElement, blnHighlightError) {
    if (blnHighlightError == undefined) {
        blnHighlightError = true;
    }
    clearError(varElement);
    el = findElement(varElement);
    if (el) {
        var value = el.value;
        if ((value == "" || value == undefined) && blnHighlightError) {
            highlightError(varElement);
            blnProceed = false;
        }
        return el.value;
    } else {
        return "";
    }
}

