// Mike Macgirvin 2008-2009
// Contact: firstname at lastname dot com

var r = 0;
var g = 0;
var b = 0;

var speed = 2;
var delay = 5000;
var multiplier = 1600;

var timer = null;
var holdid = 0;
var element = null;
var custom = '';
var seq = 0;
var nindex = 0;

var name1 = null;
var name2 = null;
var curr1 = null;
var curr2 = null;

var adult = 0;
var cat = false;
var maxlength = 0;
var style1 = 1;
var style2 = 2;
var pause = false;
var lang = 'en';

function makeRequestObject() {
  var http_request = false;

  if(window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
  } 
  else { 
    if(window.ActiveXObject) {
      try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } 
      catch(e) {
        try {
          http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (e) {}
      }
    }
  }
  return http_request;
}


var xmldoc = null;
var currentdomain = null;

function getElementText(xmlobj,element) {
  if(xmlobj.getElementsByTagName(element)[0].text)
    result = xmlobj.getElementsByTagName(element)[0].text;
  else
    result = xmlobj.getElementsByTagName(element)[0].textContent;
  return result;
}

// We have either run out of names or the options have been changed.
// Grab some more. The seq and rand parameters help to prevent caching by
// an unnamed sucky browser.

function get_more() {
  xmldoc = makeRequestObject();
  seq ++;
  var params = "?seq=" + seq;
  if(lang != 'en')
    params = params + "&lang=" + lang;
  if(cat)
    params = params + "&cat=" + '1';
  if(maxlength)
    params = params + "&length=" + maxlength;
  params = params + "&adult=" + adult;
  params = params + "&rand=" + Math.random();
  if(xmldoc) {
    xmldoc.onreadystatechange = load_names;
    xmldoc.open("GET", "fortune.php" + params, true);
    xmldoc.send(null);
  }
}

function load_names() {
  if(xmldoc.readyState == 4) {
    contents = xmldoc.responseXML;
    name1 = getElementText(contents,'fortune').split("\n%\n");
    nindex = 0;
  }
}

function register_element(elem) {
  formreset();
  element = elem;
  var id = document.getElementById(element);
  id.style.color = "rgb(" + r +"," + g + "," + b + ")";
  get_more();
  update_element();
}

function update_element() {

  // if necessary, wait for fortune to load.
  if(name1 == null) {
    setTimeout('update_element();',100);
    return;
  }

  curr1 = name1[nindex];


  if((curr1 == null) || (curr1 == '')) {
    setTimeout('update_element();',100);
    return;
  }

  var id = document.getElementById(element);
  id.innerHTML = curr1;

  delay = ((curr1.length / 100) * multiplier) + 5000;

  nindex ++;
  if ((nindex > 49)
    || (name1[nindex] == null) || (name1[nindex] == '')) {
    nindex = 0;
    get_more();
  }
 
  timer = setTimeout('fadein();',5);
}

function fadeout() {
  if(pause)
    return;
  var id = document.getElementById(element);
  r = (((r + speed) < 255) ? r + speed : 255);
  g = (((g + speed) < 255) ? g + speed : 255);
  b = (((b + speed) < 255) ? b + speed : 255);

  if((r != 255) && (g != 255) && (b != 255)) {
    timer = setTimeout('fadeout();',10);
  }
  else
    update_element();
  id.style.color = "rgb(" + r + "," + g + "," + b + ")";
}

function fadein() {
  var id = document.getElementById(element);
  r = (((r - speed) > 0) ? r - speed : 0);
  g = (((g - speed) > 0) ? g - speed : 0);
  b = (((b - speed) > 0) ? b - speed : 0);

  if(r && g && b) {
    timer = setTimeout('fadein();',10);
  }
  else
    timer = setTimeout('fadeout();',delay);

  id.style.color = "rgb(" + r + "," + g + "," + b + ")";
}


function set_adult(f) {
  adult = f;
  get_more();
}

function toggle_cat() {
  cat = ((cat) ? false : true);
  get_more();
}

function get_val(elem) {
  var idx = elem.selectedIndex;
  return elem.options[idx].value;
}

function set_length(f) {
  maxlength = get_val(f);
  get_more();
}

function set_lang(f) {
  lang = get_val(f);
  if(lang != 'en' && lang != 'es' && lang != 'it') {
    adult = 0;
    id = document.getElementsByName('adult');
    if(id[2].checked == true)
      id[0].checked = true;
    id[2].disabled = true;
  }
  else {    
    id = document.getElementsByName('adult');
    id[2].disabled = false;
  }

  get_more();
}

function set_speed(f) {
  spd = Number(get_val(f));
  if(spd < 1)
    spd = 1;
  multiplier = spd  * 800;
}

// Here lie dragons...
// An unnamed sucky browser insists on remembering form changes
// across page reloads, even though the javascript values have
// been reset. This leads to confusion, so we reset everything
// to default values manually to make sure a page reload starts 
// fresh and with our forms in a known state.

function formreset() {
  id = document.getElementsByName('language');
  id[0].options[0].selected=true;
  id = document.getElementsByName('length');
  id[0].options[3].selected=true;
  id = document.getElementsByName('speed');
  id[0].options[1].selected=true;
  id = document.getElementsByName('adult');
  id[0].checked = true;
  id = document.getElementsByName('cat');
  id[0].checked = false;
  pause = false;
  id = document.getElementById('control');
  id.src="pause.gif";

}

function toggle_play() {
  pause = ((pause) ? false : true);
  id = document.getElementById('control');
  if(pause)
    id.src="play.gif";
  else {
    id.src="pause.gif";
    fadeout();
  }
}


function openClose(theID) {
  if(document.getElementById(theID).style.display == "block") { 
    document.getElementById(theID).style.display = "none" 
  }
  else { 
    document.getElementById(theID).style.display = "block" 
  } 
}

