function strpos( haystack, needle, offset)
{
	var i = haystack.indexOf( needle, offset );
	return i;
}

function verifEmail(chaine)
{
	var reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/
	return (reg.exec(chaine)!=null)
}

function verifNumeric(chaine)
{
	var exp = new RegExp("^[0-9]*$","g");
	return exp.test(chaine);
}

function verifAlpha(chaine)
{
	var exp = new RegExp("^[a-zA-Z]*$","g");
	return exp.test(chaine);
}

function verifDate(chaine)
{
	var exp = new RegExp("^[0-9]{1,2}\/[01]?[0-9]\/[0-9]{4}$","g");
	return exp.test(chaine);
}

function verifUrl(chaine)
{
	var exp = new RegExp("/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/","g");
	return exp.test(chaine);
}

function verifInput(input, i, checkColor)
{
	if($(input).val() == "")
	{
		if($(input).attr("title"))
		{
			var errorMsg = $(input).attr("title");
		}
		else
		{
			var errorMsg = "<div id='errorTraitement' style='display:inline;vertical-align:center'> Champs obligatoire.</div>";
		}
				
		// APPLICATION COULEUR
		if(checkColor == "true")
		{
			$(input).css("border", "1px solid red");
		}

		$(input).after("<div style='color:red;display:inline;padding-left:10px;vertical-align:center' class='thisError" + i + "'>" + errorMsg + "</div>");
		return false;
	}
	else
	{
		// APPLICATION COULEUR
		if(checkColor == "true")
		{
			$(input).css("border", "1px solid green");
		}

		return true;
	}
}

function checkInput(options, input, i, count)
{
	if(typeof(options) != 'undefined')
	{
		var reg = new RegExp("[,]+", "g");
		var tabOptions = options.split(reg);
		for (var iOptions=0; iOptions<tabOptions.length; iOptions++)
		{
			var reg = new RegExp("[:]+", "g");
			var tab = tabOptions[iOptions].split(reg);

			var checkColor = tab[1];
		}
	}

	var checkForm = 0;
	if($(input).attr("required"))
	{
		$(".thisError" + i).remove();

		// VERIFICATION DE VALEUR
		if($(input).attr("required") == "true")
		{
			if(!verifInput(input, i, checkColor))
			checkForm = 1;
		}

		// VERIFICATION D'EMAIL
		if(strpos($(input).attr("required"), 'email', 0) > 0 || $(input).attr("required") == "email")
		{
			if(strpos($(input).attr("required"), 'true', 0) > 0)
			{
				if(!verifInput(input, i, checkColor))
				checkForm = 1;
			}

			if(!verifEmail($(input).val()) && $(input).val() != "")
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid red");
				}

				if($(input).attr("title"))
				{
					var errorMsg = $(input).attr("title");
				}
				else
				{
					var errorMsg = '* Email obligatoire.';
				}

				checkForm = 1;
				$(input).after("<div style='color:red;display:inline;padding-left:10px;vertical-align:center' class='thisError" + i + "'>" + errorMsg + "</div>");
			}
			else if($(input).val() == "")
			{
				// Do Nothing
			}
			else
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid green");
				}
			}
		}

		// VERIFICATION DE NOMBRE
		if(strpos($(input).attr("required"), 'numeric', 0) > 0 || $(input).attr("required") == "numeric")
		{
			if(strpos($(input).attr("required"), 'true', 0) > 0)
			{
				if(!verifInput(input, i, checkColor))
				checkForm = 1;
			}

			if(!verifNumeric($(input).val()) && $(input).val() != "")
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid red");
				}

				if($(input).attr("title"))
				{
					var errorMsg = $(input).attr("title");
				}
				else
				{
					var errorMsg = '* Nombre obligatoire.';
				}

				checkForm = 1;
				$(input).after("<div style='color:red;display:inline;padding-left:10px;vertical-align:center' class='thisError" + i + "'>" + errorMsg + "</div>");
			}
			else if($(input).val() == "")
			{
				// Do Nothing
			}
			else
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid green");
				}
			}
		}

		// VERIFICATION DE CARACTERE
		if(strpos($(input).attr("required"), 'alpha', 0) > 0 || $(input).attr("required") == "alpha")
		{
			if(strpos($(input).attr("required"), 'true', 0) > 0)
			{
				if(!verifInput(input, i, checkColor))
				checkForm = 1;
			}

			if(!verifAlpha($(input).val()) && $(input).val() != "")
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid red");
				}

				if($(input).attr("title"))
				{
					var errorMsg = $(input).attr("title");
				}
				else
				{
					var errorMsg = '* Caractère obligatoire.';
				}

				checkForm = 1;
				$(input).after("<div style='color:red;display:inline;padding-left:10px;vertical-align:center' class='thisError" + i + "'>" + errorMsg + "</div>");
			}
			else if($(input).val() == "")
			{
				// Do Nothing
			}
			else
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid green");
				}
			}
		}

		// VERIFICATION DE DATE
		if(strpos($(input).attr("required"), 'date', 0) > 0 || $(input).attr("required") == "date")
		{
			if(strpos($(input).attr("required"), 'true', 0) > 0)
			{
				if(!verifInput(input, i, checkColor))
				checkForm = 1;
			}

			if(!verifDate($(input).val()) && $(input).val() != "")
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid red");
				}

				if($(input).attr("title"))
				{
					var errorMsg = $(input).attr("title");
				}
				else
				{
					var errorMsg = '* Date obligatoire (format : JJ/MM/AAAA).';
				}

				checkForm = 1;
				$(input).after("<div style='color:red;display:inline;padding-left:10px;vertical-align:center' class='thisError" + i + "'>" + errorMsg + "</div>");
			}
			else if($(input).val() == "")
			{
				// Do Nothing
			}
			else
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid green");
				}
			}
		}

		// VERIFICATION D'URL
		if(strpos($(input).attr("required"), 'url', 0) > 0 || $(input).attr("required") == "url")
		{
			if(strpos($(input).attr("required"), 'true', 0) > 0)
			{
				if(!verifInput(input, i, checkColor))
				checkForm = 1;
			}

			if(!verifUrl($(input).val()) && $(input).val() != "")
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid red");
				}

				if($(input).attr("title"))
				{
					var errorMsg = $(input).attr("title");
				}
				else
				{
					var errorMsg = '* URL obligatoire.';
				}

				checkForm = 1;
				$(input).after("<div style='color:red;display:inline;padding-left:10px;vertical-align:center' class='thisError" + i + "'>" + errorMsg + "</div>");
			}
			else if($(input).val() == "")
			{
				// Do Nothing
			}
			else
			{
				// APPLICATION COULEUR
				if(checkColor == "true")
				{
					$(input).css("border", "1px solid green");
				}
			}
		}
	}

	if(count == "True")
		return checkForm;
}

jQuery.fn.extend({

	checkForm: function(options) {

		var checkForm = 0;
		$(".checkForm input,textarea").each(function (i) {
			checkInput(options, this, i, "False");
			checkForm += checkInput(options, this, i, "True");
		});
		
		checkForm = checkForm / 2;
		
		if(checkForm > 0.4)
		{
			return false;
		}
		else
		{
			return true;
		}
	},
	checkInput: function(options, thos) {

		var checkForm = 0;
		var thos = thos;

		$(".checkForm input,textarea").each(function (i) {

			if(this == thos)
			{
				checkInput(options, this, i, "False");
				checkForm += checkInput(options, this, i, "True");
			}

		});

		checkForm = checkForm / 2;

		if(checkForm > 0.4)
		{
			return false;
		}
		else
		{
			return true;
		}
	}

});

// checkColor : true/false
// => Affiche couleur red/green
$(document).ready(function()
{	
	$(".checkForm #buttonValid").click(function () {

		if(!$(this).checkForm("checkColor:false"))
		{
			return false;
		}
		
		$(".checkForm").submit();

	});

	$(".checkForm input,textarea").keyup(function () {

		if(!$(this).checkInput("checkColor:false", this))
		{
			return false;
		}

	});
});