// =========
// = UTILS =
// =========
function getDocHeight() {
  var D = document;
  return Math.max(
    Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
    Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
    Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}

function blur_(value_, object_) {
  if(object_.value=="") {
    object_.value=value_;
  }
}

function focus_(value_, object_) {
  if(object_.value==value_) {
    object_.value="";
  }
}

function textCounter(field, id, limit) {
  limit = typeof(limit) != 'undefined' ? limit : 180;
  if (field.value.length > limit) {
    field.value = field.value.substring(0, limit);
  } else {
    document.getElementById(id).innerHTML = limit - field.value.length;
  }
}


// ==========
// = POPUPS =
// ==========

function optinPopup() {
  var win = null;
  var width = 658;
  var height = 532;
  var winleft = (screen.width-width)/2;
  var wintop = (screen.height-height)/2;
  
  var settings = 'height=' + height + ',width=' + width + ',top=' + wintop + ',left=' + winleft + 'scrollbars=no,resizeable=no';
  
  win=window.open('/profile/optin_popup','Newsletter',settings);
  if(parseInt(navigator.appVersion, 10) >= 4) {
    win.window.focus();
  }
  
  return false;
}

function recommendationPopup(popup_url) {
  var win = null;
  var width = 665;
  var height = 533;
  var winleft = (screen.width-width)/2;
  var wintop = (screen.height-height)/2;
  var settings  ='height='+height+',';
  settings +='width='+width+',';
  settings +='top='+wintop+',';
  settings +='left='+winleft+',';
  settings +='scrollbars=yes,';
  settings +='resizable=no';
  win=window.open(popup_url,'weiterempfehlen',settings);
  if(parseInt(navigator.appVersion, 10) >= 4){
    win.window.focus();
  }
	
  return false;
}


// ===========
// = SPINNER =
// ===========

function insertSpinner(element, pos) {
  var spinner = new Element('img', {
    'src': '/images/icons/loading.gif',
    'alt': 'Lädt…'
  }).addClassName('default_spinner');
  element.insert({
    'bottom': spinner
  });
  return spinner;
}

function removeSpinner(spinner) {
  spinner.remove();
}


// ===========
// = TOGGLES =
// ===========

function toggleService() {
  var content = $('sidebar_service_content');
  var close = $('sidebar_service_close');
  var open = $('sidebar_service_open');
  
  if (!content.visible()) {
    content.blindDown({
      duration: 0.3
    });
    open.hide();
    close.show();
  } else {
    if (content.visible()) {
      content.blindUp({
        duration: 0.3
      });
      open.show();
      close.hide();
    };
  }
  
  return false;
}

function toggleHighlightClass(element) {
  element.toggleClassName('highlight');
}

function toggleGenreGame(genrePos, gamePos) {
  var posArray = ['top_game','game_2','game_3'];
  for (var posIdx in posArray) {
    var pos = posArray[posIdx];
    if (typeof(pos) == 'string') {
      if($('genre_' + genrePos + '_' + pos + '_big') != null){
        $('genre_' + genrePos + '_' + pos + '_big').style.display = (pos == gamePos ? 'block' : 'none');
      }
      if($('genre_' + genrePos + '_' + pos + '_small') != null) {
        $('genre_' + genrePos + '_' + pos + '_small').style.display =  (pos == gamePos ? 'none' : 'block');
      }
    }
  }
}


// ============
// = SWITCHES =
// ============

function switchLobbyNaviTab(divName) {
  var tabArray = ['game_selection','guide','champions','game'];
  for (var tabIdx in tabArray) {
    var tab = tabArray[tabIdx];
    if (typeof(tab) == 'string') {
      $(tab).style.display = (tab == divName ? 'block' : 'none');
      if ($(tab + '_link'))
        if (tab == divName)
          $(tab + '_link').addClassName('active');
        else
          $(tab + '_link').removeClassName('active');
    }
  }
  return false;
}

function switchLobbySidebarNaviTab(divName) {
  var tabArray = ['info','chat','players'];
  for (var tabIdx in tabArray) {
    var tab = tabArray[tabIdx];
    if (typeof(tab) == 'string') {
      $(tab).style.display = (tab == divName ? 'block' : 'none');
      if ($(tab + '_link'))
        if (tab == divName)
          $(tab + '_link').addClassName('active');
        else
          $(tab + '_link').removeClassName('active');
    }
  }
  return false;
}

function switchSkilllevel(skilllevel, area) {
  var img_count;
  switch (area) {
  case 'training':
    img_count = 1;
    break;
  case 'match':
    img_count = 5;
    break;
  case 'tournament':
    img_count = 8;
    break;
  }

  var img_num = 1;
  for (img_num = 1; img_num <= img_count; img_num++) {
    $(area + '_' + img_num.toString() + '_img').src = '/images/lobby/stars' + skilllevel.toString() + '.png';
  }

  $('skilllevel_submenu_' + area).toggle();
}

function switchGamesPlayTab(game_shortname, tab) {
  new Ajax.Updater('game_details_content', '/games/subpage/' + game_shortname, {
    evalScripts: true,
    parameters: {
      tab: tab
    },
    onComplete: function(transport) {
      $('story_link').removeClassName('active');
      if ($('extras_link'))
        $('extras_link').removeClassName('active');
      $('champions_link').removeClassName('active');
      $('screenshots_link').removeClassName('active');
      $(transport.request.parameters['tab'] + '_link').addClassName('active');
    }
  });
  return false;
}


// ============
// = OVERLAYS =
// ============

function openDefaultOverlay(content, options) {
  var class_for_overlay;
  var overflow_for_overlay;
  var options = options || {};
  
  try{
    // If the content is a html element
    content.hide();
    var content = content.cloneNode(true);
    content.show();
  }catch(e){
    // if its just a string
    var content = content;
  };
  
  // specific class for the overlay
  if (!options.id) {
    try{
      class_for_overlay = content.id;
      content.id = "";
    }catch(e){
      class_for_overlay = '';
    };
  } else {
    class_for_overlay = options.id;
  };
  
  if(options.css_class) {
    class_for_overlay += " " + options.css_class;
  }
  
  // dynamically create overlay structure
  var overlay = new Element('div', {
    'id': 'overlay'
  });
  var container = new Element('div', {
    'id': 'overlay_container'
  });
  var content_wrapper = new Element('div', {
    'id': 'overlay_content'
  }).addClassName(class_for_overlay + ' overlay_container');
  content_wrapper.insert({
    top: content
  });
  
  // create Close button
  if (options.close_button) {
    var close_button = new Element('a', {
      'id': 'default_close_overlay',
      'href': '#'
    });
    var close_image = new Element('img', {
      'src': '/images/popups/default_close_overlay.png',
      'alt': 'Schließen'
    });
    close_button.update(close_image);
    container.insert({
      top: close_button
    });
    close_button.observe('click', function(e) {
      Event.stop(e);
      closeDefaultOverlay();
    });
  };
  
  // append elements
  $$('body').first().insert({
    top: overlay
  });
  overlay.insert({
    top: container
  });
  container.insert({
    top: content_wrapper
  });
  
  // styling stuff, positioning and height
  var height = getDocHeight();
  
  overlay.setStyle({
    width: '100%',
    height: height + 'px'
  });
  
  if (container.getHeight() > document.viewport.getHeight()) {
    container.setStyle({
      width: ((container.getWidth() + 15) + 'px'),
      height: ((document.viewport.getHeight() - 50) + 'px'),
      overflow: 'auto'
    });
  };
  
  container.setStyle({
    top: (document.viewport.getScrollOffsets().top + (document.viewport.getHeight() / 2) - container.getHeight() / 2) + 'px',
    left: (document.viewport.getWidth() / 2 - container.getWidth() / 2) + 'px'
  });
  return false;
}
function closeDefaultOverlay() {
  var overlay = $('overlay').remove();
  var container = $('overlay_container');
  if (container) container.remove();
  return false;
}

var games_overlay_loaded = false;
function showGamesOverlay() {
  document.observe("mousedown", function(event) {
    closeGamesOverlay(event);
  });
  
  var overlay = $('sidebar_games_overlay');
  new Effect.Appear(overlay, {
    duration: 0.3
  });
  
  if (games_overlay_loaded) {
  } else {
    new Ajax.Request('/games/get_games_list', {
      onLoading: function(request) {
        $('sidebar_games_overlay_spinner').show();
      },
      onSuccess: function(request) {
        $('sidebar_games_overlay_list').update(request.responseText);
        games_overlay_loaded = true;
      },
      onFailure: function(request) {

      },
      onComplete: function(request) {
        $('sidebar_games_overlay_spinner').hide();
      }
    });
  }
  
  return false;
}
function closeGamesOverlay(event) {
  overlay = $('sidebar_games_overlay');
  event_element = Event.element(event);
  
  if (event_element != overlay && !event_element.descendantOf(overlay)) {
    overlay.fade({
      duration: 0.3
    });
    document.stopObserving("mousedown");
  };
}

function showCouponOverlay(div_id) {
  if(Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6){
    showCouponOverlayIE(div_id);
    return;
  }

  if (div_id == null){
    div_id = 'overlay_content';
  }
  var overlay = new Element('div', {
    'id': 'overlay'
  });
  var container = new Element('div', {
    'id': 'overlay_container'
  });
  var content = $(div_id).cloneNode(true);
  $(div_id).remove();
  var height = getDocHeight();

  container.addClassName(div_id);
  $$('body').first().insert({
    top: overlay
  });
  overlay.insert({
    top: container
  });
  container.insert({
    top: content
  });
  
  content.show();
  overlay.setStyle({
    width: '100%',
    height: height + 'px'
    });
  container.setStyle({
    top: (document.viewport.getScrollOffsets().top + (document.viewport.getHeight() / 2) - container.getHeight() / 2) + 'px',
    left: (document.viewport.getWidth() / 2 - container.getWidth() / 2) + 'px'
  });
}
function showCouponOverlayIE(div_id) {

  if (div_id == null){
    div_id = 'overlay_content';
  }
  var container = new Element('div', {
    'id': 'overlay_container'
  });
  var content = $(div_id).cloneNode(true);
  $(div_id).remove();
  var height = getDocHeight();

  container.addClassName(div_id);
  $$('body').first().insert({
    top: container
  });
  container.insert({
    top: content
  });

  content.show();
  container.setStyle({
    top: (document.viewport.getScrollOffsets().top + (document.viewport.getHeight() / 2) - container.getHeight() / 2) + 'px',
    left: (document.viewport.getWidth() / 2 - container.getWidth() / 2) + 'px'
  });
}
function closeCouponOverlay() {
  if(Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6){
    closeCouponOverlayIE();
    return;
  }

  if($('overlay').style.display != "none") {
    $('overlay').fade({
      duration: 0.5,
      afterFinish: function() {
        $('overlay').remove();
      }
    });
  }
}
function closeCouponOverlayIE() {
  if($('overlay_container').style.display != "none") {
    $('overlay_container').fade({
      duration: 0.5,
      afterFinish: function() {
        $('overlay_container').remove();
      }
    });
  }
}

function openLeagueResultOverlay(link, game) {
  var spinner;
  new Ajax.Request('/league/get_results', {
    parameters: {
      game_id: game
    },
    onCreate: function() {
      spinner = insertSpinner(link);
    },
    onSuccess: function(response) {
      removeSpinner(spinner);
      $('content').scrollTo();
      $('result_overlay_container').update(response.responseText);
    },
    onComplete: function(response) {
      var content_height = $('content').getHeight();
      var overlay_height = $('result_overlay_container').down(0).getHeight();
      if (overlay_height > content_height) {
        $('content').setStyle({
          'height': overlay_height+'px'
          });
      };
    }
  });
  return false;
}
function closeLeagueResultOverlay() {
  $('result_overlay_container').update('');
  $('content').setStyle({
    'height': 'auto'
  });
  return false;
}

function openGameDetailsOverlay(link, genre_game_id) {
  var spinner;
  new Ajax.Request('/start/game_details/' + genre_game_id, {
    onCreate: function() {
      spinner = insertSpinner(link);
    },
    onSuccess: function(response) {
      removeSpinner(spinner);
      //$('content').scrollTo();
      $('game_details_overlay_container').update(response.responseText);
    },
    onComplete: function(response) {
      var content_height = $('content').getHeight();
      var overlay_height = $('game_details_overlay_container').down(0).getHeight();
      if (overlay_height > content_height) {
        $('content').setStyle({
          'height': overlay_height+'px'
          });
      };
    },
    onFailure: function(response) {
      removeSpinner(spinner);
    }
  });
  return false;
}
function closeGameDetailsOverlay() {
  $('game_details_overlay_container').update('');
  // $('content').setStyle({'height': 'auto'});
  return false;
}


function openNotificationOverlay(content, options) {
  var options = options || {};
  
  try {
    // If the content is a html element
    content.hide();
    var content = content.cloneNode(true);
    content.show();
  } catch(e) {
    // if its just a string
    var content = content;
  };

  // dynamically create overlay structure
  var overlay = new Element('div', {
    'id': 'overlay'
  });
  var container = new Element('div', {
    'id': 'overlay_container'
  });
  var content_wrapper = new Element('div', {
    'id': 'overlay_content'
  });
  content_wrapper.addClassName(content.id);
  content_wrapper.insert({
    top: content
  });
  
  // create close button for corner
  var close_button_corner = new Element('a', {
    'href': '#'
  });
  close_button_corner.addClassName("close");
  close_button_corner.observe('click', function(e) {
    Event.stop(e);
    closeNotificationOverlay();
  });
  content_wrapper.insert({
    top: close_button_corner
  });
  
  var close_button = new Element('a', {
    href: '#'
  }).update("Schließen");
  close_button.addClassName("button_close");
  close_button.observe('click', function(e) {
    Event.stop(e);
    closeNotificationOverlay();
  });
  content.insert(close_button);
  
  var footer = new Element('div');
  footer.addClassName("overlay_bottom w_474");
  content_wrapper.insert(footer);
  
  // append elements
  $$('body').first().insert({ top: overlay });
  overlay.insert({ top: container });
  container.insert({ top: content_wrapper });
  
  // styling stuff, positioning and height
  var height = getDocHeight();
  
  overlay.setStyle({
    width: '100%',
    height: height + 'px'
  });
  
  if (container.getHeight() > document.viewport.getHeight()) {
    container.setStyle({
      height: ((document.viewport.getHeight() - 50) + 'px'),
      overflow: 'auto'
    });
  };
  
  container.setStyle({
    top: (document.viewport.getScrollOffsets().top + (document.viewport.getHeight() / 2) - container.getHeight() / 2) + 'px',
    left: (document.viewport.getWidth() / 2 - container.getWidth() / 2) + 'px'
  });
  return false;
}
function closeNotificationOverlay() {
  closeDefaultOverlay();
}


// ===============
// = OTHER STUFF =
// ===============

function depotDetail(id, round_id, name, cents, date, game_active) {
  if ($('details_for_' + id).empty()) {
    new Ajax.Updater('details_for_' + id, '/profile/gamedepot_detail', {
      asynchronous:true,
      evalScripts:true,
      parameters:{
        game_round_id: round_id,
        game_shortname: name,
        euro_cents: cents,
        date: date,
        game_active: game_active
      }
    });
  }

  if ($('details_for_' + id).style.display == 'none')
  {
    $('details_for_' + id).style.display = '';
  }
  else
  {
    $('details_for_' + id).style.display = 'none';
  }
	
  if ($('row_for_' + id).hasClassName('active'))
  {
    $('row_for_' + id).removeClassName('active');
  }
  else
  {
    $('row_for_' + id).addClassName('active');
  }	
}

function doOptIn(source) {
  new Ajax.Request('/profile/opt_in?yes&' + source, {
    onSuccess: function(transport) {
      $('status_bar_container').innerHTML = transport.responseText;
      if ($('optin_header_div')) $('optin_header_div').toggle();
      if ($('optin_container_div')) $('optin_container_div').toggle();
    }
  });

  return false;
}

function redeemCoupon(couponcode) {
  showCouponOverlay('coupon_overlay');
  if ($('code_error_bar')) {
  //new Effect.Fade($('code_error_bar'), {duration: 0.3});
  }
  new Ajax.Request('/coupons/redeem?couponcode=' + couponcode, {
    onSuccess: function(transport) {
      if(transport.responseText == 'OK'){
        if ($('code_error_bar')) {
          new Effect.Fade($('code_error_bar'), {
            duration: 0.3
          });
        }
        closeCouponOverlay();
        self.location.href='/coupons/success';
      }
      else {
        if ($('code_error_bar')) {
          $('code_error_text').innerHTML = transport.responseText;
          new Effect.Appear($('code_error_bar'), {
            duration: 0.3
          });
        }
        closeCouponOverlay();
      }
    }
  });

  return false;
}

function login(form) {
  if(Prototype.Browser.WebKit == true){
    form.submit();
    return false;
  }
  var form = form;
  var error_box = form.previous('p');
  error_box.hide();
  
  new Ajax.Request(form.action, {
    parameters: {
      username : username,
      password : password,
      serviceprovider : serviceprovider,
      partner : partner,
      Tipp24GamesReturnUrl : Tipp24GamesReturnUrl
    },
    crossSite: true,
    method: 'GET',
    onSuccess: function(request) {
      window.location.reload();
    },
    onFailure: function(request) {
      error_box.show();
      error_box.down('span').innerHTML = request.responseText;
    }
  });
  
  return false;
}

// Opens Overlay for league Conditions
function leagueConditions(link) {
  var spinner;
  new Ajax.Request('/league/get_conditions', {
    onCreate: function() {
      spinner = insertSpinner(link);
    },
    onSuccess: function(response) {
      removeSpinner(spinner);
      openDefaultOverlay(response.responseText, {
        'close_button': true,
        'id': 'league_conditions'
      });
    },
    onComplete: function(response) {
    }
  });
  return false;
}

function turnBlogPage(page_num) {
  new Ajax.Updater('news_box', '/start/blog/' + page_num.toString(), {
    evalScripts: false
  });
  return false;
}


function fusionTeaserHover(element) {
  link = $(element).down("div");
  alink = $(element).down("a");
  element.observe("mouseover", function() { this.className = this.className.replace("button_green_188x42", "button_green_188x42_hover") }.bind(link));
  element.observe("mouseout",  function() { this.className = this.className.replace("button_green_188x42_hover", "button_green_188x42") }.bind(link));
  element.observe("click",     function() { location.href = this.href }.bind(alink));
}


$(document).observe("dom:loaded", function() {
  if (login_overlayer = $("login_overlay"))
    openDefaultOverlay(login_overlayer);

  if (notification_overlayer = $("notification_overlay"))
    openNotificationOverlay(notification_overlayer);

  if (customer_info_overlayer = $("customer_info")) {
      openDefaultOverlay(customer_info_overlayer, {id: 'customer_info_overlay'});

      Element.observe('close', 'click', function(e) {
	      Event.stop(e);
	      closeDefaultOverlay();
              return false;
	  });

      Element.observe('btnnext', 'click', function(e) {
	      Event.stop(e);
	      closeDefaultOverlay();
              return false;
	  });
  }

  if (teasers = $$(".fusion_game_teaser, .fusion_game_topgamer_box_180x530"))
    teasers.each(function(teaser) {
      fusionTeaserHover(teaser);
    });
});
