var dialog = null;
var dialogErreur = null;
var dialogMessage = null;
var activeForm = null

function FormulaireAjax(formName) {
	var prefixe = null;
	this.tRequiredField = new Array();
	this.tFieldError = new Array();
	this.disableSubmit = false;
	
	var TYPE_TEXT = 1;
	var TYPE_TEXTAREA = 2;
	var TYPE_RICHTEXT = 3;
	var TYPE_CHECKBOX = 4;
	var TYPE_RADIO = 5;
	var TYPE_SELECT = 6;
	var TYPE_SELECT_MULTI = 7;
	var TYPE_DATE = 8;
	var TYPE_BUTTON = 9;
	var TYPE_HIDDEN = 10;
	var TYPE_FILE = 11;
	var TYPE_LABEL = 12;
	var TYPE_SELECT_DYN = 13;
	var TYPE_OUINON = 14;
	var TYPE_IMAGE = 15;
	var TYPE_MARQUE_MODELE = 16;
	
	if (dialog == null) {
		dialog = new dijit.Dialog({
			title: '', 
		    href: '', 
		    autofocus: true
		});
	}
	//console.log(dialog)
	var formNode = dojo.byId(formName);
	
	if (formNode == null) {
		alert('erreur : formulaire ' + formName + ' non trouvé');
		return(false);
	}
	
	
	
	var delaiDefaut = 1500;
	var delaiDefautErreur = 3000;
	
	var _this = this;
	
	dojo.connect(formNode, "onsubmit", function(evt){
		dojo.stopEvent(evt);
		_this.valider();
	});
	dojo.connect(formNode, "onmouseenter", function(evt){
		activeForm = _this;
	});
	
	var toolbar = dojo.query(".toolbarDialog", formNode)[0];
	if (toolbar) {
		dojo.connect(dialog._moveable, 'onMove',function(event) {
			_this.positionToolbar();
		});
		dojo.connect(dialog, 'onLoad',function(event) {
			_this.positionToolbar();
			dojo.style(toolbar,{
				width: (dialog.domNode.clientWidth - 20) + 'px'
			});
		});
	}
	/*
	  à appeler une fois les instances ck opérationnelles (instanceReady)
	 */
	this.onLoad = function () {
		dialog._position();
		this.focus();
		if (toolbar) {
			this.positionToolbar();
			dojo.style(toolbar,{
				width: (dialog.domNode.clientWidth - 20) + 'px'
			});
		}
	}
	this.positionToolbar = function() {
		dojo.style(toolbar,{
			left: dialog.domNode.style.left
		});
		var positionTop = parseInt(dialog.domNode.style.top) + dialog.domNode.clientHeight - window.pageYOffset;
		var maxTop = window.innerHeight - 45
		if (positionTop < maxTop) {
			dojo.style(toolbar,{
				top: positionTop + 'px'
			});
		}
		else {
			dojo.style(toolbar,{
				top:''
			});
		}
		
	}
	this.valider = function () {
		this.tFieldError = new Array();
		var erreurTotal = 0;
		var erreur = 0;
		var type;
		var libelle;
		for(var fieldName in this.tRequiredField) {
			
			erreur = 0;
			if (this.prefixe) {
				fieldNode = dojo.byId(this.prefixe+fieldName);
			}
			else {
				fieldNode = dojo.byId(fieldName);
			}
			
			if (this.tRequiredField[fieldName]['type'].length < 3) {
				type = parseInt(this.tRequiredField[fieldName]['type']);
			}
			else {
				type = this.tRequiredField[fieldName]['type'];
				
			}
			libelle = this.tRequiredField[fieldName]['libelle'];
			switch(type) {
				case TYPE_TEXT :
				case TYPE_TEXTAREA :
				case TYPE_HIDDEN :
				case TYPE_DATE :
				case 'text' :
				case 'textarea' :
				case 'hidden' :
				case 'date' :
					if (fieldNode.value=='') {
						if (erreurTotal==0) fieldNode.focus();
						erreur = 1;
					}
				break;
				case TYPE_SELECT :
				case TYPE_SELECT_MULTI :
				case TYPE_SELECT_DYN :
				case TYPE_MARQUE_MODELE :
				case 'select' :
				case 'jointure' :
					if (fieldNode.options[fieldNode.selectedIndex].value=='') {
						if (erreurTotal==0) fieldNode.focus();
						erreur = 1;
					}
				break;
				case TYPE_OUINON :
				case TYPE_CHECKBOX :
				case 'checkbox' :
					if (fieldNode.checked=='') {
						if (erreurTotal==0) fieldNode.focus();
						erreur = 1;
					}
				break;
				case TYPE_RADIO :
				case 'radio' :
					radio = formNode.elements[fieldName];
					erreur = 1
					for (var j=0; j<radio.length;j++) {
						if (radio[j].checked) {
							erreur = 0
						}
					}
				break;
				case TYPE_RICHTEXT :
				case 'ck' :
					if (CKEDITOR.instances[i].getData()=='' || CKEDITOR.instances[i].getData()=="<br />\n") {
						if (erreurTotal==0) CKEDITOR.instances[i].focus();
						erreur = 1;
					}
					break;
				case 'FilteringSelect' :
					if (dijit.byId(i) == '') {
						erreur = 1;
						if (erreurTotal==0) fieldNode.focus();
					}
				break;
				default :
				break;
			}
			if (erreur == 1) {
				erreurTotal += 1;
				this.tFieldError[fieldName] = 'Le champ '+libelle+' est obligatoire';
			}
		}
		if (erreurTotal > 0) {
			this.erreur();
		}
		else {
			if (this.disableSubmit == false) {
				this.submit();
			}
			else {
				this.erreur('Veuillez patientez..', 'Veuillez patientez pendant l\'envoi de fichier<br />puis réessayez');
			}
		}
	}
	
	var underlayLoading = null;
	this.submitLoading = function () {
		underlayLoading = dojo.doc.createElement("div");
		underlayLoading.style.backgroundColor = '#FFF';
		underlayLoading.style.backgroundImage = 'url("http://www.mon-geni.com/admin/media/loading.gif")';
		underlayLoading.style.backgroundPosition = 'center center';
		underlayLoading.style.backgroundRepeat= 'no-repeat';
		underlayLoading.style.opacity = '0.9';
		underlayLoading.style.textAlign = 'center';
		
		if (dialog && dialog.isLoaded) {
			underlayLoading.style.position = "fixed";
			underlayLoading.style.top = dialog.domNode.style.top;
			underlayLoading.style.left = dialog.domNode.style.left;
			underlayLoading.style.width = dialog.domNode.clientWidth + 'px';
			underlayLoading.style.height = dialog.domNode.clientHeight + 'px';
			formNode.appendChild(underlayLoading);
		}
		else {
			underlayLoading.style.position = "absolute";
			var divInfo = dojo.position(formNode.parentNode, true);

			underlayLoading.style.top = divInfo.y + 'px';
			underlayLoading.style.left = divInfo.x + 'px';
			underlayLoading.style.width = divInfo.w + 'px';
			underlayLoading.style.height = divInfo.h + 'px';
			document.body.appendChild(underlayLoading);
		}
	}
	this.hideLoading = function () {
		underlayLoading.style.display = 'none';
	}
	this.submit = function () {
		dojo.xhrPost({
	        form: formNode.id,
	        handleAs: "json",
	        error : function(error, ioArgs) {
				console.log(ioArgs)
				_this.erreur('erreur', '<strong>Action : </strong>' + ioArgs.url + '<br /><br /><strong>Erreur : </strong>' + error + '<hr>' +ioArgs.xhr.responseText, delaiDefautErreur*20);
				_this.hideLoading();
			},
	        load: function(data) {
				if (data != null) {
					if (data.succes == true) {
						if (dialog.submitButton) {
							dialog.submitButton.style.display = 'none';
						}
						if (dialog && dialog.isLoaded && !data.dialogRefresh) {
							
							if (dialogGeni != undefined) {
								dialogGeni.ckDestroy()
							}
							dialog.attr('title', data.titre)
							dialog.attr('content', data.message)
						}
						else {
							_this.dialogMessage(data.titre, data.message);
						}
		            	
		            	if (data.urlRetour) {
		            		if (data.dialogRefresh && dialog && dialog.isLoaded) {
		            			dialogMessage.hide()
		            			dialog.attr('href', data.urlRetour);
		            		}
		            		else {
			            		urlRetour = data.urlRetour
			            		setTimeout("redirection()", data.delai);
		            		}
		            	}
		            	else {
		            		if (dialog && dialog.isLoaded && !data.dialogRefresh) {
		            			setTimeout("dialog.hide()", data.delai + 100);
		            		}
		            		else {
		            			setTimeout("dialogMessage.hide()", data.delai);
		            			if (data.dialogRefresh) {
		            				setTimeout("dialog.refresh()", data.delai + 100);
								}
		            		}
		            		if (data.openerRefresh) {
		            			if (typeof(grid) != "undefined") {
			            			grid.parse = false;
			            			grid.itemParse = new Array();
				            		grid._refresh();
		            			}
		            			else {
		            				location.reload(true);
		            			}
		            		}
		            	}
		        		dojo.forEach(
		            		dojo.query(".formError", _this.formNode),
		            		function(selectTag) {
		            			dojo.removeClass(selectTag, 'formError')
		            		}
		        		);
					}
					else {
						// message d'erreur
						if (data.tFieldError) {
							_this.tFieldError = data.tFieldError;
						}
						_this.focus();
						_this.erreur(data.titre, data.message, data.delai);
						if (dialog && dialog.isLoaded) {
							if (data.dialogRefresh) {
								dialog.refresh();
							}
						}
					}
					//_this.hideLoading()
				}
				else {
					_this.erreur('erreur', 'data est null (aucune remontée d\'information)', delaiDefautErreur);
				}
			}
		});
		//this.submitLoading();
	}
	
	this.erreur = function (title, msg, delai){
		dojo.forEach(
    		dojo.query(".formError", _this.formNode),
    		function(selectTag) {
    			dojo.removeClass(selectTag, 'formError')
    		}
		);
		var nbChampErreur = 0;
		if (title == undefined) {
			title = 'Erreur';
		}
		if (msg == undefined) {
			msg = '';
		}
		if (delai == undefined) {
			delai = delaiDefautErreur;
		}
		for (var fieldName in this.tFieldError) {
			nbChampErreur++;
			
			if (!(ligneNode = dojo.byId('ligne'+fieldName))) {
				ligneNode = dojo.byId('ligne_'+fieldName)
			}
			if (ligneNode) {
				dojo.addClass(ligneNode, 'formError')
			}
			msg += this.tFieldError[fieldName] + '<br />';
		}
		_this.dialogErreur(title, msg);
		if (nbChampErreur>0) {
			setTimeout("dialogErreur.hide()", delai + nbChampErreur * 1000);
		}
		else {
			setTimeout("dialogErreur.hide()", delai);
		}
	}
	
	this.dialogErreur = function(title, msg) {
		
		if(dialogErreur != null) {
			dialogErreur.attr('title', title)
			dialogErreur.attr('content', msg + '<br /><br /><a href="#" class="bt" onclick="dialogErreur.hide();return(false)">fermer</a>')
		}
		else {
			dialogErreur = new dijit.Dialog({
		        title: title,
		        content: msg + '<br /><br /><a href="#" class="bt" onclick="dialogErreur.hide();return(false)">fermer</a>',
		        style: 'color: #FF0000;border: 1px solid #FF0000'
		    });
		}
		dialogErreur.show();
	}
	
	this.dialogMessage = function(title, msg) {
		if(dialogMessage != null) {
			dialogMessage.attr('title', title)
			dialogMessage.attr('content', msg + '<br /><br /><a href="#" class="bt" onclick="dialogMessage.hide();return(false)">fermer</a>')
		}
		else {
			dialogMessage = new dijit.Dialog({
		        title: title,
		        content: msg + '<br /><br /><a href="#" class="bt" onclick="dialogMessage.hide();return(false)">fermer</a>'
		    });
		}
		dialogMessage.show();
	}
	
	this.focus = function () {
		formulaireFocus = 0;
		for(var fieldName in this.tFieldError) {
			if (formulaireFocus == 1) {
				break;
			}
			if (this.prefixe) {
				fieldNode = dojo.byId(this.prefixe+fieldName);
			}
			else {
				fieldNode = dojo.byId(fieldName);
			}
			if (fieldNode) {
				fieldNode.focus();
				formulaireFocus = 1;
			}
		}
		for(var fieldName in this.tRequiredField) {
			if (formulaireFocus == 1) {
				break;
			}
			if (this.prefixe) {
				fieldNode = dojo.byId(this.prefixe+fieldName);
			}
			else {
				fieldNode = dojo.byId(fieldName);
			}
			if (fieldNode) {
				fieldNode.focus();
				formulaireFocus = 1;
			}
		}
		if (formulaireFocus == 0) {
			var setFocus = dojo.query("input[type=text],select,input", formNode)[0].focus();
		}
	}
}
var urlRetour = null;
function redirection() {
	document.location.href = urlRetour;
}

