/* JavaScript Document */
<!--
$(document).ready(function() {
	
	$.extend($.validator, {
		messages: {
				required: language['required'],
				remote: language['remote'],
				email: language['email'],
				url: language['url'],
				date: language['date'],
				dateISO: language['dateISO'],
				dateDE: language['dateDE'],
				number: language['number'],
				numberDE: language['numberDE'],
				digits: language['digits'],
				creditcard: language['creditcard'],
				equalTo: language['equalTo'],
				accept: language['accept'],
				maxlength: $.format(language['maxlength']),
				minlength: $.format(language['minlength']),
				rangelength: $.format(language['rangelength']),
				range: $.format(language['range']),
				max: $.format(language['max']),
				min: $.format(language['min'])
			}
		});
		
	jQuery.validator.addMethod("minwords", function(value, element, params) { 
		value = value.replace(/^\s*([\S\s]*?)\s*$/, '$1');
		//alert(value.length);
		return (value.split(" ").length >= params); 
	}, jQuery.format(language['minwords']));
	
	jQuery.validator.addMethod("alphanum", function(value, element) { 
		return this.optional(element) || /^[\w-]+$/.test(value);
	}, jQuery.format(language['alphanum']));
	
	jQuery.validator.addMethod("differTo", function(value, element, param) { 
		return value != $(param).val();
	}, language['differTo']);
	
	jQuery.validator.addMethod("greaterThan", function(value, element, param) { 
		return value >= $(param).val();
	}, jQuery.format(language['greaterThan']));
	
	jQuery.validator.addMethod("lessThan", function(value, element, param) { 
		return value <= $(param).val();
	}, jQuery.format(language['lessThan']));
	
	jQuery.validator.addMethod("dateCustom", function(value, element, param) { 
		day = value;
		month = parseInt($(param[1]).val())-1;
		year = parseInt($(param[0]).val());
		dteDate = new Date(year, month, day);
		
		return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
		//return this.optional(element) || !/Invalid|NaN/.test(date);
	}, language['date']);
	
	jQuery.validator.addMethod("maxdigits", function(value, element, param) { 
		pattern = '.*[0-9]';
		s = '';
		for(i = 0; i<=param; i++) {
			s += pattern;
		}
		
		s = "("+s+")";
		newpattern = new RegExp(s);

		return !newpattern.test(value);

	}, jQuery.format(language['maxdigits']));
	
	jQuery.validator.addMethod("strength", function(value, element) { 
		password = value;
		
		score = 0 
	    
	    //password length
	    score += password.length * 4
	    score += ( checkRepetition(1,password).length - password.length ) * 1
	    score += ( checkRepetition(2,password).length - password.length ) * 1
	    score += ( checkRepetition(3,password).length - password.length ) * 1
	    score += ( checkRepetition(4,password).length - password.length ) * 1
	
	    //password has 3 numbers
	    if (password.match(/(.*[0-9].*[0-9].*[0-9])/))  score += 5 
	    
	    //password has 2 sybols
	    if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5 
	    
	    //password has Upper and Lower chars
	    if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))  score += 10 
	    
	    //password has number and chars
	    if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/))  score += 15 
	    //
	    //password has number and symbol
	    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/))  score += 15 
	    
	    //password has char and symbol
	    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/))  score += 15 
	    
	    //password is just a nubers or chars
	    if (password.match(/^\w+$/) || password.match(/^\d+$/) )  score -= 10 
	    
	    //verifing 0 < score < 100
	    if ( score < 0 )  score = 0 
	    if ( score > 100 )  score = 100 
	    
	    if (score < 25 )  return false
		else return true;
	}, language['strength']);
	
	// checkRepetition(1,'aaaaaaabcbc')   = 'abcbc'
	// checkRepetition(2,'aaaaaaabcbc')   = 'aabc'
	// checkRepetition(2,'aaaaaaabcdbcd') = 'aabcd'
	
	function checkRepetition(pLen,str) {
	    res = ""
	    for ( i=0; i<str.length ; i++ ) {
	        repeated=true
	        for (j=0;j < pLen && (j+i+pLen) < str.length;j++)
	            repeated=repeated && (str.charAt(j+i)==str.charAt(j+i+pLen))
	        if (j<pLen) repeated=false
	        if (repeated) {
	            i+=pLen-1
	            repeated=false
	        }
	        else {
	            res+=str.charAt(i)
	        }
	    }
	    return res
	}
});

function newValidation(formID){
		validator = $(formID).bind("invalid-form.validate", function(){
			//alert(validator.numberOfInvalids());
			msg(language["error"], language["formerror"], 'error');
		}).validate({
			errorElement: "p",
			errorPlacement: function(error, element){
				if($(element).attr("name").match(/\[\]/)) {
					//Square brackets aus Namen entfernen
					elem_name = ($(element).attr("id"));
				} else {
					elem_name = ($(element).attr("name"));
				}
				
				var divFormError = $("#error-" + elem_name);
				if (divFormError.length == 0) {
					divFormError = document.createElement('div');
					$(divFormError).addClass("formError " + elem_name);
					$(divFormError).attr("id", "error-" + elem_name);
				}
				else {
					$(divFormError).html('');
				}
				
				if (error[0].childNodes.length == 0) {
					$(divFormError).addClass("success");
				} else {
					$(divFormError).removeClass("success");
				}
				
				//divFormError.html('');
				//error.appendTo(divFormError);
				
				var formErrorContent = document.createElement('div');
				var arrow = document.createElement('div');
				
				$(formErrorContent).addClass("formErrorContent");
				$(arrow).addClass("formErrorArrow");
				
				$("body").append(divFormError);
				$(divFormError).append(arrow);
				$(divFormError).append(formErrorContent);
				$(arrow).html('<div class="line10"></div><div class="line9"></div><div class="line8"></div><div class="line7"></div><div class="line6"></div><div class="line5"></div><div class="line4"></div><div class="line3"></div><div class="line2"></div><div class="line1"></div>');
				
				$(formErrorContent).html(error);
				
				elementTopPosition = $(element).offset().top;
				elementleftPosition = $(element).offset().left;
				elementWidth = $(element).width();
				elementHeight = $(element).height();
				inputHeight = $(divFormError).height();
				
				elementleftPosition = elementleftPosition + elementWidth - 30;
				elementTopPosition = elementTopPosition - inputHeight - 10;
				
				if ($(divFormError).hasClass('showing')) {
					$(divFormError).css({
						top: elementTopPosition,
						left: elementleftPosition,
						opacity: 0.8
					})
				} else {
					if (!$(divFormError).hasClass('success')) {
						$(divFormError).css({
							top: elementTopPosition,
							left: elementleftPosition,
							opacity: 0
						})
						$(divFormError).addClass('showing').fadeTo("fast", 0.8);
					}
					else {
						$(divFormError).css({
							opacity: 0
						})
					}
				}
				
			},
			success: function(label){
				var divFormError = label.parent("div").parent("div")
				if ($(divFormError).hasClass('showing')) {
					$(divFormError).fadeTo("fast", 0).removeClass('showing').addClass('success');
				}
			},
			submitHandler: function(form){
				form.submit();
			}
		});
	}