	$(document).ready(function() {
		// accordion functions
    
		//var accordion = $("#").accordion();
		var current = 0;
    //validate file name length
     $.validator.addMethod("fileNameLength", function(value, element) {
      if ($(element).attr("type") === "file") {
    
        // Check if the element has a FileList before checking each file
        if (element.files && element.files.length) {
          for (i = 0; i < element.files.length; i++) {
            file = element.files[i];      
                 if (file.name.length>256) {
              return false;
            }
          }
        }
      }
        
      // Either return true because we've validated each file, or because the
      // browser does not support element.files and the FileList feature
      return true;
    }, $.validator.format("Please shorten the filename to 30 characters or less."));  
      $.validator.addMethod("fileSize", function(value, element) {
      if ($(element).attr("type") === "file") {
    
        // Check if the element has a FileList before checking each file
        if (element.files && element.files.length) {
          for (i = 0; i < element.files.length; i++) {
            file = element.files[i];      
                 if (file.size>5242880) {
              return false;
            }
          }
        }
      }
             // Either return true because we've validated each file, or because the
      // browser does not support element.files and the FileList feature
      return true;
    }, $.validator.format("The file size must be 5 MB or less."));  
		$.validator.addMethod("pageRequired", function(value, element) {
			var $element = $(element)

				function match(index) {
					return current == index && $(element).parents("#sf" + (index + 1)).length;
				}
			if (match(0) || match(1) || match(2) || match(3) || match(4)) {
				return !this.optional(element);
			}
			return "dependency-mismatch";
		}, $.validator.messages.required);
	  
    $.validator.addMethod("vinCaps", function(value, element) {
       return this.optional(element) || /^[0-9,A-Z]*$/.test(value); 
    }, "Only uppercase letters and numbers can be used.");
    
    $.validator.addMethod('selectState', function (value) {
        return (value != '-');
    }, "Please select a State.");
    
    $.validator.addMethod("zeroOrMoreI", function(value, element) {
      var limit = 0;
      if (parseInt($("#injuries").val(),10) > 0)  {
        limit = -1;
      }
      if (value > 0) $("#injuries-error").hide();
      return this.optional(element) || value > limit;
    }, "Please enter a number not less than 0");
    
    $.validator.addMethod("zeroOrMoreF", function(value, element) {
      var limit = 0;
      if (parseInt($("#fatalities").val(),10) > 0)  {
        limit = -1;
      }
      if (value > 0) $("#fatalities-error").hide();
      return this.optional(element) || value > limit;
    }, "Please enter a number not less than 0");
    
    $.validator.addMethod("textareaLimit", function(value, element) {
      var limit = 1901;
      var text_length = value.replace(/\n/g, "\r\n").length;
      return this.optional(element) || text_length < limit;
    }, "Please enter no more than 1900 characters");
    
    $.validator.addMethod("dateBefore", function(value, element) {
                var check = false;
                var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
                if( re.test(value)){
                        var adata = value.split('/');
                        var gg = parseInt(adata[1],10);
                        var mm = parseInt(adata[0],10);
                        var aaaa = parseInt(adata[2],10);
                        var xdata = new Date(aaaa,mm-1,gg);
                        if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) && !(xdata > new Date()))
                                check = true;
                        else
                                check = false;
                } else
                        check = false;
                return this.optional(element) || check;
        }, 
    "Must be a valid, non-future date.");
     
		
	  var v = $('#msform').validate({
			       keyup: false,
			       focusout: false,
		        rules: {
              vin: {
              // vinCaps: true, 
              //      maxlength: 17,
              //      minlength: 17,
                    required: false},
		        	searchText:{required: true},
		        	incidentDesc:{required: true,
                    //maxlength: 1900,
                    textareaLimit: true,
                    minlength: 1},
		        	incidentDate:{required: true, 
                    dateBefore: true},
               numOfFatalities: { 
                    required: { depends: function() {
                                  return ($('input[name=injuryYn]:checked').val() == 'Y' && ($("#injuries").is(':blank') || $("#injuries").val() == '0'));
                              }},
                    number: true,
                    zeroOrMoreI: true},
              numOfInjuries: { 
                    required: { depends: function() {
                                  return ($('input[name=injuryYn]:checked').val() == 'Y' && ($("#fatalities").is(':blank') || $("#fatalities").val() == '0'));
                              }},
                    number: true,
                    zeroOrMoreF: true},
              speed: {number: true},
              miles: {number: true},
		        	fname:{required: true},
		        	lname:{required: true},
              dayPhone: {
                    phoneUS: true,
                    required: true
              },
              eveningPhone: {
                    phoneUS: true                
              },
              email: { required: true, 'email':true },
			        cemail: {
                    equalTo: '#email'
			        },
			        address:{required: true},
              city:{required: true},
              state:{ selectState: true},
			        zip: {
                    zipcodeUS: true,
                    required: true
              },
              selectedComps: { 
                    required: true, 
                    minlength: 1 
              },
              'files[0]':{
                fileNameLength: true,
                fileSize:true
              },
               'files[1]':{
               fileNameLength: true,
                fileSize:true
              },
               'files[2]':{
               fileNameLength: true,
                fileSize:true
              },
               'files[3]':{
                fileNameLength: true,
                fileSize:true
              },
               'files[4]':{
               fileNameLength: true,
                fileSize:true
              }
			    },
			    messages: {
			    	searchText: "Please provide a Make, Model, and Model Year.",
            incidentDesc: "Please enter no more than 1900 characters.",     
            fname: "Please enter your First Name.",     
            lname: "Please enter your Last Name.",     
            email: "Please enter your Email address.",     
            cemail: "Please re-enter your Email address.",    
            address: "Please enter your Address.",     
            city: "Please enter your City.",    
            state: "Please select your State.", 
            zip: "Please enter your Zip Code.",
             dayPhone: "Please enter your Phone.",
            selectedComps: "Please select at least one part.",    
            numOfFatalities: "If there were fatalities, enter the number here.",    
            numOfInjuries: "If there were injuries, enter the number here."     
			    },
				  //removes incorrect added label tag for 508.   
				  errorPlacement: function(error, element) {
            //error.appendTo("label[for="+$(element).attr('id')+"]");
            if(element.attr("name") == "selectedComps"){
                error.appendTo($('#e_comps'));
            } else if(element.attr("name") == "incidentDate"){
                error.insertAfter($('.ui-datepicker-trigger'));
            } else if(element.attr("name") == "dayPhone"){
                error.insertAfter($('#dayPhoneExt'));
            } else if(element.attr("name") == "vin"){
                error.insertAfter($('#testVin'));
            } else{
                //error.appendTo( element.parent().next() );
                error.insertAfter(element);
            }
	        },
	        errorElement: "div",
          onfocusout: false,
          invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {                    
              validator.errorList[0].element.focus();
            }
          } 	     
		    });

   
    var tabs = $("#tabs").tabs({
      beforeActivate: function(event, ui) {
          var valid = true;
          var current = $(this).tabs("option", "active");
          var panelId = $("#tabs ul a").eq(current).attr("href");
          var newIndex = ui.newTab.index();
          if (newIndex == (current + 1)) {
            $(panelId).find("input, textarea, select, radio").each(function() {
                if (!v.element(this) && valid) {
                    valid = false;
                    if (this.className.match(/error/) != null) {
                      $(this).focus();
                    }
                    $('body').find('.error:first').focus();
                }
            });
          } else if (newIndex < current){
          } else {
            valid = false;
          }
          return valid;
      },
      activate: function(event, ui) {
          $("#tabBar").attr('class',$("#tabBar").attr('class').replace(/\btt.*?\b/g, ''));
          $("#h2_text").attr('class',$("#h2_text").attr('class').replace(/\btt.*?\b/g, ''));
          var i = ui.newTab.index();
          $("#tabBar").addClass("tt"+(i+1));
          $("#h2_text").addClass("tt"+(i+1));
          return true;
      }
    });
    
    $(".nexttab").click(function() {
        var i = this.hash.substr(this.hash.length - 1);
        $("#tabs").tabs( "option", "active", (i-1) );
        window.location.href.replace(/#.*/,'');
        if ((i == "") && (this.innerHTML.indexOf("Back") == -1)){
          $("#error-vin").hide();
          if ($('#msform').valid()) { 
            $( "#tabBar" ).addClass( "none" );
            $( ".nexttab" ).addClass( "none" );
            $( ".previewnone" ).addClass( "none" );
            $( ".previewonly" ).removeClass( "none" );
            $( ".previewonly" ).removeClass( "hidden" );
            $( "#submit" ).removeClass( "none" );
            $( ".showbutton" ).removeClass( "none" );
            $( "#recaptcha" ).removeClass( "none" );
            $("#h2_text").attr('class',$("#h2_text").attr('class').replace(/\btt.*?\b/g, ''));
            $( "#h2_text" ).addClass( "tt6" );        
            $('#tabs').tabs();
            $("#tabs").tabs("destroy");
           var  checkedVals="";
            var compNames="";
             $("input:checkbox[class*='chk']:checked").each(function () {
             checkedVals=checkedVals+ $(this).val()+",";
             compNames=compNames+$(this).parent().text()+", ";
              });   
    
    document.getElementById("h_compNames").value=compNames;
            checkForFiles();           
          }
        }
        return false;
    });

    //use link to submit form instead of button
  //  $("a[id=submit]").click(function() {
 //       $(this).parents("form").submit();
 //   });
	});
