function formCheckField(name,desc,req,type) {
    this.name = name; this.desc = desc; this.req  = req; this.type = type;
}

alphanum=new String( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._+-@" );
         
function checkAlphaNum( string ) {
    flagz=1;
    for(loop=0;loop<string.length;loop++) {
        if(alphanum.indexOf(string.substr(loop,1))==-1) { flagz=0; }
    }
    return flagz;
}


function formCheck(testform,fields,conf) {
    warning =""; // Warning that will appear
    errors  ="";
    for (Y=0; Y<fields.length; Y++) { // Iterate through the fields - this is NN3 compatible ;-)
        X = fields[Y];
        if ( X.type == "ddown") { // All drop downs in the list to be checked are required!!!
            V = document.forms[testform].elements[X.name].selectedIndex; // Get value of index...
            if(V == 0) { warning += '     '+X.desc+"\n"; }
        } else {
            V =     document.forms[testform].elements[X.name].value;
            if(X.req == 2) {
                if( V != document.forms[testform].elements[X.type].value) { errors += X.desc+'\n'; }
            } else {
                if (V == '') {  // If required then check to see it isn't blank...
                    if(X.req) {     warning += '     '+X.desc+"\n"; }
                } else { // Now check the types of parameters - currently only email but could add URL...
                    flag=0;
                    if(X.type == "email"         ) { if( V.indexOf("@") == -1 || V.indexOf(",") != -1 || V.indexOf(".") == -1)              { flag=3; } }
                    if(X.type == "notemail"      ) { if( V.indexOf("@") > -1 )                                      { flag=3; } }
                    if(X.type == "alphanum"      ) { if( !checkAlphaNum( V ) )                                      { flag=2; } }
                    if(X.type == "password"      ) { if( !checkAlphaNum( V ) || V.length < 6 )                      { flag=2; } }
                    if(X.type == "URL"           ) { if( V.substr(0,7)!='http:\/\/' && V.substr(0,8)!='https:\/\/') { flag=4; } }
                    if(X.type == "nonneg-integer") { if( isNaN(parseInt(V)) || (parseInt(V) < 0))                   { flag=5; } }
                    if(X.type == "nonneg-float"  ) { if( isNaN(parseFloat(V)) || (parseFloat(V) < 0))               { flag=6; } }
                    if(X.type == "pos-integer"   ) { if( isNaN(parseInt(V)) || (parseInt(V) <= 0) )                 { flag=7; } }
                    if(X.type == "year"          ) { if( isNaN(parseInt(V)) || (parseInt(V) < 0) || ((parseInt(V)>99) && (parseInt(V)<1907)) ) { flag=7; } }
                    if(X.type == "pos-float"     ) { if( isNaN(parseFloat(V)) || (parseFloat(V) <= 0) )             { flag=8; } }
                    if(X.type == "integer"       ) { if( isNaN(parseInt(V)) )                                       { flag=9; } }
                    if(X.type == "float"         ) { if( isNaN(parseFloat(V)) )                                     { flag=10; } }
                    if(flag!=0) { errors += "The value of the "+X.desc+" is invalid.\n"; }
                }
            }
        }
    }
    if (warning != "" || errors !="") { // If any warnings display them
        message = "";
        if(warning!="") { message += "The following required fields need to be filled in -\n"+warning; }
        alert( message+errors );
        return false;
    } else { // If conf is ZERO do nothing else call up confirm box..
        if( conf == 0 ) { return true; }
        if( conf == 99 ) {
           if( ( document.forms[testform].elements['end'].value != '' ) && (
               ( parseInt(document.forms[testform].elements['end'].value) > parseInt(document.forms[testform].elements['start'].value) + 1 ) ||
               ( parseInt(document.forms[testform].elements['end'].value) < parseInt(document.forms[testform].elements['start'].value)     ) 
           ) ) {
             alert( "This category is for events which last for up to 1 year - your start/end dates are too far apart." );
             return false;
           } else {
             return true;
           }
        }
        if( confirm( "Check the values you entered are correct before continuing" ) ) {
            return true;
        } else {
            return false;
        }
    }
}


var formFields_contactus_code_fixed = new Array(
    new formCheckField('email', 'Email address', 1, 'email'),
    new formCheckField('name', 'From', 1, ''),
    new formCheckField('body', 'Body of message', 1, '')
);
var formFields_postcard = new Array(
    new formCheckField('toemail', "Friend's email", 1, 'email'),
    new formCheckField('toname',  "Friend's name", 1, ''),
    new formCheckField('fromemail', "Your email", 1, 'email'),
    new formCheckField('fromname',  "Your name", 1, ''),
    new formCheckField('message', 'Body of message', 1, '')
);

var formFields_contactus = new Array(
    new formCheckField('email', 'Email address', 1, 'email'),
    new formCheckField('name', 'From', 1, ''),
    new formCheckField('code', 'Subject', 1, 'ddown'),
    new formCheckField('body', 'Body of message', 1, '')
);

var formFields_addme = new Array(
    new formCheckField('start', 'Year joined', 1, 'year'),
    new formCheckField('end', 'Year left', 0, 'year'),
    new formCheckField('nickname', 'Nickname', 0, 'notemail'),
    new formCheckField('leavingname', 'Surname on Leaving', 0, 'notemail')
);

var formFields_addme2 = new Array(
    new formCheckField('sublist',       'Sub-camp/team',        0, 'notemail'),
    new formCheckField('nickname',      'Nickname',             0, 'notemail'),
    new formCheckField('leavingname',   'Surname at Event',     0, 'notemail')
);

var formFields_editgroup = new Array(
    new formCheckField('email', 'Email address', 0, 'email'),
    new formCheckField('URL',   'Web address (URL)',      0, 'URL')
);

var formFields_addgroup = new Array(
    new formCheckField('listtype_ID', 'Type of group', 1, 'ddown'),
    new formCheckField('name', 'Name of group', 1, '')
);

var formFields_addgroup2 = new Array(
    new formCheckField('start',         'Start year',    1, 'year'),
    new formCheckField('end',           'End year',     0, 'year'),
    new formCheckField('listtype_ID',   'Type of event', 1, 'ddown'),
    new formCheckField('name',          'Name of event', 1, '')
);

var formFields_register = new Array(
    new formCheckField('email',            'Email address',  1, 'email'),
    new formCheckField('firstname',        'First name',     1, 'notemail'),    
    new formCheckField('lastname',         'Last name',      1, 'notemail'),    
    new formCheckField('password1',        'Password',       1, 'password'),    
    new formCheckField('password1',        "Your new passwords don't match",      2, 'password2'),    
    new formCheckField('question_ID',         'Security question', 1, 'ddown'),
    new formCheckField('answer',           'answer',         1, ''),
    new formCheckField('address1',           'Address (line 1)',         1, ''),
    new formCheckField('city',           'Town/City',         1, ''),
    new formCheckField('county',           'County',         1, ''),
    new formCheckField('country_ID',           'Country',         1, 'ddown'),
    new formCheckField('postcode',           'Postcode',         1, ''),
    new formCheckField('dob_d',           'Day of Birth',         1, 'ddown'),
    new formCheckField('dob_m',           'Month of Birth',         1, 'ddown'),
    new formCheckField('dob_y',           'Year of Birth',         1, 'pos-integer')
);

var formFields_details = new Array(
    new formCheckField('email',            'Email address',  1, 'email'),
    new formCheckField('firstname',        'First name',     1, 'notemail'),    
    new formCheckField('lastname',         'Last name',      1, 'notemail'),    
    new formCheckField('password1',        'Password',       0, 'password'),    
    new formCheckField('password1',        "Your new passwords don't match",      2, 'password2'),
    new formCheckField('address1',           'Address (line 1)',         1, ''),
    new formCheckField('city',           'Town/City',         1, ''),
    new formCheckField('county',           'County',         1, ''),
    new formCheckField('country_ID',           'Country',         1, 'ddown'),
    new formCheckField('postcode',           'Postcode',         1, ''),
    new formCheckField('dob_d',           'Day of Birth',         1, 'ddown'),
    new formCheckField('dob_m',           'Month of Birth',         1, 'ddown'),
    new formCheckField('dob_y',           'Year of Birth',         1, 'pos-integer')
);
