// CSS Style Sheet Switcher
// Dynamically switch between preferred and alternate style sheets

// Modified from Paul Sowden's original script, published in A List Apart,
// Issue No. 126 on November 2, 2001.
// http://alistapart.com/articles/alternate/

// Modified by: Davydd Cook (davydd@mnsi.net), August 2006.
// This version incorporates checks to ensure that only linked style sheets
// intended for 'screen' media are enabled/disabled. As a result, <link>
// elements in the HTML source must include the media="screen" attribute
// for the style sheet to be addressed by this script.

function setActiveStyleSheet(el, title) {
  for (var i = 0; i < el.length; i++) {
    if (el[i].getAttribute("rel").indexOf("style") != -1 &&
        el[i].getAttribute("media").indexOf("screen") != -1 &&
        el[i].getAttribute("title")) {
      el[i].disabled = (el[i].getAttribute("title") == title) ? false : true;
    }
  }

  createCookie("bfwstyle", title, 365);
}

function getActiveStyleSheet(el) {
  for (var i = 0; i < el.length; i++) {
    if (el[i].getAttribute("rel").indexOf("style") != -1 &&
        el[i].getAttribute("media").indexOf("screen") != -1 &&
        el[i].getAttribute("title") &&
       !el[i].disabled) {
      return el[i].getAttribute("title");
    }
  }
  return null;
}

function getPreferredStyleSheet(el) {
  for (var i = 0; i < el.length; i++) {
    if (el[i].getAttribute("rel").indexOf("style") != -1 &&
        el[i].getAttribute("rel").indexOf("alt") == -1 &&
        el[i].getAttribute("media").indexOf("screen") != -1 &&
        el[i].getAttribute("title")) {
      return el[i].getAttribute("title");
    }
  }

  return null;
}

function createCookie(name, value, days) {
  var expires;

  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days*86400000));
    expires = "; expires=" + date.toGMTString();
  } else {
    expires = "";
  }

  document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var allCookies = document.cookie.split(';');
  var c;

  for (var i = 0; i < allCookies.length; i++) {
    c = allCookies[i];

    while (c.charAt(0)==' ') {
      c = c.substring(1, c.length);
    }

    if (c.indexOf(nameEQ) == 0) {
      return c.substring(nameEQ.length, c.length);
    }
  }

  return null;
}

var linkElems = document.getElementsByTagName("link");

for (var i = 0; i < linkElems.length; i++) {
  if (linkElems[i].getAttribute("rel").indexOf("style") != -1 &&
      linkElems[i].getAttribute("media").indexOf("screen") != -1) {
      linkElems[i].disabled = true;
  }
}

var cookie = readCookie("bfwstyle");
var title = cookie ? cookie : getPreferredStyleSheet(linkElems);
setActiveStyleSheet(linkElems, title);
