var SeyesTools = Class.create ({
	Version : "1.0",
	sMsgEmpty : "",
	sMsgError : "",
	oRequest : "",

	CheckForm : function (sForm) {
		var oForm = $(sForm).serialize(true);
		var iField = 0;
		for (var sProperty in oForm) {
			if ($(sProperty)) {
				if($(sProperty).hasClassName("mandatory")){
					if (oForm[sProperty] === "") {
						this.GetMessage(sForm, sProperty, 'empty', 1);
						return false;
					} else {
						if(sProperty.indexOf("sEmail") != -1){
							if(!this.CheckEmail(sForm, sProperty)){
								return false;
							}else{
								iField++;
							}
						}else{
							switch (sProperty){
								case "sEmail" :
								case "sEmailNewCustomer" :
									if(!this.CheckEmail(sForm, sProperty)){
										return false;
									}else{
										iField++;
									}
									break;
								case "sUrl" :
								case "sUrlNewCustomer" :
									if(!this.CheckUrl(sForm, sProperty)){
										return false;
									}else{
										iField++;
									}
									break;
								default :
									this.GoodField(sProperty);
									iField++;
									break;
							}
						}
					}
				}else{
					if (oForm[sProperty] !== "") {
						switch (sProperty){
							case "sEmail" :
								if(!this.CheckEmail(sForm, sProperty)){
									return false;
								}else{
									iField++;
								}
								break;
							case "sUrl" :
							case "sUrlNewCustomer" :
								if(!this.CheckUrl(sForm, sProperty)){
									return false;
								}else{
									iField++;
								}
								break;
							case "iPrestationsType" :
							case "iCountry" :
								if(!(parseInt($F(sProperty), 10) > 0)){
									return false;
								}else{
									iField++;
								}
								break;
							case "iTournage" :
								if(!(parseInt($F(sProperty), 10) >= 0)){
									//this.GetMessage(sForm, sProperty, 'empty', 1);
									//return false;
									iField++;
								}else{
									if(parseInt($F(sProperty), 10) == 0 && $F(sProperty+"Other") == ""){
										this.GetMessage(sForm, sProperty+"Other", 'empty', 1);
										return false;
									}else{
										iField++;
									}
								}
								break;
							default :
								this.GoodField(sProperty);
								iField++;
								break;
						}
					}
				}
			}
		}

		if(iField === 0){
			return false;
		}else{
			return true;
		}
	},


	GetMessage : function (sForm, sDiv, sMode, bActivate) {
		var sMessage = "";
		switch (sMode) {
			case "empty" :
				$(sDiv).addClassName("fieldError");
				if(bActivate == 1){
					$(sDiv).activate();
				}
				sMessage = this.sMsgEmpty;
				break;
			case "error" :
				$(sDiv).addClassName("fieldError");
				if(bActivate == 1){
					$(sDiv).activate();
				}
				sMessage = this.sMsgError;
				break;
		}
		this.ShowMessage(sForm, "error", sMessage);
	},


	GoodField : function (sDiv) {
		$(sDiv).removeClassName("fieldError");
	},


	ShowMessage : function (sForm, sClassname, sMessage) {
		$(sForm + "Msg").update(sMessage);
		$(sForm + "Msg").addClassName(sClassname);
		$(sForm + "Msg").show();
	},

	CheckEmail : function (sForm, sProperty) {
		var bError = 1;
		if (!($F(sProperty).indexOf ('@', 0) == -1)) {
			if (!($F(sProperty).indexOf ( '@', 0 ) < 1 )) {
				if (!($F(sProperty).indexOf ( '[', 0 ) == -1 && $F(sProperty).charAt ($F(sProperty).length - 1) == ']')) {
					if (!($F(sProperty).indexOf ( '[', 0 ) > -1 && $F(sProperty).charAt ($F(sProperty).length - 1) != ']')) {
						if (!($F(sProperty).indexOf ( '@', 0 ) > 1 && $F(sProperty).charAt ($F(sProperty).length - 1 ) == ']')) {
        					if (!($F(sProperty).indexOf ( '.', 0 ) == -1)) {
        						if (!($F(sProperty).indexOf('@', 0) > 1 && $F(sProperty).charAt($F(sProperty).length - 1) == ']')) {
							        var len = $F(sProperty).length;
							    	var pos = $F(sProperty).lastIndexOf ( '.', len - 1 ) + 1;
								    if (!(( len - pos ) < 2 || ( len - pos ) > 4 )) {
								    	this.GoodField(sProperty);
						    			bError = 0;
								    }
        						}
        					}
						}
					}
				}
			}
		}

		if(bError == 1){
			this.GetMessage(sForm, sProperty, 'error', 1);
			return false;
		}else{
			return true;
		}
	},

	CheckUrl : function (sForm, sProperty) {
		var bError = 1;
		var sRegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;

		if(sRegExp.test($F(sProperty))){
			this.GoodField(sProperty);
			bError = 0;
		}

		if(bError == 1){
			this.GetMessage(sForm, sProperty, 'error', 1);
			return false;
		}else{
			return true;
		}
	},

	copyValue : function (sValue, sDestination) {
		$(sDestination).value = sValue;
	},


	AjaxUpdater : function (sDiv, sUrl, sQuery, sReturnValid, sReturnError) {
		this.oRequete = new Ajax.Updater(sDiv,
										sUrl, {method:'post',
											   postBody:sQuery,
											   evalScripts:true,
											   onSuccess:function(xhr) {
											   		var oResult = xhr.responseText.evalJSON();
											   		if (parseInt(oResult.bValid,10) === 1) {
											   			if(sReturnValid !== ""){
											   				eval(sReturnValid);
											   			}
											   			if (oResult.sText !== "") {
											   				eval(oResult.sText);
											   			}
											   		} else {
										   				if(sReturnError !== ""){
											   				eval(sReturnError);
											   			}
											   		}
											   }.bindAsEventListener(this),
											   onFailure:function() {
											   		if(sReturnError !== ""){
										   				eval(sReturnError);
										   			}
											   }.bindAsEventListener(this),
											   onComplete : function () {
													if(sReturnError === "frmPaypal") {
										   				$('frmPaypal').submit();
										   			}else{

										   			}
											   }.bindAsEventListener(this)});
	},


	AjaxRequest : function (sUrl, sQuery, sReturnValid, sReturnError) {
		this.oRequete = new Ajax.Request(sUrl, {method:'post',
											   postBody:sQuery,
											   onSuccess:function(xhr) {
											   		var oResult = xhr.responseText.evalJSON();
											   		if (parseInt(oResult.bValid,10) === 1) {
											   			if(sReturnValid !== ""){
											   				eval(sReturnValid);
											   			}
											   			if (oResult.sText !== "") {
											   				eval(oResult.sText);
											   			}
											   		} else {
											   			if(sReturnError !== ""){
											   				eval(sReturnError);
											   			}
											   		}
											   }.bindAsEventListener(this),
											   onFailure:function() {
											   		if(sReturnError !== ""){
										   				eval(sReturnError);
										   			}
											   }.bindAsEventListener(this),
											   onComplete : function () {

											   }.bindAsEventListener(this)
		});
	},

	checkAuthentification : function (sForm) {
		if(this.CheckForm(sForm)){
			var sUrl = "init.php";
			var sQuery = "iAction=1&" + $(sForm).serialize();
			this.oRequest = new Ajax.Request(sUrl, {method:'post',
												   postBody:sQuery,
												   onComplete:function(xhr){
												   	var oResult = xhr.responseText.evalJSON();
												   	if(parseInt(oResult.bValid, 10) === 1){
												   		document.location.reload();
												   	}else{
												   		this.ShowMessage(sForm, "error", oResult.sText);
												   	}
												   }.bindAsEventListener(this)});
		}
	},

	quickAuthentification : function (sForm){
		var aOptions = {};
		if(arguments.length > 1){
			aOptions = arguments[1] || {};
		}

		Event.stopObserving($(sForm), "keyup");
		$(sForm).observe("keyup",
			function(event){
				if(typeof(event.wich) == 'undefined') {
					event.wich = event.keyCode;
				}
				if (parseInt(event.wich,10) === 13) {
					if($F(aOptions.sUsername) !== aOptions.sUsernameTextDefault && $F(aOptions.sPassword) !== aOptions.sPasswordTextDefault){
						this.checkAuthentification(sForm);
					}
				}
			}.bindAsEventListener(this)
		);

		//Init Field
		$(aOptions.sUsername).value = aOptions.sUsernameTextDefault;
		$(aOptions.sPassword).value = aOptions.sPasswordTextDefault;

		if(aOptions.sUsername !== ""){
			Event.stopObserving(aOptions.sUsername, "focus");
			$(aOptions.sUsername).observe('focus',
				function(){
					if($F(aOptions.sUsername) === aOptions.sUsernameTextDefault){
						$(aOptions.sUsername).value = "";
					}
				}
			);

			Event.stopObserving(aOptions.sUsername, "blur");
			$(aOptions.sUsername).observe('blur',
				function(){
					if($F(aOptions.sUsername) === ""){
						$(aOptions.sUsername).value = aOptions.sUsernameTextDefault;
					}
				}
			);
		}

		if(aOptions.sPassword !== ""){
			Event.stopObserving(aOptions.sPassword, "focus");
			$(aOptions.sPassword).observe('focus',
				function(){
					if($F(aOptions.sPassword) === aOptions.sPasswordTextDefault){
						$(aOptions.sPassword).value = "";
					}
				}
			);

			Event.stopObserving(aOptions.sPassword, "blur");
			$(aOptions.sPassword).observe('blur',
				function(){
					if($F(aOptions.sPassword) === ""){
						$(aOptions.sPassword).value = aOptions.sPasswordTextDefault;
					}
				}
			);
		}
	},

	createButton : function (sClassName, oElement) {
		var sUrl = "inc/init.php";
		var oRequest = "";
		var sQuery = "";
		var aInfos = "";
		switch (sClassName){
			case "addDownload" :
				aInfos = oElement.id.split("|");
				sQuery += "iAction=1&sMode="+encodeURIComponent(aInfos[1])+"&iIdCode="+parseInt(aInfos[2], 10);
				oRequest = this.AjaxRequest(sUrl, sQuery, "", "");
				break;

			case "forgetPassword" :
				sQuery += "iAction=5&sEmail="+encodeURIComponent($F('sEmailLogin'));
				oRequest = this.AjaxRequest(sUrl, sQuery, "$('frmAuthMsg').update(oResult.sTextMsg);$('frmAuthMsg').addClassName('valid');$('frmAuthMsg').show();", "$('frmAuthMsg').update(oResult.sTextMsg);$('frmAuthMsg').addClassName('error');$('frmAuthMsg').show();");
				break;
			case "more" :
				/*
				$$('.more').each(
					function(oCloseElement) {
						var aClose = oCloseElement.id.split("|");
						$('more|'+aClose[1]).hide();
					}
				);
				*/
				aInfos = oElement.id.split("|");
				if($('more|'+aInfos[1]).style.display == "none"){
					$('more|'+aInfos[1]).toggle();
				}else{
					$('more|'+aInfos[1]).hide();
				}
				break;
		}
	},

	createLinks : function (sClassName){
		if($(sClassName)){
			$(sClassName).stopObserving("click");
			$(sClassName).observe("click", function(){this.createButton(sClassName);}.bindAsEventListener(this));
		}else{
			$$("." + sClassName).each(
				function (oElement){
					oElement.stopObserving("click");
					oElement.observe('click',
						function(){
							this.createButton(sClassName, oElement);
						}.bindAsEventListener(this)
					);
				}.bindAsEventListener(this)
			);
		}
	},

	ListenForm : function (sForm, iAction){
		var aOptions = {};
		if(arguments.length > 2){
			aOptions = arguments[2] || {};
		}

		$(sForm).focusFirstElement();

		if($(sForm + 'Reset')){
			Event.stopObserving(sForm + 'Reset', "click");
			$(sForm + 'Reset').observe('click', function(){
													$(sForm + "Msg").hide();
													$$('.fieldError').each(
														function (oField){
															$(oField.id).removeClassName('fieldError');
														}
													);
													$(sForm).focusFirstElement();
			});
		}

		Event.stopObserving(sForm, "submit");
		$(sForm).observe('submit', function(){
										var bError = false;
										$(sForm + "Msg").removeClassName("valid");
										$(sForm + "Msg").removeClassName("error");
										$(sForm + "Msg").hide();
										if(this.CheckForm(sForm)){
											var sFormValues = $(sForm).serialize();
											if(sForm == "frmForgetPassword"){
												$(sForm).disable();
											}
											if(sForm == "frmLogin"){
												if($F('sEmailLogin') == "" && $F('sTelLogin') == ""){
													this.ShowMessage(sForm, "error", aOptions.sTextCommunication);
													bError = true;
												}
											}

											if(sForm.indexOf("frmEventsClients") == 0){
												var iEventCode = parseInt(sForm.replace("frmEventsClients", ""), 10);
												if($F('sEmail'+iEventCode) == "" && $F('sTel'+iEventCode) == ""){
													this.ShowMessage(sForm, "error", aOptions.sTextCommunication);
													bError = true;
												}
											}

											if(!bError){
												var sUrl = "inc/init.php";
												this.oRequest = new Ajax.Request(sUrl, {method:'post',
																					   postBody:"iAction=" + parseInt(iAction, 10) + "&" + sFormValues,
																					   onComplete:function(xhr){
																					   	var oResult = xhr.responseText.evalJSON();
																					   	if(parseInt(oResult.bValid, 10) == 1){
																					   		switch(sForm) {
																					   			case "frmAuthFull" :
																					   			case "frmNewCustomer" :
																					   			case "frmAuth" :
																					   				eval(oResult.sText);
																					   				break;
																					   			default :
																						   			this.ShowMessage(sForm, "valid", oResult.sText);
																						   			if(parseInt(oResult.bNotReset, 10) !== 1){
																						   				$(sForm).reset();
																						   				if(sForm == "frmForgetPassword"){
																											$(sForm).enable();
																										}
																						   			}
																						   			if(parseInt(oResult.bResetPassword, 10) === 1){
																										$(sForm).getInputs('password').each(
																											function(oField) {
																												oField.value = "";
																											}
																										);
																						   			}
																						   			break;
																					   		}
																					   	}else{
																					   		this.ShowMessage(sForm, "error", oResult.sText);
																					   		if(sForm == "frmForgetPassword"){
																								$(sForm).enable();
																							}
																					   	}
																					   }.bindAsEventListener(this)});
											}
										}
									}.bindAsEventListener(this)
		);

		$$(".checkbox").each(
			function (oElement){
				oElement.observe("click", function(){
					$$(".checkboxChecked").each(
						function (oElementChecked){
							if(oElementChecked.id.substr(0,(oElementChecked.id.length-2)) === oElement.id.substr(0,(oElement.id.length-2))){
								oElementChecked.removeClassName("checkboxChecked");
							}
						}
					);
					oElement.addClassName("checkboxChecked");

					var aElement = oElement.id.split("_");
					$(aElement[0]).value = aElement[1];
				});
			}
		);
	},

	checkVersion : function (){
		var msg = "You're not using Windows Internet Explorer.";
    	var ver = getInternetExplorerVersion();
	    if (ver > -1) {
	        if (ver >= 8.0){
            	msg = "You're using a recent copy of Windows Internet Explorer.";
	        }else{
            	msg = "You should upgrade your copy of Windows Internet Explorer.";
    		}
	    }
	    alert(msg);
	},

	getInternetExplorerVersion : function() {
	    var rv = -1;
    	if (navigator.appName == 'Microsoft Internet Explorer') {
	        var ua = navigator.userAgent;
	        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
	        if (re.exec(ua) != null){
	            rv = parseFloat(RegExp.$1);
	        }
	    }
	    return rv;
	}
});