var googleLangFunc = function() {
  var googleLanguages = google.language.Languages;
  /**
   * Setting a cookie with choosed language
   */
  function googleTranslateSwitchLanguage(lang){
    Cookie.write('google-lang', lang, {path: '/'});
    var language = (lang.substring(0, 1) + lang.substring(1).toLowerCase()).replace('_', ' ');

    $$('a.tl-lang').each(function(langLink){
      langLink.set('html', language);
    });
  }
  function getGoogleTranslateLanguage() {
    return (Cookie.read('google-lang') ? (Cookie.read('google-lang').substring(0, 1) + Cookie.read('google-lang').substring(1).toLowerCase()).replace('_', ' ') : 'English');
  }
  /**
   * Topics
   */
  $$('div.tpc a.tl-action').addEvent('click', function(event) {
      event.stop();
      var topic_number = /topic_(\d*)/i.exec(this.getParent('div.topic').get('id'));
      SqueezeBox.open('http://translate.google.com/translate?u=' + SERVER_WEB_ROOT + '%2Ftranslate%2Ftopic%2F' + topic_number[1] + '&sl=auto&tl=' + (googleLanguages[Cookie.read('google-lang')] || 'en') + '&ie=UTF-8', {handler: 'iframe'});
  });
  /**
   * Comments
   */
  $$('div.comment div.translate-link a.tl-action').addEvent('click', function(event) {
      event.stop();
      var topic_number = /comment_id_(\d*)/i.exec(this.getParent('div.comment').get('id'));
      SqueezeBox.open('http://translate.google.com/translate?u=' + SERVER_WEB_ROOT + '%2Ftranslate%2Fcomment%2F' + topic_number[1] + '&sl=auto&tl=' + (googleLanguages[Cookie.read('google-lang')] || 'en') + '&ie=UTF-8', {handler: 'iframe'});
  });
  /**
   * Show language list on click
   */
  $$('a.tl-lang').addEvent('click', function(event) {
    event.stop();
    /**
     * remove all existing lists
     */
    $$('.translate-languages').dispose();
    /**
     * insert list of available languages
     */
    var listContainer = new Element('div', {'class': 'translate-languages'});
    var languageList = new Element('ul', {'class': 'translate-languages-absolute'});
    for (var i in googleLanguages){
      var langItem = new Element('li');
      var langLink = new Element('a', {'href': '#' + i, 'html': i.toLowerCase()});
      langLink.inject(langItem);
      langItem.inject(languageList, 'bottom');
    }
    languageList.inject(listContainer);
    /**
     * Put opening list near touched link
     */
    var linkPosition = this.getCoordinates();
    listContainer.setStyles({ 'position': 'absolute',
                            'top':      linkPosition.top - 15,
                            'left':     linkPosition.right + 15,
                            'width':    '150px',
                            'height':   '200px'
                          });
    $$('body').grab(listContainer);
    $$('ul.translate-languages-absolute li a').addEvent('click', function(chooseEvent) {
      chooseEvent.stop();
      googleTranslateSwitchLanguage(this.get('href').substring(this.get('href').indexOf('#') + 1));
      $$('.translate-languages').dispose();
    });

  });
  /**
   * hide all language lists on clicking on document
   */
  $$('body').addEvent('click', function() {
    $$('.translate-languages').dispose();
  })
};

window.addEvents({
      'domready': googleLangFunc,
      'shownewcomments': googleLangFunc
});

