﻿(function($) {
	$.pageTranslatorWidget = function(el, options)
	{
		var base = this;
		
		// Access to jQuery and DOM versions of element
		base.$el = $(el);
		base.el = el;
		
		base.today = new Date();
		
		base.init = function()
		{
			base.options = $.extend({},$.pageTranslatorWidget.defaultOptions, options);
			
			//define culture info
      cultureCodes = {
        en: { language: "English", translateText: "Translate" },
        fr: { language: "French", translateText: "Traduire" },
        de: { language: "German", translateText: "Nachricht" },
        es: { language: "Spanish", translateText: "Traducir" },
        ja: { language: "Japanese", translateText: "翻訳" },
        zh: { language: "Chinese", translateText: "翻译" },
        it: { language: "Italian", translateText: "Traduci" },
        af: { language: "Afrikaans", translateText: "Vertaal" },
        sq: { language: "Albanian", translateText: "Përkthe" },
        ar: { language: "Arabic", translateText: "ترجمة" },
        be: { language: "Belarusian", translateText: "Перакласці" },
        bg: { language: "Bulgarian", translateText: "Превод" },
        ca: { language: "Catalan", translateText: "Google Traductor" },
        hr: { language: "Croatian", translateText: "Prevoditelj" },
        cs: { language: "Czech", translateText: "Přeložit" },
        da: { language: "Danish", translateText: "Oversæt" },
        nl: { language: "Dutch", translateText: "Bericht" },
        et: { language: "Estonian", translateText: "Tõlge" },
        tl: { language: "Filipino", translateText: "Isalin-wika" },
        fi: { language: "Finnish", translateText: "Käännä" },
        gl: { language: "Galician", translateText: "Traducir" },
        el: { language: "Greek", translateText: "Μετάφραση" },
        he: { language: "Hebrew", translateText: "תרגם" },
        hi: { language: "Hindi", translateText: "अनुवाद करें" },
        hu: { language: "Hungarian", translateText: "Fordítás" },
        is: { language: "Icelandic", translateText: "Þýða" },
        id: { language: "Indonesian", translateText: "Terjemahan" },
        ga: { language: "Irish", translateText: "Aistrigh" },
        ko: { language: "Korean", translateText: "번역" },
        lv: { language: "Latvian", translateText: "Tulkot" },
        lt: { language: "Lithuanian", translateText: "Vertėjas" },
        mk: { language: "Macedonian", translateText: "Преведи" },
        ms: { language: "Malay", translateText: "Terjemahkan" },
        mt: { language: "Maltese", translateText: "Ittraduċi" },
        no: { language: "Norwegian", translateText: "Oversette" },
        fa: { language: "Persian", translateText: "ترجمه " },
        pl: { language: "Polish", translateText: "Przetłumacz" },
        pt: { language: "Portuguese", translateText: "Google Tradutor" },
        ro: { language: "Romanian", translateText: "Traduceţi" },
        ru: { language: "Russian", translateText: "Перевести" },
        sr: { language: "Serbian", translateText: "Преведи" },
        sk: { language: "Slovak", translateText: "Preložiť" },
        sl: { language: "Slovenian", translateText: "Prevedi" },
        sw: { language: "Swahili", translateText: "Tafsiri" },
        sv: { language: "Swedish", translateText: "Översätt" },
        th: { language: "Thai", translateText: "แปล" },
        tr: { language: "Turkish", translateText: "Şu mesajı" },
        uk: { language: "Ukrainian", translateText: "Перекласти" },
        vi: { language: "Vietnamese", translateText: "Dịch" },
        cy: { language: "Welsh", translateText: "Cyfieithu" },
        yi: { language: "Yiddish", translateText: "זעץ איבער" }
      };
    
      //get the users language and display an appropriate translate link
      var url = document.location.protocol == "http:" ? base.options.languageLookupURL : base.options.languageLookupURLSecure;
      $.ajax({
        dataType: 'jsonp',
        json: 'callback',
        url: url,
        success: function (data)
        {          
          var visitorLanguage = "";
          var visitorTranslateText = "";
          
          //only keep the neutral culture code piece
          var visitorCultureParts = data.cultureCode.split("-");          
          var visitorCultureCode = visitorCultureParts[0];
          
          //see if we have culture info for the language of the visitor
          if (cultureCodes[visitorCultureCode])
          {
            visitorLanguage = cultureCodes[visitorCultureCode].language;
            visitorTranslateText = cultureCodes[visitorCultureCode].translateText;  
            
            var siteCultureCode = base.options.siteCultureCode.split("-")[0];

            //if the site language is different from the visitor language then display a Translate link
            //that sends user directly into google's page translator with the To and From languages already
            //specified
            if (visitorCultureCode != siteCultureCode)
            {
              $(base.el).append("<a href='#'>"+visitorTranslateText+"</a>");
              
              $("a", base.el).click(function()
              {
                base.fireWebTrendsTracking(visitorCultureCode, window.location.href);
                window.location = "http://www.google.com/translate_c?hl="+siteCultureCode+"&langpair="+siteCultureCode+"%7C"+visitorCultureCode+"&u=" + window.location.href;
                return false;
              });
            }
            else
            {
              $(base.el).append("<a href='#'>"+visitorTranslateText+"</a>");
              
              //send user to translate homepage with url and languages already filled in
              //so user can select what To language they want
              $("a", base.el).click(function()
              {
                base.fireWebTrendsTracking(visitorCultureCode, window.location.href);
                window.location = "http://translate.google.com/#"+siteCultureCode+"|"+siteCultureCode+"|"+ window.location.href;
                return false;
              });
            }
          }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown)
        {
          //alert(XMLHttpRequest.statusText);
        }
      });      
		}
		
		base.fireWebTrendsTracking = function(visitorCultureCode, pageURL)
		{
		  if (typeof(dcsMultiTrack) != "undefined")
      {
        dcsMultiTrack("DCSext.translateculture", visitorCultureCode, "DCSext.translateurl", pageURL);
      }
		}
		
		base.init();
	};
	
	$.pageTranslatorWidget.defaultOptions = {
    siteCultureCode: "en-US",
    languageLookupURL: "http://vsites.vizergy.com/vsitefiles/widgets/PageTranslator/VisitorLanguage.aspx",
    languageLookupURLSecure: "https://www.vizergy.com/vsitefiles/widgets/PageTranslator/VisitorLanguage.aspx"
	};
	
	$.fn.pageTranslatorWidget = function(options)
	{
		return this.each(function()
		{
			(new $.pageTranslatorWidget(this, options));
		});
	}

})(jQuery);
