/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

 
       function checkLength(control_id,min, max )
            {
                 //var max_error_msg = "Maximum length  " + max;
                 var max_error_msg = "Too long ";
                if (control_id.val().length > max)
                {
                  return max_error_msg;
                }


                //var min_error_msg = "Minimum length " + min;
                var min_error_msg = "Too Short";
                if (control_id.val().length < min)
                {
                  return min_error_msg;
                }

                return "";
            }


               function checkRegExp(control_id, regexp,regexp_error_msg)
            {                                                          
                    if ( !( regexp.test(control_id.val() ) ) )
                    {
                            return regexp_error_msg;
                    } else
                    {
                            return "";
                    }
            }


          function validate_validateNumber(control_id,min_length,max_length,
                                                append_completion_icon)
        {
             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;

             $(function()
             {
                var name_validate = function(val)
                {
                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    return "Required";
                }

                 //check characters typed
                 var regex_error_msg = "Invalid character";
                 var regex_error = checkRegExp($("#"+control_id),/^[0-9\_ ]+$/,regex_error_msg );
                 if(regex_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return regex_error;
                  }

                //check length
                  var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return length_error;
                  }


                    $("#"+control_id).removeClass( "ui-state-error" );
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon: append_completion_icon
                });

            });
        }//validate_validateNumber()

      function validateWebsiteUrl(control_id,min_length,max_length,
                                                append_completion_icon)
        {
             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;

             $(function()
             {
                var name_validate = function(val)
                {
                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    return "Required";
                }

                //check length
                  var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return length_error;
                  }

                  //check characters typed
                  var regexp_error_msg = "Invalid character";

                 var regex_error = checkRegExp($("#"+control_id),/^[A-Za-z]([0-9a-z.])+$/i,regexp_error_msg );
                 if((regex_error!="")&&(min_length!=0))
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return regex_error;
                  }

                    $("#"+control_id).removeClass( "ui-state-error" );
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon: append_completion_icon
                });

            });
        }//validateWebsiteUrl()


          function validateFullName(control_id,min_length,max_length,
                                                append_completion_icon)
        {
             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;
             
             $(function()
             {
                var name_validate = function(val)
                {                                  

                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    return "Required";
                }

                //we require a full name
                if( val.match(/^\S+$/) || val.match(/^\S+\s+$/) )
                {
                        return "Please enter your second name";
                }

                //check length
                  var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return length_error;
                  }

                    //check characters typed
                var regexp_error_msg = "Invalid Character";

                 var regex_error = checkRegExp($("#"+control_id), /^[A-Za-z]([0-9a-z_ '!?])+$/i,regexp_error_msg );
                 if((regex_error!="")&&(min_length!=0))
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return regex_error;
                  }
                  
                                      
                    $("#"+control_id).removeClass( "ui-state-error" );
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon: append_completion_icon
                });
            });
        }


          function validateName(control_id,min_length,max_length,
                                                append_completion_icon)
        {
             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;
             
             $(function()
             {
                var name_validate = function(val)
                {
                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    return "Required";
                }

                //check length
                  var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return length_error;
                  }                       

                    //check characters typed
                  var regexp_error_msg = "Invalid Character";

                 var regex_error = checkRegExp($("#"+control_id),/^[A-Za-z]([0-9a-z_ '!?@.,/-])+$/i,regexp_error_msg );
                 if((regex_error!="")&&(min_length!=0))
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return regex_error;
                  }

                    $("#"+control_id).removeClass( "ui-state-error" );
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon: append_completion_icon
                });

            });
        }

              //if either of this email tests fail no submission of the form
          //is allowed! thanks to the id of the submission button that we got
          function validateEmail(control_id,min_length,max_length,
                                                      append_completion_icon)
        {
             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;
             
            $(function()
            {
                var name_validate = function(val)
                {
                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    return "Required";
                }

                //check length
                 /* var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return length_error;
                  }*/
             
                    //check characters typed
                 var regex_error_msg = "eg. me@domain.com";
                 var regex_error = checkRegExp($("#"+control_id), /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,regex_error_msg);
                 if((regex_error!="")&&(min_length!=0))
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return regex_error;
                  }

                    $("#"+control_id).removeClass( "ui-state-error" );
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon: append_completion_icon
                });

            });
        }

     //if either of this phone no tests fail no submission of the form
          //is allowed! thanks to the id of the submission button that we got
          function validatePhoneNo(control_id,min_length,max_length,
                                                append_completion_icon)
        {
             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;
             
             $(function()
             {
                var name_validate = function(val)
                {
                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    return "Required";
                }

                //check length
                  var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return length_error;
                  }

                    //check characters typed
                    //TODO : This check doesn't work well - need to come up
                    //with a valid check of phone numbers of all kinds'
                 /*var regex_error_msg = "eg. 07XXXXXXXX";

                 var regex_error = checkRegExp($("#"+control_id),/^[0-9\_]+$/,regex_error_msg );
                 if((regex_error!="")&&(min_length!=0))
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return regex_error;
                  }*/

                    $("#"+control_id).removeClass( "ui-state-error" );
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon: append_completion_icon
                });

            });
        }//validatePhoneNo

  //if either of this password no tests fail no submission of the form
          //is allowed! thanks to the id of the submission button that we got
          function checkPassword(control_id,control_id2,min_length,max_length,
                                          append_completion_icon)
        {

             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;

             //alert(append_completion_icon);
             
             $(function()
             {
                var name_validate = function(val)
                {
                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    if(control_id2)
                    {
                     //   $("#"+control_id2).attr("disabled", "disabled");
                        $("#"+control_id2).val("");
                    }
                    return "Required";
                }             

                //check length
                  var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                    if(control_id2)
                    {
                       // $("#"+control_id2).attr("disabled", "disabled");
                        $("#"+control_id2).val("");
                    }
                     return length_error;
                  }

                    //check characters typed
                 var regex_error_msg = "Allows only a-z 0-9";
                 var regex_error = checkRegExp($("#"+control_id),/^([0-9a-zA-Z])+$/,regex_error_msg );
                 if((regex_error!="")&&(min_length!=0))
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                    if(control_id2)
                    {
                       // $("#"+control_id2).attr("disabled", "disabled");
                        $("#"+control_id2).val("");
                    }
                     return regex_error;
                  }

                    $("#"+control_id).removeClass( "ui-state-error" );
                                    //enable confirm password button
                    if(control_id2)
                    {
                        //$("#"+control_id2).attr("disabled", "");
                    }
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon:append_completion_icon
                });
            });
        }//validatePassword

 //if either of this password no tests fail no submission of the form
          //is allowed! thanks to the id of the submission button that we got
          function checkConfirmPassword(control_id,control_id2,min_length,
                                        max_length,append_completion_icon)
        {

             1==append_completion_icon?append_completion_icon=true:
                 append_completion_icon=false;

            // alert(append_completion_icon);
             
             $(function()
             {
                var name_validate = function(val)
                {

                //check blanks
                if(( val == "" )&&(min_length!=0))
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    appendCompletionIcon:false;
                    return "Required";
                }


                //check length
                  var length_error = checkLength($("#"+control_id), min_length,max_length);
                  if(length_error!="")
                  { 
                     $("#"+control_id).addClass( "ui-state-error" );
                     return length_error;
                  }    
                
                //before you confirm we must have a password first
                if($("#"+control_id).val()!=$("#"+control_id2).val())
                {
                    $("#"+control_id).addClass( "ui-state-error" );
                    return "Not Same as Password entered";
                }                           
                    //check characters typed
                 var regex_error_msg = "Password field only allows : a-z 0-9";
                 var regex_error = checkRegExp($("#"+control_id),/^([0-9a-zA-Z])+$/,regex_error_msg );
                 if((regex_error!="")&&(min_length!=0))
                  {
                     $("#"+control_id).addClass( "ui-state-error" );
                     return regex_error;
                  }

                    $("#"+control_id).removeClass( "ui-state-error" );
                    return "";
                };

                $("#"+control_id).validate(
                {
                    valid: function(val)
                    {
                        return name_validate(val) == "";
                    },
                    errorMessage: function(val)
                    {
                        return name_validate(val);
                    },
                    appendCompletionIcon:append_completion_icon
                });
            });
        }//validatePassword


        //this function validates the password
          function validatePassword(input)
        { //alert(input);
         var delim =',';
         var pw_control_id=getTokenAt(input,0,delim,6);
         var pw_control_id2=getTokenAt(input,1,delim,6);
         var validate_type=parseInt(getTokenAt(input,2,delim,6));
         var min_length=parseInt(getTokenAt(input,3,delim,6));
         var max_length=parseInt(getTokenAt(input,4,delim,6));
         var append_completion_icon=parseInt(getTokenAt(input,5,delim,6));

            switch(validate_type)
            {
                case 1://a name of something
                    { 
                      checkPassword(pw_control_id,
                                    pw_control_id2,
                                        min_length,
                                        max_length,
                            append_completion_icon);
                        break;
                    }

                case 2:// an email address
                    {//alert("here");
                      checkConfirmPassword(pw_control_id,
                                    pw_control_id2,
                                        min_length,
                                        max_length,
                            append_completion_icon);
                        break;
                    }
            }//switch()

        }//validatePassword()


        //this function validates
        function validate(input)
        { //alert(input);
         var delim =',';
         var control_id=getTokenAt(input,0,delim,5);
         var validate_type=parseInt(getTokenAt(input,1,delim,5));
         var min_length=parseInt(getTokenAt(input,2,delim,5));
         var max_length=parseInt(getTokenAt(input,3,delim,5));
         var append_completion_icon=getTokenAt(input,4,delim,5);

            switch(validate_type)
            {
                case 1://a name of something
                    {
                        validateName(control_id,min_length,max_length,
                                    append_completion_icon);
                        break;
                    }

                case 2:// an email address
                    {
                        validateEmail(control_id,min_length,max_length,
                                    append_completion_icon);
                        break;
                    }

                case 3: // a phone no
                    {
                        validatePhoneNo(control_id,min_length,max_length,
                                    append_completion_icon);
                        break;
                    }

                case 4://validates for full name on the textfield
                    {
                        validateFullName(control_id,min_length,max_length,
                                    append_completion_icon);
                        break;
                    }
                    
                case 5://validates for website url on the textfield
                    {
                        validateWebsiteUrl(control_id,min_length,max_length,
                                    append_completion_icon);
                        break;
                    }

                case 6://validates for numbers 
                    {
                        validate_validateNumber(control_id,min_length,max_length,
                                    append_completion_icon);
                        break;
                    }
                
            }//switch()
        }//validate
