// = fxconvert.js =
//

/*global CmdUtils, Utils, noun_type_currency, noun_type_amount, jQuery */

// == {{{ noun_type_currency}}} ==
// //defines// a new noun type, currency, containing the description
// of the currency. Because the currencies array is quite large and the search
// it would be too slow, the suggestion is created only when it is typed 
// at least three chars. 
//
// The default currency is "EUR".

var noun_type_currency = {
    label: "currency",
    
    suggest: function (text, html, callback) {    
        var suggestions = [],
            currencies = [
                {name: "USD", desc: "US Dollar . USD"},
                {name: "AFN", desc: "Afghanistan Afghani . AFN"},
                {name: "ALL", desc: "Albanian Lek . ALL"},
                {name: "DZD", desc: "Algerian Dinar . DZD"},
                {name: "ADF", desc: "Andorran Franc . ADF"},
                {name: "ADP", desc: "Andorran Peseta . ADP"},
                {name: "AOA", desc: "Angolan Kwanza . AOA"},
                {name: "AON", desc: "Angolan New Kwanza . AON"},
                {name: "ARS", desc: "Argentine Peso . ARS"},
                {name: "AMD", desc: "Armenian Dram . AMD"},
                {name: "AWG", desc: "Aruban Florin . AWG"},
                {name: "AUD", desc: "Australian Dollar . AUD"},
                {name: "ATS", desc: "Austrian Schilling . ATS"},
                {name: "AZM", desc: "Azerbaijan Manat . AZM"},
                {name: "AZN", desc: "Azerbaijan New Manat . AZN"},
                {name: "BSD", desc: "Bahamian Dollar . BSD"},
                {name: "BHD", desc: "Bahraini Dinar . BHD"},
                {name: "BDT", desc: "Bangladeshi Taka . BDT"},
                {name: "BBD", desc: "Barbados Dollar . BBD"},
                {name: "BYR", desc: "Belarusian Ruble . BYR"},
                {name: "BEF", desc: "Belgian Franc . BEF"},
                {name: "BZD", desc: "Belize Dollar . BZD"},
                {name: "BMD", desc: "Bermudian Dollar . BMD"},
                {name: "BTN", desc: "Bhutan Ngultrum . BTN"},
                {name: "BOB", desc: "Bolivian Boliviano . BOB"},
                {name: "BAM", desc: "Bosnian Mark . BAM"},
                {name: "BWP", desc: "Botswana Pula . BWP"},
                {name: "BRL", desc: "Brazilian Real . BRL"},
                {name: "GBP", desc: "British Pound . GBP"},
                {name: "BND", desc: "Brunei Dollar . BND"},
                {name: "BGN", desc: "Bulgarian Lev . BGN"},
                {name: "BIF", desc: "Burundi Franc . BIF"},
                {name: "XOF", desc: "CFA Franc BCEAO . XOF"},
                {name: "XAF", desc: "CFA Franc BEAC . XAF"},
                {name: "XPF", desc: "CFP Franc . XPF"},
                {name: "KHR", desc: "Cambodian Riel . KHR"},
                {name: "CAD", desc: "Canadian Dollar . CAD"},
                {name: "CVE", desc: "Cape Verde Escudo . CVE"},
                {name: "KYD", desc: "Cayman Islands Dollar . KYD"},
                {name: "CLP", desc: "Chilean Peso . CLP"},
                {name: "CNY", desc: "Chinese Yuan Renminbi . CNY"},
                {name: "COP", desc: "Colombian Peso . COP"},
                {name: "KMF", desc: "Comoros Franc . KMF"},
                {name: "CDF", desc: "Congolese Franc . CDF"},
                {name: "CRC", desc: "Costa Rican Colon . CRC"},
                {name: "HRK", desc: "Croatian Kuna . HRK"},
                {name: "CUC", desc: "Cuban Convertible Peso . CUC"},
                {name: "CUP", desc: "Cuban Peso . CUP"},
                {name: "CYP", desc: "Cyprus Pound . CYP"},
                {name: "CZK", desc: "Czech Koruna . CZK"},
                {name: "DKK", desc: "Danish Krone . DKK"},
                {name: "DJF", desc: "Djibouti Franc . DJF"},
                {name: "DOP", desc: "Dominican R. Peso . DOP"},
                {name: "NLG", desc: "Dutch Guilder . NLG"},
                {name: "XEU", desc: "ECU . XEU"},
                {name: "XCD", desc: "East Caribbean Dollar . XCD"},
                {name: "ECS", desc: "Ecuador Sucre . ECS"},
                {name: "EGP", desc: "Egyptian Pound . EGP"},
                {name: "SVC", desc: "El Salvador Colon . SVC"},
                {name: "EEK", desc: "Estonian Kroon . EEK"},
                {name: "ETB", desc: "Ethiopian Birr . ETB"},
                {name: "EUR", desc: "Euro . EUR"},
                {name: "FKP", desc: "Falkland Islands Pound . FKP"},
                {name: "FJD", desc: "Fiji Dollar . FJD"},
                {name: "FIM", desc: "Finnish Markka . FIM"},
                {name: "FRF", desc: "French Franc . FRF"},
                {name: "GMD", desc: "Gambian Dalasi . GMD"},
                {name: "GEL", desc: "Georgian Lari . GEL"},
                {name: "DEM", desc: "German Mark . DEM"},
                {name: "GHC", desc: "Ghanaian Cedi . GHC"},
                {name: "GHS", desc: "Ghanaian New Cedi . GHS"},
                {name: "GIP", desc: "Gibraltar Pound . GIP"},
                {name: "XAU", desc: "Gold (oz.) . XAU"},
                {name: "GRD", desc: "Greek Drachma . GRD"},
                {name: "GTQ", desc: "Guatemalan Quetzal . GTQ"},
                {name: "GNF", desc: "Guinea Franc . GNF"},
                {name: "GYD", desc: "Guyanese Dollar . GYD"},
                {name: "HTG", desc: "Haitian Gourde . HTG"},
                {name: "HNL", desc: "Honduran Lempira . HNL"},
                {name: "HKD", desc: "Hong Kong Dollar . HKD"},
                {name: "HUF", desc: "Hungarian Forint . HUF"},
                {name: "ISK", desc: "Iceland Krona . ISK"},
                {name: "INR", desc: "Indian Rupee . INR"},
                {name: "IDR", desc: "Indonesian Rupiah . IDR"},
                {name: "IRR", desc: "Iranian Rial . IRR"},
                {name: "IQD", desc: "Iraqi Dinar . IQD"},
                {name: "IEP", desc: "Irish Punt . IEP"},
                {name: "ILS", desc: "Israeli New Shekel . ILS"},
                {name: "ITL", desc: "Italian Lira . ITL"},
                {name: "JMD", desc: "Jamaican Dollar . JMD"},
                {name: "JPY", desc: "Japanese Yen . JPY"},
                {name: "JOD", desc: "Jordanian Dinar . JOD"},
                {name: "KZT", desc: "Kazakhstan Tenge . KZT"},
                {name: "KES", desc: "Kenyan Shilling . KES"},
                {name: "KWD", desc: "Kuwaiti Dinar . KWD"},
                {name: "KGS", desc: "Kyrgyzstanian Som . KGS"},
                {name: "LAK", desc: "Lao Kip . LAK"},
                {name: "LVL", desc: "Latvian Lats . LVL"},
                {name: "LBP", desc: "Lebanese Pound . LBP"},
                {name: "LSL", desc: "Lesotho Loti . LSL"},
                {name: "LRD", desc: "Liberian Dollar . LRD"},
                {name: "LYD", desc: "Libyan Dinar . LYD"},
                {name: "LTL", desc: "Lithuanian Litas . LTL"},
                {name: "LUF", desc: "Luxembourg Franc . LUF"},
                {name: "MOP", desc: "Macau Pataca . MOP"},
                {name: "MKD", desc: "Macedonian Denar . MKD"},
                {name: "MGA", desc: "Malagasy Ariary . MGA"},
                {name: "MGF", desc: "Malagasy Franc . MGF"},
                {name: "MWK", desc: "Malawi Kwacha . MWK"},
                {name: "MYR", desc: "Malaysian Ringgit . MYR"},
                {name: "MVR", desc: "Maldive Rufiyaa . MVR"},
                {name: "MTL", desc: "Maltese Lira . MTL"},
                {name: "MRO", desc: "Mauritanian Ouguiya . MRO"},
                {name: "MUR", desc: "Mauritius Rupee . MUR"},
                {name: "MXN", desc: "Mexican Peso . MXN"},
                {name: "MDL", desc: "Moldovan Leu . MDL"},
                {name: "MNT", desc: "Mongolian Tugrik . MNT"},
                {name: "MAD", desc: "Moroccan Dirham . MAD"},
                {name: "MZM", desc: "Mozambique Metical . MZM"},
                {name: "MZN", desc: "Mozambique New Metical . MZN"},
                {name: "MMK", desc: "Myanmar Kyat . MMK"},
                {name: "ANG", desc: "NL Antillian Guilder . ANG"},
                {name: "NAD", desc: "Namibia Dollar . NAD"},
                {name: "NPR", desc: "Nepalese Rupee . NPR"},
                {name: "NZD", desc: "New Zealand Dollar . NZD"},
                {name: "NIO", desc: "Nicaraguan Cordoba Oro . NIO"},
                {name: "NGN", desc: "Nigerian Naira . NGN"},
                {name: "KPW", desc: "North Korean Won . KPW"},
                {name: "NOK", desc: "Norwegian Kroner . NOK"},
                {name: "OMR", desc: "Omani Rial . OMR"},
                {name: "PKR", desc: "Pakistan Rupee . PKR"},
                {name: "XPD", desc: "Palladium (oz.) . XPD"},
                {name: "PAB", desc: "Panamanian Balboa . PAB"},
                {name: "PGK", desc: "Papua New Guinea Kina . PGK"},
                {name: "PYG", desc: "Paraguay Guarani . PYG"},
                {name: "PEN", desc: "Peruvian Nuevo Sol . PEN"},
                {name: "PHP", desc: "Philippine Peso . PHP"},
                {name: "XPT", desc: "Platinum (oz.) . XPT"},
                {name: "PLN", desc: "Polish Zloty . PLN"},
                {name: "PTE", desc: "Portuguese Escudo . PTE"},
                {name: "QAR", desc: "Qatari Rial . QAR"},
                {name: "ROL", desc: "Romanian Lei . ROL"},
                {name: "RON", desc: "Romanian New Lei . RON"},
                {name: "RUB", desc: "Russian Rouble . RUB"},
                {name: "RWF", desc: "Rwandan Franc . RWF"},
                {name: "WST", desc: "Samoan Tala . WST"},
                {name: "STD", desc: "Sao Tome/Principe Dobra . STD"},
                {name: "SAR", desc: "Saudi Riyal . SAR"},
                {name: "RSD", desc: "Serbian Dinar . RSD"},
                {name: "SCR", desc: "Seychelles Rupee . SCR"},
                {name: "SLL", desc: "Sierra Leone Leone . SLL"},
                {name: "XAG", desc: "Silver (oz.) . XAG"},
                {name: "SGD", desc: "Singapore Dollar . SGD"},
                {name: "SKK", desc: "Slovak Koruna . SKK"},
                {name: "SIT", desc: "Slovenian Tolar . SIT"},
                {name: "SBD", desc: "Solomon Islands Dollar . SBD"},
                {name: "SOS", desc: "Somali Shilling . SOS"},
                {name: "ZAR", desc: "South African Rand . ZAR"},
                {name: "KRW", desc: "South-Korean Won . KRW"},
                {name: "ESP", desc: "Spanish Peseta . ESP"},
                {name: "LKR", desc: "Sri Lanka Rupee . LKR"},
                {name: "SHP", desc: "St. Helena Pound . SHP"},
                {name: "SDD", desc: "Sudanese Dinar . SDD"},
                {name: "SDP", desc: "Sudanese Old Pound . SDP"},
                {name: "SDG", desc: "Sudanese Pound . SDG"},
                {name: "SRD", desc: "Suriname Dollar . SRD"},
                {name: "SRG", desc: "Suriname Guilder . SRG"},
                {name: "SZL", desc: "Swaziland Lilangeni . SZL"},
                {name: "SEK", desc: "Swedish Krona . SEK"},
                {name: "CHF", desc: "Swiss Franc . CHF"},
                {name: "SYP", desc: "Syrian Pound . SYP"},
                {name: "TWD", desc: "Taiwan Dollar . TWD"},
                {name: "TJS", desc: "Tajikistani Somoni . TJS"},
                {name: "TZS", desc: "Tanzanian Shilling . TZS"},
                {name: "THB", desc: "Thai Baht . THB"},
                {name: "TOP", desc: "Tonga Pa'anga . TOP"},
                {name: "TTD", desc: "Trinidad/Tobago Dollar . TTD"},
                {name: "TND", desc: "Tunisian Dinar . TND"},
                {name: "TRL", desc: "Turkish Lira . TRL"},
                {name: "TRY", desc: "Turkish New Lira . TRY"},
                {name: "TMM", desc: "Turkmenistan Manat . TMM"},
                {name: "UGX", desc: "Uganda Shilling . UGX"},
                {name: "UAH", desc: "Ukraine Hryvnia . UAH"},
                {name: "UYU", desc: "Uruguayan Peso . UYU"},
                {name: "AED", desc: "Utd. Arab Emir. Dirham . AED"},
                {name: "UZS", desc: "Uzbekistan Som . UZS"},
                {name: "VUV", desc: "Vanuatu Vatu . VUV"},
                {name: "VEB", desc: "Venezuelan Bolivar . VEB"},
                {name: "VEF", desc: "Venezuelan Bolivar Fuerte . VEF"},
                {name: "VND", desc: "Vietnamese Dong . VND"},
                {name: "YER", desc: "Yemeni Rial . YER"},
                {name: "YUN", desc: "Yugoslav Dinar . YUN"},
                {name: "ZMK", desc: "Zambian Kwacha . ZMK"},
                {name: "ZWD", desc: "Zimbabwe Dollar . ZWD"}
            ];
              
        function matchDesc(element, index, array) {
            var result = element.desc.toLowerCase().indexOf(text.toLowerCase());
            if (result !== -1) {
                suggestions.push(CmdUtils.makeSugg(element.name));
            }
        }

        if (text.length >= 3) {        
            currencies.filter(matchDesc);
        } else {
            suggestions.push(CmdUtils.makeSugg(text));
        }
          
        return suggestions;
    },
    
    "default": function () {
        return CmdUtils.makeSugg("EUR");
    }
        
};

// == {{{ noun_type_amount}}} ==
// //defines// a new noun type, amount.
//
// The default currency is "1".

var noun_type_amount = {
    label: "amount",
    
    suggest: function (text, html, callback) {
        var suggestions = [];
      
        suggestions.push(CmdUtils.makeSugg(text));
     
        return suggestions;
    },

    "default": function () {
        return CmdUtils.makeSugg("1");
    }

};

// == {{{ fxconvert command }}} ==
// //converts// currencies using 
// [[http://www.oanda.com/convert/classic|Oanda FxConverter service]].
//
// If you don't know the three chars defining a currency, you can type as well
// the user friendly country name.
//
// For instance, fxconvert 10 from japan to finnish

CmdUtils.CreateCommand({
    name: ["fx", "fxconvertor"],
    icon: "http://www.oanda.com/favicon.ico",
    homepage: "http://proplus.aptanacloud.com/ubiquity/fxconvert.html",
    author: {
        name: "Alberto Santini",
        email: "albertosantini@gmail.com"
    },
    license: "MPL",
    description: "Converts currencies using Oanda FxConverter service, " +  
        "helping the user to find the correct three chars code, " + 
        "because it is possible to type the country. " +
        "For instance, fxconvert 10 from japan to finnish",
    help: "Converts currencies using Oanda FxConverter service",         
    
    'arguments': [ 
        {role: 'object', nountype: noun_type_amount, label: 'currency'},
        {role: 'source', nountype: noun_type_currency, lable: 'from'},
        {role: 'goal', nountype: noun_type_currency, lable: 'to'}
    ],
     
    preview: function (pblock, args) {
        var url = "http://www.oanda.com/convert/classic",
            amount = args.object.text,
            currency1 = args.source.text,
            currency2 = args.goal.text;
            
        jQuery.post(url, {
            exch: currency1,
            expr: currency2,
            value: amount              
        }, function (data) {
            var conversion = jQuery(".result_msg", data);
            pblock.innerHTML = conversion[0].innerHTML;           
        }, "html");       
    },
    
    execute: function (object, args) {
        var url = "http://www.oanda.com/convert/classic" + "?",
            param1 = "exch=" + (args.source.text) + "&",
            param2 = "expr=" + (args.goal.text);
            
        Utils.openUrlInBrowser(url + param1 + param2);
    }
      
});


