try { document.execCommand ('BackgroundImageCache', false, true); } catch (e) {}

function tii_dom_createElement (nodeName, attributes) {
	var isopera = typeof window.opera != 'undefined';
	var isie = typeof document.all != 'undefined' && !isopera && navigator.vendor != 'KDE';
		
	var newElement;
	try {
		newElement = document.createElement (nodeName);
	}
	catch (error) {
		return null;
	}
	
	var attributesLength = attributes.length;
	for (var i = 0; i < attributesLength; i++) {
		var attribute = attributes[i][0];
		var value = attributes[i][1];
		newElement.setAttribute(attribute, value);
		switch (attribute) {
			case 'id':
				newElement.id = value;
				break;
			case 'class':
				if (isie) {
					newElement.setAttribute ('className', value);
				}
				newElement.className = value;
				break;
			case 'style':
				newElement.style.cssText = newElement.style.cssText + ' ' + value;
				break;
			case 'for':
				if (isie) {
					newElement.setAttribute ('htmlFor', value);
				}
				newElement.htmlFor = value;
		}
	}
	return newElement;
}


function tii_dom_removeWhitespaceTextNodes(node) {
	for (var x = 0; x < node.childNodes.length; x++) {
		var child = node.childNodes [x];
		if (child.nodeType == 3 && !/\S/.test(child.nodeValue)) {
			node.removeChild(node.childNodes[x]);
			x--;
		}
		if (child.nodeType == 1) {
			tii_dom_removeWhitespaceTextNodes(child);
		}
	}
}

function tii_callFunctionOnWindowLoad(functionToCall) {
	if (typeof window.addEventListener != 'undefined') {
		window.addEventListener ('load', functionToCall, false);
	}
	else if (typeof document.addEventListener != 'undefined') {
		document.addEventListener ('load', functionToCall, false);
	}
	else if (typeof window.attachEvent != 'undefined') {
		window.attachEvent ('onload', functionToCall);
	}
	else {
		var oldFunctionToCall = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = functionToCall;
		}
		else {
			window.onload = function () {
				oldFunctionToCall ();
				functionToCall ();
			};
		}
	}
}

function tii_callFunctionOnElementLoad(targetId, functionToCall) {
	var myArguments = arguments;
	tii_callFunctionOnWindowLoad (function () {
		window.loaded = true;
	});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded) {
				clearInterval (pollingInterval);
			}
			targetElement = document.getElementById (targetId);
			if (targetElement != null) {
				clearInterval(pollingInterval);
				var argumentsTemp = new Array();
				var argumentsTempLength = myArguments.length - 2;
				for (var i = 0; i < argumentsTempLength; i++) {
					argumentsTemp[i] = myArguments[i + 2];
				}		
				functionToCall.apply(this, argumentsTemp);
			}
		}, 10);
	}
}


function tii_addEventHandlerOnElementLoad(targetId, eventType, functionToCall, bubbleEventUpDOMTree) {
	tii_callFunctionOnWindowLoad (function() {window.loaded = true;});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded) {
				clearInterval(pollingInterval);
			}
			targetElement = document.getElementById(targetId);
			if (targetElement != null) {
				clearInterval(pollingInterval);
				tii_addEventHandler(targetElement, eventType, functionToCall, bubbleEventUpDOMTree);
			}
		}, 10);
	}
}


function tii_addEventHandler(targetElement, eventType, functionToCall, bubbleEventUpDOMTree) {
	if (!targetElement) {
		window.status = 'Warning: Tried to attach event to null object';
		return false;
	}
	if (typeof targetElement.addEventListener != 'undefined') {
		targetElement.addEventListener (eventType, functionToCall, bubbleEventUpDOMTree);
	}
	else if (typeof targetElement.attachEvent != 'undefined') {
		targetElement.attachEvent ('on' + eventType, functionToCall);
	}
	else {
		eventType = 'on' + eventType;
		if (typeof targetElement [eventType] == 'function') {
			var oldListener = targetElement [eventType];
			targetElement [eventType] = function () {
				oldListener ();
				return functionToCall ();
			}
		}
		else {
			targetElement [eventType] = functionToCall;
		}
	}
	return true;
}

function tii_removeEventHandler(targetElement, eventType, functionToRemove, bubbleEventUpDOMTree) {
	if (typeof targetElement.removeEventListener != "undefined") {
		targetElement.removeEventListener(eventType, functionToRemove, bubbleEventUpDOMTree);
	}
	else if (typeof targetElement.detachEvent != "undefined") {
		targetElement.detachEvent("on" + eventType, functionToRemove);
	}
	else {
		targetElement["on" + eventType] = null;
	}
	return true;
}

function tii_stopDefaultAction (event) {
	event.returnValue = false;
	if (typeof event.preventDefault != 'undefined') {
		event.preventDefault ();
	}
}




/* ========== begin TEXT RESIZER ========== */
var steps = 0;
var stepSize = 0.2; //in ems
function textResize(n) {
	var idArray = new Array("midWrap", "footer");
	steps += n;
	for (var i=0; i < idArray.length; i++) {
		var id = document.getElementById(idArray[i]);
		if (id) {
			var size = id.style.fontSize;
			if (!size || size == "") {
				size = (1 + stepSize*n) + "em";
			}
			else if (size.indexOf("em") > -1) {
				var sizeNum = parseFloat(size.substring(0, size.indexOf("em")));
				size = (sizeNum + stepSize*n) + "em";
			}
			else {
				size = "1em"; //something went wrong
			}
			id.style.fontSize = size;
		}
	}
	createResizeHTML();
}
function createResizeHTML() {
	var resizeDiv = document.getElementById("textResize");
	if (resizeDiv) {
		var html = '<table cellspacing="0" cellpadding="0"><tr><td>Text Size:</td><td class="minus">';
		html += (steps <= -3) ? '<a class="inactive">' : '<a onclick="textResize(-1);">';
		html += '<img src="http://img2.timeinc.net/health/static/i/blank.gif" alt="Decrease" /></a></td><td class="plus">';
		html += (steps >= 3) ? '<a class="inactive">' : '<a onclick="textResize(1);">';
		html += '<img src="http://img2.timeinc.net/health/static/i/blank.gif" alt="Increase" /></a></td></tr></table>';
		resizeDiv.innerHTML = html;

	}
}
tii_callFunctionOnElementLoad("textResize", function(event) {
	createResizeHTML();
});
/* ========== end TEXT RESIZER ========== */


/* ========== begin POPUP OPENER ========== */
function initPopups() {
	var links = document.getElementsByTagName('a');
	for (var i=0; i < links.length; i++) {
		if (links[i].className == 'popup1') {
			links[i].onclick = function() {
				popup = window.open(this.getAttribute('href'), 'popup', 'width=500,height=620');
				popup.focus();
				return false;
			}
		}
	}
}
tii_callFunctionOnWindowLoad(function(event) {
	initPopups();
});
/* ========== end POPUP OPENER ========== */


/* ========== begin NEWSLETTER VALIDATOR ========== */
function isValidEmail(str) {
	var filter  = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})$/;
	return (filter.test(str));
}
function validateWklyForm(which) {
	if (!isValidEmail(which.wkly_email.value)) {
		alert("Invalid email address.  Address must be in the form 'name@domain.com'.");
	}
	else {
		which.submit();
	}
}

function clearEmailField(event) { 
	var eventSource = typeof event.target != 'undefined' ? event.target : window.event.srcElement;
	if (eventSource.value.toLowerCase() == "enter email address") {
		eventSource.value = "";
	}
}

function restoreEmailField(event) { 
	var eventSource = typeof event.target != 'undefined' ? event.target : window.event.srcElement;
	if (eventSource.value == "") {
		eventSource.value = "Enter email address";
	}
}

function initNewsSignup() {
	var wklyNewsForm = document.getElementById("wklyNews");
	var wklyNews1Form = document.getElementById("wklyNews1");
	if (wklyNewsForm) {
		tii_addEventHandler(wklyNewsForm, "submit", function(event){
			var eventSource = typeof event.target != 'undefined' ? event.target : window.event.srcElement;
			validateWklyForm(eventSource);
			tii_stopDefaultAction(event);
		}, false);
		if (wklyNewsForm.wkly_email != undefined) {
			tii_addEventHandler(wklyNewsForm.wkly_email, "focus", clearEmailField, false);
			tii_addEventHandler(wklyNewsForm.wkly_email, "blur", restoreEmailField, false);
		}
		if (wklyNews1Form != undefined && wklyNews1Form.wkly1_email != undefined) { 
			tii_addEventHandler(wklyNews1Form.wkly1_email, "focus", clearEmailField, false);
			tii_addEventHandler(wklyNews1Form.wkly1_email, "blur", restoreEmailField, false);
		}
		if (wklyNewsForm.wkly_email_footer != undefined) {
			tii_addEventHandler(wklyNewsForm.wkly_email_footer, "focus", clearEmailField, false);
			tii_addEventHandler(wklyNewsForm.wkly_email_footer, "blur", restoreEmailField, false);
		}
	}
}
tii_callFunctionOnWindowLoad(function(event) {
	initNewsSignup();
});

/* ========== end NEWSLETTER VALIDATOR ========== */
/* begin toggle plus / minus function */

(function() {

  // DOMUtils
  var DOMUtils = {
    getElementsByClassName : function(searchClass, node, tag) {
      var classElements = [];
      if(node == null) {
        node = document;
      }
      if(tag == null) {
        tag = '*';
      }

      var els = node.getElementsByTagName(tag);
      var elsLen = els.length;
      for(var i=0, j=0, ele; i<elsLen; i++) {
        ele = els[i];
        if(DOMUtils.hasClass(ele, searchClass)) {
          classElements[j] = ele;
          j++;
        }
      }
      return classElements;
    }, // getElementsByClassName

    hasClass : function(ele,cls) {
      if(typeof ele != 'undefined') {
    	  return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
    	}
    	return false;
    }, // hasClass

    addClass : function(ele,cls) {
      if(typeof ele != 'undefined') {
      	if(!this.hasClass(ele,cls)) {
      	  ele.className += " "+cls;
      	}
      }
    }, // addClass

    removeClass : function(ele,cls) {
      if(typeof ele != 'undefined') {
      	if (this.hasClass(ele,cls)) {
         	var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
      		ele.className=ele.className.replace(reg,' ');
      	}
      }
    } // removeClass

  }; // DOMUtils

  // Event Utils
  var EventUtils = {

    addEventListener: function() {
      if (window.addEventListener) {
        return function(el, sType, fn, capture) {
          el.addEventListener(sType, fn, (capture));
        };
      } else if (window.attachEvent) {
        return function(el, sType, fn, capture) {
          el.attachEvent('on' + sType, fn);
        };
      } else {
        return function(){};
      }
    }(), // addEventListener

    stopEvent: function(ev) {
      this.stopPropagation(ev);
      this.preventDefault(ev);
    }, // stopEvent

    stopPropagation: function(ev) {
      if (ev.stopPropagation) {
        ev.stopPropagation();
      } else {
        ev.cancelBubble = true;
      }
    }, // stopPropagation

    preventDefault: function(ev) {
      if (ev.preventDefault) {
        ev.preventDefault();
      } else {
        ev.returnValue = false;
      }
    } // preventDefault

  }; // EventUtils

  // Toggler
  var Toggler = {

    openNodeId : '',

    toggableNodes : [],

    toggleNode : function(e, nodes) {
      var $D = DOMUtils;
      var $T = Toggler;
      
      if(typeof nodes != 'undefined' && $T.toggableNodes.length==0) {
        $T.toggableNodes = nodes;
      }

      var nodeId, class_name;

      if(e) {
        class_name = this.className;
        nodeId = class_name.match(/tog-(\w*)\s?/)[1];
        EventUtils.stopEvent(e);
      }
      else {
        nodeId = $T.openNodeId;
        class_name = 'tog-' + nodeId;
      }

      var elem = document.getElementById(nodeId);
      for(var tn in $T.toggableNodes) {
        if($D.hasClass($T.toggableNodes[tn], class_name)) {
          var link = $T.toggableNodes[tn];
          break;
        }
      }

      if(elem.style.display=='none') {
        if($T.openNodeId!=='') {
          $T.toggleNode();
        }
        elem.style.display = 'block';
        $T.openNodeId = nodeId;
        $D.addClass(link,'on');
        if(nodeId=='hidden_tags') {
          link.innerHTML = 'See fewer tags';
        }
      }
      else {
        elem.style.display = 'none';
        $T.openNodeId = '';
        $D.removeClass(link,'on');
        if(nodeId=='hidden_tags') {
          link.innerHTML = 'See more tags';
        }
      }
    }, // toggleNode

    activateTogglers : function(action, cls, node, tag) {
      var togglers = DOMUtils.getElementsByClassName(cls, node, tag);
      
      if(typeof YAHOO != 'undefined') {
        YAHOO.util.Event.addListener(togglers, action, Toggler.toggleNode, togglers);
      }
      else {
        for(var i=0, togLen=togglers.length; i<togLen; i++) {
          EventUtils.addEventListener(togglers[i], action, Toggler.toggleNode, togglers);
        }
      }
    } // activateTogglers
    
  }; // Toggler

  // Add to YAHOO namespace if available
  if(typeof YAHOO != 'undefined') {
    YAHOO.namespace('TII.util'); 
    YAHOO.TII.util.DOMUtils = DOMUtils;
    YAHOO.TII.util.EventUtils = EventUtils;
    YAHOO.TII.util.Toggler = Toggler;
    YAHOO.TII.util.getElementsByClassName = DOMUtils.getElementsByClassName;
  }
  if(typeof HealthUtils == 'undefined') {
    HealthUtils = {};
  }
  HealthUtils.DOMUtils = DOMUtils;
  HealthUtils.EventUtils = EventUtils;
  HealthUtils.Toggler = Toggler;
  
}()); // HealthUtils
