jQuery.fn.extend({
/*Obtener la posicion top y lef de un objeto*/
        exists:function(){ return $(this).size()>0},
        del:function(){return $(this).empty().remove()},
        selText: function() {
                var texto = "";
                var obj=document.getElementById(this.attr("id"))
               if (this.createTextRange) {
                        var r = document.selection.createRange();
                        texto = r.text;
                        r.text = texto
                } else if (obj.setSelectionRange) {
                        var ini = obj.selectionStart;
                        var end = obj.selectionEnd;
                }
                obj.select()
        }
});
Number.prototype.round=function round(n){n=n || 2;return Math.round(this * Math.pow(10,n) ) / Math.pow(10,n) ;}
var Cookie = {
	set: function (name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	},
	get:function(name) {
		var start = document.cookie.indexOf( name + "=" );
		var len = start + name.length + 1;
		if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) return null;
		if ( start == -1 ) return null;
		var end = document.cookie.indexOf( ";", len );
		if ( end == -1 ) end = document.cookie.length;
		return unescape( document.cookie.substring( len,end) );
	},
	del:function(name) {if ( Cookie.get(name) ) document.cookie = name + "=;expires=Thu, 01-Jan-1970 00:00:01 GMT";}
}



var BrokerSimulator={
	
        dataServer:{
            nAcciones:10,
            vCompra:50,
            vVenta:60
        },
        isClicked:false,
        timeInt:null,
        slider1Pos:0,
        slider2Pos:0,
        slider3Pos:0,
        moneda:"e",
	
	calculos:function(){
		
		/*Obtengo Valores del formulario*/
		var nacciones=($.trim($('#nacciones').val())=="")? 0:$('#nacciones').val();
		var vcompra=($.trim($('#compra').val())=="")? 0:(parseFloat($('#compra').val()).round());
		var vventa=($.trim($('#venta').val())=="")? 0:(parseFloat($('#venta').val()).round());
                
                //Desabilitar sliders en el caso de que esten fuera del rango
                if(nacciones>150){$('#slider1').slider("disable")
                }else{ $('#slider1').slider("enable")}
                if(vcompra>150){$('#slider2').slider("disable")
                }else{ $('#slider2').slider("enable")}
                if(vventa>150){$('#slider3').slider("disable")
                }else{ $('#slider3').slider("enable")}
                
		/*Total compra y total venta*/
		var totalCompra=vcompra*nacciones
		var totalVenta=vventa*nacciones
		
		/*Comisiones*/
		var cComisionFijoBanco=($.trim($('#cfijoEnt').val())=="")? 0:parseFloat($("#cfijoEnt").val()).round()
		var cComisionPorcentajeBanco=($.trim($('#cporcentajeEnt').val())=="")? 0:parseFloat($("#cporcentajeEnt").val()).round()
                var cComisionLiquidacion=BrokerSimulator.gastosLiquidacionBolsa(totalCompra);
    
		
                var vComisionFijoBanco=($.trim($('#vfijoEnt').val())=="")? 0:parseFloat($("#vfijoEnt").val()).round()
		var vComisionPorcentajeBanco=($.trim($('#vporcentajeEnt').val())=="")? 0:parseFloat($("#vporcentajeEnt").val()).round()
		var vComisionLiquidacion=BrokerSimulator.gastosLiquidacionBolsa(totalVenta);
                 
		var totalComisionCompraBanco=cComisionFijoBanco + totalCompra*(cComisionPorcentajeBanco/100) 
		var totalComisionVentaBanco=vComisionFijoBanco + totalVenta*(vComisionPorcentajeBanco/100) 
		
		var comisionCompraBolsa=BrokerSimulator.comisionBolsa(totalCompra,"c")+cComisionLiquidacion
		var comisionVentaBolsa=BrokerSimulator.comisionBolsa(totalVenta,"v")+vComisionLiquidacion
		
		var totalComisionCompra=(totalComisionCompraBanco + comisionCompraBolsa).round()
		var totalComisionVenta=(totalComisionVentaBanco + comisionVentaBolsa).round()
		var totalComisiones=totalComisionCompra+totalComisionVenta
		
                /*Total compra y total + comisiones*/
		var totalCompraFinal=totalCompra+totalComisionCompra
		var totalVentaFinal=totalVenta-totalComisionVenta
                
		/*Beneficio neto y fiscalidad*/
		var fiscalidadPorcentaje=($.trim($('#xfijoEnt').val())=="")? 0:parseFloat($("#xfijoEnt").val()).round()
		var beneficioBruto=(vventa*nacciones-vcompra*nacciones).round()
		var beneficioNeto=(beneficioBruto-totalComisiones).round()
		var fiscalidad=0//(beneficioNeto>0)? (beneficioNeto*(fiscalidadPorcentaje/100)).round():0;
		var beneficioNetoMenosFiscalidad=(beneficioNeto-fiscalidad).round()
		
		
		/*Se muestran valores en el resultado*/
		$("#neto").html(Math.abs(beneficioNetoMenosFiscalidad)+" &euro;")
		if(beneficioNetoMenosFiscalidad>=0)$("#moreless").html("<span style='color:green'>+</span>")
		else $("#moreless").html("<span style='color:red'>-</span>")
		$("#beneficioBruto").html((beneficioBruto.round()) || "0" )
		$("#comisiones").html(totalComisiones.round() )
		$("#fiscalidad").html(fiscalidad.round() || "0")
                
                
                /*Se muestran en la tabla resumen*/
                $("#desCompraTotalInit").html(totalCompra.round() +" €")
                $("#desComisionC").html(totalComisionCompra.round() +" €")
                $("#desCompraTotalFinal").html(totalCompraFinal.round() +" €")
                
                $("#desVentaTotalInit").html(totalVenta.round() +" €")
                $("#desComisionV").html(totalComisionVenta.round() +" €")
                $("#desVentaTotalFinal").html(totalVentaFinal.round() +" €")
		
		/*Se muestran valores en la zona de gastos*/
		$("#ctotalEnt").val(parseFloat(totalComisionCompraBanco).round())
		$("#ctotalBol").val(parseFloat(comisionCompraBolsa).round())
                $("#cliquidacionBol").val(parseFloat(cComisionLiquidacion).round())
                
		$("#vtotalEnt").val(parseFloat(totalComisionVentaBanco).round())
		$("#vtotalBol").val(parseFloat(comisionVentaBolsa).round())
                $("#vliquidacionBol").val(parseFloat(vComisionLiquidacion).round())
		
		$("#ccDesglose").html(totalComisionCompra+ " €")
		$("#cvDesglose").html(totalComisionVenta+ " €")
		$("#totalGastos").html(parseFloat(totalComisionCompra+totalComisionVenta+fiscalidad).round() + " €")
		
		//Fiscalidad en la zona de gastos	
		$("#xtotalEnt").val(fiscalidad)
		$("#fisDesglose").html(fiscalidad+" &euro;")
		
	},
	comisionBolsa:function(total,tipo){
	    var campoFijo=(tipo=="c")? $("#cfijoBol"):$("#vfijoBol");
	    var campoPorcentaje=(tipo=="c")? $("#cporcentajeBol"):$("#vporcentajeBol");
	    var comisionBolsa=1.10
	    if(total<300){
		comisionBolsa=1.10
		campoFijo.val("1.10")
		campoPorcentaje.val("0.0")   
	    }else if(total>300 && total<=3000){
		comisionBolsa=2.45 + total*(0.024/100)
		campoFijo.val("2.45")
		campoPorcentaje.val("0.024")
	    }else if(total>3000 && total<=35000){
		comisionBolsa=4.65 + total*(0.012/100)
		campoFijo.val("4.65")
		campoPorcentaje.val("0.012")                    
	    }else if(total>35000 && total<=70000){
		comisionBolsa=6.40 + total*(0.007/100)
		campoFijo.val("6.40")
		campoPorcentaje.val("0.0078")                    
	    }else if(total>70000 && total<=140000){
		comisionBolsa=9.20 + total*(0.003/100)
		campoFijo.val("9.20")
		campoPorcentaje.val("0.003")                   
	    }else if(total>140000){
		comisionBolsa=13.40
		campoFijo.val("13.40")
		campoPorcentaje.val("0.0")                    
	    }
	    return comisionBolsa;
	    
	},
        gastosLiquidacionBolsa:function(v){
                var liquidacion=v*(0.003/100);
                if(liquidacion<0.04){return 0.04
                }else if(liquidacion>3.5){return 3.5}
                return liquidacion;
        },
        auxDecimalUp:function(objInput,slider){
               var actVal=parseFloat($("#"+objInput).val()).round()
               var newVal=parseFloat(actVal+0.01).round()
               $("#"+objInput).val( newVal)
               BrokerSimulator.calculos()  
        },
        decimalUp:function(objInput,slider){
                BrokerSimulator.auxDecimalUp(objInput,slider,timeClicked)
                var timeClicked=0;
                BrokerSimulator.timeInt=setInterval(function(){
                        if(new Date-BrokerSimulator.timer>1000){
                                if(BrokerSimulator.isClicked){
                                        BrokerSimulator.auxDecimalUp(objInput,slider)
                                }
                        }
                 },100)
        },
        auxDecimalDown:function(objInput,slider){
                var actVal=parseFloat($("#"+objInput).val()).round()
                var newVal=parseFloat(actVal-0.01).round()
                if(newVal>=0){
                        $("#"+objInput).val( newVal)
                        BrokerSimulator.calculos()
                        
                }  
        },
        decimalDown:function(objInput,slider){
                BrokerSimulator.auxDecimalDown(objInput,slider)
                BrokerSimulator.timeInt=setInterval(function(){
                        if(new Date-BrokerSimulator.timer>1000){
                                if(BrokerSimulator.isClicked){
                                       BrokerSimulator.auxDecimalDown(objInput,slider)
                                }
                        }
                 },100)

        },
        decimalClearInterval:function(objInput,slider,dir){
                var val=parseFloat($("#"+objInput).val()).round()
                var sliderPos=0
                if(slider=="slider1"){
                       sliderPos=BrokerSimulator.slider1Pos 
                }else if(slider=="slider2"){
                        sliderPos=BrokerSimulator.slider2Pos
                }else{
                        sliderPos=BrokerSimulator.slider3Pos
                }
                
                if(dir=="up"){
                        var dif=Math.abs(val-sliderPos)
                        var opr="+"
                }else {
                        var dif=sliderPos-parseInt(val)
                        var opr="-"
                }

                var decimal=val.round().toString().split(".")[1]
                
                $("#"+slider).slider("moveTo",opr+"="+dif*0.66)
                if(decimal) {$("#"+objInput).val(parseInt(val)+"."+decimal)}
                else {$("#"+objInput).val(parseInt(val))}
                
                if(slider=="slider1"){
                        BrokerSimulator.slider1Pos =parseInt(val)
                }else if(slider=="slider2"){
                        BrokerSimulator.slider2Pos=parseInt(val)
                }else{
                        BrokerSimulator.slider3Pos=parseInt(val)
                }
                                
                BrokerSimulator.calculos()
                clearInterval(BrokerSimulator.timeInt);
                BrokerSimulator.isClicked=false;
        },
	isKeyNumber:function(event){
                return (
                        event.keyCode==8  || event.keyCode==110  || event.keyCode==188 || event.keyCode==190 ||
                        (event.keyCode>=96 && event.keyCode<=105) || (event.keyCode>=48 && event.keyCode<=57)
                )
	},
        isDecimalCharacter:function(event){return (event.keyCode==110  || event.keyCode==188 || event.keyCode==190 )},
        advancedInputActions:function(event,dataAux){
                //la tecla pulsada es un numero
                 var val=$(this).val()
                 if(BrokerSimulator.isKeyNumber(event)){
                         var isDecimalChar=BrokerSimulator.isDecimalCharacter(event)
                         if( !(val.indexOf(".")!=-1 && (isDecimalChar)) ||!(val.indexOf(",")!=-1 && (isDecimalChar))){
                                $(this).val(val.toString().replace(/,/gi,".")  )
                                BrokerSimulator.calculos()
                         }else {
                                 
                                $(this).val(parseFloat(BrokerSimulator.svcfijoEnt).round(2)) 
                         }
                 }else {
                         $(this).val(parseFloat(val).round(2))
                 }
        },
	load:function(){
                
                /*Deslizadores */
		$('#slider1').slider({
			start: function(e, ui) {},stop: function(e, ui) {},
			slide: function(e, ui) {
                                BrokerSimulator.slider1Pos=(parseInt( ui.handle.css('left')))
				$('#nacciones').val(( parseInt(ui.handle.css('left'))))
				BrokerSimulator.calculos()
			}
		});
		$('#slider2').slider({
			start: function(e, ui) {BrokerSimulator.ui2=ui},stop: function(e, ui) {},
			slide: function(e, ui) {
                                BrokerSimulator.slider2Pos=(parseInt( ui.handle.css('left'))*1)
				$('#compra').val((parseFloat( ui.handle.css('left'))*1))
				BrokerSimulator.calculos()
			}
		});
		$('#slider3').slider({
			start:function(e, ui) {},stop: function(e, ui) {},
			slide:function(e, ui) {
                                BrokerSimulator.slider3Pos=(parseInt( ui.handle.css('left'))*1)
				$('#venta').val((parseFloat( ui.handle.css('left'))*1))
				BrokerSimulator.calculos()
			}
		});
                
                //En caso de estar desabilitados los deslizdores los habilito cuano el usario pulsa sobre ellos
                $('#slider1,#slider1 .ui-slider-handle').mousedown(function(){$('#slider1').slider("enable")})
                $('#slider2,#slider2 .ui-slider-handle').mousedown(function(){$('#slider2').slider("enable")})
                $('#slider3,#slider3 .ui-slider-handle').mousedown(function(){$('#slider3').slider("enable")})
            
                //carga de valores por defecto
                $("#slider1").slider("moveTo", BrokerSimulator.dataServer.nAcciones*.66)
                $("#slider2").slider("moveTo", BrokerSimulator.dataServer.vCompra*.66)
                $("#slider3").slider("moveTo", BrokerSimulator.dataServer.vVenta*.66)
                $('#nacciones').val(BrokerSimulator.dataServer.nAcciones)
                $('#compra').val(BrokerSimulator.dataServer.vCompra)
                $('#venta').val(BrokerSimulator.dataServer.vVenta)
                
                //Botones para el manejo de decimales
                $("#bt11,#bt12,#bt21,#bt22").bind("mousedown",function(){BrokerSimulator.timer=new Date()})
                $("#compra").bind("keydown",function(event){
                        if(event.keyCode==38 || event.keyCode==40){BrokerSimulator.timer=new Date()}}
                )
                $("#compra").bind("keyup",function(event){
                        if(event.keyCode==38 ){BrokerSimulator.decimalClearInterval("compra","slider2","up")}
                        else if(event.keyCode==40 ){BrokerSimulator.decimalClearInterval("compra","slider2","down")}
                })
                $("#bt11").mousedown(function(){BrokerSimulator.isClicked=true; BrokerSimulator.decimalUp("compra","slider2") })
                $("#bt11").mouseup(function(){BrokerSimulator.decimalClearInterval("compra","slider2","up")})
               
                $("#bt12").mousedown(function(){BrokerSimulator.isClicked=true; BrokerSimulator.decimalDown("compra","slider2") })
                $("#bt12").mouseup(function(){BrokerSimulator.decimalClearInterval("compra","slider2","down")})
                
                $("#bt21").mousedown(function(){BrokerSimulator.isClicked=true; BrokerSimulator.decimalUp("venta","slider3")})
                $("#bt21").mouseup(function(){BrokerSimulator.decimalClearInterval("venta","slider3","up")})
                
                $("#bt22").mousedown(function(){BrokerSimulator.isClicked=true; BrokerSimulator.decimalDown("venta","slider3")})
                $("#bt22").mouseup(function(){BrokerSimulator.decimalClearInterval("venta","slider3","down")})
                
                //Gestion de los eventos keypress 
                $("#nacciones,#compra,#venta").bind("click focus", function(){$(this).selText()});                
 
                //Input acciones
                $("#nacciones").keydown(function(event){BrokerSimulator.svNacciones=$(this).val()})
                $("#nacciones").keyup(function(event){                 
                     //la tecla pulsada es un numero
                     var actNacciones=$(this).val()
                     var newPos=parseInt(($(this).val()-BrokerSimulator.slider1Pos)*.7,10)
                     
                     if(event.keyCode==8 || (event.keyCode>=96 && event.keyCode<=105) || (event.keyCode>=48 && event.keyCode<=57) ){
                        $("#slider1").slider("moveTo","+="+newPos)
                        var act1=($(this).val())
                        $(this).val(actNacciones)
                        BrokerSimulator.calculos()
                        $(this).val(parseInt(actNacciones) || "")
                     }else {
                        $(this).val(parseInt(actNacciones))
                     }
                });
		
                /*Inputs compra y venta*/
                $("#compra").keydown(function(event){BrokerSimulator.svCompra=$(this).val()})
                $("#compra").keyup(function(event){
                        //la tecla pulsada es un numero
                        var valCompra=$(this).val()
                        var newPos=parseInt(($(this).val()-BrokerSimulator.slider2Pos)*.7,10)
                        
                        if(BrokerSimulator.isKeyNumber(event)){
                                var isDecimalChar=BrokerSimulator.isDecimalCharacter(event)
                                if( !(valCompra.indexOf(".")!=-1 && (isDecimalChar)) ||!(valCompra.indexOf(",")!=-1 && (isDecimalChar))){
                                        var newPos=parseInt(($(this).val()-BrokerSimulator.slider2Pos)*.7,10)
                                        $("#slider2").slider("moveTo","+="+newPos)
                                        var newVal=valCompra.toString().replace(/,/gi,".")
                                        var nPuntos=newVal.split(".").length;
                                        if(nPuntos<=2)$(this).val( newVal )
                                        else $(this).val(parseFloat(BrokerSimulator.svCompra).round(2)) 

                                        BrokerSimulator.calculos()
                                }else {
                                       $(this).val(parseFloat(BrokerSimulator.svCompra).round(2)) 
                                }
                        }else {
				 $(this).val(parseFloat(valCompra).round(2)) 
			}
                });
                
                $("#venta").keydown(function(event){BrokerSimulator.svVenta=$(this).val()})
                $("#venta").keyup(function(event){
                        
                        //la tecla pulsada es un numero
                        var valVenta=$(this).val()
                        var newPos=parseInt(($(this).val()-BrokerSimulator.slider3Pos)*.7,10)
                                
                        if(BrokerSimulator.isKeyNumber(event)){
                                var isDecimalChar=BrokerSimulator.isDecimalCharacter(event)
                                if( !(valVenta.indexOf(".")!=-1 && (isDecimalChar)) ||!(valVenta.indexOf(",")!=-1 && (isDecimalChar))){
                                        $("#slider3").slider("moveTo","+="+newPos)
                                        $(this).val(valVenta.toString().replace(/,/gi,".")  )
                                        BrokerSimulator.calculos()
                                }else {
                                       $(this).val(parseFloat(BrokerSimulator.svVenta).round(2)) 
                                }
                        }else {
				$(this).val(parseFloat(valVenta).round(2)) 
			}
                });
		

                $("#advanced form").hide()
                $("#advanced h3").each(function(i){
                        $(this).attr("id","optAdv_"+i)
                        $(this).bind("click",function(){
                                var id=($(this).attr("id")).split("_")[1]
                                $("#advanced form.formAdv").each(function(i){
                                        var img=$(this).parent().find("img").eq(i)
                                        if(i==id){
                                                $(this).show("fast")
                                                
                                                if((img.attr("src")).indexOf("bt_mas")!=-1){
                                                        img.attr("src","img/bt_menos.gif")
                                                }else{
                                                        img.attr("src","img/bt_mas.gif")
                                                }
                                        }else{
                                                $(this).hide("fast")
                                                img.attr("src","img/bt_mas.gif")
                                        }
                                })
                                return false;
                        })
                })
                
                //comisiones de compra
                $("#cfijoEnt").keydown(function(event){BrokerSimulator.svcfijoEnt=$(this).val()})
                $("#cfijoEnt").keyup(function(event){BrokerSimulator.advancedInputActions(event,BrokerSimulator.svcfijoEnt)})
                
                $("#cporcentajeEnt").keydown(function(event){BrokerSimulator.svcporcentajeEnt=$(this).val()})
                $("#cporcentajeEnt").keyup(function(event){BrokerSimulator.advancedInputActions(event,BrokerSimulator.svcporcentajeEnt)})

                //comisiones de venta
                $("#vfijoEnt").keydown(function(event){BrokerSimulator.svvfijoEnt=$(this).val()})
                $("#vfijoEnt").keyup(function(event){BrokerSimulator.advancedInputActions(event,BrokerSimulator.svvfijoEnt)})
                
                $("#vporcentajeEnt").keydown(function(event){BrokerSimulator.svvporcentajeEnt=$(this).val()})
                $("#vporcentajeEnt").keyup(function(event){BrokerSimulator.advancedInputActions(event,BrokerSimulator.svvporcentajeEnt)})	

                //Fiscalidad
                $("#xfijoEnt").keydown(function(event){BrokerSimulator.svFiscalidad=$(this).val()})
                $("#xfijoEnt").keyup(function(event){BrokerSimulator.advancedInputActions(event,BrokerSimulator.svFiscalidad)})
                        
                //opciones avanzadas para gadgets
                if($("#opcionesAvanzadas").size()>0){
                        $("#opcionesAvanzadas").click(function(){$("#calc").submit();return false;})
                }
                
                //Llamadas cuando el foco esta fuera del formulario
                $(window).keyup(function(event){if(event.keyCode==13){BrokerSimulator.calculos()}})
                $(document).click(function(){BrokerSimulator.calculos()})
                
                BrokerSimulator.calculos()
           
	}
}

$(document).ready(function(){BrokerSimulator.load()});

