/*=================================================//
// Radio UNiCC Javascript                          //
//-------------------------------------------------//
// Project:   Radio UNiCC Webpage                  //
// Author:    Daniel Schroeder                     //
// E-Mail:    webmaster@gravitymedia.de            //
// Version:   0.1                                  //
//=================================================*/

var id_user    = 'user';                  // DIV id des Login input Feldes
var id_pointer = 'menu_pointer';          // DIV id des menu pointers
var id_marquee = 'content_cam_marquee';   // DIV id der marquee
var interval   = 5000;                    // Intervall, in dem die marquee aktualisiert werden soll (default: 5000)
var infourl    = '/soundstatus/info';     // URL, wo der Text fuer die marquee zu holen ist
var speed      = 35;                      // Geschwindigkeit fuer die marquee (default: 35)
var oszilate   = false;                   // Marqueetext oszilieren lassen (true) oder rotieren (false)
var wait       = 50;                      // Pause, bevor losgescrollt wird (default: 50)

// don't touch!
var pointer  = document.createElement('div');
var info     = '<i>loading stream infos</i>';
var update   = true;
var width    = 0;
var max      = 0;
var offset   = 0;
var move     = true;
var setwait  = wait;
var moveleft = true;

// Initialisiert pointer und marquee bzw. setzt Fokus auf Login
window.onload = function() {
 pointer.setAttribute('id', id_pointer);
 if($(id_marquee)) {
  // Events registrieren
  $(id_marquee).observe('mouseover', function(event) { move = false; });
  $(id_marquee).observe('mouseout', function(event) { move = true; });
  // Breite des Marquee Containers
  width = $(id_marquee).getWidth();
  // Original klonen
  var inner = $(id_marquee).cloneNode(false);
  // CSS anpassen
  inner.setStyle({position: 'absolute', left: '0px', 'white-space': 'nowrap'});
  // ID aendern
  inner.setAttribute('id', id_marquee + '_inner');
  // Klon anhaengen
  $(id_marquee).appendChild(inner);
  // ab nun nur noch auf Klon arbeiten
  id_marquee += '_inner';
  // Loops starten
  window.setInterval('getInfo(\'' + infourl + '\')', interval);
  window.setInterval('runMarquee()', speed);
 } else {
  document.getElementsByName(id_user)[0].focus();
 }
}



// Aktualisiert den info string fuer die marquee
function getInfo(url) {
 new Ajax.Request(url, {
  method: 'get',
  parameters: {random: Math.random()},
  onSuccess: function(transport) {
   var json = transport.responseText.evalJSON(true);
   if(json.title.length > 0) {
    var string = json.title;
    if(json.artist.length > 0)
     string = json.artist + '&nbsp;-&nbsp;' + string;
    if(json.album.length > 0)
     string += '&nbsp;(' + json.album + ')';
   } else {
    var string = '<i>no stream infos available</i>';
   }
   if(info != string) {
    info = string;
    update = true;
   }
  }
 });
}



// Bewegung der marquee
function runMarquee() {
 if(update) {
  $(id_marquee).innerHTML = info;
  max = $(id_marquee).getWidth();
  $(id_marquee).setStyle({left: Math.floor((width - max) / 2) + 'px'});
  update = false;
  offset = 0;
 }
 if(width < max) {
  $(id_marquee).setStyle({left: offset + 'px'});
  if(move) {
   if(oszilate)
    oszilateMarquee();
   else
    rotateMarquee();
  }
 }
}



// Marquee oszilieren lassen
function oszilateMarquee() {
 if(wait == 0) {
  if(moveleft) {
   if(offset > (width - max))
    offset--;
   else
    moveleft = false;
  } else {
   if(offset < 0)
    offset++;
   else {
    moveleft = true;
    wait = setwait;
   }
  }
 } else {
  wait--;
 }
}



// Marquee rotieren lassen
function rotateMarquee() {
 if(wait == 0) {
  if((offset * -1) < max)
   offset--;
  else
   offset = width;
 } else {
  wait--;
 }
}



// Setzt den Pointer vor den Menuepunkt
function appendMenuPointer(item) {
 item.appendChild(pointer);
}



// Entfernt den Pointer vor den Menuepunkt
function removeMenuPointer(item) {
 item.removeChild(pointer);
}


// Highligtet einen Menuepunkt
function switchOn(item) {
 item.setAttribute('src', item.getAttribute('src').replace(/_off/, '_on'));
}


// Setzt das Highlighting eines Menuepunkts zurueck
function switchOff(item) {
 item.setAttribute('src', item.getAttribute('src').replace(/_on/, '_off'));
}
