String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

function getLabelForId(id) {
    var label, labels = document.getElementsByTagName('label');
    for (var i = 0; (label = labels[i]); i++) {
        if (label.htmlFor == id) {
            return label;
        }
    }
    return false;
}

function checkRequired(id) {
    var formfield = document.getElementById(id);
    var label = getLabelForId(id);
    if (formfield.value.length == 0) {
        label.className = 'problem';
    } else {
        label.className = 'completed';
    }
}

function checkPhone(id) {
    var phone = document.getElementById(id);
    var label = getLabelForId(id);
    var digits = phone.value.replace(/[^0-9]/ig, '');
    if (!digits) {
        label.className = '';
        phone.value = '';
        return;
    }
    if (digits.length == 10) {
        phone.value = '(' + digits.substring(0, 3) + ') ' + 
            digits.substring(3, 6) + '-' + 
            digits.substring(6, 10);
        //label.className = 'completed';
    } else {
        //label.className = 'problem';
        phone.value = digits;
    }
}

function checkOptionalEmail(id)
{
    var email = document.getElementById(id);
    var label = getLabelForId(id);

    var verify = /^[A-Za-z0-9._-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,6}$/;

    if(email.value.replace(/^\s+|\s+$/, '').length == 0)
    {
       label.className = '';
       email.value = '';
       return;
    } 

    if( email.value.match(verify) )
    {
       label.className = 'completed';
    }
    else
    {
       label.className = 'problem';
    }    
}

function checkOptionalURL(id)
{
    var url = document.getElementById(id);
    var label = getLabelForId(id);

//    var verify = /^[A-Za-z]+:\/\/[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\/[A-Za-z0-9-]+$/;
//    var verify = /^((ht|f)tps?\:\/\/){1}([\w]+)(.[\w]+){2,6}(\/[0-9a-zA-Z;/?:@&=+$\.\-_!~*'()%]*)?$/;

    //Help the lazy: if it doesn't start with http:// or https:// add http://

    var verify = /^((ht|f)tps?\:\/\/){1}[A-Za-z0-9._%-]+\.[A-Za-z]{2,6}(\/[0-9a-zA-Z;/?:@&=+$.-_!~*'()%]*)?$/;

    if(url.value.replace(/^\s+|\s+$/, '').length == 0)
    {
       label.className = '';
       url.value = '';
       return;
    } 

    url.value = url.value.replace(/^\s+|\s+$/, '');

    var verifyHttp = /^((ht|f)tps?\:\/\/){1}.*/;
    if( !url.value.match(verifyHttp) )
    {
       url.value = "http://" + url.value;
    }    

    if( url.value.match(verify) )
    {
       label.className = 'completed';
    }
    else
    {
       label.className = 'problem';
    }    
}

function checkZip(id)
{
    var zip = document.getElementById(id);
    var label = getLabelForId(id);
    var digits = zip.value.replace(/[^0-9]/ig, '');

    if (!digits) {
        label.className = 'problem';
        zip.value = '';
        return;
    }

    if (digits.length == 5) {
        label.className = 'completed';
    } else {
        label.className = 'problem';
        zip.value = digits;
    }
}

function revertPhone(id) {
    var phone = document.getElementById(id);
    var label = getLabelForId(id);
    var digits = phone.value.replace(/[^0-9]/ig, '');
    phone.value = digits;
}
