    // if the iip form validate object container hasn't been created
    if(typeof window.iip.form.val!='object')
    {
        // create the general iip form validate object
        window.iip.form.val    =    function()
        {
            // return the iip object (opening curly brace needs to be on same line as return)
            return{
                // 
                key:          '@',
                // 
                search:       function(valObj,field,error,attribute)
                              {
                                  // loop through the validation object
                                  for(var x=0;x< valObj[iip.form.val.key].fields;x++)
                                  {
                                      // if it's the field
                                      if(valObj[x].field[iip.form.val.key].id==field)
                                      {
                                          // loop through the conditions for this field
                                          for(var y=0;y< valObj[x].field[iip.form.val.key].conditions;y++)
                                          {
                                              // if the error key is found
                                              if(valObj[x].field[y].condition[iip.form.val.key].type==error)
                                              {
                                                  // return the requested attribute
                                                  return valObj[x].field[y].condition[iip.form.val.key][attribute];
                                              }
                                          }
                                      }
                                  }
                              },
                // 
                error:        {
                                  // handling showing the timeout
                                  show:       function(form,field,message,options)
                                              {
                                                  alert(message);
                                                  // focus on the field
                                                  field.focus();
                                              }
                              },
                // 
                init:         function(valObj)
                              {
                                  // loop through the validation object
                                  for(var x=0;x< valObj[iip.form.val.key].fields;x++)
                                  {
                                      // loop through the conditions for this field
                                      for(var y=0;y< valObj[x].field[iip.form.val.key].conditions;y++)
                                      {
                                          // if the validation is for a required field requirement (and its not for the exempt field)
                                          if(valObj[x].field[y].condition[iip.form.val.key].type=='required' && typeof valObj[x].field[iip.form.val.key].exempt=='undefined')
                                          {
                                              // if false is returned
                                              if(iip.form.val.core.required($(valObj[x].field[iip.form.val.key].id))==false)
                                              {
                                                  // execute the pre show function
                                                  if(typeof preShow!='undefined'){ preShow(valObj[iip.form.val.key].id); }
                                                  // create error
                                                  iip.form.val.error.show($(valObj[iip.form.val.key].id),$(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].error);
                                                  // end validation
                                                  return false;
                                              }
                                          }
                                          // otherwise if the validation is for a minimum length requirement (and its not for the exempt field)
                                          else if(valObj[x].field[y].condition[iip.form.val.key].type=='minlength' && typeof valObj[x].field[iip.form.val.key].exempt=='undefined')
                                          {
                                              // if false is returned
                                              if(iip.form.val.core.minlength($(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].value)==false)
                                              {
                                                  // execute the pre show function
                                                  if(typeof preShow!='undefined'){ preShow(valObj[iip.form.val.key].id); }
                                                  // create error
                                                  iip.form.val.error.show($(valObj[iip.form.val.key].id),$(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].error);
                                                  // end validation
                                                  return false;
                                              }
                                          }
                                          // otherwise if the validation is for a maximum length requirement (and its not for the exempt field)
                                          else if(valObj[x].field[y].condition[iip.form.val.key].type=='maxlength' && typeof valObj[x].field[iip.form.val.key].exempt=='undefined')
                                          {
                                              // if false is returned
                                              if(iip.form.val.core.maxlength($(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].value)==false)
                                              {
                                                  // execute the pre show function
                                                  if(typeof preShow!='undefined'){ preShow(valObj[iip.form.val.key].id); }
                                                  // create error
                                                  iip.form.val.error.show($(valObj[iip.form.val.key].id),$(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].error);
                                                  // end validation
                                                  return false;
                                              }
                                          }
                                          // otherwise if the validation is for an email format requirement (and its not for the exempt field)
                                          else if(valObj[x].field[y].condition[iip.form.val.key].type=='emailformat' && typeof valObj[x].field[iip.form.val.key].exempt=='undefined')
                                          {
                                              // if false is returned
                                              if(iip.form.val.core.emailformat($(valObj[x].field[iip.form.val.key].id))==false)
                                              {
                                                  // execute the pre show function
                                                  if(typeof preShow!='undefined'){ preShow(valObj[iip.form.val.key].id); }
                                                  // create error
                                                  iip.form.val.error.show($(valObj[iip.form.val.key].id),$(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].error);
                                                  // end validation
                                                  return false;
                                              }
                                          }
                                          // otherwise if the validation is for a field match requirement (and its not for the exempt field)
                                          else if(valObj[x].field[y].condition[iip.form.val.key].type=='match' && typeof valObj[x].field[iip.form.val.key].exempt=='undefined')
                                          {
                                              // if false is returned
                                              if(iip.form.val.core.match($(valObj[x].field[iip.form.val.key].id),$(valObj[x].field[y].condition[iip.form.val.key].value))==false)
                                              {
                                                  // execute the pre show function
                                                  if(typeof preShow!='undefined'){ preShow(valObj[iip.form.val.key].id); }
                                                  // create error
                                                  iip.form.val.error.show($(valObj[iip.form.val.key].id),$(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].error);
                                                  // end validation
                                                  return false;
                                              }
                                          }
                                          // otherwise if the validation is for an alphanumeric value requirement (and its not for the exempt field)
                                          else if(valObj[x].field[y].condition[iip.form.val.key].type=='alpha' && typeof valObj[x].field[iip.form.val.key].exempt=='undefined')
                                          {
                                              // if false is returned
                                              if(iip.form.val.core.alpha($(valObj[x].field[iip.form.val.key].id))==false)
                                              {
                                                  // execute the pre show function
                                                  if(typeof preShow!='undefined'){ preShow(valObj[iip.form.val.key].id); }
                                                  // create error
                                                  iip.form.val.error.show($(valObj[iip.form.val.key].id),$(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].error);
                                                  // end validation
                                                  return false;
                                              }
                                          }
                                          // otherwise if the validation is for a minimum amount of letters requirement (and its not for the exempt field)
                                          else if(valObj[x].field[y].condition[iip.form.val.key].type=='letters' && typeof valObj[x].field[iip.form.val.key].exempt=='undefined')
                                          {
                                              // if false is returned
                                              if(iip.form.val.core.letters($(valObj[x].field[iip.form.val.key].id))==false)
                                              {
                                                  // execute the pre show function
                                                  if(typeof preShow!='undefined'){ preShow(valObj[iip.form.val.key].id); }
                                                  // create error
                                                  iip.form.val.error.show($(valObj[iip.form.val.key].id),$(valObj[x].field[iip.form.val.key].id),valObj[x].field[y].condition[iip.form.val.key].error);
                                                  // end validation
                                                  return false;
                                              }
                                          }
                                      }
                                  }
                                  // results validated
                                  return true;
                              },
                // 
                core:         {
                                  // 
                                  required:       function(input)
                                                  {
                                                      // if it's an input field, password field, select list, or textarea
                                                      if(input.type=='text' || input.type=='password' || input.type=='select-one' || input.type=='textarea')
                                                      {
                                                          // if it's empty or equals the placeholder
                                                          if(input.value.trim().length==0 || input.hasClass('placeholder'))
                                                          {
                                                              // condition not satisfied
                                                              return false;
                                                          }
                                                      }
                                                      // return true otherwise
                                                      return true;
                                                  },
                                  // 
                                  minlength:      function(input,length)
                                                  {
                                                      // if it's an input field, or textarea
                                                      if(input.type=='text' || input.type=='textarea')
                                                      {
                                                          // if it's length is less than the specified length
                                                          if(input.value.length<length)
                                                          {
                                                              // condition not satisfied
                                                              return false;
                                                          }
                                                      }
                                                      // return true otherwise
                                                      return true;
                                                  },
                                  // 
                                  maxlength:      function(input,length)
                                                  {
                                                      // if it's an input field, or textarea
                                                      if(input.type=='text' || input.type=='textarea')
                                                      {
                                                          // if it's length is less than the specified length
                                                          if(input.value.length>length)
                                                          {
                                                              // condition not satisfied
                                                              return false;
                                                          }
                                                      }
                                                      // return true otherwise
                                                      return true;
                                                  },
                                  // 
                                  emailformat:    function(input)
                                                  {
                                                      // regular expression for matching the email address
                                                      var regEx    =    /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
                                                      // return whether or not it is valid
                                                      return input.value.match(regEx)!=null;
                                                  },
                                  // 
                                  alpha:          function(input)
                                                  {
                                                      // regular expression for matching an alpha numeric string
                                                      var regEx    =    /^[\w]*$/;
                                                      // return whether or not it is valid
                                                      return input.value.match(regEx)!=null;
                                                  },
                                  // if letters are required
                                  letters:        function(input)
                                                  {
                                                      // regular expression for matching a string with letters in them
                                                      var regEx    =    /[a-zA-Z]/;
                                                      // return whether or not it is valid
                                                      return input.value.match(regEx)!=null;
                                                  },
                                  // 
                                  isurl:          function(input)
                                                  {
                                                      // regular expression for matching whether the string is a url
                                                      var regEx    =    /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/;
                                                      // return whether or not it is valid
                                                      return input.value.match(regEx)!=null;
                                                  },
                                  // 
                                  match:          function(input,compare)
                                                  {
                                                      // if it's an input field, password field, or textarea
                                                      if(input.type=='text' || input.type=='password' || input.type=='textarea')
                                                      {
                                                          // if it doesn't match the field in question
                                                          if(input.value!=compare.value)
                                                          {
                                                              // condition not satisfied
                                                              return false;
                                                          }
                                                      }
                                                      // return true otherwise
                                                      return true;
                                                  }
                              }
            };
        }();
    }