var rules_calculadora_sueldo = {
	'#btn_calcular_sueldo_neto': function(e){
		e.onclick = function(){
			function calcularSueldoNeto(){
				var bruto_anual        = document.getElementById("bruto_anual");
				var n_pagas            = document.getElementById("n_pagas");
				var tipo_contrato      = document.getElementById("tipo_contrato");
				var situacion_laboral  = document.getElementById("situacion_laboral");
				var n_hijos            = document.getElementById("n_hijos");
				var tipo_contribuyente = document.getElementById("tipo_contribuyente");
				
				var error = false;
				var msg   = "<dt>Error en los siguientes campos:</dt>";
				if( isNaN(bruto_anual.value) || bruto_anual.value <= 0 ){
					bruto_anual.value = "";
					bruto_anual.focus();
					msg = msg+"<dd><strong>Bruto anual</strong> El valor no es válido.</dd>";
					error = true;
				}
				if( isNaN(n_pagas.value) || n_pagas.value <= 0 ){
					n_pagas.value = "";
					n_pagas.focus();
					msg = msg+"<dd><strong>Número de pagas</strong> El valor no es válido.</dd>";
					error = true;
				}
				if( isNaN(n_hijos.value) || n_hijos.value < 0 ){
					n_hijos.value = "";
					n_hijos.focus();
					msg = msg+"<dd><strong>Número de hijos</strong> El valor no es válido.</dd>";
					error = true;
				}
				if(!error){
					document.getElementById("msg_calculadora_sueldo_neto").innerHTML = "";
					document.getElementById("ctn_msg_calculadora_sueldo_neto").style.display = "none";
				}else{
					document.getElementById("msg_calculadora_sueldo_neto").innerHTML = msg;
					document.getElementById("ctn_msg_calculadora_sueldo_neto").style.display = "block";
					document.getElementById("sueldo_neto_mensual").value = "";
					document.getElementById("paga_extra_neta").value = "";
					document.getElementById("irpf").value = "";
					return false;
				}
		
				var limite   = null;
				var limite_a = null;
				var limite_b = null;
				var limite_c = null;
				// LIMITE A
				if((n_hijos.value == 0) && (tipo_contribuyente.value == 'A')){
					limite_a = "";
				}else{
					if((n_hijos.value == 1) && (tipo_contribuyente.value == 'A')){
						limite_a = 10750;
					}else{
						if((n_hijos.value > 1) && (tipo_contribuyente.value == 'A')){
							limite_a = 12030;
						}else{
							limite_a = "";
						}
					}
				}
				// LIMITE B
				if((n_hijos.value == 0) && (tipo_contribuyente.value == 'B')){
					limite_b = 10600;
				}else{
					if((n_hijos.value == 1) && (tipo_contribuyente.value == 'B')){
						limite_b = 11825;
					}else{
						if((n_hijos.value > 1) && (tipo_contribuyente.value == 'B')){
							limite_b = 13135;
						}else{
							limite_b = "";
						}
					}
				}
				// LIMITE C
				if((n_hijos.value == 0) && (tipo_contribuyente.value == 'C')){
					limite_c = 7515;
				}else{
					if ((n_hijos.value == 1) && (tipo_contribuyente.value == 'C')){
						limite_c = 8215;
					}else{
						if((n_hijos.value > 1) && (tipo_contribuyente.value == 'C')){
							limite_c = 8965;
						}else{
							limite_c = "";
						}
					}
				}
				limite = limite_a + limite_b + limite_c;

				var ss_mensual = null;
				switch(tipo_contrato.value){
					// Otros
					case "1":
						ss_mensual = (bruto_anual.value) * (0.064/12);
					break;
					// Indefinido
					case "2":
						ss_mensual = (bruto_anual.value) * (0.0635/12);
					break;
				}

				var e12 = null;
				if(n_hijos.value > 2){
					e12 = 600;
				}else{
					e12 = 0;
				}

				var e11 = null;
				switch(situacion_laboral.value){
					// Activo
					case "1":
						e11 = 0;
					break;
					// Parado
					case "2":
						e11 = 1200;
					break;
					// Pensionista
					case "3":
						e11 = 600;
					break;
				}

				var e10 = null;
				if (bruto_anual.value <= 8200){
					e10 = 3500;
				}else{
					if(bruto_anual.value <= 13000){ 
						e10 = 3500 - (0.2291 * (bruto_anual.value - 8200));
					}else{
						e10 = 2400;
					}
				}
				
				var e9 = null;
				if ((n_hijos.value == "") || (n_hijos.value == 0)){
					e9 = 3400;
				}else{
					if (n_hijos.value == 1){
						e9 = 4800;
					}else{
						if (n_hijos.value == 2){
							e9 = 4900;
						}else{
							if (n_hijos.value == 3){
								e9 = 5600;
							}else{
								if (n_hijos.value > 3){
									e9 = 5700;
								}
							}
						}
					}
				}
				
				var e13 = bruto_anual.value - e12 - e11 - e10 - e9;
				var cuota_retencion = null;
				if (e13 < 4161.6){
					cuota_retencion = 0.15 * e13;
				}else{
					if ((e13 < 14357.52) && (e13 >= 4161.6)){
						cuota_retencion = 624.24 + (e13 - 4161.6) * 0.24;
					}else{
						if ((e13 < 26842.32) && (e13 >= 14357.52)){
							cuota_retencion = 3071.26 + (e13 - 14357.52) * 0.28;
						}else{
							if ((e13 < 46818) && (e13 >= 26842.32)){
								cuota_retencion = 6567 + (e13 - 26842.32) * 0.37;
							}else{
								cuota_retencion = 13958 + (e13 - 46818) * 0.45;
							}
						}
					}
				}
				var tipo_retencion = cuota_retencion / bruto_anual.value * 100;

				var irpf = null;
				if (limite == ""){
					irpf = 0;
				}else{
					if(bruto_anual.value< limite_a){
						irpf = 0;
					}else{
						irpf = Math.round(tipo_retencion,0);
					}
				}
				
				var extra = null;
				if (n_pagas.value > 12){
					extra = (1 - irpf/100) * bruto_anual.value / n_pagas.value;
				}else{
					extra = "";
				}

				var neto = (1 - irpf/100) * bruto_anual.value / n_pagas.value - ss_mensual;

				document.getElementById("sueldo_neto_mensual").value = Math.round(neto*100)/100;
				document.getElementById("paga_extra_neta").value = Math.round(extra*100)/100;
				document.getElementById("irpf").value = Math.round(irpf*100)/100;
			}
			calcularSueldoNeto();
			return false;
		}
	}
}
Behaviour.register(rules_calculadora_sueldo);
