$(document).ready(function() {	
	$('#nExtraFee').blur(function(){
		var val= Number($(this).val().replace(/\D+/g,''));
		if(val>0){
			var extCuot='<legend>Cuotas Extras<\/legend>';
			var ct=ct2=val;
			while(val--){
				extCuot=extCuot + '<div><label for="nExtraFee'+(ct-val)+'" class="rowLabel">Cuota extra '+(ct-val)+'<\/label>$ <input type="text" name="nExtraFee'+(ct-val)+'" id="nExtraFee'+(ct-val)+'" class="normalText" size="8" maxlength="8"\/> &nbsp; <label for="initDate'+(ct-val)+'">Fecha Descuento<\/label> &nbsp; <input type="text" name="initDate'+(ct-val)+'" id="initDate'+(ct-val)+'" class="normalText" size="10" maxlength="10" readonly="readonly"\/><\/div>';
			}
			$("#extraFieldset").show().html(extCuot);
			while(ct--){
				Calendar.setup({inputField:"initDate"+(ct2-ct),ifFormat:"%Y-%m-%d",singleClick:true});
			}
		}else{
			$("#extraFieldset").hide().html('');
		}
	});
});
function creditCalc(){
	var value = Number($("#value").val().replace(/\D+/g,''));
	var rate = parseFloat($("#rate").val());
	var nFee = Number($("#nFee").val().replace(/\D+/g,''));
	var initDate = dateToDays($("#initDate").val());
	var frequency = Number($("#frequency").val().replace(/\D+/g,''));
	var creditMode = Number($("#creditMode").val().replace(/\D+/g,''));
	var nExtraFee = Number($("#nExtraFee").val().replace(/\D+/g,''));
	if(!(value && value > 10000)){
		alert ('Valor Solicitado debe ser mayor a $10000');
		return false;
	}
	if(!(nFee && nFee >0)){
		alert ('# Cuotas debe ser mayor o igual a 1');
		return false;
	}
	if(!(rate && initDate && frequency && creditMode)){
		return false;
	}
	var dailyRate = (rate*12) / 36500;
	var ovalue= value;
	rate = rate / (frequency*100);
	if(nExtraFee && nExtraFee > 0){
		var nex=nExtraFee
		var extraFee= new Array;
		var ve,fe,ff,extot =0;
		ff = dateToDays(nextDate(daysToDate(initDate),(nFee-1),frequency));
		while(nex--){
			if(!$("#nExtraFee"+(nExtraFee-nex)).length){
				continue;
			}
			ve=Number($("#nExtraFee"+(nExtraFee-nex)).val().replace(/\D+/g,''));
			fe=dateToDays($("#initDate"+(nExtraFee-nex)).val());
			if(!(ve && ve>100)){
				alert('La Cuota Extra '+(nExtraFee-nex)+' debe ser mayor a $100');
				continue;
			}
			if(!(fe && fe > initDate)){
				alert('La Fecha de descuento para la Cuota Extra '+(nExtraFee-nex)+' debe ser mayor a la fecha Inicio Descuentos');
				continue;
			}
			if(!(fe && fe < ff)){
				alert('La Fecha de descuento para la Cuota Extra '+(nExtraFee-nex)+' debe ser menor a '+daysToDate(ff));
				return false;
			}
			extraFee[fe]=ve;
			extot+=ve / (1 + (dailyRate*(fe-initDate)));
		}
		
		if(extot>=value){
			alert('La suma del Valor Presente de las Cuotas Extras no puede ser mayor o igual al Valor Solicitado');
			return false;
		}
		value -=extot;
		
	}
	var rnf=nFee;
	var cres='';
	var fecha,fd1,fd2,cuota,deuda,interes,capital = 0;
	if(creditMode==2){
		cuota = (value*rate)/(1-Math.pow(1+rate,(-nFee)));
	}else{
		deuda = ovalue;
	}
	while(rnf--){
		if(creditMode==2){
			deuda = (cuota * (1-Math.pow((1+rate),-rnf)))/rate;
			interes = deuda * rate;
			capital = cuota - interes;
		}else{
			capital = value/nFee;
			deuda -= capital;
			interes = deuda * rate;
			cuota = capital + interes;
		}
		fecha = nextDate(daysToDate(initDate),(nFee-rnf),frequency);
		cres=cres+'<tr><td class="center">'+(nFee-rnf)+'<\/td><td class="center">'+fecha+'<\/td><td class="right">'+addCommas(Math.round(capital))+'<\/td><td class="right">'+addCommas(Math.round(interes))+'<\/td><td class="right">'+addCommas(Math.round(cuota))+'<\/td><td class="right">'+addCommas(Math.round(deuda))+'<\/td><\/tr>';
		if(extraFee!=undefined){
			fd1 = dateToDays(nextDate(daysToDate(initDate),(nFee-rnf),frequency));
			fd2 = dateToDays(nextDate(daysToDate(initDate),(nFee+1-rnf),frequency));
			for(x in extraFee){
				if(!(x >=fd1 && x <fd2)){
					continue;
				}
				deuda -=extraFee[x];
				cres=cres+'<tr><td class="center">Extra<\/td><td class="center">'+daysToDate(x)+'<\/td><td class="right">'+addCommas(Math.round(extraFee[x]))+'<\/td><td>&nbsp;<\/td><td class="right">'+addCommas(Math.round(extraFee[x]))+'<\/td><td class="right">'+addCommas(Math.round(deuda))+'<\/td><\/tr>';
			}
		}
	}
	$("#creditResults tbody").html(cres);
	$("#creditResults").show().css('width','100%');
}
function dateToDays(dateVal){
	if(dateVal.length != 10){
		return false;
	}
	var y=Number(dateVal.slice(0,4));
	var m=dateVal.slice(5,7)-1;
	var d=dateVal.slice(8,10)*1;
	var dt = new Date();
	dt.setUTCFullYear(y,m,d);
	return Math.ceil(dt.getTime()/(3600000*24));
}
function daysToDate(days){
	if(!(days && days > 0)){
		return false;
	}
	var dt = new Date();
	dt.setTime(days*3600000*24);
	var m = dt.getMonth()+1;
	var day = dt.getDate();
	if(m <=9){
		m = '0'+m;
	}
	if(day<=9){
		day = '0'+day;
	}
	return dt.getFullYear()+'-'+m+'-'+day;
}
function addCommas(nStr){
	nStr += '';
	var x = nStr.split('.');
	var x1 = x[0];
	var x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}
function nextDate(d,np,f){
	d=d.split('-');
	var y,m,da,tm,dm;
	if(f==1){
		tm=Number(d[1])+np-1;
		if(tm>12){
			y=Number(d[0])+Math.floor((tm-1)/12);
			m=tm-(Math.floor((tm-1)/12)*12);
		}else{
			y=d[0];
			m=tm;
		}
		da=Number(d[2]);
		if(da>28 && m==2){
			da=28;
		}
		if(da>30 && (m==4 || m==6 || m==9 || m==11)){
			da=30;
		}
	}else{
		da=Number(d[2]);
		m=Number(d[1]);
		y=Number(d[0]);
		if(!(np%2)){
			da += 15;
			if(da>28 && m==2){
				da -= 28;
				m++;
			}
			if(da>30 && (m==4 || m==6 || m==9 || m==11)){
				da -= 30;
				m++;
			}
			if(da > 31 && (m==1 || m==3|| m==5 || m==7 || m==8 || m==10 || m==12)){
				da -= 31;
				m++;
			}
			if(m>12){
				m=1;
				y++;
			}
		}
		tm=Math.ceil(m+(np/2)-1);
		if(tm>12){
			y=Number(d[0])+Math.floor((tm-1)/12);
			m=tm-(Math.floor((tm-1)/12)*12);
		}else{
			y=d[0];
			m=tm;
		}
		if(da>28 && m==2){
			da = 28;
		}
		if(da>30 && (m==4 || m==6 || m==9 || m==11)){
			da = 30;
		}
	}
	if(m <=9){
		m = '0'+m;
	}
	if(da<=9){
		da = '0'+da;
	}
	
	return y+'-'+m+'-'+da;
}