function validate(obj, aMandatory, lang, mce_on){
	//prompt(lang);
	var aAllFieldsError=new Array();
	first_error_field='';
	if (mce_on == '1') { 
		tinyMCE.triggerSave(false,true);
	}
	var Error=false;
	var tmpArr=new Array();
	var specialTreatment=false;
	var specialField=false;
	var bEmail;
	for(z=0;z<aMandatory.length;z++){
		bEmail=false;
		//prompt(aMandatory[z]);
		tmpArr=aMandatory[z].split('|');//Special fields process
		specialTreatment=false;
		specialField=false;
		if(tmpArr.length>1){
			if(tmpArr[1]=='img'){
				aMandatory[z] = tmpArr[0];
				specialTreatment='img';
				eval('specialField=$("#'+aMandatory[z]+'_old");');
			}
		}
		
		eval('oTmpField=$("#'+aMandatory[z]+'");');
		var bMissingData=false;
		
		//for checkboxes
		var bCheckbox=false;
		if (oTmpField.length == 0) {
			oTmpField = $("input[name='"+aMandatory[z]+"']");
			if (oTmpField.attr('type') == 'checkbox') {
				bCheckbox = true;
			}
		}
		
		if (oTmpField.length>0 || bCheckbox) {
			if (bCheckbox) {
				var oneSelected = false;
				oTmpField.each(function() {
					if ($(this).attr('checked')) {
						oneSelected = true;
					}
				});
				if (!oneSelected) {
					bMissingData = true;
				}
			} else if(oTmpField.attr('type')=='select-one'){
				if (oTmpField.attr('size')>0) {//2_table_rel
					if (oTmpField.find('option').size()==0) {
						bMissingData=true;
					}
				} else if(oTmpField.find(':selected').val()==0){
					bMissingData=true;
				}
			}else if(oTmpField.attr('type')==undefined){
				//Radiobutton?
				if(oTmpField.length){
					var miss=true;
					for(var i=0; i<oTmpField.length; i++){
						if(oTmpField[i].checked) miss=false;
					}
					bMissingData=miss;
				}
				
			}else{

				if(specialTreatment == "img"){
					
					if(!oTmpField.val() && !specialField.val())
						bMissingData=true;
				}
				else if(!oTmpField.val()){bMissingData=true;}
				else if (oTmpField.attr('email')=='1' && !isValidEmailAddress(oTmpField.val())) {bEmail=true; bMissingData=true;}
			}
			if (bMissingData){
				if(!$('#'+aMandatory[z]+'_Error').length){
					oTxt=$('#'+aMandatory[z]+'_txt');
					oTxt.append('<span class="error-field" id="'+aMandatory[z]+'_Error"><br/>'+getMessageFieldError(lang, bEmail)+'</span>');
				}
				aAllFieldsError.push(aMandatory[z]);
				Error=true;
			}else{
				if($('#'+aMandatory[z]+'_Error').length){
					$('#'+aMandatory[z]+'_Error').remove();
				}
			}
		} 
		if (bMissingData && !first_error_field) {
			first_error_field=aMandatory[z];
		}
	}

	if (Error){
		alert(getMessageAllFieldsError(lang));
		return false;
	}else{
		return true;
	}
}

function getMessageAllFieldsError(lang) {
	if (lang=='es') {
		return 'Por favor, complete todos los campos obligatorios.';
	} else {
		return 'Please, complete all required fields.'
	}
	
}

function getMessageFieldError(lang, email) {
	if (lang=='es') {
		if (email) {
			return 'El email ingresado no es v&aacute;lido.';
		} else {
			return 'Por favor, complete este campo.';
		}
	} else {
		if (email) {
			return 'The entered email is not valid.';
		} else {
			return 'Please complete this field.'
		}
	}
	
}


function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(emailAddress);
}
