var textSize = 75; // %
var cookieVal = getCookie("textSize");
var contrast = 0; // false
var cookieContrast = getCookie("contrast");
var cookieVertical = getCookie("vertical");
var vertical = 0;

// retrieve text size and contrast values from cookies
if (cookieVal != null) {
  textSize = cookieVal*1;
}

if (cookieContrast != null) {
  contrast = cookieContrast;
}

if (cookieVertical != null) {
  vertical = cookieVertical;
}


// Start timeouts that will check every .001 seconds to see if body has been created yet, and if so, update page
var setTextSizeTimer = setTimeout('setInitalTextSize();', 1);
var setContrastTimer = setTimeout('setInitalContrast();', 1);

/**
 * Sets the base font size and stores in cookie.
 * Allowable size range in 75% - 130%
 */
function setTextSize(size) {
  size = (size > 130) ? 130 : (size < 75) ? 75 : size; 
  document.getElementsByTagName("body")[0].style.fontSize = size+'%';
  textSize = size;
  setCookie("textSize", textSize, 365);

  // reset scrolling devices, if they exist
  try {
    scroller.reset();
    scrollbar.reset();
    scroller2.reset();
    scrollbar2.reset();
  } catch (e) {}
}

/**
 * Increases font size by 10%.
 */
function upTextSize() {
  setTextSize(textSize+10);

  return false;
}

/**
 * Decreases font size by 10%.
 */
function downTextSize() {
  setTextSize(textSize-10);
  
  return false;
}

/**
 * Toggles the site contrast.
 */
function changeContrast() {
  contrast = 1 - contrast;
  setContrast(contrast);
  return false;
}

/**
 * Sets the site contrast style by adding/removing 'skin-alt' to/from body class.
 */
function setContrast(contrast) {
  if (contrast == '1') {
    document.getElementsByTagName("body")[0].className += ' skin-alt';
  } else {
    document.getElementsByTagName("body")[0].className = document.getElementsByTagName("body")[0].className.replace(' skin-alt', '');
  }
  setCookie("contrast", contrast, 365);
}

/**
 * Sets initial text size based on stored cookie value or default.
 */
function setInitalTextSize() {
  if (document.getElementsByTagName("body").length > 0) {
    setTextSize(textSize);
    clearTimeout(setTextSizeTimer);
  } else {
    setTextSizeTimer = setTimeout('setInitalTextSize();', 1);
  }
}

/**
 * Sets initial contrast based on stored cookie value or default.
 */
function setInitalContrast() {
  if (document.getElementsByTagName("body").length > 0) {
    setContrast(contrast);
    clearTimeout(setContrastTimer);
  } else {
    setContrastTimer = setTimeout('setInitalContrast();', 1);
  }
}

/**
 * Records the vertical position of the scrollable item.
 */
function lastVerticalPosition(scrollerV) {
  vertical = (scrollerV * -1); // scroller position needs to be converted from negative
  setCookie("vertical", vertical);
}

/**
 * Sets the verticalical position of the scroller.
 */
function setVerticalPosition() {
  try {
    scrollbar.scrollTo(0, vertical);
  } catch (e) {
    // no scroller present
  }
  setCookie("vertical", vertical);
}

/**
 * Set a cookie with provide name, value an expiry days.
 * If no expiry days passed, default to session-cookie.
 */
function setCookie(name,value,days) {
  var expires = "";
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    expires = "; expires="+date.toGMTString();
  }
  document.cookie = name + "=" + value + expires + "; path=/";
}

/**
 * Retrieve a cookie.
 */
function getCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for (var i=0;i < ca.length;i++) {
    var c = ca[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;
}

/**
 * Clears a cookie.
 */
function eraseCookie(name) {
  setCookie(name,"",-1);
}