//-------------------------------------------------------------------------------------------------

var obj_bruto;
var obj_pagas;
var obj_hijos;
var obj_civil;
var obj_neta;
var obj_extra;

//-------------------------------------------------------------------------------------------------

function isNumber(str)
{
	var numreg=/(^\d+$)|(^\d+\.\d+$)/;
	return numreg.test(str); 
}

//-------------------------------------------------------------------------------------------------

function readField(campo,cambio_comas)
{
	var ind1=0;
	valor=campo.value;
	valor2=valor.toString();
	if (valor2=="") 
		return "0"; 
	ind1=valor2.indexOf(".");
	if (ind1!=-1)
	{
		alert ("Introduce Cantidad sin puntos");
		valor2="0";
	}
	if (!isNumber(valor2)) 
	{ 
		alert("El valor introducido debe ser un número entero positivo"); 
		valor2="0"; 
	}
	return valor2;
}

//-------------------------------------------------------------------------------------------------

function writeField(valor)
{
	if (valor==0) 
		return ""; 
	valor2=valor.toString();
	valor2=valor2.replace(/\./g,",");
	if (valor2.substr(0,1)==",") 
		valor2="0"+valor2; 
	pos_coma=valor2.indexOf(",");
	if (pos_coma==-1) 
		pos_coma=valor2.length; 
	while (pos_coma > -1 && pos_coma > 3)
	{
		valor2=valor2.substr(0,pos_coma-3)+"."+valor2.substr(pos_coma-3);
		pos_coma=pos_coma-3;
	}
	valor3=""+valor2;
	valor3=valor3.replace(/\,/g,".");
	if (parseFloat(valor3)==0.0) 
		valor2=""; 
	return valor2.valueOf();
}

//-------------------------------------------------------------------------------------------------

function roundNumber(number,numDec)
{
	var roundNum=number*(Math.pow(10,numDec));
	roundNum=Math.round(roundNum);
	var returnNum=roundNum/(Math.pow(10,numDec));
	return returnNum;
}

//-------------------------------------------------------------------------------------------------

var bruto=0;
var neta=0;
var pagas=0;
var hijos=0;
var civil=0;
var extra=0;
var ss=0;
var baseretencion=0;
var x=0;
var cuotaretencion=0;
var irpf=0;
var netas=1;
var retcivil=0;
var retencionhijos=0;

//-------------------------------------------------------------------------------------------------

function iniciar()
{
	obj_bruto=document.formu.campo3;
	obj_pagas=document.formu.campo1;
	obj_hijos=document.formu.campo;
	obj_civil=document.formu.select;
	obj_neta=document.formu.campo2;
	obj_extra=document.formu.campo4;
	actualizar("");
	calcular();
}

//-------------------------------------------------------------------------------------------------

function calcular(cual)
{
	if (cual=="bruto") 
		netas=0; 
	else if (cual=="pagas") 
		netas=0
	else if (cual=="hijos") 
		netas=0; 
	else if (cual=="civil") 
		netas=0; 
	if (bruto!=0 && pagas!=0 && netas==0 && bruto >= 5950)
	{
		ss=bruto*0.064;
		if (ss > 1882)
			ss=1882;
		if ( bruto <= 8113.66)
			x=3005.06;
		else if ( bruto > 8113.66 && bruto <= 12020.24)
			x=3005.06 - (bruto - 8113.67);
		else
			x=2253.80;
		if ( obj_civil.selectedIndex==0 && hijos > 0)
			retcivil=5409.11;
		else
			retcivil=3305.57;
		baseretencion=bruto-ss-x-retcivil;
		if ( baseretencion < 3606.07)
			cuotaretencion= baseretencion * 0.18;
		else if ( baseretencion < 12621.25)
			cuotaretencion= 649.09 + (baseretencion - 3606.07) * 0.24;
		else if ( baseretencion < 24641.50)
			cuotaretencion = 2812.74 + (baseretencion - 12621.25) * 0.283;
		else if ( baseretencion < 39666.80)
			cuotaretencion = 6214.47 + (baseretencion - 24641.50) * 0.372;
		else if ( baseretencion < 66111.33)
			cuotaretencion = 11803.88 + (baseretencion - 39666.80) * 0.45;
		else
			cuotaretencion = 23703.92 + (baseretencion - 66111.33) * 0.48;
		var irpf1 = roundNumber((cuotaretencion * 100 / bruto), 2);
		var retenciontotal = (bruto*irpf1) / 100;
		if (hijos >0)
		{
			if (hijos <= 2)
				retencionhijos = 1202.02 * hijos;
			else
				retencionhijos = 1803.04 * hijos;
			if (retencionhijos > retenciontotal)
				cuotaretencion = cuotaretencion - retenciontotal;
			else
				cuotaretencion = cuotaretencion - retencionhijos;
		}
		irpf=roundNumber((cuotaretencion*100/bruto),2);
		neta=roundNumber (((bruto/pagas)-(bruto/pagas*irpf/100)-(ss/12)),0);
		obj_neta.value=writeField(neta);
		if (pagas >12)
		{
			extra=roundNumber (((bruto/pagas)-(bruto/pagas*irpf/100)),0);
			obj_extra.value=writeField(extra);
		}
		else if (pagas <12)
		{
			alert ("El numero de pagas debe ser como mínimo de 12 mensualidades ");
			pagas=0;
			obj_pagas.value=pagas;
			extra=0;
			obj_extra.value=extra;
			neta=0;
			obj_neta.value=neta;
		}
		else if (pagas==12)
		{
			extra=0;
			obj_extra.value=extra;
		}
	}
	else if (bruto < 5950 && bruto!=0)
	{
		alert ("El sueldo mínimo interprofesional es 5.950 €. Introduce un bruto superior");
		bruto=0;
		obj_bruto.value=bruto;
	}
	else if (cual==" ")
		alert("Debes introducir al menos el sueldo bruto y el número de pagas.");
}

//-------------------------------------------------------------------------------------------------

function actualizar(variable)
{
	switch(variable)
	{
		case "bruto": 
			bruto=readField(obj_bruto); 
			break;
		case "pagas": 
			pagas=readField(obj_pagas); 
			break;
		case "hijos": 
			hijos=readField(obj_hijos); 
			break;
		case "civil": 
			civil=readField(obj_civil); 
			break;
	}
	obj_bruto.value=bruto;
	obj_pagas.value=pagas;
	obj_hijos.value=hijos;
	obj_neta.value=writeField(neta);
	obj_extra.value=writeField(extra);
}

//-------------------------------------------------------------------------------------------------

function procesar(ev)
{
  if (navigator.appName.indexOf("Netscape") != -1)
  {
	if ( ev.which == 13 )
	{
      if (null != document.formu)
		if (null != document.formu.campo2)
		{
	      document.formu.campo2.focus();
		  return false;
        }
	}
	return true;
  }
  else
  {
	ev = window.event;
	if ( ev.keyCode == 13 )
	{
	  if (null != document.formu)
		if (null != document.formu.campo2)
		{
	      document.formu.campo2.focus();
		  return false;
		  }
	}	
	return true;
  }
}

//-------------------------------------------------------------------------------------------------
