/*

(c) paranoidandroid

*/

var currentRequest;
var currentChannel="home";
var currentArticle;
var scrollDuration=500;
var scrollCountdown;
var scrollStep=100;
var scrollOffset;
var scrollStart;
var curScroll;

var smoothScrolling=true;

function hideHome(){
  document.getElementById("start").style.display='none';
  document.getElementById("left").style.display='block';
  document.getElementById("right").style.display='block';
//  document.getElementById("bottom").style.display='block';
}

function switchChannel(event) {
  event.preventDefault();
  hideHome();
  var currentChannel = cn = event.target.parentNode.id;
  var to_hide = document.getElementById("headlinesWrapper").getElementsByTagName("ul");
  for(var i=0;i<to_hide.length;i++)
    to_hide[i].style.display="none";
  document.getElementById("headlines_"+cn).style.display="block";
  var t3 = document.getElementById("channels").getElementsByTagName("a");
  for(var k=0;k<t3.length;k++)
    t3[k].className = t3[k].className.replace("selected", "");
  event.target.className+=" selected";
  simClick(document.getElementById("headlines_"+cn).getElementsByTagName("a")[0]);
  document.getElementById("headlines_"+cn).getElementsByTagName("a")[0].focus();
  document.getElementById("headlinesWrapper").scrollTop=0;
}

function loadArticle(event) {
  var link = event.target.href;
  var id = link.match(/\d+/);
  if (currentRequest) currentRequest.abort();
  currentRequest = new XMLHttpRequest();
  currentRequest.onreadystatechange = injectArticle;
  currentRequest.open("GET", "article.php?id="+id);
  currentRequest.send(null);
  currentArticle=event.target.id;
  event.preventDefault();
  var t4 = document.getElementById("headlinesWrapper").getElementsByTagName("a");
  for(var l=0;l<t4.length;l++)
    t4[l].className = t4[l].className.replace("selected", "");
  event.target.className+=" selected";
  document.getElementsByClassName("home"+id)[0].className+=" selected";
  document.getElementsByClassName("home"+id)[0].focus();
  triggerCount("tv-version", "artikel."+id);
}

function injectArticle() {
  hideHome();
  if(this.readyState == 4 && this.status == 200) {
    var a = document.getElementById("article");
    var cn = a.childNodes;
    for(var i=0;i<cn.length;i++)
      a.removeChild(cn[i]);
    a.appendChild(document.importNode(this.responseXML.getElementById("inner"), true));
    if (currentArticle) document.getElementById(currentArticle).focus();
    //TODO try via js
    document.getElementById("scrollDown").getElementsByTagName("a")[0].style.navLeft="#"+currentArticle;
    document.getElementById("scrollUp").getElementsByTagName("a")[0].style.navLeft="#"+currentArticle;    
  }
}

  
function scrollPage(event, target, direction) {
    event.preventDefault();
    var g=target.offsetHeight-30;
    if (smoothScrolling)
      smooth(target, g*direction);
    else
      target.scrollTop+=(direction)*g;
}

function simClick(elm) {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  elm.dispatchEvent(evt);  
}

function highlight(id) {

  document.getElementById("righttop").style.borderColor="#859aa9"
  document.getElementById("left").style.borderColor="#859aa9"
  document.getElementById("right").style.borderColor="#859aa9"
  document.getElementById(id).style.borderColor="white"
}

function autoscroll(event) {
  highlight("left");
  var el = event.target;
  var elHeight = el.offsetHeight;
  var contHeight = document.getElementById("headlinesWrapper").offsetHeight;
  var contTop = el.offsetTop - document.getElementById("headlinesWrapper").offsetTop;
  var alreadyScroll = document.getElementById("headlinesWrapper").scrollTop;
  var offs = - (contHeight - elHeight)/2 + contTop - alreadyScroll;
  if (smoothScrolling)
    smooth(document.getElementById("headlinesWrapper"), offs);
  else
    document.getElementById("headlinesWrapper").scrollTop+=offs;
}

function smooth(el, offs) {
  window.clearTimeout(curScroll);
  
  scrollStart=el.scrollTop;
  
  scrollCountdown=scrollDuration;

  curScroll = window.setTimeout(function(){smoother(el, offs)}, scrollStep);
}

function smoother(el, offs) {
  var missing = scrollStart+offs-el.scrollTop;
  var ratio = (scrollDuration-scrollCountdown)/scrollDuration;
  el.scrollTop+=missing*ratio;
  scrollCountdown-=scrollStep;
  window.clearTimeout(curScroll);
  if (scrollCountdown>-1)
    curScroll = window.setTimeout(function(){smoother(el, offs)}, scrollStep);
  else ;
    //finished
    
}

function halt(event) {
  event.preventDefault();
}


function handleBack2(event) {
  if (typeof(VK_BACK)!='undefined' && event.keyCode==VK_BACK) {
    document.getElementById(currentArticle).focus();
    event.preventDefault();
  }
}

function handleBack(event) {
  if (typeof(VK_BACK)!='undefined' && event.keyCode==VK_BACK) {
    document.getElementById(currentChannel).getElementsByTagName("a")[0].focus();
    event.preventDefault();
  }
}


function bload(){

  
  //TODO enable for ps3
  //window.resizeBy(0,0); 
  
  var t = document.getElementById("channels").getElementsByTagName("a");
  for(var i=0;i<t.length;i++) {
    t[i].addEventListener("click", switchChannel, false);
    t[i].addEventListener("focus", function(){highlight("righttop")}, false); 
  }
  
  var tn = document.getElementById("headlinesWrapper").getElementsByTagName("a");
  for(var i=0;i<tn.length;i++) {
    tn[i].addEventListener("focus", autoscroll, false);
    tn[i].addEventListener("keypress", handleBack, false);        
    tn[i].addEventListener("mousedown", function(event){loadArticle(event);this.focus()}, false);
    tn[i].addEventListener("click", loadArticle, false);    
  }
  
  var tx = document.getElementById("start").getElementsByTagName("a");
  for(var i=0;i<tx.length;i++) {      
    tx[i].addEventListener("mousedown", function(event){loadArticle(event);this.focus()}, false);
    tx[i].addEventListener("click", loadArticle, false);    
  }  
  
  //simClick(document.getElementById("headlinesWrapper").getElementsByTagName("a")[0]);
  //simClick(document.getElementById("channels").getElementsByTagName("a")[0]);
    
  document.getElementById("home_a").className='selected';
  document.getElementById("first").focus();
    
  //scrolling right
  document.getElementById("scrollDown").getElementsByTagName("a")[0].addEventListener("click", function(event){scrollPage(event, document.getElementById("inner"), 1)}, false);  
  document.getElementById("scrollUp").getElementsByTagName("a")[0].addEventListener("click", function(event){scrollPage(event, document.getElementById("inner"), -1)}, false);
  document.getElementById("scrollDown").getElementsByTagName("a")[0].addEventListener("focus", function(){highlight("right")}, false);
  document.getElementById("scrollUp").getElementsByTagName("a")[0].addEventListener("focus", function(){highlight("right")}, false);  
  document.getElementById("scrollDown").getElementsByTagName("a")[0].addEventListener("keypress", handleBack2, false);
  document.getElementById("scrollUp").getElementsByTagName("a")[0].addEventListener("keypress", handleBack2, false);   

  //scrolling left
  document.getElementById("scrollDownl").getElementsByTagName("div")[0].addEventListener("mousedown", function(event){scrollPage(event, document.getElementById("headlinesWrapper"), 1);highlight('left');}, false);  
  document.getElementById("scrollUpl").getElementsByTagName("div")[0].addEventListener("mousedown", function(event){scrollPage(event, document.getElementById("headlinesWrapper"), -1);highlight('left');}, false);
  document.getElementById("scrollDownl").getElementsByTagName("div")[0].addEventListener("focus", function(){highlight("left")}, false);
  document.getElementById("scrollUpl").getElementsByTagName("div")[0].addEventListener("focus", function(){highlight("left")}, false);  

}    



window.addEventListener("load", bload, false);

