/*---------------------------------------------------------------------------------------------------
getFormValues 
---------------------------------------------------------------------------------------------------*/
function getFormValues(form){
	var query = '';
	for(j=0; j < form.elements.length; j++){
		if(form.elements[j].type == "checkbox" || form.elements[j].type == "radio"){
			if(form.elements[j].checked){
				query += form.elements[j].name + "=" + escape(form.elements[j].value) + "&";
			}
		}else{
			query += form.elements[j].name + "=" + escape(form.elements[j].value) + "&";
		}
	}
	query = query.substring(0,query.length-1); // Enlève le & à la fin
	query = query.replace(/\+/g, "%2B"); // Change les + pour des %2B car il n'est pas encodé par escape, mais il est remplacé par des espaces lors du decode en php		
	return query;
}


/*---------------------------------------------------------------------------------------------------
bdTable 
---------------------------------------------------------------------------------------------------*/
function bdTable(el){
	var idTable = $(el);
	if(!$(el))return;
	
	var trs = idTable.getElementsByTagName("tr");
	
	for(var i=0; i< trs.length; i++){
		var tr = trs[i];
		var formDel = getElementsByClassName(tr, "form", "del")[0];
		var formMod = getElementsByClassName(tr, "form", "mod")[0];
		var formAdd = getElementsByClassName(idTable, "form", "add")[0];
		var delSubmit = getElementsByClassName(tr, "input", "del")[0];
		var modSubmit = getElementsByClassName(tr, "input", "mod")[0];
		var addSubmit = getElementsByClassName(idTable, "input", "add")[0];
		
		//Objet
		request = getHTTPObject();
		requestConf = new Object();
		
		
		//form ajout
		if(formAdd){
			var action = formAdd.getAttribute('action');
			formAdd.onSubmit = function(){
				return false;	
			}
		}
		
		//Ajout onclick
		if(addSubmit){
			addSubmit.action = action;
			addSubmit.onclick = function(){
				requestConf.addSubmit = this;
				request.open("GET", this.action + "&ajax=true", true);
				request.onreadystatechange = checkMod;
				request.send(null);
				return false;
			}
		}
		
		
		//checkSave
		function checkSave(){
			if(request.readyState > 0){
				if(request.readyState == 4){
					var theText = request.responseText;
					idTable.innerHTML = theText;
					bdTable(el);
					prepareHighlightRows();
				}
			}
		}
		
		//form Modifications
		if(formMod){
			var action = formMod.getAttribute('action');
			formMod.onSubmit = function(){
				return false;	
			}
		}
		
		//checkMod
		function checkMod(){
			if(requestConf.modSubmit){
				addClass(requestConf.modSubmit.tr, 'modifying');
			}
			if(request.readyState > 0){
				if(request.readyState == 4){ 
					var theText = request.responseText;
					idTable.innerHTML = theText;

					var formSave = getElementsByClassName(idTable, "form", "saveBlock")[0];
					var saveSubmit = getElementsByClassName(idTable, "input", "save")[0];
					if(!saveSubmit || !formSave)return;
					var action = formSave.getAttribute('action');
					formSave.onSubmit = function(){
						return false;	
					}
					
					//Save onclick
					saveSubmit.action = action;
					saveSubmit.onclick = function(){
						requestConf.saveSubmit = this;
						request.open("GET", this.action + "&ajax=true&" + getFormValues(formSave), true);
						request.onreadystatechange = checkSave;
						request.send(null);
						return false;
					}
					
					//cancel onclick
					var cancelLink = getElementsByClassName(idTable, "a", "cancel")[0];
					if(cancelLink){
						cancelLink.action = '?action=cancel&id=';
						cancelLink.onclick = function(){
							requestConf.cancelLink = this;
							request.open("GET", this.action + "&ajax=true", true);
							request.onreadystatechange = checkSave;
							request.send(null);
							return false;
						}
					}
				}
				
			}
		}
		
		//Modifications onclick
		if(modSubmit){
			modSubmit.tr = tr;
			modSubmit.action = action;
			modSubmit.onclick = function(){
				requestConf.modSubmit = this;
				request.open("GET", this.action + "&ajax=true", true);
				request.onreadystatechange = checkMod;
				request.send(null);
				return false;
			}
		}
		
		//form Delete
		if(formDel){
			var action = formDel.getAttribute('action');
			formDel.onSubmit = function(){
				return false;	
			}
		}
		
		//checkDelete
		function checkDelete(){
			addClass(requestConf.delSubmit.tr, 'deleting')
			if(request.readyState > 0){
				if(request.readyState == 4){ 
					var theText = request.responseText;
					if(theText == "success"){
						requestConf.delSubmit.tr.parentNode.removeChild(requestConf.delSubmit.tr);
					}else{
						//alert('cant delete');
					}
				}
			}
		}

		//delete onclick
		if(delSubmit){
			delSubmit.tr = tr;
			delSubmit.action = action;
			delSubmit.onclick = function(){
				requestConf.delSubmit = this;
				request.open("GET", this.action + "&ajax=true", true);
				request.onreadystatechange = checkDelete;
				request.send(null);
				return false;
			}
		}

	}
}

addLoadEvent(prepareBdTable);
