/*
  AJAX Woot Checker, woot.js v1.0
  Copyright (c)2007, Isaac Kishk  ikishk@gmail.com

  Must be used in conjunction with getwoot.pl, which generates an
  ajax-friendly woot.xml, read by this file.

*/

// dont change this until you'd read the perl file
var wootjsver = "2.0";

// main AJAX loop
function displayWOOT(URI) {

var xmlhttpw=false;

/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
 try {
  xmlhttpw = new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
   xmlhttpw = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttpw = false;
  }
 }
@end @*/
  if (!xmlhttpw && typeof XMLHttpRequest!='undefined') {
    xmlhttpw = new XMLHttpRequest();
  }
  xmlhttpw.open("GET", URI ,true);
  xmlhttpw.onreadystatechange=function() {
    if (xmlhttpw.readyState==2) {
    }
    if (xmlhttpw.readyState==4) {
    if (xmlhttpw.status == 200) {
      var xmlDoc = xmlhttpw.responseXML; 
      formatWOOT(xmlDoc);
    
  }
}
}
xmlhttpw.send(null);
}

function unixTimeToDate (timestamp) {
  return(new Date(timestamp * 1000).toLocaleString());
}

// parse the data from the xml file
function formatWOOT(xmlDoc) {

  // version check to make sure we dont have to reload page for a fresh woot.js
  var xmlversion = xmlDoc.getElementsByTagName('version')[0].getAttribute('val');
  if (xmlversion > wootjsver) {
    window.location.reload(false);
  }
  $('pagedversion').innerHTML = xmlversion + " > " + wootjsver;
  $('active').innerHTML = xmlDoc.getElementsByTagName('active')[0].getAttribute('val');

  $('title').innerHTML = xmlDoc.getElementsByTagName('title')[0].firstChild.nodeValue
  $('subtitle').innerHTML = xmlDoc.getElementsByTagName('subtitle')[0].firstChild.nodeValue
  $('condition').innerHTML = xmlDoc.getElementsByTagName('condition')[0].getAttribute('val');
  $('price').innerHTML = xmlDoc.getElementsByTagName('price')[0].getAttribute('val');
  $('desc').innerHTML = xmlDoc.getElementsByTagName('desc')[0].firstChild.nodeValue
//  $('prods').innerHTML = xmlDoc.getElementsByTagName('prods')[0].firstChild.nodeValue
  $('stdimg').src = xmlDoc.getElementsByTagName('stdimg')[0].getAttribute('val');
  $('detailimg').href = xmlDoc.getElementsByTagName('detailimg')[0].getAttribute('val');
  $('saleurl').href = xmlDoc.getElementsByTagName('saleurl')[0].getAttribute('val');
  $('forumurl').href = xmlDoc.getElementsByTagName('forumurl')[0].getAttribute('val');
  $('blogurl').href = xmlDoc.getElementsByTagName('blogurl')[0].getAttribute('val');
  $('purchaseurl').href = xmlDoc.getElementsByTagName('purchaseurl')[0].getAttribute('val');
  //$('wootcast').href = xmlDoc.getElementsByTagName('wootcast')[0].getAttribute('val');
  var percent = xmlDoc.getElementsByTagName('percent')[0].getAttribute('val');
  $('percent2').innerHTML = xmlDoc.getElementsByTagName('percent')[0].getAttribute('val');
  $('wootoff').innerHTML = xmlDoc.getElementsByTagName('wootoff')[0].getAttribute('val');
  $('soldout').innerHTML = xmlDoc.getElementsByTagName('soldout')[0].getAttribute('val');
  $('lastBuildDate').innerHTML = xmlDoc.getElementsByTagName('lastBuildDate')[0].getAttribute('val');
  var itemstart = xmlDoc.getElementsByTagName('itemstart')[0].getAttribute('val');
  var itemelapsed = xmlDoc.getElementsByTagName('itemelapsed')[0].getAttribute('val');
  var itemremaining = xmlDoc.getElementsByTagName('itemremaining')[0].getAttribute('val');
  var woottime = xmlDoc.getElementsByTagName('woottime')[0].getAttribute('val');
  var scripttime = xmlDoc.getElementsByTagName('scripttime')[0].getAttribute('val');
  var d = new Date();
  var cachetime = Math.round(d.getTime()/1000) - scripttime;
  var age = scripttime - woottime;
  var progressMeterBar = document.getElementById('progressMeterBarDone');


  // itemstart
  $('itemstart').innerHTML = unixTimeToDate(itemstart);

  // cachetime
  $('cachetime').innerHTML = "";
  var TotalDays = Math.floor(cachetime/86400);
  var TotalDaysMod = (cachetime%86400);
  var TotalHours = Math.floor(TotalDaysMod/3600);
  var TotalHoursMod = (TotalDaysMod%3600);
  var TotalMin = Math.floor(TotalHoursMod/60);
  var TotalMinMod = (TotalHoursMod%60);
  var TotalSec = Math.floor(TotalMinMod);

  if (TotalDays > 0) $('cachetime').innerHTML += TotalDays + "d ";
  if (TotalHours > 0) $('cachetime').innerHTML += TotalHours + "h ";
  if (TotalMin > 0) $('cachetime').innerHTML += TotalMin + "m ";
  $('cachetime').innerHTML += TotalSec + "s";

  // itemelapsed
  $('itemelapsed').innerHTML = "";
  var TotalDays = Math.floor(itemelapsed/86400);
  var TotalDaysMod = (itemelapsed%86400);
  var TotalHours = Math.floor(TotalDaysMod/3600);
  var TotalHoursMod = (TotalDaysMod%3600);
  var TotalMin = Math.floor(TotalHoursMod/60);
  var TotalMinMod = (TotalHoursMod%60);
  var TotalSec = Math.floor(TotalMinMod);

  if (TotalDays > 0) $('itemelapsed').innerHTML += TotalDays + "d ";
  if (TotalHours > 0) $('itemelapsed').innerHTML += TotalHours + "h ";
  if (TotalMin > 0) $('itemelapsed').innerHTML += TotalMin + "m ";
  $('itemelapsed').innerHTML += TotalSec + "s";

  // itemremaining
  $('itemremaining').innerHTML = "";
  var TotalDays = Math.floor(itemremaining/86400);
  var TotalDaysMod = (itemremaining%86400);
  var TotalHours = Math.floor(TotalDaysMod/3600);
  var TotalHoursMod = (TotalDaysMod%3600);
  var TotalMin = Math.floor(TotalHoursMod/60);
  var TotalMinMod = (TotalHoursMod%60);
  var TotalSec = Math.floor(TotalMinMod);

  if (TotalDays > 0) $('itemremaining').innerHTML += TotalDays + "d ";
  if (TotalHours > 0) $('itemremaining').innerHTML += TotalHours + "h ";
  if (TotalMin > 0) $('itemremaining').innerHTML += TotalMin + "m ";
  $('itemremaining').innerHTML += TotalSec + "s";
  var titemremaining = $('itemremaining').innerHTML.replace(/\s/gi,"");

  // age
  $('age').innerHTML = "";
  var TotalDays = Math.floor(age/86400);
  var TotalDaysMod = (age%86400);
  var TotalHours = Math.floor(TotalDaysMod/3600);
  var TotalHoursMod = (TotalDaysMod%3600);
  var TotalMin = Math.floor(TotalHoursMod/60);
  var TotalMinMod = (TotalHoursMod%60);
  var TotalSec = Math.floor(TotalMinMod);

  if (TotalDays > 0) $('age').innerHTML += TotalDays + "d ";
  if (TotalHours > 0) $('age').innerHTML += TotalHours + "h ";
  if (TotalMin > 0) $('age').innerHTML += TotalMin + "m ";
  $('age').innerHTML += TotalSec + "s";

  // bar, browser title, percent based on wootoff/percent
  if ($('wootoff').innerHTML == "0") {
    var progressbar = document.getElementById('progressbar');
    progressbar.style.height = 0;
    progressMeterBar.style.width = "100%";
    progressMeterBar.style.height = 1;
    progressMeterBar.style.background = "black";
    $('percent').innerHTML = "<small>One Day,<br> One Deal&trade;</small>";
    document.title = "No Woot Off - Woot Off AJAX Client";
  } else if (percent == "0.0") {
    document.title = "SOLD OUT - Woot Off AJAX Client";
    $('percent').innerHTML = "SOLD OUT";
  } else {
    $('percent').innerHTML = percent + "%";
    document.title = percent + "% ~" + titemremaining + "- Woot Off AJAX Client";
    progressMeterBar.style.width = percent + "%";
    progressMeterBar.style.background = "#f29f01";
  }

  // bar color change based on percent
  if (percent >= 80)
    progressMeterBar.style.background = "#4A6751";
  if (percent <= 10)
    progressMeterBar.style.background = "#FFFF99";
  if (percent <= 5)
    progressMeterBar.style.background = "#FF9999";
  if (percent < 0.1) 
    progressMeterBar.style.background = "#FFFFFF";
    


  // audio loop
  processAudioCues($('purchaseurl').href, percent);
}


// set new audio schemes here
// [0] name, [1] 20%, [2] 10%, [3] 5%, [4] new, [5] soldout
var SoundSchemes = new Array(
  new Array("subtle birds", "SubtleBirdCall4", "SubtleBirdCall3", "SubtleBirdCall1", "SubtleBirdCall2", "SubtleBirdCall2"),
  new Array("loud sounds", "AnnoyingCar", "AnnoyingNoise", "LoudBells1", "AnnoyingBells","AnnoyingBells"),
  new Array("spoken", "Spoken20percent", "Spoken10percent", "Spoken5percent", "SpokenWootAlarm","SpokenWootAlarm"),
  new Array("glass", "LoudGlass3", "LoudGlass3", "LoudGlass1", "LoudGlass2", "LoudGlass2"),
  new Array("bells", "SubtleBells3", "SubtleBells2", "LoudBells2", "LoudBells4", "LoudBells4")
);

function processAudioCues (url, percent) {
  // Get all of the controlling check boxes on the page
  var enableAudioCues      = document.getElementById("enableAudioCues");
  var CueAt20PercentPlayed = document.getElementById("CueAt20PercentPlayed");
  var CueAt20Percent       = document.getElementById("CueAt20Percent");
  var CueAt10PercentPlayed = document.getElementById("CueAt10PercentPlayed");
  var CueAt10Percent       = document.getElementById("CueAt10Percent");
  var CueAt5PercentPlayed  = document.getElementById("CueAt5PercentPlayed");
  var CueAt5Percent        = document.getElementById("CueAt5Percent");
  var CueAtSOPercentPlayed  = document.getElementById("CueAtSOPercentPlayed");
  var CueAtSOPercent        = document.getElementById("CueAtSOPercent");
  var CueAtNewWoot         = document.getElementById("CueAtNewWoot");
  var CueAtNewPlayed         = document.getElementById("CueAtNewPlayed");
  var audioSchemeList      = document.getElementById("AudioScheme");

  var scheme = audioSchemeList.selectedIndex;
  if (lasturl != null && url != lasturl) {
    // If CueAtNewWootPlayed is blank then
    if (CueAtNewPlayed.value.length == 0) {
      // Mark New checkboxes complete,
      CueAtNewPlayed.value = "1";
      // Is enableAudioCues checked?
      if (enableAudioCues.checked && CueAtNewWoot.checked) {
        // play new sound
        soundManager.play(SoundSchemes[scheme][4])
      }
    }
    // Enable playing of all timed sounds
    CueAtSOPercentPlayed.value = "";
    CueAt20PercentPlayed.value = "";
    CueAt10PercentPlayed.value = "";
    CueAt5PercentPlayed.value = "";
    var lasturl = url;
    return;
  }
  if (percent == "5.0001") {
    return;
  } else if (percent == "0.0") {
    // If CueAtSOPercentPlayed is blank then
    if (CueAtSOPercentPlayed.value.length == 0) {
      // Mark all sounds as played
      CueAtSOPercentPlayed.value = "1";
      CueAt20PercentPlayed.value = "1";
      CueAt10PercentPlayed.value = "1";
      CueAt5PercentPlayed.value = "1";
      // Is enableAudioCues checked?
      if (enableAudioCues.checked && CueAtSOPercent.checked) {
        // play SO sound
        soundManager.play(SoundSchemes[scheme][5])
      }
    }
  } else if (percent < 5.1) {
    // If CueAt5PercentPlayed is blank then
    if (CueAt5PercentPlayed.value.length == 0) {
      // Mark all sounds as played
      CueAt20PercentPlayed.value = "1";
      CueAt10PercentPlayed.value = "1";
      CueAt5PercentPlayed.value = "1";
      // Is enableAudioCues checked?
      if (enableAudioCues.checked && CueAt5Percent.checked) {
        // play 5 percent sound
        soundManager.play(SoundSchemes[scheme][3])
      }
    }
  } else if (percent < 10.1) {
    // If CueAt10PercentPlayed is blank then
    if (CueAt10PercentPlayed.value.length == 0) {
      // Mark 20 and 10 checkboxes complete,
      CueAt20PercentPlayed.value = "1";
      CueAt10PercentPlayed.value = "1";
      // Is enableAudioCues checked?
      if (enableAudioCues.checked && CueAt10Percent.checked) {
        // play 10 percent sound
        soundManager.play(SoundSchemes[scheme][2])
      }
    }
  } else if (percent < 20.1) {
    // If CueAt20PercentPlayed is blank then
    if (CueAt20PercentPlayed.value.length == 0) {
      // Mark 20 checkboxes complete,
      CueAt20PercentPlayed.value = "1";
      // Is enableAudioCues checked?
      if (enableAudioCues.checked && CueAt20Percent.checked) {
        // play 20 percent sound
        soundManager.play(SoundSchemes[scheme][1])
      }
    }
//  } else if (percent > 99.9) {
//    if(CueAtNewPlayed.value.length == 0) {
      // Mark New checkboxes complete,
//      CueAtNewPlayed.value = "1";
      // Is enableAudioCues checked?
//      if (enableAudioCues.checked && CueAtNewWoot.checked) {
        // play new sound
//        soundManager.play(SoundSchemes[scheme][4])
//      }
//    }
//    CueAtSOPercentPlayed.value = "";
//    CueAt20PercentPlayed.value = "";
//    CueAt10PercentPlayed.value = "";
//    CueAt5PercentPlayed.value = "";
//    var lasturl = url;
  } else {
      // Enable playing of all timed sounds
      CueAtSOPercentPlayed.value = "";
      CueAt20PercentPlayed.value = "";
      CueAt10PercentPlayed.value = "";
      CueAt5PercentPlayed.value = "";
      var lasturl = url;
      return;
  }
}

function initializeAudioScheme () {
  var audioSchemeList = document.getElementById("AudioScheme");

  for (i = 0; i < SoundSchemes.length; i++) {
    audioSchemeList.options[i] = new Option(SoundSchemes[i][0], i);
  }

  var enableAudioCues      = document.getElementById("enableAudioCues");

  if (enableAudioCues.checked)
    audioCuesEnabled()
}

function audioCuesEnabled () {
  soundManager.play('CuesEnabled');
}

function testSound (index) {
  var audioSchemeList      = document.getElementById("AudioScheme");
  var scheme = audioSchemeList.selectedIndex;
  soundManager.play(SoundSchemes[scheme][index]);
}

// this is what starts it all off with the onLoad/onError
function getWOOT() {
  // variable added to xml fetch to ensure its not cached in your browser
  var moo = Math.round((new Date()).getTime());
  displayWOOT("woot.xml?moo=" + moo);  

  // kill AJAX loops if $active set to 0
  if ($('active').innerHTML == "0") 
    return;
  else if ($('wootoff').innerHTML == "0")
    setTimeout('getWOOT();', 2160000); //6 hrs
  else if ($('soldout').innerHTML == "1")
    setTimeout('getWOOT();', 2500); // 2.5 secs
  else if ($('percent2').innerHTML > 20)
    setTimeout('getWOOT();', 10000);  // 10 secs
  else if ($('percent2').innerHTML > 5)
    setTimeout('getWOOT();', 5000);  // 5 secs
  else if ($('percent2').innerHTML <= 5)
    setTimeout('getWOOT();', 3000);  //  3 secs
  else
    setTimeout('getWOOT(); initializeAudioScheme();', 2000);
}

//setTimeout('getWOOT(); initializeAudioScheme();', 100);
