// Denna fil används ej, den sparas som en säkerhetskopia

jQuery(function() {

	// We need to bind the pnr century check before the validation, for some reason
	// non-IE browsers will not validate after jQuery modifies val() inside the method
	var $ = jQuery;
	$('#input_2_6').bind('blur', function() {
		// Test for centuries and append "19" first if it does not exist 
		// but only if it is six digits long
		var id_pnr_date = '#input_2_6';
		if ($(id_pnr_date).val().substr(0,2) != 19 && $(id_pnr_date).val().length == 6) {
			$(id_pnr_date).val("19" + $(id_pnr_date).val());
		}
	});

	customFormValidator = {
		
		// Set form context
		context : jQuery('#gform_wrapper_2'),
		
		// Form element validator
		formElementValidator : function(elem, pattern, callback, msg) {
		  var $ = jQuery;
			this.elem = elem;
			this.pattern = pattern;
			this.msg = msg;
			
			this.validate = function(silent) {
			  var callback_val;
			  
			  if (typeof callback == 'function') {
			    callback_val = callback(elem);
			  }
			  else {
			  	callback_val = true;
			  }
			  	
			  if (elem.value.match(pattern) === null || !callback_val) {
				  if (!silent) {
				  	customFormValidator.errorMessageSet(msg, elem);
				  }
				  valid = false;
				  return valid;
				}
				else {
				  if (!silent) {
				  	customFormValidator.errorMessageUnset(elem);
				  }
				  valid = true;
				  return valid;
				}
			}	
		},
		
		// Validate personnummer
		formElementPersonnrValidate : function(elem) {
			var $ = jQuery;
			
			var id_pnr_date = '#input_2_6';
			var id_pnr_lastfour = '#input_2_30';			
			
			var input_personnr = $(id_pnr_date).val() + '-' + $(id_pnr_lastfour).val();
			var personnr = new customFormValidator._formElementPersonnrValidate(input_personnr);
			
			return personnr.valid;
		},
		
		_formElementPersonnrValidate : function(nr){
			this.valid = false;
			
			// Matches NNNN NN NN - NNNN
			if (!nr.match(/^(\d{4})(\d{2})(\d{2})\-(\d{4})$/)) { 
				return false; 
			}
			
			this.now = new Date(); 
			this.nowFullYear = this.now.getFullYear()+""; 
			this.year = RegExp.$1+"";
			this.month = RegExp.$2+"";
			this.day = RegExp.$3+"";
			this.controldigits = RegExp.$4+"";
			
			
			// if the submitted year is eq to or less than 2000 we assume the year is ok
			if (this.year*1 >= 1900 && this.year*1 <= 2000) { 
				this.fullYear = this.year*1;
			} else {
				return false;
			}
			
			var months = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
			
			// Leap years
			if (this.fullYear%400 == 0 || this.fullYear%4 == 0 && this.fullYear%100 != 0) { 
				months[1] = 29;
			}
			
			// Check for correct months and days
			if (this.month*1<1 || this.month*1>12 || this.day*1<1 || this.day*1>months[this.month*1-1]) {
				return false;
			}
			
			// The complete personnummer is YYMMDDNNNN
			this.alldigits = this.year.substring(2,4)+this.month+this.day+this.controldigits;
			
			var nn = "";
			// Modulus 10, using 1:s and 2:s on the nine first digits
			for (var n = 0; n < this.alldigits.length; n++) {
				nn += ((((n+1)%2)+1) * this.alldigits.substring(n,n+1));
			}
			
			this.checksum = 0;
			
			// For each digit in personnummer add it to checksum plus the last digit
			for (var n = 0; n < nn.length; n++) {
				this.checksum += nn.substring(n,n+1)*1;
			}
			
			// function returns true if sum of above code is evenly divisible by 10
			this.valid = (this.checksum%10 == 0) ? true : false;

			// Returns 1 or 0 depending on sex, not used.
			// this.sex = parseInt(this.controldigits.substring(2,3))%2;
		},
		
		// Validator method
		formValidator : function() {
			var $ = jQuery;
			
			// Personnummer, födelsedatum
			$('#input_2_6').each(function() { this.formValidateElement = new customFormValidator.formElementValidator(this, /^\d{8}$/i, null, 'Födelsedatum 8 siffror ogiltigt, t ex: 19750101') });
			
			// Personnummer, sista siffrorna
			$('#input_2_30').each(function() { this.formValidateElement = new customFormValidator.formElementValidator(this, /^\d{4}$/i, customFormValidator.formElementPersonnrValidate, 'Ej giltiga sista 4 siffror, t ex: 4512') });
			
			// if radio button is toggled we only check personnummer
			if ($('#choice_17_1').attr('checked')) {
			
				// E-postadress
				$('#input_2_7').each(function() { this.formValidateElement = new customFormValidator.formElementValidator(this, /^([A-Za-z0-9]{1,}([-+_\.&'][A-Za-z0-9]{1,}){0,}){1,}@(([A-Za-z0-9]{1,}[-]{0,1})\.){1,}[A-Za-z]{2,6}$/i, null, 'Ej giltig e-postadress') });
		
				// Clearingnummer
				$('#input_2_15').each(function() { this.formValidateElement = new customFormValidator.formElementValidator(this, /^\d{4,5}$/i, null, 'Ej giltigt clearingnummer, måste vara 4 eller 5 siffror') });
				
				// Kontonummer
				$('#input_2_16').each(function() { this.formValidateElement = new customFormValidator.formElementValidator(this, /^\d{7,}$/i, null, 'Ej giltigt kontonummer, måste minst vara 7 siffror') });
			
			}
			
			// Check form on submit
			$('input[type="submit"]', customFormValidator.context).submit(function() { return customFormValidator.reCheckForm(this) });
			
			// Check form on load
			//customFormValidator.reCheckForm($('input:first', customFormValidator.context));
			
			// Bind on keyup and blur
			$('input', customFormValidator.context).bind('blur', function() { 
				this.formValidateElement.validate(false);
				customFormValidator.reCheckForm(this); 
			});
		},
		
		// Set error message
		errorMessageSet : function(msg, elem) {
	  	var $ = jQuery;
	  	$(elem).parent().siblings().filter('p.form-error.elem-' + elem.id).remove();
	  	$(elem).parent().after($('<p/>').addClass('form-error elem-' + elem.id).text(msg));
	  },
	  
		// Unset error message
	  errorMessageUnset : function(elem) {
	  	var $ = jQuery;
	  	$(elem).parent().siblings().filter('p.form-error.elem-' + elem.id).remove();
	  },
	  
	  // Disable form submit
	  disableFormSubmit : function() {
	  	var $ = jQuery;
	  	$('p.form-error-info').remove();
	  	$('input[type="submit"]', customFormValidator.context).attr('disabled', 'disabled').before($('<p/>').addClass('form-error-info').text('Det finns fel som måste rättas eller fält i formuläret som du måste fylla innan du kan skicka in din ansökan.'));
	  },
	  
	  // Enable form submit
	  enableFormSubmit: function() {
	  	var $ = jQuery;
	    $('p.form-error-info').remove();
	  	$('input[type="submit"]', customFormValidator.context).removeAttr('disabled');
	  },
	  
	  // Re-check for for errors
	  reCheckForm : function(elem) {
	  	var $ = jQuery;
	  	var formError = false;
	
	  	$('input', customFormValidator.context).each(function() {
	  		if (typeof this.formValidateElement == 'object') {
	  			var elemValid = !this.formValidateElement.validate(true);
	  			formError = formError ? true : elemValid;
	  		}
	  	});

	  	if (formError) {
	  		customFormValidator.disableFormSubmit();
	  	}
	  	else {
	  		customFormValidator.enableFormSubmit();
	  	}
	  }
	};

	customFormValidator.formValidator();
});
