﻿// AJAX JS
// Publishing Date: 27.07.2010 10:49


// #############################################################################
// ### Dicitionary object
// #############################################################################

function Dictionary(values) {
    this.lang = new Array("de_DE", "en_GB", "en_ZA", "es_ES", "it_IT", "nl_NL", "nl_BE", "fr_FR", "fr_BE", "pt_PT", "ru_RU");
    //set Values
    for(i=0;i<=(values.length-1);i++){
        this.lang[this.lang[i]] = values[i];
    }
    if (typeof Dictionary._initialized == "undefined") {
        Dictionary.prototype.showValueForLang = function (lang) {
            return this.lang[lang];
        }
        Dictionary._initalized = true;
    }
}

var starsDictionary = new Dictionary(new Array(" Sterne", " Stars"," Stars", " Estrellas"," Stelle"," sterren"," sterren"," Étoiles"," Étoiles"," Estrelas"));
var simultaneousDictionary = new Dictionary(new Array("Abwechselnd", "Alternating", "Alternating", "Por turnos","Alternati","Om beurten","Om beurten","Alterné","Alterné","Por turnos"));
var alternatingDictionary = new Dictionary(new Array("Simultan", "Simultaneous", "Simultaneous", "Simultáneo","Contemporaneamente","Tegelijkertijd","Tegelijkertijd","Simultané","Simultané","Simultâneo"));


// #############################################################################
// ### login/logout functions
// #############################################################################

// shows login form when clicking on the "login" button
function showLoginForm() {
    fadeDiv('login_wrapper',0.5); 
    appearDiv('login_form_wrapper', 0.5, 'end'); 
    return false;    
}


// get login status of the user (when loading the page)
function getLoginStatus(json_url) {
    //var json_url = "";
    new Ajax.Request(json_url, { 
    method:'post',
    requestHeaders: {Accept: 'application/json'},
        onComplete: function(transport){
            var json = transport.responseText.evalJSON();
            // if user is logged in
            if (json.authenticated) {
                // fill out user data and show it
                showUserInfo(json.user);
                // hide "join" link & show "register product" link
                $('join').hide();
                $('register').show();
                // hide login button & login form
                $('login_wrapper').hide();
                $('login_form_wrapper').hide();
                // show user data
                $('user_data_wrapper').show();
            }
            else {
                // hide "register product" link & show "join" link
                $('join').show();
                $('register').hide();
                // show login button
                $('login_wrapper').show();
                // hide login form & user data
                $('login_form_wrapper').hide();
                $('user_data_wrapper').hide();
          }
        }
    });
}

// login the user with entered user data
function performLogin() {
    // submit login form
    $('login_form').request({
      method: 'post',
      onLoading: function(transport){
        $('user_data_loading').show();     
      },
      onComplete: function(transport){
          $('user_data_loading').hide(); 
          var json = transport.responseText.evalJSON();
          // if user is logged in
          if (json.authenticated) {
              // redirect to club nintendo page
              window.location = "/NOE/"+json.user.locale+"/index_club-fwd.jsp";          
          }
          // else show error message
          else {
              showErrorMessage(json.error);
          }
      }
    })
}


// logout the user
function performLogout() {
  // submit logout form
    $('logout_form').request({
      method: 'post',
      onComplete: function(transport){
          var json = transport.responseText.evalJSON();
          // if logout was successful reload the page
          if (json.authenticated == false) {
              //window.location.reload();    
              var locale = window.location.pathname.split("/")[2];
              window.location = "/NOE/"+locale+"/index_club-fwd.jsp";   
          }
          // else show error message
          else {
              showErrorMessage(json.error);
          }
      }
    })
}


// fill out user data
function showUserInfo(user) {
    // set user data
    var userData = $('user_data');
    userData.title = user.userName;
    userData.innerHTML = user.userName;
    // set stars data
    var starsData = $('star_data');
    (user.starsAmount != null) ? starsData.title = user.starsAmount + starsDictionary.showValueForLang(user.locale) : starsData.title = 0;    
    (user.starsAmount != null) ? starsData.innerHTML = user.starsAmount : starsData.innerHTML = 0;
    // set message data
    // var messageData = $('message_data');
    // if user has no new messages
    /* if (user.newMessages == "0") {
    messageData.title = 'No new messages';
    messageData.innerHTML = '';
    }
    // if there are new messages for the user
    else {
        messageData.title = user.newMessages + ' New messages'
        messageData.innerHTML = user.newMessages + ' New';
    }*/
}

// show error message
function showErrorMessage(error) {
    // hide "forgot password" link and "remember me" checkbox
    $('forgotpw').hide();
    $('login_remember_wrapper').hide();
    // set red border around input fields
    $('login_username').style.border = "1px solid #eb1e25";
    $('login_password').style.border = "1px solid #eb1e25";
    // show error message container & set error message
    $('login_error_wrapper').show();
    $('login_error').innerHTML = error.errorMessage;
}



// #############################################################################
// ### gamefinder functions
// #############################################################################

// sets field values according to the updated element and submits form
function updateGameFinderForm(updatedElement) {
  // set hidden fields
  switch (updatedElement) {
    case 'ff_sort':           // sort by
      $('sortByName').value = ($F(updatedElement)=='Name') ? 'true' : 'false';
      $('sortByReleaseDate').value = ($F(updatedElement)=='ReleaseDate') ? 'true' : 'false';
      $('sortBySystemType').value = ($F(updatedElement)=='SystemType') ? 'true' : 'false';
      break;
    case 'list':              // list view
      $('viewTypeList').value = 'true';
      $('viewTypeThumbs').value = 'false';
      changeClassName('list','list-aktiv'); 
      changeClassName('thumbs','thumbs'); 
      break;
    case 'thumbs':            // thumb view
      $('viewTypeList').value = 'false';
      $('viewTypeThumbs').value = 'true';
      changeClassName('thumbs','thumbs-aktiv'); 
      changeClassName('list','list'); 
      break;
    case 'cb_tg':             // touch generations games
    case 'cb_wifi':           // wi-fi compatibility
    case 'cb_connectivity':   // wii/ds connectivity
    case 'cb_wii24':          // wiiconnect24
    case 'cb_npc':            // new play control
    case 'cb_club':           // club nintendo games
    case 'cb_console':        // virtual console
    case 'cb_wii_motion':     // wii motion plus
    case 'cb_balance_board':  // balance board
      if ($(updatedElement).checked) $(updatedElement).value = 'true';
      else $(updatedElement).value = 'false';
      break;
    default:
//      alert(updatedElement);
  }
  $('firstResult').value = 0;
  submitGameFinderForm();
}


// Stars slider for games finder
function initGameFinderStarsSlider(pointer1, pointer2, bar, maxValue, span, inc, stars_left, stars_right){
    
  var werte= new Array();                 
  for (i=0; i<=(maxValue/inc); i++ ){
    werte[i]=i*inc;
  }
                                              
  new Control.Slider([pointer1, pointer2], bar,{ 
    sliderValue:[0, maxValue+inc], range: $R(0, maxValue+inc), restricted:true, spans:[span],
    increment:[inc], values:werte,
    onSlide:function(v){      
      $(stars_left).innerHTML=v[0];
      $(stars_right).innerHTML=v[1];
    },
    onChange:function(v){
      $(stars_left).innerHTML=v[0];
      $(stars_right).innerHTML=v[1];
      $('minStars').value = v[0];
      $('maxStars').value = v[1];
      $('firstResult').value = 0;
      submitGameFinderForm();
    }                                      
  });
}


// submits the gamefinder form
function submitGameFinderForm(){
  // post form
  if ($('game_content') != null && $('game_content').visible()) {
    $('game_content').hide();
    $('game_finder').show();
  }
  
  $('gamefinder_form').request({
    method: 'get',
    onSuccess: function(transport){ 
          var json = transport.responseText.evalJSON();
      // remove old results
//      removeElements('gamefinder_results','game-big');
      $('gamefinder_results').innerHTML = '';
          $('no_games_found').hide();
          
        if (json.metaData.itemCount > 0) {
                // insert new results
            json.resultList.each(function(item){
                new Insertion.Bottom('gamefinder_results', item);
            })
        }
        else {
            // show error message
            $('no_games_found').show();
        }
      // show number of results
      $('total_items').innerHTML = json.metaData.itemCount;

      // show result label if element is existing
      if ($('label_items') && $('label_one_item')) {
        if (json.metaData.itemCount == 1) {
            $('label_items').hide();
            $('label_one_item').show();
        }
        else {
            $('label_items').show();
            $('label_one_item').hide();
        }
      }

      $('firstResult').value = json.metaData.firstResult;
      // clear paging-navi and insert new pages
      updatePaging(json.metaData.firstResult + 1,'gameFinder');
    },
    onComplete: function(transport) { 
        if(checkIE()) {
            //show results in IE
           if ($('list').className == 'list-aktiv') {
             //$('gamefinder_results').getElementsByClassName('game-big').each(function(item){
             $('gamefinder_results').select('.game-big').each(function(item){
                item.show();
             });   
           }
           else if ($('thumbs').className == 'thumbs-aktiv') {
            //$('gamefinder_results').getElementsByClassName('thumb').each(function(item){
            $('gamefinder_results').select('.thumb').each(function(item){
                item.show();
            });
           }
        }
        else {
            // fade-in the results for other browsers 
           if ($('list').className == 'list-aktiv') initFading('gamefinder_results', 'game-big');
           else if ($('thumbs').className == 'thumbs-aktiv') initFading('gamefinder_results', 'thumb');
        }  
    }
  });
}


var search_features = new Array();
search_features['system_type_wii'] = new Array('cb_wifi','cb_connectivity', 'cb_wii24', 'cb_club', 'cb_npc', 'cb_wii_motion', 'cb_balance_board');
// search_features['system_type_wii'] = new Array('cb_wifi','cb_connectivity', 'cb_wii24', 'cb_club', 'cb_npc');
search_features['system_type_nds'] = new Array('cb_wifi','cb_connectivity', 'cb_club');
search_features['Old Systems'] = new Array('cb_club');


// update Features in order to selected System
function updateFeatures(){
    var selectedSystem= $('ff_system').options[$('ff_system').selectedIndex].id;
    //var features = $('game-search-advanced').getElementsByClassName('search-cb');
    var features = $('game-search-advanced').select('.search-cb');
    
    //disable all
    features.each(function(itemSystem) {
        itemSystem.disabled='disabled';    
    });
    
    // enable features for selected system
    if(selectedSystem=='system_type_nds' || selectedSystem=='system_type_wii'){
        search_features[selectedSystem].each(function(id){
            $(id).disabled='';                
        });
    } else if (selectedSystem=="system_type_gba" || selectedSystem=='system_type_gb' || selectedSystem=='system_type_gc' || selectedSystem=='system_type_n64' || selectedSystem=='system_type_pm'){
        search_features['Old Systems'].each(function(id){
            $(id).disabled = '';
        });
    } else{
        features.each(function(itemSystem) {
            itemSystem.disabled = '';
        });
    }
    //set element inactiv and disable
    features.each(function(itemSystem) {
            if (itemSystem.disabled && itemSystem.checked){
                itemSystem.value = 'false';
                itemSystem.checked = '';    
            }                   
    });
}


// Initializing Gamesfinder - Sliderbar
function initGamesSlider (pointer, bar, initValue, barValues, range, span, arrAgeValues){
  var slider_handle = new Control.Slider (pointer, bar, { 
    sliderValue: initValue, values: barValues, range: range, startSpan: span,
    onChange: function(value){
     switch(value){
        case 0: $('ageRating').value = arrAgeValues[value]; break;
        case 1: $('ageRating').value = arrAgeValues[value]; break;
        case 2: $('ageRating').value = arrAgeValues[value]; break;
        case 3: $('ageRating').value = arrAgeValues[value]; break;
        case 4: $('ageRating').value = arrAgeValues[value]; break;
      } 
      $('firstResult').value = 0;
      submitGameFinderForm();
    }
  });
}


function showStandardSearch(id){
    new Effect.BlindUp('game-search-advanced'); 
    $(id).hide();
    $('advanced').show();
    
    if ($('ff_system_hidden') != null) { 
        var selectedIndex = $('ff_system').options.selectedIndex;
        var selectedClassName = $('ff_system').options[selectedIndex].className;
        if(selectedClassName == 'standard') {
           $('ff_system').options[selectedIndex].selected = 'selected';
        } 
        else {
           $('ff_system').options[0].selected = 'selected'; 
           //$('game-search-advanced').getElementsByClassName('search-cb').each(function(itemFeature) {
           $('game-search-advanced').select('.search-cb').each(function(itemFeature) {
              itemFeature.value = 'false';
              itemFeature.disabled = '';
              itemFeature.checked = '';                   
           });
           submitGameFinderForm();
        } 
        //var elements = $('ff_system').getElementsByClassName('advanced');
        var elements = $('ff_system').select('.advanced');
        elements.each(function(item){
            $('ff_system').removeChild(item);
            $('ff_system_hidden').appendChild(item);
        });
    }
}


function showAdvancedSearch(id){
    new Effect.BlindDown('game-search-advanced'); 
    $(id).hide();
    $('standard').show();
    
    if ($('ff_system_hidden') != null) {
        //var elements = $('ff_system_hidden').getElementsByClassName('advanced');
        var elements = $('ff_system_hidden').select('.advanced');
        var selectedIndex = $('ff_system').options.selectedIndex;
        elements.each(function(item){
            $('ff_system_hidden').removeChild(item);
            $('ff_system').appendChild(item); 
        }); 
        //$('ff_system').options[selectedIndex].selected = 'true';
        //Opera workaround
        if(navigator.appName == 'Opera') { }
        else {$('ff_system').options[selectedIndex].selected = 'true';}
    }
}



// #############################################################################
// ### mini gamefinder functions
// #############################################################################

// sets field values according to the updated element and submits form
function updateMiniGameFinderForm(updatedElement) {
  // set hidden fields
  switch (updatedElement) {
      case 'link-tab-1': //Upcoming
        break;
      case 'link-tab-2': //Top
        break;
  }
  submitMiniGameFinderForm();
}

// submits the gamefinder form
function submitMiniGameFinderForm(){
  // post form
  $('minigamefinder_form').request({
    method: 'get',
    onSuccess: function(transport){ 
        var json = transport.responseText.evalJSON();
        // remove old results
        $('minigamefinder_results').innerHTML = '';          
        // insert new results
        json.resultList.each(function(item){
            new Insertion.Bottom('minigamefinder_results',item);
      })
      },
    onComplete: function(transport) {
    
        if(checkIE()) {
            //show results in IE
            //$('minigamefinder_results').getElementsByClassName('game-mini').each(function(item){
            $('minigamefinder_results').select('.game-mini').each(function(item){
                item.show();
            });
        }
        else {
            // fade-in the results  
           initFading('minigamefinder_results', 'game-mini');
        }
    }
  });
}

//Initializing  Mini-Gamesfinder - Scroller
function initScroller (pointer, bar, axis, content){
        var vertical_slider =     new Control.Slider (pointer, bar, {
            axis: axis,
            onSlide: function(v) { scrollVertical(v, $(content), vertical_slider);  },
            onChange: function(v) { scrollVertical(v, $(content), vertical_slider); }
        }
    );
}
                                                    
// scroll the element vertically based on its width and the slider maximum value
function scrollVertical(value, element, slider) {
    element.scrollTop = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
}
                    
// Mini-Gamesfinder change Tabs
function changeTab(label, labelClass, tab, tabClass){
    previousTabs = $(tab).previousSiblings();
    nextTabs = $(tab).nextSiblings();
     
    // previous Tabs (reset Tab + Label) 
    previousTabs.each(function(item) {        
            if (item.className==tabClass){ item.removeClassName(tabClass);}
            if (item.down(0).className==labelClass){ item.down(0).removeClassName(labelClass) }            
    });
     
    // next Tabs (reset Tab + Label) 
    nextTabs.each(function(item) {
            if (item.className==tabClass){ item.removeClassName(tabClass)}    
            if (item.down(0).className==labelClass){ item.down(0).removeClassName(labelClass) }        
    }); 
      
    $(tab).className = tabClass; 
    $(label).className = labelClass; 
    
    switch(tab) {
    case 'tab-1': //Upcoming
      $('radio_tab_1').show();
      $('radio_tab_2').hide();
      $('filterTop').value = 'false';
      $('filterUpcomingGame').value = 'true';
      break;
    case 'tab-2': //Top
      $('radio_tab_1').hide();
      $('radio_tab_2').show();
      $('filterTop').value = 'true';
      $('filterUpcomingGame').value = 'false';
      break;
  }
    
  updateMiniGameFinderForm(label);
}


// #############################################################################
// ### stars Item Finder functions
// #############################################################################

// Initializing Cataloguefinder - Sliderbar
function initCatalogueSlider(pointer1, pointer2, bar, maxValue, span, inc, stars_left, stars_right){
        
  var werte= new Array();                 
  for (i=0; i<=(maxValue/inc); i++ ){
    werte[i]=i*inc;
  }
                                              
  new Control.Slider([pointer1, pointer2], bar,{ 
    sliderValue:[0, maxValue+inc], range: $R(0, maxValue+inc), restricted:true, spans:[span],
    increment:[inc], values:werte,
    onSlide:function(v){      
      $(stars_left).innerHTML=v[0];
      $(stars_right).innerHTML=v[1];
    },
    onChange:function(v){
      $(stars_left).innerHTML=v[0];
      $(stars_right).innerHTML=v[1];
      $('minStars').value = v[0];
      $('maxStars').value = v[1];
      $('firstResult').value = 0;
      submitStarsItemFinder();
    }                                      
  });
}

function changeSliderZIndex(slider1, slider2) {
    slider1.style.zIndex = '4';
    slider2.style.zIndex = '3';
}

function updateStarsItemFinder(updatedElement){
    switch(updatedElement){
    case 'ff_sort':           // sort by
      $('sortByName').value = ($F(updatedElement)=='Name') ? 'true' : 'false';
      $('sortByDate').value = ($F(updatedElement)=='Date') ? 'true' : 'false';
      $('sortByStarsValue').value = ($F(updatedElement)=='Stars') ? 'true' : 'false';
      break;
    default:
      break;
    }
    $('firstResult').value = 0;
    submitStarsItemFinder();
}

function submitStarsItemFinder(){
  $('stars_item_search_form').request({
    method: 'get',
    onSuccess: function(transport){ 
      var json = transport.responseText.evalJSON();
      // remove old results
      $('stars_item_results').innerHTML = '';
      $('no_stars_items_found').hide();
      
      if (json.metaData.itemCount > 0) {
          // insert new results
          json.resultList.each(function(item){
             new Insertion.Bottom('stars_item_results',item);
          })
          if(!checkIE()){
            //$('stars_item_results').getElementsByClassName('teaser-stars-catalogue').each(function(item){
            $('stars_item_results').select('.teaser-stars-catalogue').each(function(item){
                item.hide();
            });
          }
          cssHelper.addChildNodeClassNames({rootNode : $('stars_item_results'), classeNames : ['left','empty','right','clear']});
      }
      else {
          // show error message
          $('no_stars_items_found').show();
      }
      // show number of results
      $('total_items').innerHTML = json.metaData.itemCount;

      // show result label if element is existing
      if ($('label_items') && $('label_one_item')) {
        if (json.metaData.itemCount == 1) {
            $('label_items').hide();
            $('label_one_item').show();
        }
        else {
            $('label_items').show();
            $('label_one_item').hide();
        }
      }

      $('firstResult').value = json.metaData.firstResult;
      // clear paging-navi and insert new pages
      updatePaging(json.metaData.firstResult + 1,'starsItemFinder');
      },
      onComplete: function(transport) {
      // fade-in the results for other browsers
        if(!checkIE()){ 
           initFading('stars_item_results', 'teaser-stars-catalogue');
        }
    }
  });
}


// #############################################################################
// ### News - Latest News 
// #############################################################################

function getLatestNews(url, size, systemID, topicID, showSummary){
    new Ajax.Request(url, { 
    method:'get',
    parameters: {fetchSize: size, sortByDate: true, sortByName: false, sortByTopic: false, systemTypeId: systemID, newsTopicId: topicID},
    requestHeaders: {Accept: 'application/json'},
        onComplete: function(transport){
            var json = transport.responseText.evalJSON();
            json.resultList.each(function(item, index){
               if(showSummary == "true") {
                   var newsItem = '<div class="news-item"><span class="news-date">'+json.resultList[index].publishDate +'</span><h3 title="'+ json.resultList[index].newsTitle +'"><a href="'+json.resultList[index].newsUrl+'" title="'+ json.resultList[index].newsTitle +'">'+ json.resultList[index].newsTitle +'</a></h3><p>'+ json.resultList[index].newsSummary +'</p></div>';
               }
               else {
                  var newsItem = '<div class="news-item"><span class="news-date">'+json.resultList[index].publishDate +'</span><h3 title="'+ json.resultList[index].newsTitle +'"><a href="'+json.resultList[index].newsUrl+'" title="'+ json.resultList[index].newsTitle +'">'+ json.resultList[index].newsTitle +'</a></h3></div>';
               }
               new Insertion.Bottom('news_results',newsItem);
            })
        }
    });
}


// #############################################################################
// ### news Item Finder functions
// #############################################################################

function updateNewsItemFinder(updatedElement){
    switch(updatedElement){
    case 'ff_sort':           // sort by
      $('sortByDate').value = ($F(updatedElement)=='Date') ? 'true' : 'false';
      $('sortByName').value = ($F(updatedElement)=='Name') ? 'true' : 'false';
      break;
    default:
      break;
    }
    $('firstResult').value = 0;
    submitNewsFinder();
}

function submitNewsFinder(){
    if ($('news_content') != null && $('news_content').visible()) {
        $('news_content').hide();
        $('news_finder').show();
    }
    $('newsfinder_form').request({
    method: 'get',
      onSuccess: function(transport){ 
      var json = transport.responseText.evalJSON();
      
      // remove old results
      $('news_results').innerHTML = '';
      $('no_news_found').hide();

      if($('news_related_box') != null && $('news_related_box').visible()) {
        $('news_related_box').hide();
      }
      
      if (json.metaData.itemCount > 0) {
          new Insertion.Bottom('news_results','<div class="opening_box"><img id="opening_box" src="/NOE/images/siteware/bg-448-trans-eeeeee-ffffff-top.png" alt="" title="" /></div>');
          convertPNG($('opening_box'));

          // insert new results         
          json.resultList.each(function(item, index){
             
             var newsItem = '<a style="display:none" href="'+json.resultList[index].newsUrl+'" title="'+ json.resultList[index].newsTitle +'" class="news-item-wrapper clearfix"><div class="news-item" onmouseover="this.className += \' news-item_hover\'" onmouseout="this.className = this.className.replace(\' news-item_hover\', \'\');"><div class="news-item-top"><div class="news-item-bottom"><div class="news-item-content clearfix"><span class="news-date">'+ json.resultList[index].publishDate +'</span><h3>'+ json.resultList[index].newsTitle +'</h3><p>'+ json.resultList[index].newsSummary +'</p></div></div></div></div></a>';
             
             //var newsItem = '<a href="#" title="" class="news-item-wrapper"><div class="news-item"><div class="news-item-top"><div class="news-item-bottom"><div class="news-item-content clearfix"><span class="news-date">20.06.07</span><h3>Mario Party 8</h3><p>Ich bin Blindtext, von Geburt an. Ich bin gerne ...</p></div></div></div></div></a>';
             new Insertion.Bottom('news_results',newsItem);
          })
          cssHelper.findLastElement({rootNode : $('news_results'), cssClass : 'news-item-wrapper' , additionalClass : ['last']});
      }
      else {
          // show error message
          $('no_news_found').show();
      }
      // show number of results
      $('total_items').innerHTML = json.metaData.itemCount;

      // show result label if element is existing
      if ($('label_items') && $('label_one_item')) {
        if (json.metaData.itemCount == 1) {
            $('label_items').hide();
            $('label_one_item').show();
        }
        else {
            $('label_items').show();
            $('label_one_item').hide();
        }
      }

      $('firstResult').value = json.metaData.firstResult;
      // clear paging-navi and insert new pages
      updatePaging(json.metaData.firstResult + 1,'newsFinder');
      },
      onComplete: function(transport) {
      // fade-in the results
        if(checkIE()) {
            //show results in IE
            //$('news_results').getElementsByClassName('news-item-wrapper').each(function(item){
            $('news_results').select('.news-item-wrapper').each(function(item){
                item.show();
            });
        }
        else {
            // fade-in the results  
           initFading('news_results', 'news-item-wrapper');
        }
        
    }
  });
}

// #############################################################################
// ### interview items paging
// #############################################################################

function submitInterviewForm(res){
    if ($('news_content') != null && $('news_content').visible()) {
        $('news_content').hide();
        $('interview').show();
    }  
      
    var json = res;      
    // remove old results
    $('news_results').innerHTML = '';
    
    if($('news_related_box') != null && $('news_related_box').visible()) {
        $('news_related_box').hide();
    }

    // insert new results         
    json.each(function(item, index){
        if (json[index].interviewTeaser != "" ) {
             var interviewItem = '<div class="teaser-news-standardstory floatbox"><div class="teaser-graphic" > <img src="'+json[index].interviewTeaser+'" title="'+ json[index].interviewTitle +'"></div><div class="teaser-content clearfix"><h3 title="'+ json[index].interviewTitle +'">'+ json[index].interviewTitle +'</h3><p class="nomargin">'+ json[index].interviewSummary +'</p> <div class="links">';
             var interviewLinks = json[index].interviewLinks;
             interviewLinks.each(function(iteml,indexl) { 
                if (interviewLinks[indexl].link != "" ){
                    interviewItem = interviewItem+'<a href="'+ interviewLinks[indexl].link +'" title="'+ interviewLinks[indexl].title +'">'+ interviewLinks[indexl].title +'</a>';
                }
             })
             interviewItem = interviewItem+'</div></div></div>';
        }
             new Insertion.Bottom('news_results',interviewItem);            
      })
      // show number of results
      $('total_items').innerHTML = parseInt($F('itemCount'));
      
      // show result label if element is existing
      if ($('label_items') && $('label_one_item')) {
        if (parseInt($F('itemCount'))== 1) {
            $('label_items').hide();
            $('label_one_item').show();
        }
        else {
            $('label_items').show();
            $('label_one_item').hide();
        }
      }      
      // clear paging-navi and insert new pages
      updatePaging(parseInt($F('firstResult'))+1,'interview');    
}

function getInterviewTeasers(fetchSize) {       
    if (parseInt($F('firstResult')) == 0) {
        var start = 0;
        var end = 4;
    } 
    else {
        var start = ((parseInt($F('firstResult')))*fetchSize);
        var end = start+fetchSize-1;
    }
    var res=[{}]; 
    var j = 0;

    $('interview_form').request( {
        method: 'get',
        onSuccess: function(transport){ 
            var json = transport.responseText.evalJSON();
               
            for (var i = start; i<= end; i++) {            
                if(json.resultList[i]) {
                    res[j] = json.resultList[i];
                }            
                j++;
            }
            submitInterviewForm(res);
       }         
    });      
}

// #############################################################################
// ### common functions
// #############################################################################
 
// removes all elements with class "classname" from container "container"
function removeElements(container, classname) {
  //$(container).getElementsByClassName(classname).each(function(item){
  $(container).select('.' + classname).each(function(item){
    item.remove();
  });
}
// update paging navi
/* finderType should be one of this:
 *  - gameFinder
 *  - miniGameFinder
 *  - newsFinder
 *  - starsItemFinder
 */

function updatePaging(actPage,finderType){
  var numResults = $('total_items').innerHTML;
  var numPerPage = $F('ff_items');
  var lastPage = Math.ceil(numResults/numPerPage);
    
  // remove page navigation
  $('paging_navi_h').innerHTML = '';
  $('paging_navi_f').innerHTML = '';
  var i = 1;
  while (i <= lastPage){
    if (i==1 || (i>=(actPage-2) && i<=(actPage+2)) || i==lastPage){
      active = (i==actPage) ? true : false;
      $('paging_navi_h').appendChild(makePageLink(i-1,active,finderType));
      $('paging_navi_f').appendChild(makePageLink(i-1,active,finderType));
      i++;
    }
    else {
      spanPoints = document.createElement('span');
      spanPoints.innerHTML = '...';
      spanPoints.className = 'placeholder';
      spanPoints_f = spanPoints.cloneNode(true);
      $('paging_navi_h').appendChild(spanPoints);
      $('paging_navi_f').appendChild(spanPoints_f);
      if (i<(actPage-2)){
        i=actPage-2;
      }
      else if (i>(actPage+2)){
        i=lastPage;
      }
    }
  }
  // if not first page -> show "previous page" link
  if (actPage > 1) {
    $('paging-before-button-h').style.visibility = 'visible';
    $('paging-before-button-f').style.visibility = 'visible';
 }
  else {
    $('paging-before-button-f').style.visibility = 'hidden';
    $('paging-before-button-h').style.visibility = 'hidden';
  }
  
  // if not last page -> show "next page" link
  if (actPage < lastPage) {
    $('paging-next-button-h').style.visibility = 'visible';
    $('paging-next-button-f').style.visibility = 'visible';
 }    
  // else hide the link
  else {
    $('paging-next-button-f').style.visibility = 'hidden';
    $('paging-next-button-h').style.visibility = 'hidden';
  }
}
 

function makePageLink(pageNumber,active,finderType){
  link = document.createElement('a');
  link.innerHTML = pageNumber+1;
    link.href = 'javascript:;';
  link.className = active ? 'link-aktiv' : 'link';
  if (window.addEventListener){
        link.addEventListener('click',function(){goToPage(pageNumber,finderType)},false);
    }
    else if (window.attachEvent){
        link.attachEvent('onclick',function(){goToPage(pageNumber,finderType)});
    }
    
  return link;
}

// sets hidden field to new page number and submit form
function goToPage(page_no,finderType){
  $('firstResult').value = page_no;
    switch (finderType) {
        case 'interview':
          getInterviewTeasers(parseInt($F('ff_items')));
        break;
        case 'gameFinder':
          submitGameFinderForm();
        break;
        case 'starsItemFinder':
          submitStarsItemFinder();
        break;
        case 'newsFinder':
          submitNewsFinder();
        break;
        case 'starsItemFinder':
          submitStarsItemFinder();
        break;
    }
}
 

// Get URL Parameters as 2 dimensional Array
function getURLParamArray(){
    var urlParams = [];
    var strUrl = window.location.search;
    if (strUrl != "") {
        listParam = strUrl.split("&");                                
        listParam[0] = listParam[0].replace("?","");
        listParam.each(function(item, index){
            param = item.split("=");
            myArray = $A(param);
            urlParams.push(myArray);
        });
    }
    return urlParams;
}


// Initialize Finder by Type
function initializeFinder(finderType) {
    var urlParams = getURLParamArray();
    
    if (urlParams.length > 0) {
    
        if(finderType == 'gameFinder') showAdvancedSearch('advanced');
        urlParams.each(function(item, index){
            if($(item[0])!= null) {
                element = $(item[0]);                                
                switch (element.tagName.toLowerCase()) {
                    case 'input': 
                        element.checked = item[1];
                        if(item[1] = true) element.value = 'true';
                          break;
                      case 'select': 
                        //element.selectedIndex = item[1];
                        break;
                    case 'option': 
                        element.selected = item[1];
                        break;
                      default:
                        break;
                }
            }
        }); 
    }
    switch (finderType) {
    
        case 'gameFinder':
          submitGameFinderForm();
        break;
        case 'newsFinder':
          submitNewsFinder();
        break;
        case 'starsItemFinder':
          submitStarsItemFinder();
        break;
    }
}



// #############################################################################
// ### Media Center - Controller Class
// #############################################################################

function MediaCenter(options, ids) {
  this._options = options;
  this._ids = ids || {
    selectSystem: "mc_system",
    inputKeyword: "mc_keyword",
    filterForm: "mc_filter_form",
    pagerText: "div.paging-navi",
    pagerLinkLeft: "a.mc-link-left",
    pagerLinkRight: "a.mc-link-right",
    gamesList: "mc_games_list",
    gameDetails: "mc_game_details",
    randomGamesList :"mc_random_games_list",
    randomGames :"mc_random_games",
    swfId: "media_swf",
    swfContainer: "media_center"
  };
  this._request = {
    fetchSize: 10,
    filterSortBy: "Date",
    firstResult: 0,
    systemTypeId: "",
    keyword: ""
  };
  this._response = {};
  this._showRandomGames = true;
}
MediaCenter.prototype = {
  //init method
  init: function() {
    // attach events
      var caller = this;
      Event.observe($(this._ids.selectSystem), "change", function() { 
        caller.sendRequestOnSubmit();
      });
      Event.observe($(this._ids.filterForm), "submit", function() {
        caller.sendRequestOnSubmit();
      });
      $$(this._ids.pagerLinkLeft).each(function(el){
        Event.observe(el, "click", function() {
          caller.sendRequestOnPaginate(-1);
        });
      });
      $$(this._ids.pagerLinkRight).each(function(el){
        Event.observe(el, "click", function() {
          caller.sendRequestOnPaginate(1);
        });
      });
    
    // init randomGames and gamesList
    this.sendRequestOnSubmit();
    this._getRandomGames(2);
  },
  
  // sends a request, when filters are sumited
  sendRequestOnSubmit: function() {
   this._request.firstResult = 0;
   // set filters
   this._request.systemTypeId = $F(this._ids.selectSystem);
   this._request.keyword = $F(this._ids.inputKeyword);
   
   this._sendRequest();
  },
  sendRequestOnPaginate: function(intValue) {
    if(((this._request.firstResult+intValue)*this._request.fetchSize) <= this._response.metaData.itemCount) {
        this._request.firstResult += intValue;
    }    
    if (this._request.firstResult < 0) {
        this._request.firstResult = 0;
    }
    this._sendRequest();
  },
  
  // update the flash and the game details
  updateMediaCenter: function(el) {
    // hide random games, show game details
    if(this._showRandomGames) {
      $(this._ids.randomGames).hide();
      $(this._ids.gameDetails).show();
      this._showRandomGames = false;
    }
    //Update game details:
    $('packshot').src = el.packshot;
    $('packshot').alt = $('packshot').title = el.gameText;
    $('packshot').className = "packshot-"+el.thumbType;
    
   //check if null
    el.gameCategory = el.gameCategory ? el.gameCategory : ""; 
    switch (el.multiplayerMode) {
        case "0":
            $('multiplayerMode').up().hide();
            break;
        case "1":
            $('multiplayerMode').up().show();
            $('multiplayerMode').update(simultaneousDictionary.showValueForLang(this._options.lang.locale));
            break;
        case "2":
            $('multiplayerMode').up().show();
            $('multiplayerMode').update(alternatingDictionary.showValueForLang(this._options.lang.locale));
            break;
        default:
            $('multiplayerMode').up().hide();
            break;
    }
    //el.releaseDate = el.releaseDate ? el.releaseDate : "";
    el.publisher = el.publisher ? el.publisher : "";
    el.playerNumber = el.playerNumber ? el.playerNumber : "";
    el.ageRating = el.ageRating ? el.ageRating : "";

    //update html elements
    $('gameCategory').update(el.gameCategory);
    //$('multiplayerMode').update(el.multiplayerMode);
    $('releaseDate').update(el.releaseDate);
    $('publisher').update(el.publisher);
    $('playerNumber').update(el.playerNumber);
    // update age rating
    if(parseInt(el.ageRating) > 1) { 
        // display "A" instead of "3" for ZA age rating
        if(el.ageRating == "3" && el.ageRatingType == "5") {
            $('ageRating').update("A");
        }
        else {
            $('ageRating').update(el.ageRating);
        }
        $('ageRating').up('li').style.display = 'block';  
    }
    else { 
        $('ageRating').up('li').style.display = 'none'; 
    }
    $('icons').update(this._getIconsString(el));

    
    //Update flashProxy
    var strThumbType = "hor";
    switch(el.thumbType) {
        case 0: // hor
          if(window.opera && opera.wiiremote){
              $(this._ids.swfContainer).style.height = '800px'; 
          }
          else {
              $(this._ids.swfContainer).style.height = '675px'; 
          }        
          strThumbType = "hor";
          break;    
        case 1: // ver
          $(this._ids.swfContainer).style.height = '800px';
          strThumbType = "ver";
          break;
    }    
    this._options.flashProxy.call("updateMediaCenter", el.imageXML , el.videoXML, strThumbType, el.consoleText, encodeURI(el.gameText), el.gameURL);
    // apply PNG-fix
        elements = $('icons').getElementsBySelector('img');
        elements.each(function(item){ convertPNG(item); });
  },
  
  // return icons as string
  _getIconsString: function(el){
    var strReturn = "";
    
    // age icons
    var strAgeSrc;
    switch(el.ageRatingType) {
      case "1": //PEGI
        switch(el.ageRating) {
          case "4":
            strAgeSrc = "/NOE/images/icons/pegi_4_small.gif";
          break;
          case "6":
            strAgeSrc = "/NOE/images/icons/pegi_6_small.gif";
          break;
          case "7":
            strAgeSrc = "/NOE/images/icons/pegi_7_small.gif";
          break;
          case "12":
            strAgeSrc = "/NOE/images/icons/pegi_12_small.gif";
          break;
          case "16":
            strAgeSrc = "/NOE/images/icons/pegi_16_small.gif";
          break;
          case "18":
            strAgeSrc = "/NOE/images/icons/pegi_18_small.gif";
          break;
          case "99":
            strAgeSrc = "/NOE/images/icons/fpb_PG.gif";
          break;
          default: 
            strAgeSrc = "/NOE/images/icons/pegi_3_small.gif";          
          break;
        }
        if(strAgeSrc) {
          strReturn += '<div class="icon age-rating"><img src="'+ strAgeSrc +'" alt="PEGI" title="PEGI" /></div>';
        }
      break;
      case "2": //ELSPA
        switch(el.ageRating) {
          case "11":
            strAgeSrc = "/NOE/images/icons/age_en02_small.gif";
          break;
          case "15":
            strAgeSrc = "/NOE/images/icons/age_en03_small.gif";
          break;
          case "18":
            strAgeSrc = "/NOE/images/icons/age_en04_small.gif";
          break;
          default: 
            strAgeSrc = "/NOE/images/icons/age_en01_small.gif";          
          break;
        }
        if(strAgeSrc) {
          strReturn += '<div class="icon age-rating"><img src="'+ strAgeSrc +'" alt="ELSPA" title="ELSPA" /></div>';
        }      
      break;
      case "3": //SELL
        switch(el.ageRating) {
          case "12":
            strAgeSrc = "/NOE/images/icons/age_fr02_small.gif";
          break;
          case "16":
            strAgeSrc = "/NOE/images/icons/age_fr03_small.gif";
          break;
          case "18":
            strAgeSrc = "/NOE/images/icons/age_fr04_small.gif";
          break;
          default: 
            strAgeSrc = "/NOE/images/icons/age_fr01_small.gif";          
          break;
        }
        if(strAgeSrc) {
          strReturn += '<div class="icon age-rating"><img src="'+ strAgeSrc +'" alt="SELL" title="SELL" /></div>';
        }        
      break;
      case "4": //USK
        switch(el.ageRating) {
          case "6":
            strAgeSrc = "/NOE/images/icons/age_de02_small.png";
          break;
          case "12":
            strAgeSrc = "/NOE/images/icons/age_de03_small.png";
          break;
          case "16":
            strAgeSrc = "/NOE/images/icons/age_de04_small.png";
          break;
          case "18":
            strAgeSrc = "/NOE/images/icons/age_de05_small.png";
          break;
          default: 
            strAgeSrc = "/NOE/images/icons/age_de01_small.png";          
          break;
        }
        if(strAgeSrc) {
          strReturn += '<div class="icon age-rating"><img src="'+ strAgeSrc +'" alt="USK" title="USK" /></div>';
        }  
      break;
      case "5": //FPB
        switch(el.ageRating) {
          case "3":
            strAgeSrc = "/NOE/images/icons/fpb_A.png";
          break;
          case "10":
            strAgeSrc = "/NOE/images/icons/fpb_10.png";
          break;
          case "13":
            strAgeSrc = "/NOE/images/icons/fpb_13.png";
          break;
          case "16":
            strAgeSrc = "/NOE/images/icons/fpb_16.png";
          break;
          case "18":
            strAgeSrc = "/NOE/images/icons/fpb_18.png";
          break;
          default: 
            strAgeSrc = "/NOE/images/icons/fpb_A.png";     
          break;
        }
        if(strAgeSrc) {
          strReturn += '<div class="icon age-rating"><img src="'+ strAgeSrc +'" alt="FPB" title="FPB" /></div>';
        }  
      break;
      default: break;
    }

    // console icon
    switch(el.consoleText) {
      case "Wii":
        strReturn += '<div class="icon"><img src="/NOE/images/icons/wii.png" alt="Wii" title="Wii" /></div>';
      break;
      case "Nintendo DS":
        strReturn += '<div class="icon"><img src="/NOE/images/icons/ds.png" alt="Nintendo DS" title="Nintendo DS" /></div>';
      break;
      case "Game Boy":
        strReturn += '<div class="icon"><img src="/NOE/images/systems/gb.png" alt="Game Boy" title="Game Boy" /></div>';
      break;
      case "Game Boy Advance":
        strReturn += '<div class="icon"><img src="/NOE/images/systems/gba.png" alt="Game Boy Advance" title="Game Boy Advance" /></div>';
      break;
      case "Nintendo 64":
        strReturn += '<div class="icon"><img src="/NOE/images/systems/n64.png" alt="Nintendo 64" title="Nintendo 64" /></div>';
      break;
      case "Nintendo GameCube":
        strReturn += '<div class="icon"><img src="/NOE/images/systems/gc.png" alt="Nintendo GameCube" title="Nintendo GameCube" /></div>';
      break;
      case "Pokémon Mini":
        strReturn += '<div class="icon"><img src="/NOE/images/systems/pokemon_mini.png" alt="Pokémon Mini" title="Pokémon Mini" /></div>';
      break;
      default: break;
    }

    // wifi icon
    if(el.wifi) {
      strReturn += '<div class="icon"><img src="/NOE/images/icons/wifi-blue-trans.png" alt="WiFi" title="WiFi" /></div>';
    }
    
    // touch generations
    if(el.touchGenerations) {
        switch(el.consoleText) {
          case "Wii":
           strReturn += '<div class="icon"><img src="/NOE/images/icons/tg_blue.png" alt="Touch! Generations" title="Touch! Generations" /></div>';
          break;
          case "Nintendo DS":
           strReturn += '<div class="icon"><img src="/NOE/images/icons/tg_red.png" alt="Touch! Generations" title="Touch! Generations" />';
          break;
          default: break;
        }
    }
    
    return strReturn;
  },
  
  // gets the randomgames from randomGamesUrl
  _getRandomGames: function(fetchSize) {
    new Ajax.Request(this._options.randomGamesUrl, {
      method: 'get',
      parameters: {fetchSize: fetchSize, random: "true"},
      onSuccess: function(transport) {
        var response = transport.responseText.evalJSON();
        $(this._ids.randomGamesList).update("");
        if(response && response.resultList) {
          //var caller = this;
          response.resultList.each(function(el) {
            var container = this._getMinigamesContainer(el);
            $(this._ids.randomGamesList).appendChild(container);
          }.bind(this));
        }
      }.bind(this)
    });
  },
  
  // send a request
  _sendRequest: function() {
        new Ajax.Request(this._options.gameListUrl, {
          method: 'get',
          parameters: this._request,
          onSuccess: function(transport) {
            this._response = transport.responseText.evalJSON();
            this._updateGamesList();
          }.bind(this)
        });
  },
  // return the HTML-Element for one game (in random list or games list)
  _getMinigamesContainer: function(el) {
      var container = document.createElement("div");
      container.className = "game-mini clearfix";
      
      var packshot = document.createElement("div");
      packshot.className = "game-packshot";
      
      var a = document.createElement("a");
      a.title = el.gameText;
      a.href = "javascript:void(0)";
      
      var img = document.createElement("img");
      img.src = el.packshot;
      img.alt = img.title = el.gameText;
      img.className = "packshot-"+el.thumbType;
      
      a.appendChild(img);
      packshot.appendChild(a);
      
      var details = document.createElement("div");
      details.className = "game-details";
      
      var span = document.createElement("span");
      span.className = "game-date";
      span.appendChild(document.createTextNode(el.modificationDate));
      
      var h3 = document.createElement("h3");
      h3.appendChild(document.createTextNode(el.gameText));
      
      var p = document.createElement("p");
      p.className = "system";
      p.appendChild(document.createTextNode(el.consoleText));
      
      details.appendChild(span);
      details.appendChild(h3);
      details.appendChild(p);
      
      container.appendChild(packshot);
      container.appendChild(details);
      Event.observe(container, "click", function() {
        this.updateMediaCenter(el);
      }.bind(this));
      return container;
  },
  
  // update the gamesList HTML
  _updateGamesList: function() {
    // cleanup first
    $(this._ids.gamesList).update("");
    if(this._response && this._response.metaData.itemCount > 0) {
      this._response.resultList.each(function(el) {
        var container = this._getMinigamesContainer(el);
        $(this._ids.gamesList).appendChild(container);
      }.bind(this));
      
        // first hide, and then fade in
        //$(this._ids.gamesList).style.display = "none";
        $('game-scroll-content-1').scrollTop = '0',
        $('vertical-handle-1').style.top = '0px';
        //new Effect.Appear($(this._ids.gamesList));
    }
    else {
      $(this._ids.gamesList).appendChild(document.createTextNode(this._options.lang.noGamesFound));
      //$(this._ids.gamesList).style.display = "none";
      $('game-scroll-content-1').scrollTop = '0',
      $('vertical-handle-1').style.top = '0px';
      //new Effect.Appear($(this._ids.gamesList));
    }
    this._updatePager();
  },
  
  // update the pager HTML
  _updatePager: function() {
    var meta = this._response.metaData;
    // check if no results
    if(!meta || meta.itemCount <= 0) {
      $$(this._ids.pagerLinkLeft).each(function(el){el.style.visibility = 'hidden';}.bind(this));
      $$(this._ids.pagerLinkRight).each(function(el){el.style.visibility = 'hidden';}.bind(this));
      $$(this._ids.pagerText).each(function(el){el.update("");});
    }
    else {
        var intStart = meta.fetchSize * meta.firstResult + 1;
        var intEnd = intStart + meta.fetchSize - 1;
        intEnd = intEnd > meta.itemCount ? meta.itemCount : intEnd;
    
        $$(this._ids.pagerText).each(function(el){
          el.show();
          el.update(intStart + "-" + intEnd + " " + this._options.lang.pagerOf + " " + meta.itemCount);
        }.bind(this));
        
        $$(this._ids.pagerLinkLeft).each(function(el){
          if(intStart <= 1) {
            el.style.visibility = 'hidden';
          }
          else {
            el.style.visibility = 'visible';         
         }
        }.bind(this));
        
        $$(this._ids.pagerLinkRight).each(function(el){
          if(intEnd >= meta.itemCount) {
            el.style.visibility = 'hidden';
          }
          else {
            el.style.visibility = 'visible';     
          }
        }.bind(this));
    }
  }
}

// #############################################################################
// ### Teaser Management
// #############################################################################

function TeaserManagement(locale, campaign, updatePanel) {
    this.url = "/teaser_management/getTeaser.jsp";
    this.locale = locale;
    this.campaign = campaign;
    this.updatePanel = updatePanel;
    
    if (typeof TeaserManagement._initialized == "undefined") {
        
        TeaserManagement.prototype.request = function (updatePanel) {
            new Ajax.Request(this.url, {
              method: 'get', encoding: 'UTF-8',
              parameters: { locale: this.locale, campaign: this.campaign },
              onSuccess: function(transport) {
                if (transport.responseText.match(/EMPTY_SLOT|MEDIA_IS_NULL|MEDIA_IS_EMPTY/)) {
                    //console.log("PatternMatch: EMPTY_SLOT,MEDIA_IS_NULL,MEDIA_IS_EMPTY");
                }
                else {
                  updatePanel.innerHTML = '';
                  updatePanel.show();
                  new Insertion.Bottom(updatePanel, transport.responseText);
                }
              }
            });
        };
        TeaserManagement.prototype.clearStyles = function () {
            this.updatePanel.className = '';
        };
        TeaserManagement.prototype.debug = function () {
            this.updatePanel.show();
            new Insertion.Bottom(this.updatePanel, "<b>Locale:</b> " + this.locale + "<br/><b>Campaign:</b> " + this.campaign + "<br/><b>UpdatePanel:</b> " + this.updatePanel.id);
        };
    }
    TeaserManagement._initialized = true;
}
 

function teaserClickTracker(trackingParam, redirectUrl) {
    var trackingUrl = "/teaser_management/teaserClick.jsp?dsource=Nintendo," + trackingParam;
    new Ajax.Request(trackingUrl, {
        method: 'get', encoding: 'UTF-8', evalScripts : true,
        //parameters: { locale: this.locale, campaign: this.campaign },
        onSuccess: function(transport) {
            window.location.href = redirectUrl;
        }
    });
}

function teaserPageTracker(counter) {
    var trackingUrl = "/teaser_management/setCounter.jsp";
    new Ajax.Request(trackingUrl, {
       method: 'get', encoding: 'UTF-8', evalScripts : true,
      parameters: { counter: counter},
      onSuccess: function(transport) {
        //console.log("success");
      }
    });
}



// #############################################################################
// ### PageRating
// #############################################################################

var PageRating = Class.create({
    initialize: function(unitFK) {
        this.url = document.ratingForm.action;
        this.pageTitle = document.title;
        this.unitFK = unitFK;
        this.pageURL = window.location.pathname;
        this.pageID = undefined;
        this.pageRating = undefined;
        
        this.getPageID();
    },
    getPageID: function() {
        var headElements = document.getElementsByTagName("head")[0].childNodes;                    
        for(var i=0; i < headElements.length; i++ ) {
            if(Prototype.Browser.IE && headElements[i].data != null) {
                this.pageID = headElements[i].data.substr(8, 5).replace(/\D+/, "").strip();
                break;
            }
            else if(!Prototype.Browser.IE && headElements[i].data.strip()!= "") {
                this.pageID = headElements[i].data.substr(8, 5).replace(/\D+/, "").strip();
                break;
            }
            
          }
    },
    checkRating : function() {
        var rateArray = document.ratingForm.pageRate;
         for(var i=0; i < rateArray.length; i++ ) {
            if (rateArray[i].checked) {
                this.pageRating = rateArray[i].value;
            }
          }
        if(this.pageRating == undefined) {
            if($('rating-error').visible() == false) $('rating-error').show();
        }
        else {
            if($('rating-error').visible()) $('rating-error').hide();
            this.sendRating();
        }
    },
    sendRating : function() {
        new Ajax.Request(this.url, {
            method: 'post',
            encoding: 'UTF-8',
              parameters: {
                  title: this.pageTitle, 
                url: this.pageURL,
                unit: this.unitFK,
                pageID: this.pageID,
                rating : this.pageRating
               },
              onCreate: function() {
                  $('rating-loading').show();
              },
              onSuccess: function(transport) {
              },
              onComplete: function() {
                  $('rating-loading').hide();
                var formElements = document.ratingForm.getElementsByTagName('input');
                for(var i=0; i < formElements.length; i++ ) {
                    formElements[i].disabled = true;
                    
                    if(formElements[i].type == 'image') formElements[i].style.display = 'none'; 
                  }
                $('rating-text').hide();
                $('rating-text-success').show();
                
              }
        });
    },
    displayError : function() {
        $('rating-error').show();
    }
});



// #############################################################################
// ### Game Recommendations
// #############################################################################

var GameRecommendations = Class.create({
    initialize: function(gameId, unitId, fetchSize, requestURL) {
        this.gameId = gameId;
        this.unitId = unitId;
        this.fetchSize = fetchSize;
        this.requestURL = requestURL;
        $('game_recommendations').innerHTML = '';
        this.sendRequest();
    },
    sendRequest: function() {
        new Ajax.Request(this.requestURL, {
            method: 'get',
            encoding: 'UTF-8',
            requestHeaders: { Accept: 'application/json' },
            parameters: {
                gameId: this.gameId, 
                unitId: this.unitId ,
                fetchSize: this.fetchSize
            },
            onComplete: function(transport) {
                var json = transport.responseText.evalJSON();
                json.resultList.each(function(item, index){
                    $('game_recommendations').insert(item);
                });
                cssHelper.addChildNodeClassNames({rootNode : $('game_recommendations'), classeNames : ['left-margin-right-18','left-margin-right-18','left-margin-right-18']});
                $('game_recommendations').show();
            }
        });
    }
});


// #############################################################################
// ### Survey Integration
// #############################################################################


function SurveyNOE(surveyName, surveyFrequency, surveySrc, surveyExpireDate, surveyTokenURL, locale) {
    
    this.surveyName = surveyName;
    this.surveyFrequency = surveyFrequency;
    this.surveySrc = surveySrc; 
    this.surveyExpireDate = surveyExpireDate;
    this.surveyToken = "";
    this.surveyTokenURL = surveyTokenURL;
    this.locale = locale;
    this.surveyElements = {
        layer: $('survey'),
        intro: $('survey_intro'),
        iframe: $('survey_iframe')
    };
    
    if (typeof SurveyNOE._initialized == "undefined") {
        SurveyNOE.prototype.init = function() {
            
            if(this.getCookie() == undefined) {
                randomValue = this.getRandomValue(1, this.surveyFrequency);
                if(randomValue == this.surveyFrequency) {
                    this.showSurveyIntro();
                    new Effect.Appear('overlayer', {duration:0.6,to:0.5, beforeStart: function() { hideLayerElements(); $('survey').show();  }} );
                    this.setCookie(this.surveyName, "true", this.surveyExpireDate);
                }
            }
        },
        SurveyNOE.prototype.addEventHandler = function(oTarget, sEventType, fnHandler) {
            if (oTarget.addEventListener) {
              oTarget.addEventListener(sEventType, fnHandler, false);
            } else if (oTarget.attatchEvent) {
              oTarget.attatchEvent("on" + sEventType, fnHandler);
            } else {
              oTarget["on" + sEventType] = fnHandler;
            }
        },
        SurveyNOE.prototype.setCookie = function(cookieIdentifier, cookieValue, cookieExpire) {
           document.cookie = cookieIdentifier + "=" + cookieValue + "; expires=" + new Date(cookieExpire).toGMTString() + ";";    
        },
        SurveyNOE.prototype.getCookie = function() {
            var cookieArr = document.cookie.split(";");
            for(i=0; i < cookieArr.length; i++) {
                if(cookieArr[i].indexOf(this.surveyName) != -1) {
                    if (cookieArr[i].substr(cookieArr[i].indexOf("=")+1) == "true") return true;
                }
            }
        },
        SurveyNOE.prototype.getRandomValue = function(min,max) {
            if( min > max ) { return( -1 );    }
            if( min == max ) { return( min ); }
            return min + parseInt( Math.random() * ( max-min+1 ));
        },
        SurveyNOE.prototype.showSurveyIntro = function() {
            this.surveyElements.intro.show();
        },
        SurveyNOE.prototype.showSurveyIframe = function() {
            new Ajax.Request(this.surveyTokenURL, {
                method: 'post',
                encoding: 'UTF-8',
                parameters: {
                    lang: this.locale, 
                    site: "noe"
                },
                on200: function(transport) {
                    this.surveyToken = transport.responseText;                
                    if(this.surveyToken != "") {
                        this.surveyElements.intro.hide();
                        this.surveyElements.iframe.src = this.surveySrc + "?code=" + this.surveyToken;
                        this.surveyElements.iframe.show();
                    }
                }.bind(this),
                on204: function(transport) {
                    this.hideSurvey();
                }.bind(this)
            });
        },
        SurveyNOE.prototype.hideSurvey = function() {
            this.surveyElements.iframe.src = "";
            hideHelpLayer(this.surveyElements.layer);
        }
    }
    SurveyNOE._initialized = true;
    this.init();                                    
}
 
ResultListLoader = Class.create({
    initialize: function(requestURL, containerId, parameters, callbackFunction) {
        this.requestURL = requestURL;
        this.containerId = containerId;
        this.parameters = parameters;
        this.callbackFunction = callbackFunction;
        $(containerId).innerHTML = '';
        this.sendRequest();
    },
    sendRequest: function() {
        var _this = this;
        new Ajax.Request(this.requestURL, {
            method: 'get',
            encoding: 'UTF-8',
            requestHeaders: { Accept: 'application/json' },
            parameters: this.parameters,
            onComplete: function(transport) {
                var json = transport.responseText.evalJSON();
                json.resultList.each(function(item, index){
                    $(_this.containerId).insert(item);     
                });
                $(_this.containerId).childElements().each(function(item){
                    item.hide();
                });
                // fade-in the results  
                $(_this.containerId).childElements().each(function(item){
                    new Effect.Appear(item);
                });
                
                if(_this.callbackFunction) {
                    _this.callbackFunction();
                }
            }
        });
    }
});



//#############################################################################
//### Search Suggest Namespace
//#############################################################################
SearchSuggest = {
    _options: null,
    _value: "",
    _json: null,
    _suggestBox: null,
    _interval: null,
    
    _requesting: false,
    _performNewRequest: false, //determines if new request is needed after a request
    
    /**
     * Initialisation of Suggest Box
     */
    init: function(options) {
        var _this = this;
        
        this._options = options;
        var strSuggestBox = '\
                <div class="suggestbox" id="suggestbox">\
                <div class="header clearfix">\
                    <img class="headline" src="'+ this._options.headlineSuggestionsSrc +'" />\
                    <a id="suggestClose" href="#" class="close"></a>\
                </div>\
                <div class="content clearfix">\
                    <div id="suggestKeywords" class="inner clearfix blue">\
                    </div>\
                    <div class="inner-footer"></div>\
                    <div class="pages clearfix">\
                        <img class="headline" src="'+ this._options.headlinePagesSrc +'" />\
                        <strong class="suggestion"><span id="suggestTerm"></span>:</strong>\
                    </div>\
                    <div class="inner clearfix">\
                        <ul id="suggestResults" class="results">\
                        </ul>\
                    </div>\
                    <div class="inner-footer mb2"></div>\
                </div>\
                <div class="footer">\
                    <div class="inner clearfix">\
                        <a id="suggestSeeAll" href="#">'+ this._options.textSeeAllResults +'</a>\
                    </div>\
                    <div class="inner-footer"></div>\
                </div>\
            </div>\
        ';
        $('body_helper').insert({'bottom': strSuggestBox});
        this._suggestBox = $('suggestbox');
        this._attachEvents();
        
        this._updatePosition();
        this.hideSuggestBox();
        // check if something is still in the input form:
        this.fieldEventHandler();
    },
    
    _updatePosition: function() {
        var pmWidth = $('page_margins').getWidth();
        var bhWidth = $('body_helper').getWidth();
        var offset = bhWidth > pmWidth ? Math.round((bhWidth - pmWidth) / 2) : 0;
        
        var left = offset + pmWidth - this._suggestBox.getWidth() - 20;
        
        this._suggestBox.setStyle({'left': left + 'px'});
    },
    
    /**
     * Attach events to the static elements
     */
    _attachEvents: function() {
        var _this = this;
        Event.observe(this._options.field, 'keyup', function(e) {
            _this.fieldEventHandler();
        });
        Event.observe($('suggestClose'), 'click', function(e) {
            _this.hideSuggestBox();
            e.stop();
        });
        Event.observe(window, 'resize', function(e) {
            _this._updatePosition();
        });
        Event.observe(document, 'click', function(e) {
            if(!$(e.target).descendantOf(_this._suggestBox)) {
                _this.hideSuggestBox();
            }
        });
    },
    
    /**
     * Fires the request after the intervall timeout has been passed
     */
    fireRequest: function() {
        // clear interval
        window.clearInterval(this._interval);
        
        // if request is running, skip new request
        if(this._requesting == true) {
            this._performNewRequest = true;
        }
        else {
            var _this = this;
            _this._requesting = true;
            
            new Ajax.Request(_this._createRequestUrl(), { 
                method: 'get',
                encoding: 'UTF-8',
                //requestHeaders: {Accept: 'application/json'},
                onComplete: function(transport){
                    _this._requesting = false;
                    if(!transport.responseText) {
                        _this.hideSuggestBox();
                    }
                    else {
                        var json = transport.responseText.evalJSON();
                        if(json) {
                            _this.updateSuggestBox(json);
                            _this.showSuggestBox();
                        }
                        else {
                            _this.hideSuggestBox();
                        }
                    }
                    
                    if(_this._performNewRequest == true) {
                        _this._performNewRequest = false;
                        _this.fireRequest();
                    }
                }, 
                onFailure: function(transport) {
                    _this.hideSuggestBox();
                    _this._requesting = false;
                }
            });
        }
    },
    
    /**
     * Called every time, when the keyup-event on searchfield is called
     */
    fieldEventHandler: function() {
        var _this = this;
        // needed to assure, that the last input character is recognized
        window.setTimeout(function(){
            if(_this._options.field.value && _this._options.field.value.length > 1) {
                _this.setQuery(_this._options.field.value);
                
                window.clearInterval(_this._interval);
                _this._interval = window.setInterval("SearchSuggest.fireRequest()", 200);    
            }
            else {
                _this.hideSuggestBox();
            }
        }, 0);
    },
    
    /**
     * Create the request Url with encoded parameters
     */
    _createRequestUrl: function() {
        var url = this._options.searchSuggestUrl + '?q=' +  encodeURI(this._value);
        return url;
    },
    
    /**
     * Searchpage URL, keyword is passed via get param
     */
    _createSearchPageUrl: function(keyword) {
        return this._options.searchPageUrl + '?searchword=' + encodeURI(keyword);
    },
    
    /**
     * Set the query value
     */
    setQuery: function(value) {
        this._value = value;
    },
    
    /**
     * Set the json value
     */
    setJson: function(json) {
        this._json = json;
    },
    
    /**
     * Updates the dynamic elements in the suggestbox
     * such as urls, events and text
     */
    updateSuggestBox: function(json) {
        this.setJson(json);
        var _this = this;
        if(this._json != null) {
            var suggestKeywords = $('suggestKeywords');
            var suggestTerm = $('suggestTerm');
            var suggestResults = $('suggestResults');
            var suggestSeeAll = $('suggestSeeAll');
            
            // clear old
            suggestKeywords.update('');
            suggestTerm.update('');
            suggestResults.update('');
            
            if(json.topHits) {
                var sortedHits = new Array();
                
                var c = 1;
                for(var i in json.topHits) {
                    sortedHits.push(json.topHits[c++]);
                }
                
                var topKeyword = sortedHits[0];
                
                for(var i = 0; i < sortedHits.length; i++) {
                    suggestKeywords.insert(new Element('a', {'href' : _this._createSearchPageUrl(sortedHits[i])}).update(sortedHits[i]));
                    if(i < sortedHits.length - 1) {
                        suggestKeywords.insert(', ');
                    }
                }
                // update term with first result
                suggestTerm.update(topKeyword);
                
                if(json.searchResults && json.searchResults.length > 0) {
                    for(var i = 0; i < json.searchResults.length; i++) {
                        var res = json.searchResults[i];
                        suggestResults.insert('<li><span class="icon icon-' + res.category + '"></span><a href="' + res.url + '">'+ res.title +'</a></li>');
                    }
                    // observe every result with an click event, to track klicks for keyword incrementation
                    suggestResults.select('a').each(function(e) {
                        Event.observe(e, 'click', function(e) {
                            _this.incrementKeyword(topKeyword);
                        });
                    });
                }
                
                // change the "see all" link
                suggestSeeAll.href = _this._createSearchPageUrl(topKeyword);
            }
        }
    },
    
    /**
     * Called by clicking on a result link
     * fire and forget... We don´t check, if request was successful
     */
    incrementKeyword: function(topKeyword) {
        new Ajax.Request(this._options.incrementKeywordUrl + '?t=' + encodeURI(topKeyword), { 
            method: 'get',
            encoding: 'UTF-8',
            onComplete: function(transport){}
        });
    },
    
    /**
     * Hides the suggetbox layer
     */
    hideSuggestBox: function() {
        this._suggestBox.hide();
    },
    
    /**
     * Show the box
     */
    showSuggestBox: function() {
        this._suggestBox.show();
    }
};

// Start of Homepage Takeover Redirect //
function noeTakeover(campaign,locale,destination)
{
    new Ajax.Request('/NOE/' + locale + '/ajax/teaser.do',
    {
        method:'get',
        parameters: { campaign: campaign },
        onSuccess: function(transport)
        {
            var response = transport.responseText;
            if (response == "nomatch") {
                location.href = destination;
            }
        },
        onFailure: function(){}
    });
}
// End of Homepage Takeover Redirect //