﻿(function($){
   $.fn.currencyConvert = function(options){
      var element = this;
      var defaults = {
         apiKey: '',
         baseCurrency: 'HRK',
         decimalSeparator: ',',
         numberOfDecimals: 2,
         currentCurrencyRate: 'meanRate',
         fromSelector: '#fromCurrency',
         toSelector: '#toCurrency',
         fromDataSelector: '#fromDataSelector',
         toDataSelector: '#toDataSelector',
         rateButton: '.ratebutton'
      };


      //extend our default options with those provided
      var opts = $.extend(defaults, options);


      //default currency values
      var currencyValues = new Array();
      currencyValues[opts.baseCurrency] = new Array();
      currencyValues[opts.baseCurrency]['shortName'] = opts.baseCurrency;
      currencyValues[opts.baseCurrency]['buyRateForeign'] = new Array(1, 1);
      currencyValues[opts.baseCurrency]['meanRate'] = new Array(1, 1);
      currencyValues[opts.baseCurrency]['sellRateCache'] = new Array(1, 1);




      //change var to float
      var toFloat = function(value){
         value = value.replace(opts.decimalSeparator, '.');
         value = parseFloat(value);

         if (isNaN(value * 1)){
            value = 0;
         }

         return value;
      }


//end//
      //change current currency
      var changeBaseCurrency = function(){
         opts.baseCurrency = $(opts.fromSelector).val();

         //convert currency
         changeCurrencyFromTo();
      }



//end//
      //change current currency rate
      var changeCurrencyRate = function(){
         var value = $(opts.rateButton+":checked").val();

         if (value == 1){
            opts.currentCurrencyRate = 'buyRateForeign';
         }
         else if (value == 2){
            opts.currentCurrencyRate = 'meanRate';
         }
         else if (value == 3){
            opts.currentCurrencyRate = 'sellRateCache';
         }

         //convert currency
         changeCurrencyFromTo();
      }



      //change currency
      var changeCurrency = function(valutaTo, className, addValueName){
         //set default values
         className = className || 'currency';
         addValueName = addValueName || false;


         $('.'+className).each(function(i){
            var value = convertCurrency(valutaTo, $(this).val(), addValueName);

            if ($(this).is('input:text')){
               $(this).val(value);
            }
            else {
               $(this).html(value);
            }
         });

         //set base currency
         baseCurrency = valutaTo;
      }


//end//
      //convert currency to currency
      var convertCurrency = function(valutaTo, elementValue, addValueName){
         var currentValutaKN = currencyValues[opts.baseCurrency][opts.currentCurrencyRate][0] / currencyValues[opts.baseCurrency][opts.currentCurrencyRate][1];
         var toValutaKn = currencyValues[valutaTo][opts.currentCurrencyRate][0] / currencyValues[valutaTo][opts.currentCurrencyRate][1];

         var exec = (toFloat(elementValue) * currentValutaKN) / toValutaKn;


         //if true add currency name
         var addValue = '';
         if (addValueName){
            addValue = ' '+valutaTo;
         }

         return exec.toFixed(opts.numberOfDecimals)+addValue;
      }


//end//
      //change currency from to
      var changeCurrencyFromTo = function(toClassName, addValueName){
         //set default values
         var valutaTo = $(opts.toSelector).val();
         toClassName = toClassName || 'currency';
         addValueName = addValueName || false;


         $('.'+toClassName).each(function(i){
            var value = convertCurrency(valutaTo, $(opts.fromDataSelector).val(), addValueName);

            if ($(this).is('input:text')){
               $(this).val(value);
            }
            else {
               $(this).html(value);
            }
         });
      }



      //load currency data
      var loadData = function(){
         $.ajax({
            dataType: "jsonp",
            url: "http://tecajnalista.net/service/getJSON/a/"+location.host+"/"+opts.apiKey+"/?callback=?",
            cache: false,
            beforeSend: function() {
               $('#currencyLoading').html('Loading...');
            },
            success: function(JSON){
               //check for errors
               if (JSON['error'] == 1000){
                  $('#currencyLoading').html('');
                  alert('Tecajni API key korišten na ovoj domeni je registriran za drugu domenu. Novi api key možete napraviti na http://tecajnalista.net/user/apiKey/new.');
                  return false;
               }
               else if (JSON['error'] == 1001){
                  $('#currencyLoading').html('');
                  alert('Error: Javascript error!');
                  return false;
               }

               //delete all select boxes values
               $(opts.fromSelector).removeOption(/.*/i);
               $(opts.toSelector).removeOption(/.*/i);

               $.each(JSON.currency, function(i,currency){
                  currencyValues[currency['name']] = new Array();
                  currencyValues[currency['name']]['buyRateForeign'] = new Array(currency['buyRateForeign'], currency['unit']);
                  currencyValues[currency['name']]['meanRate'] = new Array(currency['meanRate'], currency['unit']);
                  currencyValues[currency['name']]['sellRateCache'] = new Array(currency['sellRateCache'], currency['unit']);

                  //update select boxes
                  $(opts.fromSelector).addOption(opts.baseCurrency, opts.baseCurrency, true);
                  if ($(opts.fromSelector).length > 0){
                     $(opts.fromSelector).addOption(currency['name'], currency['name'], false);
                  }

                  $(opts.toSelector).addOption(opts.baseCurrency, opts.baseCurrency, true);
                  if ($(opts.toSelector).length > 0){
                     $(opts.toSelector).addOption(currency['name'], currency['name'], false);
                  }
               });

               $('#currencyLoading').html('');

               //do after loading
               $(opts.fromDataSelector).keyup(function(){changeCurrencyFromTo()});
               $(opts.toSelector).change(function(){changeCurrencyFromTo()});
               $(opts.fromSelector).change(function(){changeBaseCurrency()});
               $(opts.rateButton).change(function(){changeCurrencyRate()});
            }
         });
      }



      //load currency data
      loadData();
   };
})(jQuery);











/*
var currentValuta = 'HRK';
var decimalSeparator = ',';
var numberOfDecimals = 2;
var currentValutaMiddleValue = 'meanRate';
*/
/*
var currencyValues = new Array();
currencyValues[currentValuta] = new Array();
currencyValues[currentValuta]['buyRateForeign'] = new Array(1, 1);
currencyValues[currentValuta]['meanRate'] = new Array(1, 1);
currencyValues[currentValuta]['sellRateCache'] = new Array(1, 1);*/


/*
function toFloat(value){
   value = value.replace(decimalSeparator, '.');
   value = parseFloat(value);
   
   if (isNaN(value * 1)){
      value = 0;
   }

   return value;
}*/


/*
function changeCurrentCurrency(valutaFrom){
   currentValuta = valutaFrom;
}*/



/*
function changeCurrencyValue(value){
   if (value == 1){
      currentValutaMiddleValue = 'buyRateForeign';
   }
   else if (value == 2){
      currentValutaMiddleValue = 'meanRate';
   }
   else if (value == 3){
      currentValutaMiddleValue = 'sellRateCache';
   }
}*/


/*
function changeCurrency(valutaTo, className, addValueName){
   //set default values
   className = className || 'currency';
   addValueName = addValueName || false;


   $('.'+className).each(function(i){
      var value = convertCurrency(valutaTo, $(this).val(), addValueName);

      if ($(this).is('input:text')){
         $(this).val(value);
      }
      else {
         $(this).html(value);
      }
   });

   //set current valuta
   currentValuta = valutaTo;
}*/


/*
function convertCurrency(valutaTo, elementValue, addValueName){
   var currentValutaKN = currencyValues[currentValuta][currentValutaMiddleValue][0] / currencyValues[currentValuta][currentValutaMiddleValue][1];
   var toValutaKn = currencyValues[valutaTo][currentValutaMiddleValue][0] / currencyValues[valutaTo][currentValutaMiddleValue][1];

   var exec = (toFloat(elementValue) * currentValutaKN) / toValutaKn;


   //if true add currency name
   var addValue = '';
   if (addValueName){
      addValue = ' '+valutaTo;
   }

   return exec.toFixed(numberOfDecimals)+addValue;
}*/


/*
function changeCurrencyFromTo(valutaTo, fromIdName, toClassName, addValueName){
   //set default values
   toClassName = toClassName || 'currency';
   addValueName = addValueName || false;


   $('.'+toClassName).each(function(i){
      value = convertCurrency(valutaTo, $('#'+fromIdName).val(), addValueName);

      if ($(this).is('input:text')){
         $(this).val(value);
      }
      else {
         $(this).html(value);
      }
   });
}*/

function print_r( array, return_val ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Michael White (http://getsprink.com)
    // +   improved by: Ben Bryan
    // +      input by: Brett Zamir (http://brettz9.blogspot.com)
    // +      improved by: Brett Zamir (http://brettz9.blogspot.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: echo
    // *     example 1: print_r(1, true);
    // *     returns 1: 1
    
    var output = "", pad_char = " ", pad_val = 4;
 
    var formatArray = function (obj, cur_depth, pad_val, pad_char) {
        if (cur_depth > 0) {
            cur_depth++;
        }
 
        var base_pad = repeat_char(pad_val*cur_depth, pad_char);
        var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
        var str = "";
 
        if (typeof obj === 'object' && obj !== null && obj.constructor && obj.constructor.name !== 'PHPJS_Resource') {
            str += "Array\n" + base_pad + "(\n";
            for (var key in obj) {
                if (obj[key] instanceof Array) {
                    str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
                } else {
                    str += thick_pad + "["+key+"] => " + obj[key] + "\n";
                }
            }
            str += base_pad + ")\n";
        } else if(obj == null || obj == undefined) {
            str = '';
        } else { // for our "resource" class
            str = obj.toString();
        }
 
        return str;
    };
 
    var repeat_char = function (len, pad_char) {
        var str = "";
        for(var i=0; i < len; i++) { 
            str += pad_char; 
        }
        return str;
    };
    output = formatArray(array, 0, pad_val, pad_char);
 
    if (return_val !== true) {
        if (document.body) {
            echo(output);
        }
        else {
            try {
                XULDocument; // We're in XUL, so appending as plain text won't work
                echo('<pre xmlns="http://www.w3.org/1999/xhtml" style="white-space:pre;">'+output+'</pre>');
            }
            catch(e) {
                echo(output); // Outputting as plain text may work in some plain XML
            }
        }
        return true;
    } else {
        return output;
    }
}


$(document).ready(function(){
   $('body').currencyConvert({apiKey: '6283d2b0d25c6e4c7c9e339b9fac28ca'});
});