/** @author Russ Tennant (russ@i2rd.com)
* @require logger.js
*/
if(typeof SS == 'undefined') {
SS = {};
SS.setActiveStyleSheet = function(title) {
  var i, a, main;
  var links = document.getElementsByTagName("link");
  for(i=0; (a = links[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) {
      	a.disabled = false;
      }
    }
  }
};

SS.getActiveStyleSheet = function() {
  var i, a;
  var links = document.getElementsByTagName("link");
  for(i=0; (a = links[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
};

SS.getActiveStyleSheets = function() {
  var i, a, active = {};
  var links = document.getElementsByTagName("link");
  for(i=0; (a = links[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) {
	    active[a.getAttribute("title")] = true;
    }
  }
  var list = [];
  for(key in active) list[list.length] = key;
  return list;
};

SS.getPreferredStyleSheet = function() {
  var i, a;
  var links = document.getElementsByTagName("link");
  for(i=0; (a = links[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) {
       return a.getAttribute("title");
    }
  }
  return null;
};

SS.activateStyleSheet = function(evt) {
	evt.preventDefault();
	evt.stopPropagation();
	var anchor = (evt.srcElement || evt.target);
	if(!anchor) {
		//log4js.logger.error("Unable get event source.");
		return;
	}
	if(!(anchor.nodeName == "a" || anchor.nodeName == "A")) {
		//log4js.logger.warn("Unable to find anchor. Found a " + anchor.nodeName);
		return;
	}
	SS.setActiveStyleSheet(anchor.title);
   	var time = new Date();
	time.setHours(time.getHours() + 48);
	i2rd.setCookie(anchor.cookieName, anchor.title, time, "/");
};

SS.switchers = [];
SS.supported = {};
SS.init = function() {
  if(typeof document.getElementsByTagName == 'undefined') return;
  // Find all SS on page and init based on cookie.
  var divs = document.getElementsByTagName("div");
  var i, el;
  for(i=0; (el = divs[i]); i++) {
    var cn = el.className || "";
    cn = cn.toLowerCase();
    if(cn.match(/stylesheetswitcher/)) {
    	SS.switchers[SS.switchers.length] = el;
    }
  }
  if(SS.switchers.length > 1) {
    //log4js.logger.warn("Not implemented/tested to support multiple switchers on the same page. JS needs to be updated.");
  }
  var anchors, j, a;
  for(i=0; (el = SS.switchers[i]); i++) {
    var cookie = i2rd.getCookie(el.id + "-style");
    var title = cookie ? cookie : SS.getPreferredStyleSheet();
    SS.setActiveStyleSheet(title);	
    anchors = el.getElementsByTagName("a");
    for(j=0; (a = anchors[j]); j++) { 
      i2rd.addEvent(a, 'click', SS.activateStyleSheet);
      a.cookieName = el.id + "-style";
      var titles = SS.supported[el.id];
      if(!titles) {
      	titles = {};
      	SS.supported[el.id] = titles;
      }
      titles[a.title] = true;
    }
  }
};

i2rd.addEvent(window, 'load', SS.init);

i2rd.addEvent(window, 'unload', function(e) {
  var i, el, j, title;
  var titles = SS.getActiveStyleSheets();
  // Synchronize with changes made in the browser
  for(j=0; (title = titles[j]); j++) {
    for(i=0; (el = SS.switchers[i]); i++) {
	    var supported = SS.supported[el.id];
	    if(supported[title]) {
          var time = new Date();
          time.setHours(time.getHours() + 48);
          i2rd.setCookie(el.id + "-style", title, time, "/");
	    }
    }
  }
  SS.switchers.length = 0;
  delete SS.switchers;
});

} // End condition

