/*
 * Inline Form Validation Engine, jQuery plugin
 *
 * Copyright(c) 2009, Cedric Dugas
 * http://www.position-relative.net
 *
 * Form validation engine witch allow custom regex rules to be added.
 * Licenced under the MIT Licence
 */
    	var myNameLbl = "Your name *";
    	var myEmailLbl = "Your email address *";
    	var myMessageLbl = "Your message *";
		var mySumLbl = "Spam protection: 2+3 =";
    	var phoneReminder = "Please insert your telephone number in the message field";

function setName() { if($('.myName').val() == "") { $('.myName').val(myNameLbl);} }
function setEmail() { if($('.myEmail').val() == "") { $('.myEmail').val(myEmailLbl);} }
function setMessage() { if($('.myMessage').val() == "") { $('.myMessage').val(myMessageLbl);} }
function setSum() { if($('.mySum').val() == "") { $('.mySum').val(mySumLbl);} }

function clearName() { if($('.myName').val() == myNameLbl) { $('.myName').val("");} }
function clearEmail() { if($('.myEmail').val() == myEmailLbl) { $('.myEmail').val("");} }
function clearMessage() { if($('.myMessage').val() == myMessageLbl) { $('.myMessage').val("");}}
function clearSum() { if($('.mySum').val() == mySumLbl) { $('.mySum').val("");}}

function optionChange() { if($('.mySubject').val() == "presentation-date") { $('#footerFormError').html(phoneReminder);} else { $('#footerFormError').html("&nbsp;");} }

$(document).ready(function() {
	// SUCCESS AJAX CALL, replace "success: false," by:     success : function() { callSuccessFunction() },
	$("[class^=validate]").validationEngine({
		success : function() {
			$.post("http://www.cam-service.com/include/contactfrm.php",
			   { lang: $('.lang').val(),
			     mysubject: $('.mySubject').val(),
			     myemail: $('.myEmail').val(),
			     myname: $('.myName').val(),
			     mymessage: $('.myMessage').val(),
				 mysum: $('.mySum').val(),
			     ajax: 1
			   },
 		   	   function(data){
					if(parseInt(data)!=-1) {
						$("#footerForm form").slideUp("normal", function() {
							$("#footerForm").html($("#footerForm").html() + data);
							$('#footerFormError').html("&nbsp;");
						});
					}
			   }
			);
			return false;
		},
		failure : function() {}
	})

	//Binden:***********************************************
	$(function() {
				$('#footerForm input, #footerForm textarea').blur(setLbl);
				$('#footerForm input, #footerForm textarea').click(clearLbl);
				$('#footerForm select').change(optionChange);
	});

	function setLbl() { switch($(this).attr('name')) { case "myname": setName(); break; case "myemail": setEmail(); break; case "mymessage": setMessage(); break; case "mysum": setSum(); break;}}

	function clearLbl() {switch($(this).attr('name')) { case "myname": clearName(); break;case "myemail": clearEmail(); break; case "mymessage": clearMessage(); break; case "mysum": clearSum(); break;}}
});

jQuery.fn.validationEngine = function(settings) {
		allRules = {"required":{    			  // Add your regex rules here, you can take telephone as an example
							"regex":"none",
							"alertText":"* This field is required",
							"alertTextCheckboxMultiple":"* Please select an option",
							"alertTextCheckboxe":"* This checkbox is required"},
						"length":{
							"regex":"none",
							"alertText":"*Between ",
							"alertText2":" and ",
							"alertText3": " characters allowed"},
						"minCheckbox":{
							"regex":"none",
							"alertText":"* Checks allowed Exceeded"},
						"confirm":{
							"regex":"none",
							"alertText":"* Your field is not matching"},
						"telephone":{
							"regex":"/^[0-9\-\(\)]+$/",
							"alertText":"* Invalid phone number"},
						"email":{
							"regex":"/^[a-zA-Z0-9_\.\-]+\@([a-zA-Z0-9\-]+\.)+[a-zA-Z0-9]{2,4}$/",
							"alertText":"* Invalid email address"},
						"onlyNumber":{
							"regex":"/^[0-9]+$/",
							"alertText":"* Numbers only"},
						"noSpecialCaracters":{
							"regex":"/^[0-9a-zA-Z]+$/",
							"alertText":"* No special caracters allowed"},
						"onlyLetter":{
							"regex":"/^[a-zA-Z]+$/",
							"alertText":"* Letters only"},
						"sum":{
						    "regex":"none",
							"alertText":"* Invalid result (2+3=)"}							
					}

 	settings = jQuery.extend({
		allrules:allRules,
		success : false,
		failure : function() {}
	}, settings);


	$("#footerForm > form").bind("submit", function(caller){   // ON FORM SUBMIT, CONTROL AJAX FUNCTION IF SPECIFIED ON DOCUMENT READY
		//HINZUGEFÜGT:************************/
		clearName();
		clearEmail();
		clearMessage();
		clearSum();

		if(submitValidation(this) == false){
			if (settings.success){
				settings.success && settings.success();
				setComments(); //HINZUGEFÜGT
				return false;
			}
		}else{
			settings.failure && settings.failure();
			setComments(); //HINZUGEFÜGT
			return false;
		}
	})
	$(this).not("[type=checkbox]").bind("blur", function(caller){loadValidation(this)})
	$(this+"[type=checkbox]").bind("click", function(caller){loadValidation(this)})

	var buildPrompt = function(caller,promptText) {			// ERROR PROMPT CREATION AND DISPLAY WHEN AN ERROR OCCUR
		var divFormError = document.createElement('div')
		var formErrorContent = document.createElement('div')
		var arrow = document.createElement('div')


		$(divFormError).addClass("formError")
		$(divFormError).addClass($(caller).attr("name"))
		$(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(promptText)

		callerTopPosition = $(caller).offset().top;
		callerleftPosition = $(caller).offset().left;
		callerWidth =  $(caller).width()
		callerHeight =  $(caller).height()
		inputHeight = $(divFormError).height()

		callerleftPosition = callerleftPosition + callerWidth -30
		callerTopPosition = callerTopPosition  -inputHeight -10

		$(divFormError).css({
			top:callerTopPosition,
			left:callerleftPosition,
			opacity:0
		})
		$(divFormError).fadeTo("fast",0.8);
	};
	var updatePromptText = function(caller,promptText) {	// UPDATE TEXT ERROR IF AN ERROR IS ALREADY DISPLAYED
		updateThisPrompt =  $(caller).attr("name")
		$("."+updateThisPrompt).find(".formErrorContent").html(promptText)

		callerTopPosition  = $(caller).offset().top;
		inputHeight = $("."+updateThisPrompt).height()

		callerTopPosition = callerTopPosition  -inputHeight -10
		$("."+updateThisPrompt).animate({
			top:callerTopPosition
		});
	}
	var loadValidation = function(caller) {		// GET VALIDATIONS TO BE EXECUTED

		rulesParsing = $(caller).attr('class');
		rulesRegExp = /\[(.*)\]/;
		getRules = rulesRegExp.exec(rulesParsing);
		str = getRules[1]
		pattern = /\W+/;
		result= str.split(pattern);

		var validateCalll = validateCall(caller,result)
		return validateCalll

	};
	var validateCall = function(caller,rules) {	// EXECUTE VALIDATION REQUIRED BY THE USER FOR THIS FILED
		var promptText =""
		var isError = false
		var prompt = $(caller).attr("name")
		var caller = caller

		for (i=0; i<rules.length;i++){
			switch (rules[i]){
			case "required":
				_required(caller,rules)
			break;
			case "custom":
				 _customRegex(caller,rules,i)
			break;
			case "length":
				 _length(caller,rules,i)
			break;
			case "minCheckbox":
				 _minCheckbox(caller,rules,i)
			break;
			case "confirm":
				 _confirm(caller,rules,i)
			break;
			case "sum": 
			     _sum(caller, rules,i)
			break;
			default :;
			}
		}
		if (isError == true){
			($("."+prompt).size() ==0) ? buildPrompt(caller,promptText)	: updatePromptText(caller,promptText)
		}else{
			closePrompt(caller)
		}

		/* VALIDATION FUNCTIONS */
		function _required(caller,rules){   // VALIDATE BLANK FIELD
			callerType = $(caller).attr("type")

			if (callerType == "text" || callerType == "password" || callerType == "textarea"){

				if(!$(caller).val()){
					isError = true
					promptText += settings.allrules[rules[i]].alertText+"<br />"
				}
			}
			if (callerType == "radio" || callerType == "checkbox" ){
				callerName = $(caller).attr("name")

				if($("input[name="+callerName+"]:checked").size() == 0) {
					isError = true
					if($("input[name="+callerName+"]").size() ==1) {
						promptText += settings.allrules[rules[i]].alertTextCheckboxe+"<br />"
					}else{
						 promptText += settings.allrules[rules[i]].alertTextCheckboxMultiple+"<br />"
					}
				}
			}
		}
		function _customRegex(caller,rules,position){		 // VALIDATE REGEX RULES
			customRule = rules[position+1]
			pattern = eval(settings.allrules[customRule].regex)

			if(!pattern.test($(caller).attr('value'))){
				isError = true
				promptText += settings.allrules[customRule].alertText+"<br />"
			}
		}
		function _confirm(caller,rules,position){		 // VALIDATE FIELD MATCH
			confirmField = rules[position+1]

			if($(caller).attr('value') != $("#"+confirmField).attr('value')){
				isError = true
				promptText += settings.allrules["confirm"].alertText+"<br />"
			}
		}
		function _sum(caller,rules,position){		 // VALIDATE SPAM PROTECTION
			if($(caller).attr('value') != "5"){
				isError = true
				promptText += settings.allrules["sum"].alertText+"<br />"
			}
		}		
		function _length(caller,rules,position){    // VALIDATE LENGTH

			startLength = eval(rules[position+1])
			endLength = eval(rules[position+2])
			feildLength = $(caller).attr('value').length

			if(feildLength<startLength || feildLength>endLength){
				isError = true
				promptText += settings.allrules["length"].alertText+startLength+settings.allrules["length"].alertText2+endLength+settings.allrules["length"].alertText3+"<br />"
			}
		}
		function _minCheckbox(caller,rules,position){    // VALIDATE CHECKBOX NUMBER

			nbCheck = eval(rules[position+1])
			groupname = $(caller).attr("name")
			groupSize = $("input[name="+groupname+"]:checked").size()

			if(groupSize > nbCheck){
				isError = true
				promptText += settings.allrules["minCheckbox"].alertText+"<br />"
			}
		}
		return(isError) ? isError : false;
	};
	var closePrompt = function(caller) {	// CLOSE PROMPT WHEN ERROR CORRECTED
		closingPrompt = $(caller).attr("name")

		$("."+closingPrompt).fadeTo("fast",0,function(){
			$("."+closingPrompt).remove()
		});
	};
	var submitValidation = function(caller) {	// FORM SUBMIT VALIDATION LOOPING INLINE VALIDATION
		var stopForm = false
		$(".formError").remove()
		var toValidateSize = $(caller).find("[class^=validate]").size()

		$(caller).find("[class^=validate]").each(function(){
			var validationPass = loadValidation(this)
			return(validationPass) ? stopForm = true : "";
		});
		if(stopForm){							// GET IF THERE IS AN ERROR OR NOT FROM THIS VALIDATION FUNCTIONS
			destination = $(".formError:first").offset().top;
			$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 1100)
			return true;
		}else{
			return false
		}
	};

 //HINZUGEFÜGT:************************
 function setComments() {
	setName();
	setEmail();
	setMessage();
	setSum();
 }
};