﻿// AJAX JS
// Publishing Date: 
// #############################################################################
// ### Dicitionary object
// #############################################################################
function Dictionary(values) {
    this.lang = new Array("de_DE", "en_GB", "en_AU", "en_ZA", "es_ES", "it_IT", "nl_NL", "nl_BE", "fr_FR", "fr_BE");
    //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", " Stars", " Estrellas"," Stelle"," sterren"," sterren"," Étoiles"," Étoiles"));
var simultaneousDictionary = new Dictionary(new Array("Abwechselnd", "Alternating", "Alternating", "Alternating", "Por turnos","Alternati","Om beurten","Om beurten","Alterné","Alterné"));
var alternatingDictionary = new Dictionary(new Array("Simultan", "Simultaneous", "Simultaneous", "Simultaneous", "Simultáneo","Contemporaneamente","Tegelijkertijd","Tegelijkertijd","Simultané","Simultané"));

// #############################################################################
// ### login/logout functions
// #############################################################################
// 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) {
                showUserInfo(json.user);
                $('login_wrapper').hide();
                $('user_data_wrapper').show();
            }
            else {
                $('login_wrapper').show();
                $('user_data_wrapper').hide();
            } 
        }
    });
}


// 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;
}

// 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;
}
// #############################################################################
// ### 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;
      $('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');
        }
    }
  });
}
// #############################################################################
// ### 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 '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;
    }
}