/*  ========================================================
Filename: fcheck.js
Called by:
Notes: Mail form and registration details validator
Update history:
14/01/2008 - General Javascript code cleanups append popwin()
============================================================ */

function mailchk(emailStr) {
    var checkTLD=1;
    var knownDomsPat=/^(com|net|org|edu|int|mil|gov|biz|aero|name|coop|info|pro|museum)$/;
    var emailPat=/^(.+)@(.+)$/;
    var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]"; //removed _ from this pattern
    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=emailStr.match(emailPat);
    if (matchArray==null) {/*alert("Email address seems incorrect (check @ and .'s)");*/return false;}
    var user=matchArray[1];
    var domain=matchArray[2];
    for (i=0; i<user.length; i++) {
        if (user.charCodeAt(i)>127) {/*alert("The name contains invalid characters.");*/return false;}
    }
    for (i=0; i<domain.length; i++) {
        if (domain.charCodeAt(i)>127) {/*alert("The domain contains invalid characters.");*/return false;}
    }
    if (user.match(userPat)==null) {/*alert("The name doesn't seem to be valid.");*/return false;}
    var IPArray=domain.match(ipDomainPat);
    if (IPArray!=null) {
        // this is an IP address
        for (var i=1;i<=4;i++) {
            if (IPArray[i]>255) {/*alert("Destination IP address is invalid!");*/return false;}
        }
        return true;
    }
    var atomPat=new RegExp("^" + atom + "$");
    var domArr=domain.split(".");
    var len=domArr.length;
    for (i=0;i<len;i++) {
        if (domArr[i].search(atomPat)==-1) {/*alert("The domain doesn't seem to be valid.");*/return false;}
    }
    if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1){
        /*alert("Invalid TLD.");*/return false;}
    if (len<2) {/*alert("Missing hostname!");*/return false;}
    return true; //address is ok
}

// This is identical to ajaxreg.js(mmcheck)
function rfcheck(myform) {
    var missing = "";
    var name    = myform.name.value.length;
    var email   = myform.email.value.length;
    for (var i=0; i < myform.pb.length; i++){
        if (myform.pb[i].checked){var b = myform.pb[i].value;}
    }
    if (email){
        var company  = myform.company.value.length;
        var address  = myform.address.value.length;
        var postcode = myform.postcode.value.length;
        var eml      = myform.email.value;
        if (name == 0)      {missing += 'Name\n';}
        if (company == 0 && b == 'B') {missing += 'Company\n';}
        if (address == 0)   {missing += 'Address\n';}
        if (postcode == 0)  {missing += 'Postcode\n';}
        if (email == 0)     {missing += 'Email\n';}
        
        if (missing.length) {
            var err = 'You must complete all the fields\n\nThe following fields have not been completed : \n\n'+missing;
            alert(err) ;
        }
        else if (!mailchk(eml)) {
            var err = 'Invalid email address ' + eml;
            alert(err) ;
        }
        else {myform.submit();}
    }
}

function mfcheck(myform) {
    var missing = "";
    var pname = myform.pname.value.length;
    var oname = myform.oname.value.length;
    var email = myform.email.value.length;
    var tel   = myform.tel.value.length;
    var note  = myform.note.value.length;
    var eml   = myform.email.value;

    if (pname == 0) {missing += 'Name\n';}
    if (oname == 0) {missing += 'Company\n';}
    if (email == 0) {missing += 'Email\n';}
    if (tel == 0)   {missing += 'Telephone\n';}
    if (note == 0)  {missing += 'Your message\n';}
    if (missing.length) {
        var err = 'Please complete all fields\n\nThe following fields have not been completed : \n\n'+missing;
        alert(err);
    }
    else if (!mailchk(eml)) {
        var err = 'Invalid email address ' + eml;
        alert(err) ;
    }
    else {myform.submit();}
}

function popwin(wname,url,w,h) {
    var sw = screen.width;
    var sh = screen.height;
    var left = (sw - w)/2;
    var top = (sh - h)/2;
    var siz = "width="+w+",height="+h+",top="+top+",left="+left+",screenX="+left+",screenY="+top
    siz += ",scrollbars,resizable";
    var wp=window.open(url, wname, siz);wp.focus();
}
// -------------------------------- user reg stuff -----------------
var xmlhttp;
function regForm(str){
    xmlhttp = GetXmlHttpObject();
    if (xmlhttp == null){
        alert ("Browser does not support HTTP Request");
        return;
    }
    var url = "/userval.php";
    url = url+"?q="+str;
    url = url+"&seq="+Math.random();
    xmlhttp.onreadystatechange = stateChanged;
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
}

function stateChanged(){
    if (xmlhttp.readyState == 4){document.getElementById("usrdet").innerHTML=xmlhttp.responseText;}
}

function GetXmlHttpObject() {
    if (window.XMLHttpRequest){ return new XMLHttpRequest();}
    // code for IE6, IE5
    if (window.ActiveXObject){ return new ActiveXObject("Microsoft.XMLHTTP");}
    return null;
}

function flipco(myobj){
    if (myobj.value == 'B')
        {document.getElementById("coy").style.display="block";}
    else if (myobj.value == 'P')
        {document.getElementById("coy").style.display="none";}
}

