/**
 * 	
 *  Copyright(c) 2009: Mantecao / Grupo Alion C.A.
 *  url: www.mantecao.com.ve/licensing
 *  email: licensing@mantecao.com.ve   
 *  author: Alexander Cabezas / Carlos Mantilla 
 * 
 */

if (typeof(core) == "undefined") { core = {}; }

core.contact = {};

/**
 * description: Función que inicializa el formulario para la envio de correo de contacto 
 */

core.contact = function(form){
	$.ajax({
		url: "email/template-contacto.html",
		success: function(data){
			data = data.replace(/\[\[/g,"{{");
			data = data.replace(/\]\]/g,"}}");
			$("#body").val(data);
		}
	});
	
	$('#' + form).ajaxForm({ beforeSubmit: core.contact.validate});
	core.contact.dom = form;
}

/**
 * @requires core.feedback
 * description: Función que valida el formulario de contactos e invoca a servicio que envia correo
 */
core.contact.validate = function(formData, jqForm, options){
	var email_re = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/); 
	var invalid = false;
	var vars = {};
	var params = {};
	var now = new Date();
    var iyear = now.getFullYear();
    var imonth = now.getMonth() + 1;
    var iday = now.getDate();
    var ihours = now.getHours();
    var iminutes = now.getMinutes();
    var iseconds = now.getSeconds();
	var errors = {};
	
	// begin_: leading zeropad single-digit numbers
    imonth = (imonth < 10)? "0" + imonth : imonth;
    iday = (iday < 10)? "0" + iday : iday;
	ihours = (ihours < 10)? "0" + ihours : ihours;
	iminutes = (iminutes < 10)? "0" + iminutes : iminutes;
	iseconds = (iseconds < 10)? "0" + iseconds : iseconds;
	
	//$("#error_messages_contactos").empty();
	//$(".message_container").attr("style","display:none;");
	vars['entry_now'] = iday + "/" + imonth + "/" + iyear +  " " + ihours + ":" + iminutes + ":" + iseconds;
	for (var i = 0; i < formData.length; i++) {
		params[ formData[i].name ] = formData[i].value;
		switch (formData[i].name) {
			case 'contact_name':{
				if (!formData[i].value){
					errors[formData[i].name] = {field:app.labels.FULLNAME,msg:app.messages.CANNOTBEEMPTY};
					//$("#error_messages_contactos").append('<a href=javascript:setFocus("contact_name")>' + app.labels.FULLNAME + '</a>: ' + app.messages.CANNOTBEEMPTY +  '<br/>');
					invalid = true;
				}else{
					vars['contact_name'] = formData[i].value;
				}
				break;
			}
			case 'recipient':{
				if (!formData[i].value || !email_re.test(formData[i].value)) {
					if (!formData[i].value) 
						//$("#error_messages_contactos").append('<a href=javascript:setFocus("recipient")>' + app.labels.EMAIL + '</a>: ' + app.messages.CANNOTBEEMPTY +  '<br/>');
						errors[formData[i].name] = {field:app.labels.EMAIL,msg:app.messages.CANNOTBEEMPTY};
					else 
					//$("#error_messages_contactos").append('<a href=javascript:setFocus("recipient")>' + app.labels.EMAIL  + '</a>: '  + app.messages.INVALIDFORMAT + '<br/>');
					//$("#label_contact_email_address").addClass("error");
					//$("#recipient").addClass("error");
					errors[formData[i].name] = {field:app.labels.EMAIL,msg:app.messages.INVALIDFORMAT};
					invalid = true;
				}
				else {
					//$("#label_contact_email_address").removeClass("error");
					$("#recipient").removeClass("error");
					vars['contact_email_address'] = formData[i].value;
				}
				break;
			}
			case 'message':{
				if(!formData[i].value){
					//$("#error_messages_contactos").append('<a href=javascript:setFocus("message")>' + app.labels.MESSAGE + '</a>: ' + app.messages.CANNOTBEEMPTY + '<br/>');
					//$("#label_contact_message").addClass("error");
					//$("#message").addClass("error");
					errors[formData[i].name] = {field:app.labels.MESSAGE,msg:app.messages.CANNOTBEEMPTY};
					invalid = true;
				}
				else{
					//$("#label_contact_message").removeClass("error");
					//$("#message").removeClass("error");
					vars['contact_message'] = htmlEncode(formData[i].value,true,4);
				}
				break;
			}
			case 'email':{
				params[formData[i].name] = config.env[env]['email'];
				formData[i].value = config.env[env]['email'];
				break;
			}
			case 'subject':{
				params[ formData[i].name ] = config.variants.subject_emailContact + " - " + $('input[id=contact_name]','#' + jqForm.context.id).fieldValue()[0];
				formData[i].value = config.variants.subject_emailContact + " - " + $('input[id=contact_name]','#' + jqForm.context.id).fieldValue()[0];
				break;
			}
			case 'contact_company':{
				vars['contact_company'] = formData[i].value;
				break;
			}
			case 'contact_phone':{
				vars['contact_phone'] = formData[i].value;
				break;
			}
			case 'body-vars':{
				formData[i].value = $.toJSON(vars);
				params[ formData[i].name ] = $.toJSON(vars);
				break;
			}
		}
	}
	// eliminar elemento div de errores
	core.contact.feedback.clear();
	
	// verificacion si hay error, muestra feedback de errores
	if (!invalid) {
		// desactivar el boton de enviar
		$(":submit", "#" + core.contact.dom).attr('disabled', 'disabled');
		core.feedback({
			action: 'wait'
		});
		var extra_params = {service: 'mailsdeliver',url: ".json",verb: 'POST'};
		
		$.post(config.api(), config.default_params(params, extra_params), core.contact.onComplete, "json");
	}else core.contact.feedback(errors);
	
	return false;	
}

/**
 * @require core.feedback
 * description: Función que se ejecuta como resultado del servicio de envio de correo de contacto
 */
core.contact.onComplete = function(data){
	var r = data.response; 
	
	$(":submit","#" + core.contact.dom).removeAttr('disabled');
	if ( r.success ){
		core.feedback({action:'update',icon:'clean-icon', msg:'Gracias por su Mensaje!', timeout:5});
		$("#" + core.contact.dom).resetForm();
	}else{	
		var msg = core.account.getError(r,core.contact.dom);	
		core.feedback({action:'error',msg:msg});
	}	
}

/**
 * description: Función muestra los errores de validación del formulario de contacto
 */
core.contact.feedback = function(errors){
	var errors = errors || {};
	var div_container = $('<div class="message_container" id="error_contactos"></div>');
	var div_msg = $('<div class="error_content messages"></div>');
	div_msg.append('<div class="error_header" id="error_header_contactos">Por favor corregir lo siguiente antes de continuar:</div>');
	var div_e = $('<div class="error_messages" id="error_messages_contactos">');
	
	$.each(errors, function(key, value){
		div_e.append('<a href=javascript:core.utils.setfocus("' + key + '")>' + value.field + '</a>: ' + value.msg + '<br/>');
	});
	div_msg.append(div_e);
	div_container.append(div_msg);
	div_container.insertBefore("#" + core.contact.dom);
	//$("#" + core.contact.dom).parent().append(div_container);
}

core.contact.feedback.clear = function(){
	$('.message_container').remove();
}
