﻿/*!
* GenForm javascript library 1.0.0
* FG - Copyright 2010 Comptanoo
*/

// affichage via alert ou injection HTML
function genformShow(o, GenFormMsg) {
	if ($('#genformContainer[GenFormCtrlMode="0"]').length) {
		// mode alert
		if ($.trim(String(GenFormMsg)) != '') { alert(GenFormMsg); };
	} else {
		// mode silencieux
		if ($('#msg' + o.id).length) {
			$('#msg' + o.id).text(GenFormMsg);
			if ($('#msg' + o.id).text() == "") { $('#msg' + o.id).toggleClass("on", false) } else { $('#msg' + o.id).toggleClass("on", true) };
		};
	}
};

function genformFormaterNom(o) {
	if (o) { o.value = $.trim(String(o.value)).toUpperCase(); };
	return "";
}

function genformFormaterPrenom(o) {
	if (o) {
		var s = $.trim(String(o.value)).toLowerCase();
		s = s.charAt(0).toUpperCase() + s.substr(1);
		o.value = s;
	};
	return "";
}

function genformFormaterEntier(o) {
	if (o) {
		var s = $.trim(String(o.value)).toLowerCase();
		var s2 = ""; var c;
		for (i = 0; i < s.length; i++) {
			c = s.charAt(i);
			if (c >= "0" && c <= "9") { s2 = s2 + c; };
		};
		o.value = s2;
	};
	return "";
}

function genformFormaterDecimal(o) {
	var msg = "";
	if (o) {
		var s = $.trim(String(o.value)).toLowerCase();
		var s2 = ""; var c; var nbSep = 0;
		for (i = 0; i < s.length; i++) {
			c = s.charAt(i);
			if ((c >= "0" && c <= "9") || (c == "," || c == ".")) { s2 = s2 + c; if (c == "," || c == ".") { nbSep++; } };
		};
		o.value = s2;
		// 1 seul séparateur décimal et pas au début ni à la fin
		if ((s2.charAt(0) == ",") || (s2.charAt(s2.length - 1) == ",") || (s2.charAt(0) == ".") || (s2.charAt(s2.length - 1) == ".") || (nbSep > 1) || (s2.indexOf(",") != s2.lastIndexOf(",")) || (s2.indexOf(".") != s2.lastIndexOf("."))) {
			msg = "format incorrect";
		};
	};
	return msg;
}

function genformFormaterEmail(emailStr) {

	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom + ")*$");
	var matchArray = emailStr.match(emailPat);
	if (matchArray == null) { return ("email invalide"); };

	var user = matchArray[1];
	var domain = matchArray[2];

	if (user.match(userPat) == null) { return "email invalide" };

	var IPArray = domain.match(ipDomainPat);
	if (IPArray != null) {
		for (var i = 1; i <= 4; i++) {
			if (IPArray[i] > 255) {
				return "email invalide"
			};
		}
		return ""
	};

	var domainArray = domain.match(domainPat);
	if (domainArray == null) { return "email invalide" };

	var atomPat = new RegExp(atom, "g");
	var domArr = domain.match(atomPat);
	var len = domArr.length;
	if (domArr[domArr.length - 1].length < 2 ||
            domArr[domArr.length - 1].length > 6) {
		return "email invalide"
	};

	if (len < 2) { return "email invalide"; };

	return "";
}

function genformObligatoire(o) {
	if (o) { if ($.trim(String(o.value)) == '') { return "Champ obligatoire"; } else { return "" }; };
}

function genformObligatoireSelect(o) {
	if (o) { if ($("#" + o.id).val() < 0) { return "Champ obligatoire"; } else { return "" }; };
}

function genformObligatoireRadio(o) {
	if (o) { if (!$("input[@name='" + o.id + "']:checked").val()) { return "Champ obligatoire"; } else { return "" }; };
}

function isGenFormValide() {
	var ok = true;
	$.each($("span.GenFormMsg"), function(key, value) {
		ok = ok && ($("#" + value.id).text() == "");
	});
	return ok;
}
////////////////////////////////

try {
	var GenFormprm = Sys.WebForms.PageRequestManager.getInstance();
	GenFormprm.add_endRequest(function() {
		genformInitialize2();
	});
}
catch (err) { };

function genformInitialize2() {

	if ((typeof $.datepicker != 'undefined')) {
		// type datetime
		$('div.GenForm :input[GenFormCtrlType=2]').datepicker();
	};

	if ((typeof $.ui.selectmenu != 'undefined')) {
		// type select
		$('select').selectmenu();
	};

}

function genformInitialize() {
	//try {

	if ((typeof $.datepicker != 'undefined')) {
		// type datetime
		$('div.GenForm :input[GenFormCtrlType=2]').datepicker();
	}

	// type entier
	$('div.GenForm :input[GenFormCtrlType=3]').live('change', function() {
		if ((typeof window.genformFormaterEntier != 'undefined')) {
			var GenFormMsg = genformFormaterEntier(this);
			genformShow(this, GenFormMsg);
		};
	});

	// type decimal
	$('div.GenForm :input[GenFormCtrlType=4]').live('change', function() {
		if ((typeof window.genformFormaterDecimal != 'undefined')) {
			var GenFormMsg = genformFormaterDecimal(this);
			genformShow(this, GenFormMsg);
		};
	});

	// type nom de famille
	$('div.GenForm :input[GenFormCtrlType=6]').live('change', function() {
		if ((typeof window.genformFormaterNom != 'undefined')) {
			var GenFormMsg = genformFormaterNom(this);
			genformShow(this, GenFormMsg);
		};
	});

	// type prénom
	$('div.GenForm :input[GenFormCtrlType=7]').live('change', function() {
		if ((typeof window.genformFormaterPrenom != 'undefined')) {
			var GenFormMsg = genformFormaterPrenom(this);
			genformShow(this, GenFormMsg);
		};
	});

	// type nom propre
	$('div.GenForm :input[GenFormCtrlType=11]').live('change', function() {
		if ((typeof window.genformFormaterPrenom != 'undefined')) {
			var GenFormMsg = genformFormaterPrenom(this);
			genformShow(this, GenFormMsg);
		};
	});

	// type email
	$('div.GenForm :input[GenFormCtrlType=12]').live('change', function() {
		if ((typeof window.genformFormaterEmail != 'undefined')) {
			var GenFormMsg = genformFormaterEmail(this.value);
			genformShow(this, GenFormMsg);
		};
	});

	// type email (identifiant)
	$('div.GenForm :input[GenFormCtrlType=17]').live('change', function() {
		if ((typeof window.genformFormaterEmail != 'undefined')) {
			var GenFormMsg = genformFormaterEmail(this.value);
			genformShow(this, GenFormMsg);
		};
	});

	// vérification input obligatoire
	$('div.GenForm :input[GenFormCtrlObli=1]').live('blur', function() {
		if ((typeof window.genformObligatoire != 'undefined')) {
			var GenFormMsg = genformObligatoire(this);
			genformShow(this, GenFormMsg);
		};
	});
	$('div.GenForm :input[GenFormCtrlObli=1]').live('change', function() {
		if ((typeof window.genformObligatoire != 'undefined')) {
			var GenFormMsg = genformObligatoire(this);
			genformShow(this, GenFormMsg);
		};
	});

	// vérification select obligatoire
	$('div.GenForm :input[GenFormCtrlObli=2]').live('blur', function() {
		if ((typeof window.genformObligatoireSelect != 'undefined')) {
			var GenFormMsg = genformObligatoireSelect(this);
			genformShow(this, GenFormMsg);
		};
	});

	$('div.GenForm :input[GenFormCtrlObli=2]').live('change', function() {
		if ((typeof window.genformObligatoireSelect != 'undefined')) {
			var GenFormMsg = genformObligatoireSelect(this);
			genformShow(this, GenFormMsg);
		};
	});
	// vérification radio obligatoire
	$('div.GenForm :input[GenFormCtrlObli=3]').live('blur', function() {
		if ((typeof window.genformObligatoireRadio != 'undefined')) {
			var GenFormMsg = genformObligatoireRadio(this);
			genformShow(this, GenFormMsg);
		};
	});
	$('div.GenForm :input[GenFormCtrlObli=3]').live('change', function() {
		if ((typeof window.genformObligatoireRadio != 'undefined')) {
			var GenFormMsg = genformObligatoireRadio(this);
			genformShow(this, GenFormMsg);
		};
	});

	//} catch (err) { alert(err.description); };
}

$(document).ready(function() {
	genformInitialize();
});
