/*
+-------------------------------------------------------------------+
|                     J S - T I C K E R   (v1.5)                    |
|                                                                   |
| Copyright Gerd Tentler                www.gerd-tentler.de/tools   |
| Created: Oct. 20, 2004                Last modified: Nov. 6, 2009 |
+-------------------------------------------------------------------+
| This program may be used and hosted free of charge by anyone for  |
| personal purpose as long as this copyright notice remains intact. |
|                                                                   |
| Obtain permission before selling the code for this program or     |
| hosting this software on a commercial website or redistributing   |
| this software over the Internet or in any other medium. In all    |
| cases copyright must remain intact.                               |
+-------------------------------------------------------------------+

+-------------------------------------------------------------------+
|                                 |
| Code modified by Johann Allg?uer with the permission of       |
| Gerd Tentler, for use in the TYPO3 Extension datamints_newsticker |
|                                 |
+-------------------------------------------------------------------+

*/


//---------------------------------------------------------------------------------------------------------
// Configuration
//---------------------------------------------------------------------------------------------------------

/*var orientation = orientation.toLowerCase();     // wheter the newsticker moves vertical or horizontal
var tickerWidth = objScrollWidth;                    // width (in px)
var tickerHeight = objScrollHeight;          // height (in px)

var stopScroll = stopScroll;             // If stopscroll is true, then ticker gets paused at mouseover
var tickerPause = ticker_pause;            // time the ticker pauses each element (if defined)
var tickerDelay = 100 - speed;                       // scrolling delay
var tickerSpacer = objScrollDivider;                 // spacer between ticker entries

var tickerBGImage = bg_image;            // background image
var tickerBGColor = backColour;                      // background color*/
var tickerHLColor = "";                          // hilight (mouse over) color
/*
var textAlignment = textAlignment;           // text align (left; center; right; justify), makes only a difference if orientation = vertical

var tickerBorderWidth = borderWidth;                 // border width (pixels)*/
var tickerBorderStyle = "solid";                     // border style (CSS-spec)
/*
var tickerBorderColor = borderColour;                // border color

var tickerOffset = parseInt(tickerOffset);       // Tickeroffset, also der Top / left - Wert (je noch orientation), an der das erste item des Tickers beginnen soll

if ((tickerOffset % 2)) {
  tickerOffset = tickerOffset + 1;
}*/


//---------------------------------------------------------------------------------------------------------
// Functions
//---------------------------------------------------------------------------------------------------------

//var dm_newsticker_data[ceUid]["objScrollHeight"] = tickerFontSize + 8;
var DOM = document.getElementById;
var IE4 = document.all;
var global_ceUid;


function tickerGetObj(id, ceUid) {
  if(DOM) return document.getElementById(id);
  else if(IE4) return document.all[id];
  else return false;
}

function tickerObject(id, ceUid) {
  this.elem = tickerGetObj(id, ceUid);
  this.css = this.elem.style;
  if (dm_newsticker_data[ceUid]["orientation"].toLowerCase() == "horizontal") {
    this.x = dm_newsticker_data[ceUid]["objScrollWidth"];
    this.width = this.elem.offsetWidth;
    this.css.width = this.width + 'px';
    this.css.left = this.x + 'px';
  }
  else {
    this.height = this.elem.offsetHeight;
    this.y = dm_newsticker_data[ceUid]["objScrollHeight"];
    this.css.height = this.height + 'px';
    this.css.top = this.y + 'px';
  }
  this.move = false;
  return this;
}

function tickerNext(ceUid) {
  if(!DOM && !IE4) return;
  var obj = dm_newsticker_data[ceUid]["tickerItems"][dm_newsticker_data[ceUid]["tickerID"]];
  if (dm_newsticker_data[ceUid]["orientation"].toLowerCase() == "horizontal") {
    if(!obj.move) {
      if (obj.hasNeverMovedYet && (dm_newsticker_data[ceUid]["tickerOffset"] != 'NaN') && obj.x < dm_newsticker_data[ceUid]["objScrollWidth"]) {
        obj.move = true;
        dm_newsticker_data[ceUid]["tickerItems"][dm_newsticker_data[ceUid]["tickerID"]].hasNeverMovedYet = false;
      }
      else { 
        
        obj.x = dm_newsticker_data[ceUid]["objScrollWidth"];
        obj.css.left = dm_newsticker_data[ceUid]["objScrollWidth"] + 'px';
        obj.move = true;
      }
    }
  }
  else {
    if(!obj.move) {
      if (obj.hasNeverMovedYet && (dm_newsticker_data[ceUid]["tickerOffset"] != 'NaN') && obj.y < dm_newsticker_data[ceUid]["objScrollHeight"]) {
        obj.move = true;
        dm_newsticker_data[ceUid]["tickerItems"][dm_newsticker_data[ceUid]["tickerID"]].hasNeverMovedYet = false;
      }
      else {
        obj.y = dm_newsticker_data[ceUid]["objScrollHeight"];
        obj.css.top = dm_newsticker_data[ceUid]["objScrollHeight"] + 'px';
        obj.move = true;
      }
    }
  }

}

function tickerMove(ceUid) {
  if(!DOM && !IE4) return;
  if (dm_newsticker_data[ceUid]["orientation"].toLowerCase() == "horizontal") {
    for(var i = 0; i < dm_newsticker_data[ceUid]["tickerItems"].length; i++) {
      if(dm_newsticker_data[ceUid]["ticker_pause"]) {
        if(dm_newsticker_data[ceUid]["tickerItems"][i].x == 0) {
          tickerStop(1, ceUid);
        }
      }
      if(dm_newsticker_data[ceUid]["tickerItems"][i].move) {
        if(dm_newsticker_data[ceUid]["tickerItems"][i].x > -dm_newsticker_data[ceUid]["tickerItems"][i].width) {
          dm_newsticker_data[ceUid]["tickerItems"][i].x -= 1;
          dm_newsticker_data[ceUid]["tickerItems"][i].css.left = dm_newsticker_data[ceUid]["tickerItems"][i].x + 'px';
        }
        else dm_newsticker_data[ceUid]["tickerItems"][i].move = false;
      }
    }
    if(dm_newsticker_data[ceUid]["tickerItems"][dm_newsticker_data[ceUid]["tickerID"]].x + dm_newsticker_data[ceUid]["tickerItems"][dm_newsticker_data[ceUid]["tickerID"]].width <= dm_newsticker_data[ceUid]["objScrollWidth"]) {
      dm_newsticker_data[ceUid]["tickerID"]++;
      if(dm_newsticker_data[ceUid]["tickerID"] >= dm_newsticker_data[ceUid]["tickerItems"].length) dm_newsticker_data[ceUid]["tickerID"] = 0;
      tickerNext(ceUid);
    }
  }
  else {
    for(var i = 0; i < dm_newsticker_data[ceUid]["tickerItems"].length; i++) {
      if(dm_newsticker_data[ceUid]["ticker_pause"]) {
        if(dm_newsticker_data[ceUid]["tickerItems"][i].y == 0) {
          tickerStop(1, ceUid);
        }
      }
      if(dm_newsticker_data[ceUid]["tickerItems"][i].move) {
        if(dm_newsticker_data[ceUid]["tickerItems"][i].y > -dm_newsticker_data[ceUid]["tickerItems"][i].height) {
          dm_newsticker_data[ceUid]["tickerItems"][i].y -= 1;
          dm_newsticker_data[ceUid]["tickerItems"][i].css.top = dm_newsticker_data[ceUid]["tickerItems"][i].y + 'px';
        }
        else {
          dm_newsticker_data[ceUid]["tickerItems"][i].move = false;
        }
      }
    }

    if(dm_newsticker_data[ceUid]["tickerItems"][dm_newsticker_data[ceUid]["tickerID"]].y + dm_newsticker_data[ceUid]["tickerItems"][dm_newsticker_data[ceUid]["tickerID"]].height <= dm_newsticker_data[ceUid]["objScrollHeight"]) {
      dm_newsticker_data[ceUid]["tickerID"]++;
      if(dm_newsticker_data[ceUid]["tickerID"] >= dm_newsticker_data[ceUid]["tickerItems"].length) dm_newsticker_data[ceUid]["tickerID"] = 0;
      tickerNext(ceUid);
    }
  }
}

function tickerStart(init, ceUid) {
  if(!DOM && !IE4) return;
  var obj = tickerGetObj('divTicker_' + ceUid, ceUid);
  if(dm_newsticker_data[ceUid]["backColour"] && (dm_newsticker_data[ceUid]["backColour"] != 'none')) {
    obj.style.backgroundColor = dm_newsticker_data[ceUid]["backColour"];
  }
  if(init) {
    dm_newsticker_data[ceUid]["tickerID"] = 0;
    tickerNext(ceUid);
  }
  dm_newsticker_data[ceUid]["tickerIV"] = setInterval('tickerMove(' + ceUid + ')', dm_newsticker_data[ceUid]["speed"]);
}

function tickerStop(isTickerPause, ceUid) {
  if(!DOM && !IE4) return;
  clearInterval(dm_newsticker_data[ceUid]["tickerIV"]);
  if(isTickerPause) {
    dm_newsticker_data[ceUid]["tickerTimeout"] = setTimeout("tickerStart(0, " + ceUid + ")", dm_newsticker_data[ceUid]["ticker_pause"]);
    return;
  }
  else {
    if(tickerHLColor) {
      obj = tickerGetObj('divTicker_' + ceUid, ceUid);
      obj.style.backgroundColor = tickerHLColor;
    }
  }
}

function tickerInit(ceUid) {
  if(!DOM && !IE4) return;
  if (dm_newsticker_data[ceUid]["orientation"] == 'horizontal') {
    curWidthSum = 0 + dm_newsticker_data[ceUid]["tickerOffset"];
    for(var i = 0; i < dm_newsticker_data[ceUid]["articleData"]["tickerEntries"].length; i++) {
      dm_newsticker_data[ceUid]["tickerItems"][i] = new tickerObject('divTickerEntry_' + ceUid + '_' + (i+1), ceUid);
      if (!isNaN(dm_newsticker_data[ceUid]["tickerOffset"])) {
        dm_newsticker_data[ceUid]["tickerItems"][i].x = curWidthSum;
        dm_newsticker_data[ceUid]["tickerItems"][i].css.left = curWidthSum;
        curWidthSum = curWidthSum + dm_newsticker_data[ceUid]["tickerItems"][i].width;
      }
      dm_newsticker_data[ceUid]["tickerItems"][i].hasNeverMovedYet = true;
    }
  }
  else {
    curHeightSum = 0 + dm_newsticker_data[ceUid]["tickerOffset"];
    for(var i = 0; i < dm_newsticker_data[ceUid]["articleData"]["tickerEntries"].length; i++) {
      dm_newsticker_data[ceUid]["tickerItems"][i] = new tickerObject('divTickerEntry_' + ceUid + '_' + (i+1), ceUid);
      if (!isNaN(dm_newsticker_data[ceUid]["tickerOffset"])) {
        dm_newsticker_data[ceUid]["tickerItems"][i].y = curHeightSum;
        dm_newsticker_data[ceUid]["tickerItems"][i].css.top = curHeightSum;
        curHeightSum = curHeightSum + dm_newsticker_data[ceUid]["tickerItems"][i].height;
      }
      dm_newsticker_data[ceUid]["tickerItems"][i].hasNeverMovedYet = true;
    }
  }
  var obj = tickerGetObj('divTicker_' + ceUid, ceUid);
  obj.style.width = dm_newsticker_data[ceUid]["objScrollWidth"] + 'px';
  obj.style.height = dm_newsticker_data[ceUid]["objScrollHeight"] + 'px';
  obj.style.visibility = 'visible';
  tickerStart(true, ceUid);
}

function tickerReload(ceUid) {
  if(!DOM && !IE4) return;
  document.location.reload();
}


//---------------------------------------------------------------------------------------------------------
// Build ticker
//---------------------------------------------------------------------------------------------------------


function buildTicker(ceUid) {
  //---------------------------------------------------------------------------------------------------------
  // Ticker entries
  //---------------------------------------------------------------------------------------------------------
  dm_newsticker_data[ceUid]["tickerItems"] = new Array();
  dm_newsticker_data[ceUid]["tickerID"] = '';
  dm_newsticker_data[ceUid]["tickerTimeout"] = '';
  dm_newsticker_data[ceUid]["tickerIV"] = '';

  dm_newsticker_data[ceUid]["orientation"] = dm_newsticker_data[ceUid]["orientation"].toLowerCase();
  dm_newsticker_data[ceUid]["speed"] = Math.round(((100-(dm_newsticker_data[ceUid]["speed"]))/2));
  dm_newsticker_data[ceUid]["tickerOffset"] = parseInt(dm_newsticker_data[ceUid]["tickerOffset"]);       // Tickeroffset, also der Top / left - Wert (je noch orientation), an der das erste item des Tickers beginnen soll
  
  //alert(var_dump(dm_newsticker_data[ceUid]["backColour"]));

  if ((dm_newsticker_data[ceUid]["tickerOffset"] % 2)) {
    dm_newsticker_data[ceUid]["tickerOffset"] = dm_newsticker_data[ceUid]["tickerOffset"] + 1;
  }

  //alert(var_dump(dm_newsticker_data[ceUid]["orientation"]));

  if (dm_newsticker_data[ceUid]["articleData"]=='') {
    return false;
  }


  linked_article = new Array();
  for (x in dm_newsticker_data[ceUid]["articleData"]) {
    //Link the Articles from the Given array
    //Article[x][3] is the Thumbnail Image
    linked_article[x] = 
      (dm_newsticker_data[ceUid]["articleData"][x][5] ? ('<span class="dmnt_newsdate">' + dm_newsticker_data[ceUid]["articleData"][x][5] + '</span>') : ('')) +
      dm_newsticker_data[ceUid]["articleData"][x][1] +
      dm_newsticker_data[ceUid]["articleData"][x][3] + '<span class="dmnt_newstitle">' + dm_newsticker_data[ceUid]["articleData"][x][0] + '</span>' +
      (dm_newsticker_data[ceUid]["articleData"][x][4] ? (dm_newsticker_data[ceUid]["subtitleDivider"] ? '<div class="dmnt_subtitledivider" ' + (dm_newsticker_data[ceUid]["orientation"]=='horizontal' ? 'style = "display: inline;"' : '') + '>' + dm_newsticker_data[ceUid]["subtitleDivider"] +'</div>' : '') + '<span class="dmnt_newssubtitle">' + dm_newsticker_data[ceUid]["articleData"][x][4] + '</span>' : "") +
      dm_newsticker_data[ceUid]["articleData"][x][2];
  }
  dm_newsticker_data[ceUid]["articleData"]["tickerEntries"] = linked_article;


  if (dm_newsticker_data[ceUid]["articleData"]["tickerEntries"]=='') {
    return false;
  }
  
  //CSS
  document.write(
    '<style type="text/css"> ' +
    '#divTicker_' + ceUid + ' { ' +
    (dm_newsticker_data[ceUid]["bg_image"] ? 'background-image: url(' + dm_newsticker_data[ceUid]["bg_image"] + ');' : '') +
    'position: relative; ' +
    'height: ' + dm_newsticker_data[ceUid]["objScrollHeight"] + 'px; ' +
    'width: ' + dm_newsticker_data[ceUid]["objScrollWidth"] + 'px; ' +
    'overflow: hidden; ' +
    'visibility: hidden; ' +
    (dm_newsticker_data[ceUid]["borderWidth"] ? 'border-width: ' + dm_newsticker_data[ceUid]["borderWidth"] + 'px; ' : '') +
    (tickerBorderStyle ? 'border-style: ' + tickerBorderStyle + '; ' : '') +
    (dm_newsticker_data[ceUid]["borderColour"] ? 'border-color: ' + dm_newsticker_data[ceUid]["borderColour"] + '; ' : '') +
    '} ' +
    '.cssTickerContainer_' + ceUid + ' { ' +
    'position: relative; ' +
    'height: ' + dm_newsticker_data[ceUid]["objScrollHeight"] + 'px; ' +
    'width: ' + dm_newsticker_data[ceUid]["objScrollWidth"] + 'px; ' +
    'z-index: 5;' +
    '} ' +
    '.cssTickerEntry_' + ceUid + ' { ' +
    (dm_newsticker_data[ceUid]["orientation"] == "vertical" ? 'width: 100%; text-align: ' + dm_newsticker_data[ceUid]["textAlignment"] + ';' : '') +
    '} ' +
    '.cssTickerEntry_' + ceUid + ' img { ' +
    'display: block;' +
    (dm_newsticker_data[ceUid]["orientation"] == "vertical" ? 'margin: auto;' : 'float: left;') +
    '} ' +
    '#divTicker_' + ceUid + ' .cssTickerEntry a,' +
    '#divTicker_' + ceUid + ' .cssTickerEntry div { ' +
    (dm_newsticker_data[ceUid]["orientation"] == "horizontal" ? 'display: inline;' : '') +
    (dm_newsticker_data[ceUid]["orientation"] == "horizontal" ? 'white-space: nowrap;' : '') +
    '}' +
    '</style>'
    );

  objScroll = ('<div class="cssTickerContainer_' + ceUid + ' cssTickerContainer">' +
    '<div id="divTicker_' + ceUid + '" class="divTicker" onMouseOver="' + (dm_newsticker_data[ceUid]["stopScroll"] ? 'tickerStop(0, ' + ceUid + '); clearTimeout(dm_newsticker_data[' + ceUid + '][&#39;tickerTimeout&#39;]);"' : '') + '" onMouseOut="' + (dm_newsticker_data[ceUid]["stopScroll"] ? 'tickerStart(0, ' + ceUid + ');' : '') + '">');

  for(var i = 0; i < dm_newsticker_data[ceUid]["articleData"]["tickerEntries"].length; i++) {
    objScroll += ('<div id="divTickerEntry_' + ceUid + '_' + (i+1) + '" class="cssTickerEntry_' + ceUid + ' cssTickerEntry" ' +
      'style="position:absolute;">' +
      dm_newsticker_data[ceUid]["articleData"]["tickerEntries"][i] + ((dm_newsticker_data[ceUid]["articleData"]["tickerEntries"].length > 1) ? '<div class="dmnt_tickerDivider_' + ceUid + ' dmnt_tickerDivider"' + (dm_newsticker_data[ceUid]["orientation"]=='horizontal' ? '' : '') + '>' + dm_newsticker_data[ceUid]["objScrollDivider"] + '</div>' : '') +
      '</div>');
  }
  objScroll += ('</div></div>');
  document.getElementById("tickerspace_" + ceUid).innerHTML = objScroll;
  
  
  //Bug mit offsetWidth und offsetHeight im IE
  global_ceUid = ceUid;
  setTimeout(function(){tickerInit(global_ceUid);},100);

  return true;
}


function var_dump(obj) {
  if(typeof obj == "object") {
    return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
  } else {
    return "Type: "+typeof(obj)+"\nValue: "+obj;
  }
}//end function var_dump

//---------------------------------------------------------------------------------------------------------


window.onresize = tickerReload;
//window.onload = buildTicker;
