/* get flash movie */
function thisMovie(movieName) {
    var isIE = navigator.appName.indexOf("Microsoft") != -1;
    return (isIE) ? window[movieName] : document[movieName];
}

function findPos(obj, refObj) {

  var curleft = curtop = 0;
  if (obj.offsetParent) {

    curleft = obj.offsetLeft
    curtop = obj.offsetTop
    while (obj = obj.offsetParent) {
      if(refObj && obj == refObj) break;
      curleft += obj.offsetLeft
      curtop += obj.offsetTop
    }
  }
  return [curleft,curtop];

}

function displayElem (aId, aState) {

  var css_state = (aState) ? 'block' : 'none';
  var aElem = document.getElementById(aId);

  if(aElem) {

    aElem.style.display = css_state;

  }

}

function hiliteElem (aElem, aState) {

  var css_add = '_hoover';

  if(aElem) {

    if( aElem.className.indexOf('_active') > -1) return;
    if( aState == 1) {
      aElem.className += css_add;
    } else {
      var e_css = aElem.className.replace(css_add, '');
      aElem.className = e_css;
    }
  }

}

function setElemActive (numActiveElem, numElems, elemPrefix) {

  var active_elem = document.getElementById(elemPrefix+numActiveElem);

  for(var i=0; i<numElems; i++) {

    var currElem = document.getElementById(elemPrefix+i);
    if( !currElem ) continue;

    var e1_css = currElem.className.replace('_hoover', '');
    var e2_css = e1_css.replace('_active', '');

    currElem.className = e2_css;

  }

  if(active_elem)
    active_elem.className += '_active';

}


function activateTab (numActiveTab, numTabs, tabPrefix, containerPrefix) {

  setElemActive (numActiveTab, numTabs, tabPrefix);
  setElemActive (numActiveTab, numTabs, containerPrefix);

  resizeNews();

}

function batchNav( dir, numPages, containerPrefix ) {

  var curr_num_elem = document.getElementById( containerPrefix + 'curr_num');
  var curr_num = Number(curr_num_elem.innerHTML);
  if(!curr_num) return;

  var next_num = curr_num + dir;
  if( next_num > numPages || next_num <= 0 ) return;

  setElemActive ((next_num-1), numPages, containerPrefix);
  curr_num_elem.innerHTML = next_num;

}

function GetXmlHttpObject(handler)
{
  var objXMLHttp=null;
  if (window.XMLHttpRequest)
  {
      objXMLHttp=new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {
      objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  return objXMLHttp;
}

function stateChanged(aXmlHttp, aObjId, aFunc)
{
  if (aXmlHttp.readyState==4 || aXmlHttp.readyState=="complete")
  {
      var aObj = document.getElementById(aObjId);
      if(aObj) {
        aObj.innerHTML=aXmlHttp.responseText;

        // FIXME for screenshot page, we have to execute all <script>-blocks
        if (aObjId == 'screenshots_content') {
            var ob = aObj.getElementsByTagName("script");
            var IE = /*@cc_on!@*/false;
            if (IE) {
                if (ob[0].text != null) {
                    eval(ob[0].text);
                }
            } else {
                for(var i=0; i<ob.length-1; i++){
                    if(ob[i+1].text!=null) {
                        eval(ob[i+1].text);
                    }
                }
            }
        }

        if( typeof(aFunc) == 'function' ) aFunc();

        checkTeaserBoxHeights();
      }
  }
  else {
      //alert(aXmlHttp.status);
  }
}

function htmlData(aUrl, qStr, aObjId, aFunc)
{

  if(aObjId == undefined) aObjId = "txtResult";
  var container = document.getElementById(aObjId);

  if (aUrl.length==0)
  {
      container.innerHTML="";
      return;
  }
  var xmlHttp=GetXmlHttpObject();
  if (xmlHttp==null)
  {
      alert ("Browser does not support HTTP Request");
      return;
  }

  aUrl=aUrl+"?"+qStr;
  aUrl=aUrl+"&sid="+Math.random();

  xmlHttp.onreadystatechange = function() {
    stateChanged(xmlHttp, aObjId, aFunc);
  }

  xmlHttp.open("GET",aUrl,true);
  xmlHttp.send(null);
}

/* screenshot gallery right column */
function scaleStage(s_id, s_rows) {

  var d_height = 177;

  var s_obj = document.getElementById(s_id);
  if (!s_obj) return;

  var s_height = d_height + (s_rows * (68+12));

  setTimeout( function() { doResize( s_obj, s_height) }, 5);

}

function doResize ( s_obj, s_height ) {

  var sh = s_obj.offsetHeight;
  var diff = 20;

  shn = s_obj.offsetHeight + diff;

  if( shn < s_height ) {
    s_obj.style.height = shn + 'px';
    setTimeout( function() { doResize( s_obj, s_height) }, 5);
  } else {
    s_obj.style.height = s_height + 'px';
  }

}

/* screenshots product page */
function showGImage(gid, num) {
    var mov = thisMovie(gid);
    if(mov.showGalleryImage != undefined) {
      mov.showGalleryImage(num);
    }
}

/* pulldown menu functions */
var timeout       = 50;
var closetimer		= 0;
var ddlistelem    = 0;
var ddmenuitem    = 0;
var ddhoverimg    = 0;
var ddiframe    = 0;

function jsddm_open()
{
	var left=$(this).position().left,
    sub=$(this).find('div.jsddm_submenu');
    jsddm_canceltimer();
    jsddm_close();
    ddlistelem = $(this).css({'z-index': '200'});
    //breite der tabelle: padding beachten!
    if((left+sub.width())>($('#jsddm').width()+60)){
        ddmenuitem = sub.eq(0).css({'visibility': 'visible',  'right':'44px'});
    }
    else{
        ddmenuitem = sub.eq(0).css({'visibility': 'visible',  'left':left});
    }
    ddhoverimg = $(this).find('img.image_hover').eq(0).css('visibility', 'visible');

    // for IE select problem
    var h = ddmenuitem.height();
    ddiframe = $(this).find('iframe').eq(0).css('height', h + 'px');

}

function jsddm_close()
{	if(ddlistelem) {
    if(ddlistelem.hasClass('active')) {
      ddlistelem.css('z-index', '100');
    } else {
      ddlistelem.css('z-index', '1');
    }
  }
  if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');
  if(ddhoverimg) ddhoverimg.css('visibility', 'hidden');
}

function jsddm_timer()
{	closetimer = window.setTimeout(jsddm_close, timeout);}

function jsddm_canceltimer()
{	if(closetimer)
	{	window.clearTimeout(closetimer);
		closetimer = null;}}

jQuery.preloadImages = function()
{
  for(var i = 0; i<arguments.length; i++)
  {
    jQuery("<img>").attr("src", arguments[i]);
  }
}

/* teasercircle functions */
/*
var jstc_timeout       = 3000;
var jstc_nexttimer		 = 0;
var jstc_currtext      = 0;
var jstc_currimage     = 0;
var jstc_currnum       = '';

function jstc_click() {

  jstc_canceltimer();

  var currimage = $(this).parent();
  var currid = currimage.attr('id');
  var lastid = (jstc_currimage) ? jstc_currimage.attr('id') : '';

  if( currid == lastid ) {

    return true;

  } else {

    if(jstc_currimage) jstc_currimage.removeClass('tc_active');
    if(jstc_currtext) jstc_currtext.removeClass('tc_active');

    jstc_currnum = currid.slice( currid.indexOf('_')+1, currid.length );
    jstc_currimage = currimage;
    jstc_currtext = $('#tcTxt_'+jstc_currnum);

    jstc_currimage.addClass('tc_active');
    jstc_currtext.addClass('tc_active');

    jstc_nexttimer = window.setTimeout(jstc_next, jstc_timeout);

    return false;

  }

}

function jstc_next() {

  var nextid = (!jstc_currnum) ? '#tcPic_0' : '#tcPic_'+( parseInt(jstc_currnum)+1 );

  var currelem = $(nextid);
  currelem = (currelem.attr('id') == undefined) ? $('#tcPic_0') : currelem;

  if(currelem) {
    currelem.find('a').click();
  }

}

function jstc_start() {

  $('div.tc_pic > a.tc_link').bind('click', jstc_click);
  jstc_next();

}

function jstc_canceltimer() {
  window.clearTimeout(jstc_nexttimer);
	jstc_nexttimer = null;
}
*/

var jstc_currtext      = 0;
var jstc_currimage     = 0;
var jstc_currnum       = '';

function jstc_hover() {

  var currimage = $(this).parent();
  var currid = currimage.attr('id');
  var lastid = (jstc_currimage) ? jstc_currimage.attr('id') : '';

  if( currid == lastid ) {

    return;

  } else {

    if(jstc_currimage) jstc_currimage.removeClass('tc_active');
    if(jstc_currtext) jstc_currtext.removeClass('tc_active');

    jstc_currnum = currid.slice( currid.indexOf('_')+1, currid.length );
    jstc_currimage = currimage;
    jstc_currtext = $('#tcTxt_'+jstc_currnum);

    jstc_currimage.addClass('tc_active');
    jstc_currtext.addClass('tc_active');

    return;

  }

}

function jstc_next() {

  var nextid = (!jstc_currnum) ? '#tcPic_0' : '#tcPic_'+( parseInt(jstc_currnum)+1 );

  var currelem = $(nextid);
  currelem = (currelem.attr('id') == undefined) ? $('#tcPic_0') : currelem;

  if(currelem) {
    currelem.find('a').mouseenter();
  }

}

function jstc_start() {

  $('div.tc_pic > a.tc_link').bind('mouseenter', jstc_hover);
  jstc_next();

}

function callSearchResults(f_event,f_obj, f_url, f_qs) {

  var e_target = (typeof event != "undefined") ? event.srcElement : f_event.target;
  var qselems = f_qs.split('&');
  var qselems_new = new Array();
  for(var i=0; i<qselems.length; i++) {
    if(qselems[i].indexOf('topics=') != 0) {
      qselems_new.push(qselems[i]);
    }
  }

  // check/uncheck checkbox of this item
  var cb = $(f_obj).find('input').eq(0);
  if(e_target.tagName != 'INPUT') {
    cb.attr('checked', ( (cb.attr('checked') == true ) ? false : true ) );
  }

  // get all options of the topic checkbox and join values for qs
  var topiclist = new Array();
  var atLeastOneChecked = false;
  var cbs = $('input[name=' + cb.attr('name') + ']');
  for(var i=0; i < cbs.length; i++) {
    if(cbs[i].checked == true) { topiclist.push(cbs[i].value); atLeastOneChecked = true; }
  }

  if ( atLeastOneChecked ) {
    qselems_new.push('topics=' + topiclist.join(','));
  } else {
    qselems_new.push('topics=noneselected');
  }
  var spath = f_url+'?'+qselems_new.join('&');

  window.location.href=spath;

}

/**
 *
 *
 * @param string c_type 'pi' bedeutet Ausstiegslink, 'standard' interner Link?
 * @param string c_level ??
 * @param string c_pathtype Sowas wie Kategorie des Links, zb "menu_footer"
 * @param string c_linkname Linkname (zb "kostenlose-spiele")
 */
function tracker_click(o, c_type, c_level, c_pathtype, c_linkname)
{
    // standard mode
    if (c_type != 'pi' && c_type != 'action' && c_type != 'exit') {
        c_type = 'action';
    }

    // at internet
    if(c_type == 'pi') {
        return xt_click(o, 'F', c_level, c_linkname);
    } else if (c_type == 'action') {
        return xt_click(o, 'C', c_level, c_linkname, 'A');
    } else if (c_type == 'exit') { // exit
        return xt_click(o, 'C', c_level, c_linkname, 'S');
    }
}

/**
 * Ruft die jeweiligen Tracking-Funktionen auf.
 *
 * @param string c_ati_cmpid Kampagnen-ID ATI (Nummer, zb pcgames => '2')
 * @param string c_wtk_cmpid Kampagnen-ID WTK.
 * @param string c_pos Nummer des Links!
 * @param string c_gameid Game-ID.
 * @param string c_gametitle Gametitle.
 * @param string c_gameelem zb 'Bild' oder 'Text' ?
 */
function tracker_ads(c_ati_cmpid, c_wtk_cmpid, c_pos, c_gameid, c_gametitle, c_gameelem) {

  // webtrekk
//  alert("wt_sendinfo('gl.de.home." + c_wtk_cmpid + "." + c_pos + "', 'click', 'ck1=" + c_gameid + ";ck2=" + c_gametitle + ";ck3=" + c_gameelem + "')");
  // wt_sendinfo('gl.de.home.' + c_wtk_cmpid + '.' + c_pos, 'click', 'ck1=' + c_gameid + ';ck2=' + c_gametitle + ';ck3=' + c_gameelem);

  // at internet
//  alert("xt_adc(this, 'INT-" + c_ati_cmpid + "-" + c_pos + "||" + c_gameid + "[" + c_gametitle + "]')");
  return xt_adc(this, 'INT-' + c_ati_cmpid + '-' + c_pos + '||' + c_gameid + '[' + c_gametitle + ']');

}

/* dummyfunktion fuer pmr */
function pmr_trackPixel(eventType, gameId) {
  //alert('pmr_trackPixel ' + eventType + ' game id: ' + gameId);
}


/**
 * Klappt einen Teil einer Box ein (basierend auf einer bestimmten Anzahl Eintraege)
 *
 * @author SD
 * @param object options Konfiguration der Box, Optionen siehe Standardeinstellungen
 */
(function($) {
  $.fn.glBox = function(options) {
    return this.each(function() {
        //Standardeinstellungen
        var o = $.extend({
            entries: 3,
            entry_indicator: 'li',
            expand_text: 'Aufklappen',
            collapse_text: 'Zuklappen',
            effect_duration: 500,
            height_min_plus: 0,
            height_max_plus: 0,
            animate_collaps: false
        }, options);

        //Basisvariablen
        var box = $(this);
        var height_max = box.height();
        var height_min = box.height();
        var collapsed = false;

        //Hoehe berechnen
        var counter = 0;
        box.find(o.entry_indicator).each(function() {
            if (counter++ == o.entries) {
                height_min = $(this).offset().top - box.offset().top;
            }
        });

        //Bei Bedarf Rahmen bauen
        if (height_min < height_max) {
            height_min += o.height_min_plus;
            height_max += o.height_max_plus;
            collapsed = true;
            box.wrapInner('<div class="glBoxWrapper"></div>');
            box.find('.glBoxWrapper')
                .css('height', height_min + 'px')
                .css('overflow', 'hidden')
                .css('display', 'inline-block')
                .css('position', 'relative');
            box.append('<div class="glBoxToggle">'+o.expand_text+'</div>')
            box.find('.glBoxToggle').click(function() {
                toggle();
            });
            box.addClass("glBoxCollapsed");
            box.addClass("glBoxCollapsible");
        }
        //Funktion zum Auf- und Zuklappen
        var toggle = function() {
            if (collapsed) {
                box.find('.glBoxWrapper').stop(true, true).animate({height: height_max}, o.effect_duration);
                box.find('.glBoxToggle').html(o.collapse_text);
                box.removeClass("glBoxCollapsed");
            } else {
                //Change (UM): verzichten auf animate beim Einfahren der Box wegen Flackern im Firefox
                box.find('.glBoxWrapper').stop(true, true);
                if (o.animate_collaps)
                    box.find('.glBoxWrapper').stop(true, true).animate({height: height_min}, o.effect_duration);
                else
                    box.find('.glBoxWrapper').css('height', height_min);
                box.find('.glBoxToggle').html(o.expand_text);
                box.addClass("glBoxCollapsed");
            }
            collapsed = !collapsed;
        }
    });
  }
})(jQuery);


//News einklappen
var resizeNews = function() {
    //make sure, glBox is only called once, and on visible newslist
    if($('.NewsList.Article').height()>0 && !$('.NewsList.Article').hasClass('glBoxCollapsible')){
        $('.NewsList.Article').glBox({
            entries: 10,
            entry_indicator: '.TeaserSmall.TeaserFirst',
            expand_text: '<a class="pfeilDoU">Aufklappen</a>',
            collapse_text: '<a class="pfeilDoO">Zuklappen</a>',
            animate_collaps: true,
            height_min_plus: -5,
            height_max_plus: -5
        });

    }

}

//Bewertungs-Boxen einklappen
$(function() {
    $('.mBox > span').css('display', 'block');
    $('#form1 #wrapper').glBox({
        height_min_plus: 60,
        entry_indicator: '.mBox > span',
        expand_text: '<a class="pfeilDoU">Aufklappen</a>',
        collapse_text: '<a class="pfeilDoO">Zuklappen</a>'
    });
    resizeNews();
    $(".Box610Tabbed .Tabs a").click(function(){
        if ($('.NewsList.Article').length && !$('.NewsList.Article.glBoxCollapsible').length)
            resizeNews();
    });
});


/**
 * Erstellt eine Empfehlungsbox
 *
 * @author SD
 * @param object options Konfiguration der Box, Optionen siehe Standardeinstellungen
 */
(function($) {
  $.fn.recoBox = function(options) {
    return this.each(function() {
        //Standardeinstellungen
        var o = $.extend({
            title:      '',
            scenarioID: '',
            itemID:     '0',
            area:       '',
            genre:      '',
            userID:     '-1',
            isOptedIn:  '0',
            cururl:     '',
            url:        '/de/inc/box_recos.php',
            mode:       'articleBottom'
        }, options);

        //Basisvariablen
        var box = $(this);

        //AJAX-Anfrage machen
        $.ajax({
            url: o.url,
            data: ({
                itemID      : o.itemID,
                userID      : o.userID,
                isOptedIn   : o.isOptedIn,
                scenario    : o.scenarioID,
                cururl      : o.cururl,
                area        : o.area,
                genre       : o.genre,
                mode        : o.mode,
                title       : o.title
            }),
            success: function(data) {
                //Ergebnis in Box einbinden
                box.html(data);
            }
        });
    });
  }
})(jQuery);


/**
 * Laedt die AT-Internet-Clickzone - darf sie nicht eigenhaendig machen, da manche Objekte erst per AJAX auf die Seite geladen werden
 *
 * @author SD
 */
//Automatisch Laden
var glXtAutoload = true;
//Geladen-Flag
var glXtLoaded = false;
//Warte-Stapel
var glXtStack = 0;
function glXtLoader() {
    //Wenn schon geladen oder noch nicht oft genug aufgerufen, abbrechen
    if (glXtLoaded || --glXtStack > 0)
        return;

    //Geladen-Flag setzen
    glXtLoaded = true;

    //Clickzone laden
    if((typeof(xtclzone)=="undefined"||xtclzone>0)&&(typeof(xtNodesload)=='function')){xtNodesload();}
}

/**
 * Oeffnet eine Link aus einem Video und fuegt ggf. die Kampagnen-Tracking-URL davor ein
 *
 * @author SD
 */
var hookVideoOpenLink = function(link) {return link;};
function videoOpenLink(link) {
    if (typeof(hookVideoOpenLink) == "function")
        link = hookVideoOpenLink(link);
    window.location.href = link;
}

/**
 * Oeffnet eine Link aus einem Screenshot und fuegt ggf. die Kampagnen-Tracking-URL davor ein
 *
 * @author SD
 */
var hookScreenshotOpenLink = function(link) {return link;};
function screenshotOpenLink(link) {
    if (typeof(hookScreenshotOpenLink) == "function")
        link = hookScreenshotOpenLink(link);
    window.location.href = link;
}

/**
 * Prueft alle Produktbeschreibungen, ob sie zu hoch sind und entfernt ggf. Woerter.
 *
 * @author SD
 */
function checkTeaserBoxHeights() {
    $(".TeaserSmall .Txt").each(function() {
        var box = $(this);
        var text = box.find(".Text");
        var price = box.find("div.Price");
        var alignRight = box.closest(".TeaserLow").length > 0;
        var bigTeaser = box.closest(".Teaser280x").length > 0;
        var teaser50 = box.closest(".Teaser50x50").length > 0;
        var teaserSearch = box.closest(".TeaserSearch").length > 0;
        var teaserSpecial = box.closest(".TeaserSpecial").length > 0;
        var pricePlaceholder = $("<span class=\"pricePlaceholder\"><br /></span>");
        var space1 = $("<span class=\"pricePlaceholder\"> &nbsp;</span>");
        var space2 = $("<span class=\"pricePlaceholder\"> &nbsp;</span>");
        //Wenn kein Preis in einem DIV gefunden wird, brechen wir hier ab
        if (!price.length || teaserSearch || teaserSpecial)
            return;
        //Recoboxen ignorieren
        if (box.closest("#box_recos").length)
            return;

        //TODO: diese CSS-Modifikationen koennen auch in das CSS-File
        box.css("position", "relative");
        price.css("position", "absolute");
        if (alignRight){
            //don't display text in 50x50 Teaser
            //price.css("right", 0);
        }
        else
            price.css("left", 0);
        if (alignRight && bigTeaser)
            price.css("bottom", "5px");
        else
            price.css("bottom", "-3px");
        // text.css("bottom", 0);

        //Hoehen ermitteln
        var boxHeight = box.height();
        var priceHeight = price.outerHeight(true);
        var headlineHeight = box.find(".Overline").outerHeight(true) + box.find(".Title").outerHeight(true) + box.find(".Rating").outerHeight(true);
        var textHeight = text.outerHeight(true);

        //Endlosschleifen verhindern
        var maxLoops = 100;

        //Platz fuer den Preis reservieren
        if (alignRight) {
            pricePlaceholder.css("display", "inline-block")
                            .css("height", "12px")
                            .css("width", (price.width() - 6) + "px");
            if(!teaser50){
                price.css("right", 0);
            }
        }
        if (teaser50){
            //don't display text in 50x50 Teaser
            //price.css("right", 0);
            text.css('display', 'none');
        }
        text.find(".pricePlaceholder").remove();
        text.append(space1).append(pricePlaceholder).append(space2);
        textHeight = text.outerHeight(true);

        //Solange Woerter entfernen, bis die Hoehe passt
        while (textHeight + (alignRight ? 0 : priceHeight) + headlineHeight > boxHeight + 12 && maxLoops-- > 0 && boxHeight > 0) {
            var content = $.trim(text.text());
            var words = content.split(" ");
            var lastWord = words.pop();
            while (lastWord == "" || lastWord == "...")
                lastWord = words.pop();
            content = "";
            for (var i in words)
                content += words[i] + " ";
            text.html(content.substr(0, content.length - 1) + '...<span class="LinkIcon">&nbsp;</span>');
            text.append(space1).append(pricePlaceholder).append(space2);
            textHeight = text.outerHeight(true);
        }
    });
}

$(checkTeaserBoxHeights);
