/**
 * FRONT DE BERTHELET.
 * Test et envoi de formulaire
 * IMPORTANT : A importer : prototype.js
 */

function verifieForm(elmt){
	var val = elmt.val().replace(/^\s*/,'').replace(/\s*$/,''); // TRIM : on enlève les espaces avant et après.
	elmt.val(val);
	
	// if((elmt.attr('type') == 'checkbox' && elmt.attr('type') == 'radio') && elmt.is(':checked')) val='on';
	// else val ='';
	
	var classes = elmt.attr('class').split(' ');
	var oblig = classes[classes.indexOf('controle')+1]=='oblig' || val!='';
	var typeDonnee = classes[classes.indexOf('controle')+2];
	
	var exptxt = /^[a-zA-Z\s]{2,}$/; // texte uniquement
	//var expmix = /^.{2,}$/; // texte et nombres (ex. adresses)
	var expnum = /^[0-9]{1,16}$/; // chiffres et nombres uniquement
	var expnum2 = /^[1-9]{1}|[0-9]{2,16}$/; // chiffres et nombres uniquement
	var exptel = /^[ /\()+.0-9]{10,20}$/; // No tél
	var expcp = /^[0-9]{5,5}$/; // code postal
	var expdate = /^[0-9]{2,2}\/[0-9]{2,2}\/[0-9]{4,4}$/; //date
	var expmail = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/; //email
	var expurl = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;//adresse url
	var exprew = /^[0-9a-z-]{2,50}$/;//rewriting
	
	if(oblig){
		if(typeDonnee!=''){
			if(typeDonnee == 'mix')
				var testdonnee = (val.length>2) ? true : false;
			else{
				if(typeDonnee == 'notnul')
					var testdonnee = val!='' && val!='0';
				else{
					var expcourrante = eval('exp'+typeDonnee);
					var testdonnee = expcourrante.test(val);
				}
			}
		}
		
		// console.log(elmt.attr('id'), 'exp' + typeDonnee + '.test("'+elmt.val()+'")');

		if(typeDonnee!='' && !testdonnee){
			// elmt.addClass('error');
			elmt.css('background-color', '#ef5048');
			return false;
		}
	}
	// elmt.removeClass('error');
	elmt.css('background-color', '#fcfcfe');
	return true;
}

function ajaxFileUpload(elmt, formjson, link){
	//starting setting some animation when the ajax starts and completes
	// $("#loading")
	// .ajaxStart(function(){
		// $(this).show();
	// })
	// .ajaxComplete(function(){
		// $(this).hide();
	// });
   
	/*
		prepareing ajax file upload
		url: the url of script file handling the uploaded files
					fileElementId: the file type of input element id and it will be the index of  $_FILES Array()
		dataType: it support json, xml
		secureuri:use secure protocol
		success: call back function when the ajax complete
		error: callback function when the ajax failed
	   
	*/
		
	// console.log('ajaxfile', elmt);
	
	if(elmt.attr('id')=='') elmt.attr('id', 'fileToUpload');
	
	$.ajaxFileUpload({
		url: 'enregistrement/enregistrement-image.html',
		secureuri: false,
		fileElementId: elmt.attr('id'),
		dataType: 'json',
		success: function (data, status){
			// try{console.log(data);}
			// catch(err){}
			if('error' in data){
				// elmt.parent().addClass('error');
				elmt.css('background-color', '#ef5048');
			}
			else{
				// elmt.parent().removeClass('error');
				elmt.css('background-color', '#fcfcfe');
				formjson[elmt.attr('name')] = data.name;
				ajaxSubmit(link, formjson);
				// console.log('uploadsuccess');
			}
		},
		error: function (data, status, e){
			// try{console.log(data, status, e);}
			// catch(err){alert(e);}
		}
	});
	
	return false;
}

function ajaxSubmit(link, formjson){
	$.post(link, formjson, function(data){
		// _gaq.push(['_setAccount', 'UA-11735890-1']);
		// _gaq.push(["_trackPageview", "/"+link ]);
	
		if(data.status == 'success'){
			// $('.popup_content').html(data.message);
			$('.popup_content').children('div:visible').html(data.message);
			//setTimeout("$('.popup').fadeOut('slow');", 4000);
		}
		else{
			$('.controle').parent().removeClass('error');
			data.errors.forEach(function(e){
				$('[name="'+e+'"]').parent().addClass('error');
			});
		}
	}, 'json');
	
	return false;
}


/**
 * Gestion des evenements
 */
$(function(){
	//envoi en ajax.
	$('.formsubmiting').live('click', function(){
		var ok = true;
		var formjson = {ajax : true};
		var formu = $(this).parents('form:first');
		// var link = $(this).attr('href');
		var link = formu.attr('action');
		var type = '';
		var valeur = '';
		var fileToUpload = Array();
				
		formu.find('.controle').each(function(){
			type = $(this).attr('type') ? $(this).attr('type') : '';
			
			
			switch(type){
				case 'checkbox':
					if($(this).is(':checked'))
						formjson[$(this).attr('name')] = 'on';
				break;
				
				case 'radio':
					if($(this).is(':checked'))
						formjson[$(this).attr('name')] = $(this).val();
				break;
				
				case 'file':
					if($(this).hasClass('oblig') && $(this).val()=='')
						$(this).css('background-color', '#ef5048');
					else
						$(this).css('background-color', '#fcfcfe');
					
					if($(this).val()!='')
						fileToUpload.push($(this));
				break;
				
				default :
					if(verifieForm($(this)))
						formjson[$(this).attr('name')] = $(this).val();
					else
						ok = false;
			}
		});
		
		if(ok){
			if(fileToUpload.length>0){
				ajaxFileUpload(fileToUpload[0], formjson, link);
				// fileToUpload.forEach(function(e){
					// ajaxFileUpload(e, formjson, link);
				// });
				// for(ii=0; ii<fileToUpload.length; ii++){
					// ajaxFileUpload(fileToUpload[ii], formjson, link);
				// }
			}
			else
				ajaxSubmit(link, formjson);
		}
		
		return false;
	});
	
	//envoi normal.
	$('.formsubmiting2').live('click', function(){
		var nompage = $(this).attr('id');
		var formu = $(this).parents('form:first');
		// var link = $(this).attr('href');
		var link = formu.attr('action');
		var ok = true;
		
		formu.find('.controle').each(function(){
			if(verifieForm($(this)) == false){
				if(ok == true){
					ok = false;
					$(this).focus();
				}
			}
		});
		
		if(ok == true){
			try{
				if(formu.contents().find('input[name=page]').length>0)
					formu.contents().find('input[name=page]').val(nompage);
			}
			catch(err){}
			
			try{
				if(formu.find('input[name=page]').length>0)
					formu.find('input[name=page]').val(nompage);
			}
			catch(err){}
			
			// formu.attr('action', link);
			formu.removeAttr('target');

			formu.submit();
		}

		return false;
	});
});
