//////////////////////////////////////////////////////////////////////////////////////////////
/// Form validation javascript
//////////////////////////////////////////////////////////////////////////////////////////////
    var new_fieldname = "";
    var bgBad = "#FFCC33";
    var bgGood = "#FFFFFF";
    function validateForm( form, x )
    {   var message = "";
        var more_message = "";
        var showmsg = "no";
        x = x - 1;
        for( var i = 0; i <= x; i++ )
        {   var messenger = form.elements[i].name;
            messenger = messenger.substring( 0, 2 );
            var fieldname = form.elements[i].name;
            fieldname = fieldname.substring( 2 );
            {   if( messenger == "r_" )
                {   more_message = r_check( form, x, fieldname, i );
                }
                else if( messenger == "i_" )
                {   more_message = i_check( form, x, fieldname, i );
                }
                else if( messenger == "d_" )
                {   more_message = d_check( form, x, fieldname, i );
                }
                else if( messenger == "e_" )
                {   more_message = e_check( form, x, fieldname, i );
                }
                else if( messenger == "z_" )
                {   more_message = z_check( form, x, fieldname, i );
                }
                else if( messenger == "p_" )
                {   more_message = p_check( form, x, fieldname, i );
                }
                else if( messenger == "n_" )
                {   more_message = n_check( form, x, fieldname, i );
                }
                if( more_message != "" )
                {   if( message == "" )
                    {   message = more_message;
                        more_message = "";
                    }
                    else
                    {   message = message + "\n" + more_message;
                        more_message = "";
                    }
                }
                if( message > "" )
                {   showmsg = "yes";
                }
            }
        }
        if( showmsg == "yes" )
        {   alert( "The following form field(s) were incomplete or incorrect:\n\n" + message + "\n\n Please complete or correct the form and submit again." );
            return false;
        }
        else
        {   return true;
        }
    }

    function r_check( form, x, fieldname, i )
    {   var msg_addition = "";
        new_fieldname = fieldname;
        for( var y = 0; y <= x; y++ )
        {   if( ( form.elements[y].type == "radio" || form.elements[y].type == "checkbox" ) && form.elements[y].name == new_fieldname && form.elements[y].checked == true )
            {   msg_addition = "";
                form.elements[y].style.backgroundColor = bgGood;
                break;
            }
            else if( ( form.elements[y].type == "radio" || form.elements[y].type == "checkbox" ) && form.elements[y].name == new_fieldname && form.elements[y].checked == false )
            {   msg_addition = form.elements[i].value;
                form.elements[y].style.backgroundColor = bgBad;
            }
            else if( form.elements[y].type == "select-one" )
            {   var l = form.elements[y].selectedIndex;
                if( form.elements[y].name == fieldname && form.elements[y].options[l].value != "" )
                {   msg_addition = "";
                    form.elements[y].style.backgroundColor = bgGood;
                    break;
                }
                else if( form.elements[y].name == fieldname && form.elements[y].options[l].value == "" )
                {   msg_addition = form.elements[i].value;
                    form.elements[y].style.backgroundColor = bgBad;
                }
            }
            else if( form.elements[y].name == fieldname && form.elements[y].value == "" && form.elements[y].type != "radio" && form.elements[y].type != "checkbox" && form.elements[y].type != "select-one" )
            {   msg_addition = form.elements[i].value;
                form.elements[y].style.backgroundColor = bgBad;
                break;
            }
            else if( form.elements[y].name == fieldname && form.elements[y].value != "" && form.elements[y].type != "radio" && form.elements[y].type != "checkbox" && form.elements[y].type != "select-one" )
            {   msg_addition = "";
                form.elements[y].style.backgroundColor = bgGood;
            }
        }
        return( msg_addition );
    }
    function i_check( form, x, fieldname, i )
    {   for( var y = 0; y <= x; y++ )
        {   if( form.elements[y].name == fieldname )
            {   break;
            }
        }
        var msg_addition = "";
        var decimal = "";
        inputStr = form.elements[y].value.toString();
        for( var c = 0; c < inputStr.length; c++ )
        {   var oneChar = inputStr.charAt( c )
            if( c == 0 && oneChar == "-" || oneChar == "."  && decimal == "" )
            {   if( oneChar == "." )
                {   decimal = "yes";
                }
                continue;
            }
            if( oneChar < "0" || oneChar > "9" )
            {   msg_addition = form.elements[i].value;
                form.elements[c].style.backgroundColor = bgBad;
            }
        }
        return( msg_addition );
    }
    function e_check( form, x, fieldname, i )
    {   for( var y = 0; y <= x; y++ )
        {   if( form.elements[y].name == fieldname )
            {   break;
            }
        }
        var msg_addition = "";
        period = ".";
        if( form.elements[y].value == "" || form.elements[y].value.indexOf( '@', 0 ) < 3 )
        {   error = 1;
        }
        else
        {   test = form.elements[y].value.indexOf( '.', form.elements[y].value.indexOf( '@', 0 ) );
            if( test != -1 )
            {   error = 0;
            }
            else
            {   error = 1;
            }
        }
        if( error == 1 )
        {   msg_addition = form.elements[i].value;
            form.elements[y].style.backgroundColor = bgBad;
        }
        else
        {   new_length = form.elements[y].value.length - test;
            if( new_length == 4 || new_length == 3 || ( new_length >= 5 && form.elements[y].value.indexOf( '.', ( test + 1 ) ) != -1 ) )
            {   msg_addition = "";
            }
            else
            {   msg_addition = form.elements[i].value;
            }
        }
        return( msg_addition );
    }
    function z_check( form, x, fieldname, i )
    {   for( var y = 0; y <= x; y++ )
        {   if( form.elements[y].name == fieldname )
            {   break;
            }
        }
        var msg_addition = "";
        period = ".";
        if( form.elements[y].value == "" || form.elements[y].value.indexOf( '@', 0 ) == -1 )
        {   error = 0;
        }
        else
        {   test = form.elements[y].value.indexOf( '.', form.elements[y].value.indexOf( '@', 0 ) );
            if( test != -1 )
            {   error = 1;
            }
            else
            {   error = 0;
            }
        }
        if( error == 1 )
        {   msg_addition = form.elements[i].value;
            form.elements[y].style.backgroundColor = bgBad;
        }
        else
        {   new_length = form.elements[y].value.length - test;
            if( new_length == 4 || new_length == 3 || ( new_length >= 5 && form.elements[y].value.indexOf( '.', ( test + 1 ) ) != -1 ) )
            {   msg_addition = form.elements[i].value;
            }
            else
            {
                msg_addition = "";
            }
        }
        return( msg_addition );
    }
    function d_check( form, x, fieldname, i )
    {   for( var y = 0; y <= x; y++ )
        {   if( form.elements[y].name == fieldname )
            {   break;
            }
        }
        var msg_addition = "";
        var sDate = form.elements[y].value;
        if( form.elements[y].value != "" )
        {   if( isDate( form.elements[y].value ) == false )
            {   msg_addition = form.elements[i].value;
                form.elements[y].style.backgroundColor = bgBad;
            }
            else
            {   msg_addition = "";
            }
            return( msg_addition );
        }
        return( msg_addition );
    }
    function p_check( form, x, fieldname, i )
    {   for( var y = 0; y <= x; y++ )
        {   if( form.elements[y].name == fieldname )
            {   break;
            }
        }
        var msg_addition = "";
        if( form.elements[y].value != "" )
        {   if( form.elements[y].value != document.getElementById( 'password' ).value )
            {   msg_addition = form.elements[i].value;
                form.elements[y].style.backgroundColor = bgBad;
            }
            else
            {   msg_addition = "";
            }
            return( msg_addition );
        }
        return( msg_addition );
    }
    function n_check( form, x, fieldname, i )
    {   for( var y = 0; y <= x; y++ )
        {   if( form.elements[y].name == fieldname )
            {   break;
            }
        }
        var msg_addition = "";
        if( form.elements[y].value != "" )
        {   if( isPhoneNumber( form.elements[y].value ) == false )
            {   msg_addition = form.elements[i].value;
                form.elements[y].style.backgroundColor = bgBad;
            }
            else
            {   msg_addition = "";
            }
            return( msg_addition );
        }
        return( msg_addition );
    }

    function stripCharsInBag( s, bag )
    {   var i;
        var returnString = "";
        for( i = 0; i < s.length; i++ )
        {   var c = s.charAt( i );
            if( bag.indexOf( c ) == -1 ) returnString += c;
        }
        return returnString;
    }
    function daysInFebruary( year )
    {   return ( ( ( year % 4 == 0) && ( ( !( year % 100 == 0 ) ) || ( year % 400 == 0 ) ) ) ? 29 : 28 );
    }
    function daysArray( n )
    {   for( var i = 1; i <= n; i++ )
        {   this[i] = 31;
            if( i == 4 || i == 6 || i == 9 || i == 11 )
            {   this[i] = 30;
            }
            if( i == 2 )
            {   this[i] = 29;
            }
        }
        return this;
    }
    function isDate( dtStr )
    {   var dtCh = "/";
        var minYear = 1900;
        var maxYear = 2100;
        var daysInMonth = daysArray( 12 );
        var pos1 = dtStr.indexOf( dtCh );
        var pos2 = dtStr.indexOf( dtCh, pos1 + 1 );
        var strMonth = dtStr.substring( 0, pos1 );
        if( isInteger( strMonth ) == false )
        {   return false;
        }
        var strDay = dtStr.substring( pos1 + 1, pos2 );
        if( isInteger( strDay ) == false )
        {   return false;
        }
        var strYear = dtStr.substring( pos2 + 1 );
        if( isInteger( strYear ) == false )
        {   return false;
        }
        strYr = strYear;
        if( strDay.charAt( 0 ) == "0" && strDay.length > 1 )
        {   strDay = strDay.substring( 1 );
        }
        if( strMonth.charAt( 0 ) == "0" && strMonth.length > 1 )
        {   strMonth = strMonth.substring( 1 );
        }
        for( var i = 1; i <= 3; i++ )
        {   if( strYr.charAt( 0 ) == "0" && strYr.length > 1 )
            {   strYr = strYr.substring( 1 );
            }
        }
        month = parseInt( strMonth );
        day = parseInt( strDay );
        year = parseInt( strYr );
        if( pos1 == -1 || pos2 == -1 )
        {   return false;
        }
        if( strMonth.length < 1 || month < 1 || month > 12 )
        {   return false;
        }
        if( strDay.length < 1 || day < 1 || day > 31 || ( month == 2 && day > daysInFebruary( year ) ) || day > daysInMonth[month] )
        {   return false;
        }
        if( strYear.length != 4 || year == 0 || year < minYear || year > maxYear )
        {   return false;
        }
        if( dtStr.indexOf( dtCh, pos2 + 1 ) != -1 || isInteger( stripCharsInBag( dtStr, dtCh ) ) == false )
        {   return false;
        }
        return true;
    }
    function isInteger( sDate )
    {   var new_msg = true;
        inputStr = sDate.toString();
        for( var i = 0; i < inputStr.length; i++ )
        {   var oneChar = inputStr.charAt(i);
            if( (oneChar < "0" || oneChar > "9") && oneChar != "/" )
            {   new_msg = false;
            }
        }
        return new_msg;
    }
    function isPhoneNumber( TheNumber )
    {   var valid = true;
        var GoodChars = "0123456789()-+. ";
        var i = 0;
        if( TheNumber == "" )
        {   valid = false;
        }
        for( i = 0; i <= TheNumber.length -1; i++ )
        {   if( GoodChars.indexOf( TheNumber.charAt( i ) ) == -1 )
            {   valid = false;
            }
        }
        return valid;
    }
    function asc( each_char )
    {   var n = 0;
        var char_str = charSetStr();
        for( i = 0; i < char_str.length; i++ )
        {   if( each_char == char_str.substring( i, i + 1 ) )
            {   break;
            }
        }
        return i + 32;
    }
    function charSetStr()
    {   var str;
        str = ' !"#$%&' + "'" + '()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
        return str;
    }

