var URL_PATTERN       = "^(http\\:\\/\\/)?([a-z0-9]+([-a-z0-9+]+[0-9a-z])?\\\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|mobile)(\\/[a-z0-9_\\-\\.~]+)*(\\/([a-z0-9_\\-\\.]*)(\\?[a-z0-9+_\\-\\.%=&amp;]*)?)?(#[a-z][a-z0-9_]*)?$";
var EMAIL_PATTERN     = "^[-a-z0-9_][-0-9a-z_\.]*@([a-z0-9]+(\-+[a-z0-9]+)?\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|mobile)$";

/**
* Set field style to correct or error
*
*/
function setStyle(id, e)
{
    if (e)
        document.getElementById(id).className = 'correct_field';
    else
        document.getElementById(id).className = 'error_field';

}


/**
* Check if field value is a correct URL
*
*/
function checkUrl(id)
{
    var v = new FormValidator();
    var e = v.MatchRegexp([id, URL_PATTERN, "i"]);

    setStyle(id, e);

    return e;
}

/**
* Check if field is not empty
*
*/
function checkNotEmpty(id)
{
    var v = new FormValidator();
    var e = v.NotEmptyField([id]);

    setStyle(id, e);

    return e;
}
/**
* Check value to be longer than specified length
*
*/
function checkNotShorterThan(id, len)
{
    var v = new FormValidator();
    var e = v.LongerOrEqual([id, len]);

    setStyle(id, e);

    return e;
}

/**
* Check if field value is a valid email address
*
*/
function checkEmail(id)
{
    var v = new FormValidator();
    var e = v.MatchRegexp([id, EMAIL_PATTERN, "i"]);

    if (document.getElementById('email_errmsg'))
    {
        if (e)
            document.getElementById('email_errmsg').innerHTML = '';
        else 
            document.getElementById('email_errmsg').innerHTML = 'Not a valid email address';
    }

    setStyle(id, e);

    return e;
}

/**
* Perform a server-side value check
*
*/
function checkValue(AFieldId, AUserId, AHandler, AErrorFieldId)
{
    if (!document.getElementById(AFieldId)) return false;
   
    var req    = new JsHttpRequest();
    var AValue = document.getElementById(AFieldId).value;

    var result = false;

    if (AErrorFieldId && document.getElementById(AErrorFieldId))
    {
        document.getElementById(AErrorFieldId).innerHTML = '';
    }

    req.onreadystatechange = function()
    {
        if (4 == req.readyState)
        {
            result = 'OK' == req.responseJS.status;
            setStyle(AFieldId, result);
            if (req.responseJS.message)
            {
                if (AErrorFieldId && document.getElementById(AErrorFieldId))
                {
                    document.getElementById(AErrorFieldId).innerHTML = req.responseJS.message;
                }
            }
        }
    }

    document.getElementById(AFieldId).className = 'loading_field';
    req.open('GET', AHandler, false);
    req.send( {check:AValue, id:AUserId} );

    return result;
}

/**
* Check CAPTCHA
*
*/
function checkCp(id)
{
    return checkValue(id, null, '/cp.php', '');
}

/**
* check if two fields have same value
*
*/
function checkEq(id1, id2)
{
    var v = new FormValidator();
    var e = checkPwR(id2) && v.IsEqual([id1, id2]);

    setStyle(id1, e);

    return e;
}

/**
* Check if password confirmation match password
*
*/
function checkEqP(id1, id2)
{
    var v = new FormValidator();
    var e = checkPwP(id2) && v.IsEqual([id1, id2]);

    setStyle(id1, e);

    return e;
}

function ValidateForm()
{
    var c1 = checkEmail('email');
    var c2 = checkNotEmpty('text');
    var c3 = checkNotShorterThan('name', 2);

    return c1 && c2 && c3;
}

