

var TSC_FOREX = new function(){
   function log(m){
      if(typeof console != "undefined"){
         console.log(m);
      }
   }

   var Event = YAHOO.util.Event;
   var dom = YAHOO.util.dom;

   var currency_lookup = [{"AED":"United Arab Emirates dirham"}, {"AFN":"Afghani"}, {"ALL":"Lek"}, {"AMD":"Armenian dram"}, {"ANG":"Netherlands Antillean guilder"}, {"AOA":"Kwanza"}, {"ARS":"Argentine peso"}, {"AUD":"Australian dollar"}, {"AWG":"Aruban guilder"}, {"AZN":"Azerbaijanian manat"}, {"BAM":"Convertible marks"}, {"BBD":"Barbados dollar"}, {"BDT":"Bangladeshi taka"}, {"BGN":"Bulgarian lev"}, {"BHD":"Bahraini dinar"}, {"BIF":"Burundian franc"}, {"BMD":"Bermudian dollar"}, {"BND":"Brunei dollar"}, {"BOB":"Boliviano"}, {"BOV":"Bolivian Mvdol"}, {"BRL":"Brazilian real"}, {"BSD":"Bahamian dollar"}, {"BTN":"Ngultrum"}, {"BWP":"Pula"}, {"BYR":"Belarussian ruble"}, {"BZD":"Belize dollar"}, {"CAD":"Canadian dollar"}, {"CDF":"Franc Congolais"}, {"CHE":"WIR euro"}, {"CHF":"Swiss franc"}, {"CHW":"WIR franc"}, {"CLF":"Unidad de Fomento"}, {"CLP":"Chilean peso"}, {"CNY":"Chinese Yuan"}, {"COP":"Colombian peso"}, {"COU":"Unidad de Valor Real"}, {"CRC":"Costa Rican colon"}, {"CUC":"Cuban convertible peso"}, {"CUP":"Cuban peso"}, {"CVE":"Cape Verde escudo"}, {"CZK":"Czech Koruna"}, {"DJF":"Djibouti franc"}, {"DKK":"Danish krone"}, {"DOP":"Dominican peso"}, {"DZD":"Algerian dinar"}, {"EEK":"Kroon"}, {"EGP":"Egyptian pound"}, {"ERN":"Nakfa"}, {"ETB":"Ethiopian birr"}, {"EUR":"euro"}, {"FJD":"Fiji dollar"}, {"FKP":"Falkland Islands pound"}, {"GBP":"Pound sterling"}, {"GEL":"Lari"}, {"GHS":"Cedi"}, {"GIP":"Gibraltar pound"}, {"GMD":"Dalasi"}, {"GNF":"Guinea franc"}, {"GTQ":"Quetzal"}, {"GYD":"Guyana dollar"}, {"HKD":"Hong Kong dollar"}, {"HNL":"Lempira"}, {"HRK":"Croatian kuna"}, {"HTG":"Haiti gourde"}, {"HUF":"Forint"}, {"IDR":"Rupiah"}, {"ILS":"Israeli new sheqel"}, {"INR":"Indian rupee"}, {"IQD":"Iraqi dinar"}, {"IRR":"Iranian rial"}, {"ISK":"Iceland krona"}, {"JMD":"Jamaican dollar"}, {"JOD":"Jordanian dinar"}, {"JPY":"Japanese yen"}, {"KES":"Kenyan shilling"}, {"KGS":"Som"}, {"KHR":"Riel"}, {"KMF":"Comoro franc"}, {"KPW":"North Korean won"}, {"KRW":"South Korean won"}, {"KWD":"Kuwaiti dinar"}, {"KYD":"Cayman Islands dollar"}, {"KZT":"Tenge"}, {"LAK":"Kip"}, {"LBP":"Lebanese pound"}, {"LKR":"Sri Lanka rupee"}, {"LRD":"Liberian dollar"}, {"LSL":"Lesotho loti"}, {"LTL":"Lithuanian litas"}, {"LVL":"Latvian lats"}, {"LYD":"Libyan dinar"}, {"MAD":"Moroccan dirham"}, {"MDL":"Moldovan leu"}, {"MGA 7":"Malagasy ariary"}, {"MKD":"Denar"}, {"MMK":"Kyat"}, {"MNT":"Tugrik"}, {"MOP":"Pataca"}, {"MRO 7":"Ouguiya"}, {"MUR":"Mauritius rupee"}, {"MVR":"Rufiyaa"}, {"MWK":"Kwacha"}, {"MXN":"Mexican peso"}, {"MXV":"Mexican Unidad de Inversion (UDI) (funds code)"}, {"MYR":"Malaysian ringgit"}, {"MZN":"Metical"}, {"NAD":"Namibian dollar"}, {"NGN":"Naira"}, {"NIO":"Cordoba oro"}, {"NOK":"Norwegian krone"}, {"NPR":"Nepalese rupee"}, {"NZD":"New Zealand dollar"}, {"OMR":"Rial Omani"}, {"PAB":"Balboa"}, {"PEN":"Nuevo sol"}, {"PGK":"Kina"}, {"PHP":"Philippine peso"}, {"PKR":"Pakistan rupee"}, {"PLN":"Zloty"}, {"PYG":"Guarani"}, {"QAR":"Qatari rial"}, {"RON":"Romanian new leu"}, {"RSD":"Serbian dinar"}, {"RUB":"Russian rouble"}, {"RWF":"Rwanda franc"}, {"SAR":"Saudi riyal"}, {"SBD":"Solomon Islands dollar"}, {"SCR":"Seychelles rupee"}, {"SDG":"Sudanese pound"}, {"SEK":"Swedish krona/kronor"}, {"SGD":"Singapore dollar"}, {"SHP":"Saint Helena pound"}, {"SLL":"Leone"}, {"SOS":"Somali shilling"}, {"SRD":"Surinam dollar"}, {"STD":"Dobra"}, {"SYP":"Syrian pound"}, {"SZL":"Lilangeni"}, {"THB":"Baht"}, {"TJS":"Somoni"}, {"TMT":"Manat"}, {"TND":"Tunisian dinar"}, {"TOP":"Pa'anga"}, {"TRY":"Turkish lira"}, {"TTD":"Trinidad and Tobago dollar"}, {"TWD":"New Taiwan dollar"}, {"TZS":"Tanzanian shilling"}, {"UAH":"Hryvnia"}, {"UGX":"Uganda shilling"}, {"USD":"US dollar"}, {"USN":"United States dollar (next day)" }, {"USS":"United States dollar (same day)"}, {"UYU":"Peso Uruguayo"}, {"UZS":"Uzbekistan som"}, {"VEF":"Venezuelan bolívar fuerte"}, {"VND":"Vietnamese dong"}, {"VUV":"Vatu"}, {"WST":"Samoan tala"}, {"XAF":"CFA franc BEAC"}, {"XAG":"Silver (one troy ounce)"}, {"XAU":"Gold (one troy ounce)"}, {"XBA":"European Composite Unit (EURCO) (bond market unit)"}, {"XBB":"European Monetary Unit (E.M.U.-6) (bond market unit)"}, {"XBC":"European Unit of Account 9 (E.U.A.-9) (bond market unit)"}, {"XBD":"European Unit of Account 17 (E.U.A.-17) (bond market unit)"}, {"XCD":"East Caribbean dollar"}, {"XDR":"Special Drawing Rights"}, {"XFU":"UIC franc (special settlement currency)"}, {"XOF":"CFA Franc BCEAO"}, {"XPD":"Palladium (one troy ounce)"}, {"XPF":"CFP franc"}, {"XPT":"Platinum (one troy ounce)"}, {"XTS":"reserved code"}, {"XXX":"No currency"}, {"YER":"Yemeni rial"}, {"ZAR":"South African rand"}, {"ZMK":"Kwacha"}, {"ZWL":"Zimbabwe dollar"}];
   var preferred_pairs = ["EUR/USD", "GBP/USD", "USD/CAD", "USD/CHF", "AUD/USD", "USD/JPY","EUR/JPY","GBP/JPY","XAU/USD"];
   var xtab_currencies = ["USD", "EUR", "GBP", "CAD", "CHF", "AUD", "JPY"];

  var rates = []; // array to hold all rates
  var rates_o = {}; // hashed version

  // data tables
  var forex_dt=null;
  var xtab_dt=null;

  function hlcol(ev){

  }

  function unhlrow(ev){
     var el = Event.getTarget(ev);
     try {
     var td = YAHOO.util.Dom.getElementsByClassName("yui-dt-first","td",el)[0]; 
     var ret = YAHOO.util.Dom.removeClass(td,"tsc-forex-rchilite");
     }catch(e){
      log(e);
     }
     
  }
  function hlrow(ev){
     if(this.flag)return;
     var el = Event.getTarget(ev);
     try {
     var td = YAHOO.util.Dom.getElementsByClassName("yui-dt-first","td",el)[0]; 
     
     
     var ret = YAHOO.util.Dom.addClass(td,"tsc-forex-rchilite");
     }catch(e){
      log(e);
     }
     
  }

  function unhilite( el , record , column , key ){
     this.flag = false;
     var thn=(Event.getTarget(el).getAttribute("headers"));
     thn = thn.replace(/ /g,"-liner");
     YAHOO.util.Dom.removeClass(thn,"tsc-forex-rchilite");
  }
  function hilite( el , record , column , key ){
     var thn=(Event.getTarget(el).getAttribute("headers"));
     thn = thn.replace(/ /g,"-liner");
     var el=(Event.getTarget(el));
     if(YAHOO.util.Dom.hasClass(el,"yui-dt-col-currency")){
        this.flag = true;
         var ret = YAHOO.util.Dom.removeClass(td,"tsc-forex-rchilite");
        return;
     }
     try {
     //var tel = document.getElementById(thn);
     var ret = YAHOO.util.Dom.addClass(thn,"tsc-forex-rchilite");
     } catch(e){ log(e);}
     //log(xtab_dt.getRecord(0));
  }

  function reversepair(pair){
     return pair.replace(/(...)_(...)/,"$2_$1");
  }


  // get a 


   // ¥/€ = ¥/$ ÷ €/$; or,
   // ¥/€ = ¥/$ X $/€ (if the dollar/euro is quoted as number of dollars per euro)

  function computepair(pair, rec1,rec2){
     if(rec1 == null ) return;
     //log("want " + pair + " so use " + rec1.currency + " against " + rec2.currency);
     
     var c = rec1.currency;
     var c2 = rec2.currency;

     var ask;
     if(c.indexOf("USD") == 0){
        // operand is x
        

     ask = rec1.ask * rec2.ask;
     return YAHOO.util.Number.format(ask,{decimalPlaces:4});

     }else{
        // operand is /

     ask = rec1.ask * (1/rec2.ask);
     return YAHOO.util.Number.format(ask,{decimalPlaces:4});
     }




  }


   function getpair(pair){
      var key = pair.replace(/\//,"_");
      if(rates_o[key]!=null){
         return YAHOO.util.Number.format(rates_o[key].ask,{decimalPlaces:4});


      } else {
         // did we have the reverse key? then compute direct exchange
         var rev = key.replace(/(...)_(...)/,"$2_$1");
         var rev = reversepair(key);
         if(rates_o[rev] != null){
            return YAHOO.util.Number.format(  (1 / rates_o[rev].ask), { decimalPlaces:4 })   ;
         }else{
            // must do indirect key
          
            var lc_pair = rev.replace(/(...)_(...)/,"$2_USD");
            var lc_pair2 = rev.replace(/(...)_(...)/,"$1_USD");
            

//            log('want ' + pair);
 //           log('use ' + lc_pair);
  //          log('against ' + lc_pair2);
            
            var ask = null;
            var rec_from = null;
            var rec_to = null;

            if(rates_o[lc_pair]){
               rec_from = rates_o[lc_pair];
            }else {
               var lc_rev = reversepair(lc_pair);
               if(rates_o[lc_rev]){
                  rec_from = rates_o[lc_rev];
               }else{
                  rec_to = "n/a";
               }
            }

            if(rates_o[lc_pair2]){
               rec_to = rates_o[lc_pair2];
            }else{
               var lc_rev2 = reversepair(lc_pair2);
               if(rates_o[lc_rev2]){
                  rec_to = rates_o[lc_rev2];
               }else{
                  rec_to = 'n/a';
               }
            }

           
            ask = computepair(pair,rec_from,rec_to);

            return ask;
            
            
           
         return pair;
         }

      }



   }



   function formatCurrent(a,b,c,d) {
      //(elCell, oRecord, oColumn, oData)
      var last = b.getData("prev");
      var cur = b.getData("ask");
      var classname = "color:black";
      if(cur>last) classname = "color:green";
      if(cur<last) classname = "color:red";

      //var ih = "<span class='cur_current " + classname + "'>" + cur + "</span>";
      var ih = "<span style='" + classname + "'>" + cur + "</span>";
      a.innerHTML = ih;
   }

   function formatChange(a,b,c,d) {
      //(elCell, oRecord, oColumn, oData)
      var last = b.getData("prev");
      var cur = b.getData("ask");
      var classname = "color:black";
      var ch = 0;
      if(cur>last) { 
         classname = "color:green";
         ch = cur - last;
      }
      if(cur<last) { 
         classname = "color:red";
         ch = last - cur;
      }
      ch = YAHOO.util.Number.format(ch,{decimalPlaces:4});

      //var ih = "<span class='cur_current " + classname + "'>" + ch + "</span>";
      var ih = "<span style='" + classname + "'>" + ch + "</span>";
      a.innerHTML = ih;
   }


   function formatPctChange(a,b,c,d) {

      //(elCell, oRecord, oColumn, oData)
      var last = b.getData("prev");
      var cur = b.getData("ask");
      var classname = "color:black";
      var ch = 0;
      var pct = 0;
      if(cur>last) { 
         classname = "color:green";
         ch = cur - last;
         pct = ch / last;
      }
      if(cur<last) { 
         classname = "color:red";
         ch = last - cur;
         pct = ch / last;
      }
      ch = YAHOO.util.Number.format(pct,{decimalPlaces:4});
      //var ih = "<span class='cur_current " + classname + "'>" + ch + "%</span>";
      //var ih = "<span style='cur_current " + classname + "'>" + ch + "%</span>";
      var ih = "<span style='" + classname + "'>" + ch + "</span>";
      a.innerHTML = ih;

   }

   function formatRange(a,b,c,d) {
      var hi = b.getData("hi");
      var lo = b.getData("lo");
      var classname = "cur_even";
      var c = b.getData("currency");

     if(c.toLowerCase().indexOf("jpy")!=-1  || c.toLowerCase().indexOf("xau")!=-1){
         hi = YAHOO.util.Number.format(hi,{decimalPlaces:2});
         lo = YAHOO.util.Number.format(lo,{decimalPlaces:2});
      }else{
         hi = YAHOO.util.Number.format(hi,{decimalPlaces:4});
         lo = YAHOO.util.Number.format(lo,{decimalPlaces:4});
      }

      var ih = "<span class='cur_current " + classname + "'>" + lo + " &#8211; " + hi + "</span>";
      a.innerHTML = ih;
   }

   function formatClose(a,b,c,d) {
      var close = YAHOO.util.Number.format(b.getData("prev"),{decimalPlaces:4});
      var c = b.getData("currency");
      if(c.toLowerCase().indexOf("jpy")!=-1){
         close = YAHOO.util.Number.format(close,{decimalPlaces:2});
      }
      if(c.toLowerCase().indexOf("xau")!=-1){
         close = YAHOO.util.Number.format(close,{decimalPlaces:2});
      }
      a.innerHTML = close;
   }

   function formatCurrency(a,b,c,d) {
      a.innerHTML = "<b>" + b.getData("currency") + "</b>";
   }

   function formatAsk(a,b,c,d) {
      var c = b.getData("currency");
      var num = b.getData("ask");
      if(c.toLowerCase().indexOf("jpy")!=-1){
         num = YAHOO.util.Number.format(num,{decimalPlaces:2});
      }
      a.innerHTML = "<b>" + num + "</b>";
   }


   // xtab ones
  
   function formatCurrencyLastTrade(a,b,c,d){


   }
 


   function log_cx(){
      for(var i=0;i<currency_lookup.length;i++){
         var o = currency_lookup[i];
         console.log(o);
      }

   }

   return {

      init:function(){
              try {
              var r = tsc_currency_rates;
              r.unshift();

              var prefs = preferred_pairs.join(",");

              for(var i=0;i<preferred_pairs.length;i++){
                 var pair = preferred_pairs[i];
                 for(var j=0;j<r.length;j++){
                    if(r[j] != null){
                       var entry = r[j];
                       if(entry[0] === pair){
                          var o = {};
                          o.currency = entry[0];
                          var key = o.currency.replace(/\//,"_");
                          o.bid = entry[1];
                          o.ask = entry[2];
                          o.hi = entry[4];
                          o.lo = entry[5];
                          o.prev = entry[8];
                          rates.push(o);
                          rates_o[key] = o;
                       }
                    }
                 }
              }
              log(rates_o);


              this.genxtab(rates);
              


              var ds = new YAHOO.util.DataSource(rates);
              
              ds.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
              ds.responseSchema = {
                 fields: ["currency","bid","ask","hi","lo","prev"]
              };

               var forexColumnDefs = [
                   {key:"currency", label:"Currency",formatter:formatCurrency},
                   {key:"bid", label:"Bid",hidden:true},
                   {key:"ask", label:"Price",formatter:formatAsk},
                   {key:"change", label:"Change",formatter:formatChange},
                   {key:"chpct", label:"%Change",formatter:formatPctChange},
                   {key:"hi", label:"Day's Range",formatter:formatRange},
                   /*{key:"lo", label:"Day's Low"}, */
                   {key:"prev", label:"Prev. Close",formatter:formatClose} 
               ];




              var dt = new YAHOO.widget.DataTable("forex_rates", forexColumnDefs, ds); 

               var myTabView = new YAHOO.widget.TabView("tvcontainer");
               myTabView.getTab(1).addListener("click", function() {myDataTable.onShow()});        



         TSCM.ads.positionToPlaceholder({ ad: 'customUnit', placeholder: 'cauContainer', flexibleHeight: true });
                                 

              

              }catch(e){
                 log(e);
              }

      },

              /*
USD
EUR
GBP
CAD
CHF
AUD
JPY
*/

      genxtab:function(rates){

           var table = [];

           for(var i=0;i<rates.length;i++){
              var o = rates[i];
              var currency = o.currency;
              ///log(currency);
              var ask  = o.ask;
              


           }


           var len = xtab_currencies.length;

           for(var i=0;i<len;i++){
                 // log( xtab_currencies[i]);
                  var o = {};
                  var cur = xtab_currencies [i] ;
                 
                  var cc = xtab_currencies[i].substring(0,2).toLowerCase();
                  var im  =  " <img src='http://i.thestreet-static.com/files/tsc/images/ci/" + cc  + ".png'> ";
                  o.currency = im + xtab_currencies[i];

                  o.usd = getpair(cur + "/USD");
                  o.eur = getpair(cur + "/EUR");
                  o.gbp = getpair(cur + "/GBP");
                  o.cad = getpair(cur + "/CAD");
                  o.chf = getpair(cur + "/CHF");
                  o.aud = getpair(cur + "/AUD");
                  o.jpy = getpair(cur + "/JPY");
                  var n =-1 ;
                  for(var x in o){
                     if(n == i){
                        o[x] = 1;
                     }
                     n++;
                  }

                  table.push(o);
           }

           log(table);

               var xtabColumnDefs = [
                   {key:"currency", label:"Currency"},
                   {key:"usd", label:"<img src='http://i.thestreet-static.com/files/tsc/images/ci/us.png'> USD"},
                   {key:"eur", label:"<img src='http://i.thestreet-static.com/files/tsc/images/ci/eu.png'> EUR"},
                   {key:"gbp", label:"<img src='http://i.thestreet-static.com/files/tsc/images/ci/gb.png'> GBP"},
                   {key:"cad", label:"<img src='http://i.thestreet-static.com/files/tsc/images/ci/ca.png'> CAD"},
                   {key:"chf", label:"<img src='http://i.thestreet-static.com/files/tsc/images/ci/ch.png'> CHF"},
                   {key:"aud", label:"<img src='http://i.thestreet-static.com/files/tsc/images/ci/au.png'> AUD"},
                   {key:"jpy", label:"<img src='http://i.thestreet-static.com/files/tsc/images/ci/jp.png'> JPY"}
               ];

              var ds = new YAHOO.util.DataSource(table);
              
              ds.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
              ds.responseSchema = {
                 fields: ["currency","usd","eur","gbp","cad","chf","aud","jpy"]
              };

              xtab_dt = new YAHOO.widget.DataTable("forex_rates_xtab", xtabColumnDefs, ds); 
              xtab_dt.subscribe("cellMouseoverEvent", xtab_dt.onEventHighlightCell);
              xtab_dt.subscribe("cellMouseoutEvent", xtab_dt.onEventUnhighlightCell);
              xtab_dt.subscribe("cellMouseoutEvent", unhilite);
              xtab_dt.subscribe("rowMouseoverEvent", hlrow); 
              xtab_dt.subscribe("rowMouseoutEvent", unhlrow); 
              xtab_dt.subscribe("cellMouseoverEvent", hilite);
              

      },


      refresh:function(){

                     var callback = {
                       success:this.refreshData,
                       failure:this.datafail,
                       scope:this,
                       argument:null
                     }

            //var conn = YAHOO.util.Connect.asyncRequest('GET',TSCM.cfg.contextRoot + "/jsp/fragments/proxy.jsp?filename=directory.xml", callback, null);

            var successHandler = function(o) {
               //Here, o contains all of the fields described in the table
                //above:
               o.purge(); //removes the script node immediately after executing;
                //log(o.data); //the data you passed in your configuration
                log(o);
                TSC_FOREX.init();
            }

            var url ="http://www.thestreet.com/files/tsc/currency/currencyrates.js";
            var objTransaction = YAHOO.util.Get.script(url, { onSuccess: successHandler });


      },
      refreshData:function(o){
      },
      datafail:function(o){
         log('data retreival failed');

      },
      init_xtab:function(o){
         log('init xtab');


      },
      xtab:function(o){


      }

   }

   /** supporting data. **/


};


YAHOO.util.Event.on(window,"load",TSC_FOREX.init,TSC_FOREX,true);


