function isValidEmail(text) 
{
    var emailPat = /^(.+)@(.+)$/;
    var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
    var validChars = "\[^\\s" + specialChars + "\]";
    var quotedUser = "(\"[^\"]*\")";
    var ipDomainPat = /^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
    var atom = validChars + '+';
    var word = "(" + atom + "|" + quotedUser + ")";
    var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat = new RegExp("^" + atom + "(\\." + atom + ")*$");
    var matchArray = text.match(emailPat);
    if (matchArray == null) 
    {
        return false;
    }
    var user = matchArray[1];
    var domain = matchArray[2];
    if (user.match(userPat) == null) 
    {
        return false;
    }
    var ipArray = domain.match(ipDomainPat);
    if (ipArray != null) 
    {
        for (var i = 1; i <= 4; i ++) 
        {
            if (ipArray[i] > 255) 
            {
                return false;
            }
        }
        return true;
    }
    var domainArray = domain.match(domainPat);
    if (domainArray == null) 
    {
        return false;
    }
    var atomPat = new RegExp(atom, "g");
    var domArr = domain.match(atomPat);
    var len = domArr.length;
    if ((domArr[domArr.length - 1].length < 2) ||
        (domArr[domArr.length - 1].length > 3)) 
    {
        return false;
    }
    if (len < 2) 
    {
        return false;
    }
    return true;
}

function isValidDate(text) 
{
    var pattern = /^\d\d\d\d\-\d\d\-\d\d$/;
    if (text.match(pattern) == null)
    {
        return false;
    }
    var year = Number(text.substr(0, 4));
    var month = Number(text.substr(5, 2));
    var day = Number(text.substr(8, 2));
    if (month < 1 || month > 12) 
    {
        return false;
    }
    if (day < 1 || day > 31) 
    {
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) && (day == 31)) 
    {
        return false;
    }
    if (month == 2) 
    {
        var leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
        if (day > 29 || (day == 29 && !leap)) 
        {
            return false;
        }
    }
    return true;
}

function isUnsignedFloat(text)
{
    var pattern = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
    return (text.match(pattern) != null);
}

function isUnsignedInt(text)
{
    var pattern = /^\d+$/;
    return (text.match(pattern) != null);
}

function popup(url, windowName)
{
    var width  = (arguments.length > 2 ? arguments[2] : screen.width / 2            );
    var height = (arguments.length > 3 ? arguments[3] : 2 * screen.height / 3       );
    var left   = (arguments.length > 4 ? arguments[4] : (screen.width - width) / 2  );
    var top    = (arguments.length > 5 ? arguments[5] : (screen.height - height) / 2);
    newWindow = window.open(url,
                            windowName,
                            "channelmode=0,directories=0,fullscreen=0,height=" + height + ",left=" + left + ",location=0,menubar=0,resizable=1,scrollbars=1,status=0,titlebar=1,toolbar=0,top=" + top + ",width=" + width);
    newWindow.focus();
}

function toggleDisplay(id)
{
	var element = document.getElementById(id);
	if (element.style.display != "none")
	{
		element.style.display = "none";
		return true;
	}
	else
	{
		element.style.display = "";
		return false;
	}
}

function stripHtmlTags(html) 
{
	return html.replace(/<\/?(?!(?:br|p)\b)[^>]+>/gi, "");
}
