jQuery.fn.joustorahaPlugin = function (amount) {

   	this.monthCount = 12;    
	this.loanAmount = amount;
    this.interestRate = 29;
	this.monthlyCost = 0;
	this.extraCosts = 5;
	this.monthlyMinimum = 30;


    this.getTableFieldValue = function ( fieldName ){
	    switch(fieldName){
		    case "Hinta":
                return this.loanAmount+' &euro;';
										
		    case "Laina-aika":
                return this.monthCount+' kk';									

		    case "Kuukausier&auml;":
                return  this.fixNumber(this.roundNumber(this.calculateInstallment(this.loanAmount,this.monthCount),2))+' &euro;/kk';									
                        

		    case "Laskutuslis&auml;":
                return this.extraCosts+' &euro;';										

		    case "Kulut yhteens&auml;":
                return this.fixNumber(this.calculateRates())+' &euro;';										

		    case "Luottokustannukset":
                return "xxx";										

		    case "Luottohinta":
                return "xxx";			

		    case "Todellinen vuosikorko":
                return this.calculateTrueYearlyRate();
										
		    default:
                break;
	    }
    }

	this.calculateExtraCosts = function(monthCount){
		return this.extraCosts * monthCount;
	}

    this.calculateRates = function(){
    	var monthlyInstallment = this.calculateInstallment(this.loanAmount,this.monthCount);
	    var rates = monthlyInstallment * this.monthCount - this.loanAmount;
    	return Math.round(rates*1000)/1000;
    }

    this.calculateInstallment = function(loanAmount,monthCount){
            var periodicRate = 30 * 0.01 * this.interestRate / 360;
            var payment = loanAmount * periodicRate / (1 - 
			Math.pow(1 + periodicRate, -monthCount)) + this.monthlyCost;
            return (0.01 * Math.ceil(100.0 * payment)) + this.extraCosts;
    }


    this.calculateMinimumMonths = function(mC){
       	for(var i=mC;i>0;i--){
		    var installment = this.calculateInstallment(this.loanAmount,i);
		    if(installment >= this.monthlyMinimum){
			    this.monthlyMinimumExact = installment;
			    return i;
		    }
	    }
	    return 0;
    }

    this.rand = function() {
        var randomnumber=Math.floor(Math.random()*10000)
        return randomnumber;
    }
    
    this.calculateTrueYearlyRate = function(){
        var rates = this.calculateRates();
        return ((this.rates + this.extraCosts) / this.loanAmount) * ( (365 / 365) * 100 ); 
    }


    this.roundNumber = function(num, dec) {
    	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	    return result;
    }   

    this.fixNumber = function( num ) {
        var parts = num.toString().split(".");
        if ( parts.length != 2 ) {
            return num;
        }
        if ( parts[1].length == 1 ) {
            parts[1] += "0";
        }
        return parts[0]+"."+parts[1];
    }

	this.monthCount = this.calculateMinimumMonths( this.monthCount );

	var tableFields = new Array(
		"Hinta",
		"Kuukausier&auml;",
		"Laina-aika",
		"Laskutuslis&auml;",
		"Kulut yhteens&auml;"
	);

	tableHtml = '<table>';
	for(k = 0; k < tableFields.length; k++){
		tableHtml += '<tr><td style="width: 120px;">'+tableFields[k]+': </td><td>'+this.getTableFieldValue(tableFields[k])+'</td></tr>'; 
	}
	tableHtml += '</table>';

	var divCss = 'font-weight: bold; -moz-box-shadow: 5px 5px 5px #ccc; -webkit-box-shadow: 5px 5px 5px #ccc; box-shadow: 5px 5px 5px #ccc; font-size: 13px; font-family: Arial; color: #f28621; z-index: 100; padding: 15px;display: none; background-color: #ffffff; border: 2px solid #f28621; width:400px; position: absolute; top: 0px; left: 0px;';

	var pCss = 'font-weight: normal; font-size: 13px; font-family: Arial; color: #000000;';
	var html = '';
	var imgHtml = '<img src="joustoraha.gif" /><br/>';
	var infoHtml = '<p style="'+pCss+'">Joustoraha on kotimainen palvelu, jolla rahoitat nettiostoksesi joustavasti, nopeasti ja turvallisesti. Laskulla saat aidosti korotonta maksuaikaa ostoksillesi ja maksat vasta tuotteen saatuasi. Osamaksulla voit maksaa ostoksesi jopa 12 er&auml;ss&auml;.</p>';
	infoHtml += '<p style="'+pCss+'">Osta tuote laskulla, laskutuslis&auml; 5 &euro;<br/>Osta tuote osamaksulla, alkaen '+this.fixNumber(this.roundNumber(this.monthlyMinimumExact,2))+' &euro;/kk</p>';

    var divId = "joujoustorahaHoverBox"+this.rand();
    var spnId = "minimumMonthlyAmount"+this.rand();

	var divHtml = '<div id="'+divId+'" style="'+divCss+'">'+imgHtml+infoHtml+tableHtml+'</div>';
	html += '<span id="'+spnId+'">'+divHtml+'Joustorahalla alk. '+this.fixNumber(this.roundNumber(this.monthlyMinimumExact,2))+' &euro;/kk</span>';

	$(this).html( html );

	$("span#"+spnId).mouseenter(function(e) {
		if(!$("div#"+divId).is(":visible")){
			mouseX = e.pageX;
			mouseY = e.pageY;
			var position = $("span#"+spnId).position();
			var posLeft = position.left;
			var posTop = position.top;
			$("div#"+divId).css("top",mouseY-posTop/mouseY);
			$("div#"+divId).css("left",mouseX-posLeft/mouseX);
			$("div#"+divId).fadeIn("fast");
		}
	}).mouseleave(function(){
		$("div#"+divId).delay(500).fadeOut("fast");
	});
}






