if (!window.G1) {
  var G1 = {};
}

/**
 * Handles the function calls from the flash player
 * @class
 */
G1.G2Player = (function () {
    
  var flashReport = function (massage, playerid) {
		var $player = $('#flash_container_'+playerid);
    if ( massage.action ){
      trackingForVideo(massage); return;
    };

	// find all players on site
	var $players = $("object[id^='flash_container_']")
	
	if( massage === "hqonoff" &&  !!jQuery.url.attr("path").match(/^\/blog/) ){
      // BLOG
      if ($player.width() < 800 ) {
		$('body').addClass('play_hq');
        $player.css({ height:'550px', width:'900px' })
      }else{
		$('body').removeClass('play_hq');
        $players.css({ height:'316px', width:'566px' })
      };
      
    }else if( massage==="hqonoff" &&  !!jQuery.url.attr("path").match(/^\/tv/) ){
      // TV
      $('#center').toggleClass('play_hq');
    }else if( massage==="hqonoff" &&  !!jQuery.url.attr("path").match(/^\/playtube/) ){
      // PLAYTUBE
      $('#playtube_video').toggleClass('play_hq');
    }
  };
  
  var trackingForVideo = function(message) {
    if (message.action=='startPlayBtn' || message.action=='playBtn' || message.action=='pauseBtn' || message.action=='playlistNext' || message.action=='playlistPrev' ) {
      var options = {
        galTrackAction: '/g2Player/' + message.action,
        trackIVW: true,
        ivwTag: 'g2Player',
        trackOmniture: false
      };
      G1.Tracking.track(options);
    };
  };
  
  
  var setPosition = function (position, playerid) {

    if (playerid.match(/hq_player/)) {
      var origPlayer = $("[id$='_video_meta_"+playerid.split('-')[1]+"']");      
      origPlayer[0].seekTo(position);
      origPlayer[0].resume();
    }
    
    if (playerid.match(/video_meta/)) {
      var player = $('#flash_container_'+playerid);
      var videoId = player.attr('id').split('_')[5];

      var url = "/playtube/"+videoId+"/embed?format=js&playername=" + 'hq_player-' + videoId + "&usehq=true&jump="+position+"&playerid=" + "hq-player-"+videoId;
      
      jQuery.facebox(function() {
        jQuery.get(url, function(data) {
          var data = $(data);
          jQuery.facebox(data);
          setTimeout(function() { eval( $(data[2]).text() ); },0);
        })
      })
    };    
    
    $(document).bind('close.facebox', function(){
      var popupPlayer = $('#facebox .content').children()[0];
      popupPlayer.getPosition();
    });
    
  };
  
  
  return {
    /**
    * @constructor
    * @public
    */
    init: function(){},
        
    flashReport: function (msg, playerid) { 
      flashReport(msg, playerid);
    },
    setPosition: function (position, playerid) { 
      setPosition(position, playerid);
    }
  };
})();

G1.G2Player.init();

// redirections to G1.G2Player.
function flashReport(msg, playerid) { G1.G2Player.flashReport(msg, playerid);};
function setPosition(position, playerid) { G1.G2Player.setPosition(position, playerid); }

if (!window.G1) { var G1 = {}; }

// http://gameone.local/comments?commentable_id=457909&commentable_type=Post&page=1

/**
 * Adds ajaxified comment
 * funktionallity is pagination and adding new comments
 * @class
 */
 
G1.CommentsForm = {
  _initialized: false,

  // default option
  options: {},

  // merged options object
  _options: {},

  // Extenting the default options with user options.
  setOptions: function (options) {
    options = $.extend(this.options, options || {});
  },

  /**
  * @constructor
  * @public
  */
  init: function(options) {
    // set the options
    options = $.extend(this._options, this.options || {});    
    this.setOptions(options);		

    // check for existence, if not exit.
    var test = [];
    test.push($('#commentform')[0]);
    if (test.length === 0) { return; }

    this._initObserver();
    this._initialized = true; // Mark as initialized		
  },
  
  /**
  * adds the observer for the comments form
  * @private
  */
  _initObserver: function () {
    $('form#commentform').submit(function () {
      G1.CommentsForm._formSubmit(this);
      return false;
    });
    
    $('.comments_pagination a').live("click", function(event){
      G1.CommentsForm._paginate($(this), this);
      return false;
    });  
  },

  /**
  * paginate
  * @private
  */
  _paginate: function(link, element){
    var $link = link;
    var fallbackUrl = element.href;
    var url = "/comments.js"+
                "?commentable_id="+$('#commentable_id').val() +
                "&commentable_type="+$('#commentable_type').val() +
                "&page="+jQuery.url.setUrl(fallbackUrl).param("page");
    
    
    $.ajax({
      type: "GET",
      url: url,
      dataType: "text",
      beforeSend: function(){
        $('.comments_pagination').hide();
        $('#comments_wrapper').addClass('loading');
        $('#respond').hide();
      },
      error: function(respondText){
        document.location = fallbackUrl;
      },
      success: function(respondText){
        $('#comments_wrapper').replaceWith(respondText);
        $('#respond').show();
        FB.XFBML.parse();
				$('.comments .comment, ol.posts li.post').reply();
      }      
    });
  },
  

  /**
  * _formSubmit
  * submit the comment form
  * @private
  */
  _formSubmit: function (formElement) {
    
    //console.log(formElement);
    
    $.ajax({
      data: $.param($(formElement).serializeArray()),
      dataType: 'text/html', 
      type: 'post', 
      url: $(formElement).attr('action'),
      error: function () {
          alert('Error, pleaser reload the browser.');
      },
      beforeSend: function (XMLHttpRequest) {
          $(formElement).addClass('loading');
      },
      success: function (data, textStatus) {
          if (jQuery.url.param('page') == undefined || jQuery.url.param('page') == 1) {
              var html = $(data);

              // wenn error messages vorhanden!
              if ( html.find('input').length > 0 ) {
                  $('#respond form').replaceWith(data);
                  G1.CommentsForm._initObserver();
              } else {
                  if ($('#comments_list').length) {
                      $('#comments_list').prepend(data);
                  } else { // if no comments available
                      $('#respond').before('<ol id="comments_list" class="comments clear">' + data + '</ol>');
                  }

                  // show dialog
                  $('.dialog').dialog('open');
                  $('.dialog .tab').hide();
                  $('#flash_message').show();
                  $('.dialog').addClass('notice');

                  // check if the user is on a comment subPage
                  if (jQuery.url.param('page') == undefined || jQuery.url.param('page') == 1) {
                      $('#flash_message').html("<p>Dein Kommentar wurde gespeichert.</p>");
                  } else {
                      $('#flash_message').html("<p>Dein Kommentar wurde auf der <strong>ersten Seite</strong> der Kommentarliste gespeichert.</p>");
                  }

                  // no comments are allowed for 10 sec.
                  $('#comment_message').val('Bitte warte 10 Sekunden bis zu deinem nächsten Kommentar');
                  $('#commentform textarea, #commentform input').attr('disabled', 'disabled');
                  setTimeout(function () {
                      $('#comment_message').val('Jetzt kannst du!').end().focus().select();
                      $('#commentform textarea, #commentform input').removeAttr('disabled');
                  }, 10000);
              }
    
              if ($('.dialog .reply_to_user').css('display') === 'block') {
                  $('.dialog').dialog('close');
              }

              // html.find('.rating').ajaxified_rating();          
							if (FB.XFBML){ FB.XFBML.parse(); }
          }
      },
      complete: function (XMLHttpRequest, textStatus) {        
          $(formElement).removeClass('loading');        
      }
    });
  }
};

$.extend(G1, G1.CommentsForm);

if (!window.G1) { var G1 = {}; }

/**
 * Handles the AJAX Pagination for search results.
 * @class
 */
G1.AjaxifiedPaging = (function () { 

  /**
  * Adding the event delegation to the pagination elements.
  * @function
  * @private
  */
  var _addObserver = function () {

    // add observer for pagination of direct messages
    $('#mailbox div.pagination a').live('click', function(event) {
      var $this = $(this);

      var new_url = '';

      if (jQuery.url.setUrl($this.attr('href')).attr('query')) {
          new_url = $this.attr('href') + '&format=js';
      } else {
          new_url = $this.attr('href') + '.js';
      }

      _loadMailbox($this, new_url);
      event.preventDefault();
    });

    // add observer for search results
    $('#search_col div.pagination a').live('click', function(event) {
      var $this = $(this);

      var new_url = '';

      if (jQuery.url.setUrl($this.attr('href')).attr('query')) {
          new_url = $this.attr('href') + '&format=js';
      } else {
          new_url = $this.attr('href') + '.js';
      }

      _loadContent($this, new_url);
      event.preventDefault();
    });
    
    $('#games_game .sidebar div.pagination a').live('click', function(event) {
      var $this = $(this);

      var new_url = '';

      if (jQuery.url.setUrl($this.attr('href')).attr('query')) {
          new_url = $this.attr('href') + '&format=js';
      } else {
          new_url = $this.attr('href') + '.js';
      }

      _loadGameSidebarContent($this, new_url);
      event.preventDefault();
    });
  };


  /**
  * Load the specific content and replace the old one.
  * @function
  * @private
  */
  var _loadMailbox = function ($this, new_url) {
    $.ajax({
      url: new_url,
      type: 'GET',
      dataType: 'html',
      cache: false,
      beforeSend: function (XMLHttpRequest) { $this.parents('div:eq(1)').addClass("loading"); },
      success: function(message){ $this.parents('div:eq(1)').replaceWith(message); },
      error: function () { alert("Ein Fehler ist aufgetreten. Bitte die Seite neu laden"); }
    });
  };


  /**
  * Load the specific content and replace the old one.
  * @function
  * @private
  */
  var _loadContent = function ($this, new_url) {
    $.ajax({
      url: new_url,
      type: 'GET',
      dataType: 'html',
      cache: false,
      beforeSend: function (XMLHttpRequest) { $this.parents('div:eq(1)').addClass("loading"); },
      success: function(message){ $this.parents('div:eq(1)').replaceWith(message); },
      error: function () { alert("Ein Fehler ist aufgetreten. Bitte die Seite neu laden"); }
    });
  };
  
  
  /**
  * Load the specific for game sidebar content and replace the old one.
  * @function
  * @private
  */
  var _loadGameSidebarContent = function ($this, new_url) {
    var $parentDiv = $this.parent().parent();
    $.ajax({
      url: new_url,
      type: 'GET',
      dataType: 'html',
      cache: false,
      beforeSend: function (XMLHttpRequest) { 
        $parentDiv.addClass("loading");
        $parentDiv.find("div.pagination").remove();
      },
      success: function(message){ 
        $parentDiv.removeClass("loading"); 
        $parentDiv.find("ul").replaceWith(message);
      },
      error: function () { alert("Ein Fehler ist aufgetreten. Bitte die Seite neu laden"); }
    });
  };

  return {
    /**
    * @constructor
    * @public
    */
    init: function () {
      _addObserver();
    }
  };
})();

if (!window.G1) {
    var G1 = {};
}

G1.dialog = {
  initialized: false,

  // default option
  options: {
      foo: 'bar' // description
  },
  
  // merged options object
  _options: {},
  
  // Extenting the default options with user options.
  setOptions: function (options) {
      options = $.extend(this.options, options || {});
  },


  _init: function (options) {
    // set the options
    options = $.extend(this._options, this.options || {});    
    this.setOptions(options);

    // check for existence
    var test = [];
    test.push($('a#signup_link')[0]);
    test.push($('a#login_link')[0]);

    if (test.length === 0) {
        return;
    }

    var options = {
        modal: true,
        width: 560, 
        bgiframe: true,
        position: 'center', 
        autoOpen: false
    };

    $('.dialog').dialog(options);
  
    this._initObserver();
    this.initialized = true; // Mark as initialized
  },
  
  _initObserver: function () {
    // REZISING
    $('.dialog').bind('dialogopen', function (event, ui) {
      G1.dialog._dialogResize();
    });

    // observer to close login dialog
    $('.dialog a.close_button').bind('click', function (event) {
      $('.dialog').dialog('close');
      event.preventDefault();
      event.stopPropagation();      
    });

    // observer to open login dialog
    $('a#login_link, a.login_link').live('click', function(event) { 
      G1.dialog.openDialogHookForTab('login', event);
    });
    $('a#signup_link').live('click', function(event) { 
      G1.dialog.openDialogHookForTab('signup', event);
    });
    $('a#password_link').live('click', function(event) { 
      G1.dialog.openDialogHookForTab('password_reset', event);
    });
  },
  
  _insertReplyLink: function () {
      if ($('.comments .comment p.header strong').length > 0) {
        $('.comments .comment p.header strong').prepend(this.reply_html_string);
      } else {
        return false;
      }
  },

  _dialogResize: function () {
      setTimeout(function () {
          var height = $('.dialog').find('#dialog_content').height() + 14;
          $('.dialog').find('#dialog_logo').height(height);        
      }, 5 );
  },

  closeDialog: function () {
      $('.dialog').dialog('close');
  },

  openDialogHookForTab: function(tab, event) {
      G1.dialog.openDialogTab(tab, event);        
      event.preventDefault();
      event.stopPropagation();      
  },
  
  openDialogTab: function (tab, clickEvent) {    
      if (clickEvent && $('.ui-dialog').css('display') !== 'block')  {
          $('.dialog').dialog('open');
      } else {
          $('.dialog').dialog('open');
      }

      $('.dialog .tab').hide();

      var tabEl;
      if (typeof tab === 'string') {
          tabEl = $('.dialog #' + tab);
      } else {
          tabEl = $(tab);
      }

      tabEl.show();

      if (tabEl.find('input').length) {
          tabEl.find('input:eq(0)').focus();
      }

      G1.dialog._dialogResize();
      $('.ui-widget-overlay').click(function (event) {
          $('.dialog').dialog('close');
      });

      // Append IVW pixel
      if (tab == "login") {
          var ivw_path = "http://gameone.ivwbox.de/cgi-bin/ivw/CP/anmeldung;ivwpixel";
          $('.dialog .dialog_bottom').append("<img src=\"" + ivw_path + "?r=" + escape(document.location) + "&d=" + (Math.random()*100000) + "\" width=\"1\" height=\"1\" alt=\"szmtag\" style=\"display:none;\" />");
      }
      else if (tab == "signup") {
          var ivw_path = "http://gameone.ivwbox.de/cgi-bin/ivw/CP/registrierung;ivwpixel";
          $('.dialog .dialog_bottom').append("<img src=\"" + ivw_path + "?r=" + escape(document.location) + "&d=" + (Math.random()*100000) + "\" width=\"1\" height=\"1\" alt=\"szmtag\" style=\"display:none;\" />");
      }
  }
};

$.extend(G1, G1.dialog);

(function($){$().ajaxSend(function(a,xhr,s){xhr.setRequestHeader("Accept","text/javascript, text/html, application/xml, text/xml, */*")})})(jQuery);(function($){$.fn.reset=function(){return this.each(function(){if(typeof this.reset=="function"||(typeof this.reset=="object"&&!this.reset.nodeType)){this.reset()}})};$.fn.enable=function(){return this.each(function(){this.disabled=false})};$.fn.disable=function(){return this.each(function(){this.disabled=true})}})(jQuery);(function($){$.extend({fieldEvent:function(el,obs){var field=el[0]||el,e="change";if(field.type=="radio"||field.type=="checkbox"){e="click"}else{if(obs&&field.type=="text"||field.type=="textarea"){e="keyup"}}return e}});$.fn.extend({delayedObserver:function(delay,callback){var el=$(this);if(typeof window.delayedObserverStack=="undefined"){window.delayedObserverStack=[]}if(typeof window.delayedObserverCallback=="undefined"){window.delayedObserverCallback=function(stackPos){observed=window.delayedObserverStack[stackPos];if(observed.timer){clearTimeout(observed.timer)}observed.timer=setTimeout(function(){observed.timer=null;observed.callback(observed.obj,observed.obj.formVal())},observed.delay*1000);observed.oldVal=observed.obj.formVal()}}window.delayedObserverStack.push({obj:el,timer:null,delay:delay,oldVal:el.formVal(),callback:callback});var stackPos=window.delayedObserverStack.length-1;if(el[0].tagName=="FORM"){$(":input",el).each(function(){var field=$(this);field.bind($.fieldEvent(field,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})})}else{el.bind($.fieldEvent(el,delay),function(){observed=window.delayedObserverStack[stackPos];if(observed.obj.formVal()==observed.obj.oldVal){return}else{window.delayedObserverCallback(stackPos)}})}},formVal:function(){var el=this[0];if(el.tagName=="FORM"){return this.serialize()}if(el.type=="checkbox"||self.type=="radio"){return this.filter("input:checked").val()||""}else{return this.val()}}})})(jQuery);(function($){$.fn.extend({visualEffect:function(o){e=o.replace(/\_(.)/g,function(m,l){return l.toUpperCase()});return eval("$(this)."+e+"()")},appear:function(speed,callback){return this.fadeIn(speed,callback)},blindDown:function(speed,callback){return this.show("blind",{direction:"vertical"},speed,callback)},blindUp:function(speed,callback){return this.hide("blind",{direction:"vertical"},speed,callback)},blindRight:function(speed,callback){return this.show("blind",{direction:"horizontal"},speed,callback)},blindLeft:function(speed,callback){this.hide("blind",{direction:"horizontal"},speed,callback);return this},dropOut:function(speed,callback){return this.hide("drop",{direction:"down"},speed,callback)},dropIn:function(speed,callback){return this.show("drop",{direction:"up"},speed,callback)},fade:function(speed,callback){return this.fadeOut(speed,callback)},fadeToggle:function(speed,callback){return this.animate({opacity:"toggle"},speed,callback)},fold:function(speed,callback){return this.hide("fold",{},speed,callback)},foldOut:function(speed,callback){return this.show("fold",{},speed,callback)},grow:function(speed,callback){return this.show("scale",{},speed,callback)},highlight:function(speed,callback){return this.show("highlight",{},speed,callback)},puff:function(speed,callback){return this.hide("puff",{},speed,callback)},pulsate:function(speed,callback){return this.show("pulsate",{},speed,callback)},shake:function(speed,callback){return this.show("shake",{},speed,callback)},shrink:function(speed,callback){return this.hide("scale",{},speed,callback)},squish:function(speed,callback){return this.hide("scale",{origin:["top","left"]},speed,callback)},slideUp:function(speed,callback){return this.hide("slide",{direction:"up"},speed,callback)},slideDown:function(speed,callback){return this.show("slide",{direction:"up"},speed,callback)},switchOff:function(speed,callback){return this.hide("clip",{},speed,callback)},switchOn:function(speed,callback){return this.show("clip",{},speed,callback)}})})(jQuery);

if (!window.G1) {
    var G1 = {};
}

G1.Tagging = (new function () {
    var _taggers = {};
    var TAGGER_MINIMUM_STRING_RESEARCH_LENGTH = 2;
    var TAGGER_MAXIMUM_DISPLAY_TAGS = 10;
    var TAG_DELIMETER = '|-|';
    
    function Tagger (id, taggerName, startTags) {
        var _tags = [];
        var _tagsWithoutCase = [];
        var _selectedIndex = 0;
        var SELECTED_CLASS_NAME = 'tag_selected';
        var _tagIdsToDisplay;
        
        var _usedTagIds = [];
        var $tagger = $('#' + id);
        $tagger.attr('autocomplete', 'off');
        
        $tagger.after('<ul id="usedtags_' + taggerName + '" class="used_tags"></ul>');
        var $usedTagList = $('#usedtags_' + taggerName);
        
        $usedTagList.hide();
        $usedTagList.bind('click', removeTag);
                        
        function removeTag (event) {
            event.preventDefault();
            event.stopPropagation();
            
            var $target = $(event.target);
            var tagId = $target.attr('id').split('tagid_')[1];
            
            for (var i = 0, count = _usedTagIds.length; i < count; ++i) {
                if (_usedTagIds[i] == tagId) {
                    _usedTagIds.splice(i, 1);
                }
            }
                        
            showUsedTagList();
            hideTaggerList();
            $tagger.focus();
            
            computeUsedTags();
        }
        
        $tagger.after('<input type="hidden" name="' + taggerName + '_tag_values" id="' + taggerName + '_tag_values" value="'+startTags+'"/>');

        $tagger.after('<ul id="taggerlist_' + taggerName + '" class="taglist"></ul>');
        var $taggerList = $('#taggerlist_' + taggerName);
        
        $taggerList.hide();
        $taggerList.bind('click', selectTag);
        
        startTags = startTags.toLowerCase().split(TAG_DELIMETER);

        function computeTagsUsedAtStartup () {
            var tagId;
        
            for (var i = 0, count = startTags.length; i < count; i++) {
                tagId = getTagIdByTag(startTags[i]);
                
                if (tagId) {
                    useTag(tagId);
                }
            }
        }
        
        function getTagIdByTag (tag) {

            for (var i = 0, count = _tagsWithoutCase.length; i < count; i++) {
                if (_tagsWithoutCase[i] == tag) {
                    return i;
                }
            }
            
            return undefined;
        }
        
        function selectTag (event) {
            event.preventDefault();
            event.stopPropagation();
            
            var $target = $(event.target);
            var tagId = $target.attr('id').split('tagid_')[1];
            
            useTag(tagId);
        }
        
        function useTag (tagId) {
            _usedTagIds.push(tagId);
            
            showUsedTagList();
            hideTaggerList();
            $tagger.val('').focus();
            
            computeUsedTags();
        }
        
        function computeUsedTags () {
            var usedTags = [];
            
            for (var i = 0, count = _usedTagIds.length; i < count; i++) {
                usedTags.push(_tags[_usedTagIds[i]]);
            }
 
            $('#' + taggerName + '_tag_values').val(usedTags.join('|-|'));
        }
        

        function showUsedTagList () {
            resetUsedTagList();
            
            for (var i = 0, count = _usedTagIds.length; i < count; ++i) {
                $usedTagList.append('<li id="' + taggerName + '_used_tagid_' + _usedTagIds[i] + '">' + _tags[_usedTagIds[i]] + '</li>');
            }

            $usedTagList.show();

        }

        function resetUsedTagList () {
            $usedTagList.empty();
            _selectedIndex = 0;
        }
        
        
        this.hasTags = function () {
            return _tags.length !== 0;
        };

        this.setTags = function (tags) {
            _tags = tags.split(TAG_DELIMETER);
            _tagsWithoutCase = tags.toLowerCase().split(TAG_DELIMETER);
            
            computeTagsUsedAtStartup();
        };
        
        //$.getScript('/'+taggerName + '/' + taggerName + '_tags.js');
        
        function shouldShowTaggerList () {
            return $tagger.val().length >= TAGGER_MINIMUM_STRING_RESEARCH_LENGTH;
        }
        
        function isUsedTagId (tagIdToCompare) {
            var isTagIdUsed = false;
            
            for (var i = 0, count = _usedTagIds.length; i < count; ++i) {

                if (_usedTagIds[i] == tagIdToCompare) {
                    isTagIdUsed = true;
                    break;
                }
            }
            
            return isTagIdUsed;
        }
        
        function computeTagIdsToDisplay () {
            var taggerValue = $tagger.val().toLowerCase();
            var tagIdsToDisplay = [];
            
            for (var i = 0, count = _tags.length; i < count; ++i) {
                
                if(_tagsWithoutCase[i].indexOf(taggerValue) !== -1) {
                    
                    if (isUsedTagId(i)) {
                        continue;
                    }
                    
                    tagIdsToDisplay.push(i);
                    
                    if (tagIdsToDisplay.length >= TAGGER_MAXIMUM_DISPLAY_TAGS) {
                        break;
                    }
                }
            }
            
            return tagIdsToDisplay;
        }

        function hideTaggerList () {
            $taggerList.hide();
            resetTaggerList();
        }
        
        function showTaggerList () {
            resetTaggerList();

            _tagIdsToDisplay = computeTagIdsToDisplay();
            
            if (_tagIdsToDisplay.length == 0) {
                hideTaggerList();
                return;
            }
    
            for (var i = 0; i < _tagIdsToDisplay.length; i++) {

                $taggerList.append('<li id="' + taggerName + '_tagid_' + _tagIdsToDisplay[i] + '" class="tag_' + i + '">' + _tags[_tagIdsToDisplay[i]] + '</li>');
            }
            
            if (_selectedIndex > _tagIdsToDisplay.length - 1) {
                _selectedIndex = 0;
            }

            $taggerList.children().removeClass(SELECTED_CLASS_NAME);
            $($taggerList.children().get(_selectedIndex)).addClass(SELECTED_CLASS_NAME);
            
            var left = $tagger[0].offsetLeft;
            var top = $tagger[0].offsetTop + $tagger[0].offsetHeight;
            $taggerList.css({"left" : left+"px","top" : top+"px"});
            
            $taggerList.show();
        }
        
        function resetTaggerList () {
            $taggerList.empty();
        }
        
        function keyUp (event) {
            switch (event.keyCode) {
                case 38:
                    _selectedIndex = Math.max(--_selectedIndex, 0);
                    break;
                case 40:
                    _selectedIndex = Math.min(++_selectedIndex, (_tagIdsToDisplay.length - 1));
                    break;
            }

            valueChanged(event);
        }
        
        function keyDown (event) {
            if (event.keyCode == 13) {
                    event.preventDefault();
                    event.stopPropagation();
            
                    var element = $taggerList.children().get(_selectedIndex);
                    if (!element) {
                        return;
                    }
            
                    var tagId = $(element).attr('id').split('tagid_')[1];
                    useTag(tagId);
            }
            
            valueChanged(event);
        }
        
        function valueChanged (event) {
            
            if (!shouldShowTaggerList()) {
                hideTaggerList();
                return;
            }
            
            showTaggerList();
        };

        $tagger.bind('keypress', valueChanged);
        $tagger.bind('keydown', keyDown);
        $tagger.bind('keyup', keyUp);

        return this;
    }
    
    this.setTagsForTaggerName = function (tags, taggerName) {
        var tagger = _taggers[taggerName];
        
        if (!tagger) {
            return;
        }
        
        tagger.setTags(tags);
        
    };
    
    this.canCreateTaggerWithId = function (id) {
        return ($('input#' + id + '[type=text]').length !== 0);
    };
    
    this.createTaggerWithIdAndTaggerName = function (id, taggerName, startTags) {
        if (!this.canCreateTaggerWithId(id)) {
            console.error('You can not create a Tagger with the id "' + id + '". Please use the method G1.Tagging.canCreateTaggerWithId(\'' + id + '\') to check if the Tagger can become created.');
            return undefined;
        }
        
        _taggers[taggerName] = new Tagger(id, taggerName, startTags);
        
        return _taggers[taggerName];
    };
    
    return {
        createTaggerWithIdAndTaggerName: this.createTaggerWithIdAndTaggerName,
        canCreateTaggerWithId: this.canCreateTaggerWithId,
        setTagsForTaggerName: this.setTagsForTaggerName
    };
});


/*
 * Tracking
 * IVW
 * Omniture
 * AGOF
 * GoogleAnalytics
 *
 * Trigger it with:
 *  - $('body').trigger('tracking')
 *
 *    you can pass additional data within the event:
 *      $('body').trigger(trackingEvent);
 *      $('body').trigger({ type: "tracking"[, ivwTrackAction: "rab", ivwTag: "string", ivwPath: "foo", galTrackAction:"bar"] });
 *  
 *  - OR call the function: 
 *    G1.Tracking.track([options]);
 *    with the an optional object:
 *      var options = { 
 *        galTrackAction: "string", 
 *        ivwPath: "string",
 *        ivwTag: "string",
 *        ivwTrackAction: "string"
 *      };
 * 
 */
 
// check namespace
if (!window.G1) { var G1 = {}; }

G1.Tracking = (function () { 
  //'private static' variables and methods
  var _options; 
  var _defaultOptions = {
    galTrackAction: false,
    ivwPath: false,
    ivwTag: false,
    ivwTrackAction: false,
    trackIVW: false,
    trackOutGoingLinks: false,
    trackOmniture: true
  };
  
	var _getOption = function (name) {
		return _options[name];
	};
	
  var _init = function(options) { 
    _options = $.extend(_defaultOptions, options || {});
    _addBindings();
  };
  
  var _addBindings = function() {
    $('body').bind('tracking', _track);
    if (_options.trackOutGoingLinks) {
      var outgoingLinks = $("a[href^='http://']");
      outgoingLinks.bind('click', _trackOutgoingLink);
    };
  };
  
  var _track = function(event) {
    var ivwTrackAction = event.ivwTrackAction == undefined ?  _options.ivwTrackAction : event.ivwTrackAction;
    var ivwTag = event.ivwTag == undefined ? _options.ivwTag : event.ivwTag;
    
    var trackIVW = event.trackIVW== undefined ? _options.trackIVW : event.trackIVW;
    var trackOmniture = event.trackOmniture == undefined ?  _options.trackOmniture : event.trackOmniture;
    
		var galTrackAction = event.galTrackAction == undefined ? _options.galTrackAction : event.galTrackAction;

    if (_options.ivwPath && event.trackIVW){
      _trackIVW(ivwTrackAction, ivwTag);
    };
    
    // Google Analytics
    if ( galTrackAction ){ 
      _trackGoogleAnalytics( galTrackAction ); 
    };

    if(trackOmniture){
      _trackOmniture(ivwTag);
    }    
  };
  
  var _trackOutgoingLink = function(){
    var outgoingPageUrl = '/outgoing/' + this.href.split('http://')[1];
    
    // Google Analytics
    _trackGoogleAnalytics(outgoingPageUrl);
  };
  
  var _trackIVW = function(ivwTrackAction, ivwTag){
    var ivwTrackAction = ivwTrackAction;
    var ivwTag = ivwTag;
    if (_options.ivwPath) {
      try {
        $('body').append("<img src=\"" + _options.ivwPath + "/cgi-bin/ivw/CP/"+ivwTag+";ivwpixel" + "?r=" + escape(ivwTrackAction) + "&d=" + (Math.random()*100000) + "\" width=\"1\" height=\"1\" alt=\"szmtag\" style=\"display:none;\" />");
      } catch(err) {};
    };
  };
  
  var _trackGoogleAnalytics = function(galTrackAction){
    if (pageTracker){
      try {
        pageTracker._trackPageview(galTrackAction);
      } catch(err) {};
    };
  };
  
  var _trackOmniture = function(ivwTag){
		com.mtvi.reporting.Controller.sendCall({
			pageName: com.mtvi.metadata.getDefaultPageName(),
	    channel: com.mtvi.metadata.getDefaultChannel(),
	    prop1: G1.GLOBALS.PAGE_TITLE,
	    prop2: 'gameone.de' + location.pathname, 
	    prop4: ivwTag, 
	    hier1: 'gameone.de' + '/' + location.pathname,
	    campaign: MTVNI.qsData.s_cid
  	});
  };
  
  /*
   * Constructor
   * @params options Object.
   */
  return {   
    init: function (options) { _init(options); },
    track: function (options) { _track(options); },
		getOption: function (name) { return _getOption(name); }
  };
})();