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 initNewsSignup() {
	var wklyNewsForm = document.getElementById("wklyNews");
	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);
		tii_addEventHandler(wklyNewsForm.wkly_email, "focus", function(event) { 
			var eventSource = typeof event.target != 'undefined' ? event.target : window.event.srcElement;
			if (eventSource.value.toLowerCase() == "enter email address") {
				eventSource.value = "";
			}
		}, false);
		tii_addEventHandler(wklyNewsForm.wkly_email, "blur", function(event) { 
			var eventSource = typeof event.target != 'undefined' ? event.target : window.event.srcElement;
			if (eventSource.value == "") {
				eventSource.value = "Enter email address";
			}
		}, false);
	}
}
tii_callFunctionOnWindowLoad(function(event) {
	initNewsSignup();
});

/* ========== end NEWSLETTER VALIDATOR ========== */
/* begin toggle plus / minus function */

/* ============================================== */
/* BEGIN NEW CODE USING YUI */

(function() {

  // extending the Array object to have a filter method,
  // because it's just too damn useful to live without
  if(!Array.prototype.filter) {
    Array.prototype.filter = function(func /*, thisp*/) {
      if(typeof func != 'function') {
        throw new TypeError();
      }
      var res = new Array();
      var thisp = arguments[1];
      for(var i=0, len=this.length; i<len; i++) {
        if(i in this) {
          var val = this[i]; // in case func mutates this
          if(func.call(thisp, val, i, this)) {
            res.push(val);
          }
        }
      }
      return res;
    };
  } // Array.prototype.filter
 
  var prepTIINameSpace = function() {
    if(typeof YAHOO.TII == 'undefined') {
      YAHOO.namespace('TII.util');
      YAHOO.TII.util.YUILoader = YUILoader;

      YAHOO.namespace('TII.app.Health');
      YAHOO.TII.app.Health.events = {
        onYUILoaderReady : new YAHOO.util.CustomEvent('onYUILoaderReady')
      };
      loadUtilities();
      loadRecipesJS();
    }
  }; // prepTIINameSpace

  var YUILoader = new YAHOO.util.YUILoader({
    require: ['yahoo-dom-event'],
    combine: true,
    base: 'http://yui.yahooapis.com/2.6.0/build/'
  });
  
  YUILoader.insert({
    onSuccess : function() {
      prepTIINameSpace();

      YAHOO.util.Event.onContentReady('yui-gen0', function() {
        try {
          document.getElementsByTagName('body')[0].className += ' yui-skin-sam';
          document.getElementById('yui-gen0').style.fontSize = '120%';
          document.getElementById('yui-gen0').style.zIndex = '99999';
        }
        catch(e) {
          //
        }
      });

    } // YUILoader.insert's onSuccess
  }); // YUILoader.insert

  var loadUtilities = 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' && typeof ele.className != '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

    YAHOO.TII.util.DOMUtils = DOMUtils;
    YAHOO.TII.util.getElementsByClassName = DOMUtils.getElementsByClassName;

    var QueryString = {

      parse : function(qs) {
        QueryString.params = {};
        qs = qs ? qs : location.search.substring(1, location.search.length);
        if(qs.length==0) {
          return;
        } 

        // Turn <plus> back to <space>
        // See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
        qs = qs.replace(/\+/g, ' ');

        var args = qs.split('&'); // parse out name/value pairs separated via &
        var argLen = args.length;
        for(var i=0; i<argLen; i++) {
          var pair = args[i].split('=');
          var name = decodeURIComponent(pair[0]);
          var value = (pair.length==2) ? decodeURIComponent(pair[1]) : name;
          this.params[name] = value;
        }
      }, // parse

      get : function(key, default_) {
        if(typeof QueryString.params == 'undefined') {
          QueryString.parse();
        }
        var value = QueryString.params[key];
        return (value != null) ? value : default_;
      }, // get

      contains : function(key) {
        if(typeof QueryString.params == 'undefined') {
          QueryString.parse();
        }
        var value = QueryString.params[key];
        return (value != null);
      }

    }; // QueryString

    // Add QueryString to available utilities
    YAHOO.TII.util.QueryString = QueryString;

    // Toggler
    var Toggler = {

      openNodeId : '',

      toggableNodes : [],

      toggleNode : function(e) {
        var $D = YAHOO.TII.util.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];
          YAHOO.util.Event.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) {
        Toggler.toggableNodes = YAHOO.TII.util.getElementsByClassName(cls, null, tag);
        YAHOO.util.Event.on(Toggler.toggableNodes, action, Toggler.toggleNode);
      }, // activateTogglers

      _init : function() {
        Toggler.activateTogglers('click', 'activate', null, 'a');
      } // _init

    }; // Toggler

    YAHOO.TII.util.Toggler = Toggler;
    
    // this is just to make sure everything necessary is on the page. *really* not a good choice.
    YAHOO.util.Event.onAvailable('legalLinks', YAHOO.TII.util.Toggler._init);

  }; // loadUtilities

  // adds the recipe channels JS to the page
  var loadRecipesJS = function() {
    // still wanna wrap it in here to make sure we're not loading this stuff for nothin'
    YAHOO.util.Event.onContentReady('recipes_css', function() {
      var recipes_path = (document.domain=='recipes.health.com') ? 'http://imgrecipes.health.com' : '';
      YAHOO.TII.util.YUILoader.addModule({
      	name: 'recipes',
      	type: 'js',
      	varName: 'RecipesLoadComplete',
        fullpath: recipes_path + '/javascripts/recipes.js'
      });
      YAHOO.TII.util.YUILoader.require('recipes');
      YAHOO.TII.util.YUILoader.insert();
    });
  };  // loadRecipesJS

}()); // HealthUtils