//yuiPresets.js
var Dom = YAHOO.util.Dom; 
var Event = YAHOO.util.Event;
var DDM = YAHOO.util.DragDropMgr;

function getTargetElement(obj){
	var node = obj.target;
	if(node==undefined){
		node = obj.srcElement;
	}
	return node;
}

//btnHover.js
var setBtnHover = {
	init: function(){
		var items = Dom.getElementsByClassName("sprite");
		setBtnHover.addEvent(items);
	},
	addEvent:function(items){
		Event.on(items,"mouseover",setBtnHover.switchPosition,{x:"-230px"});
		Event.on(items,"mouseout",setBtnHover.switchPosition,{x:"0px"});
	},
	switchPosition:function(e,o){
		var style = YAHOO.util.Dom.getStyle(this,"background-position");
		// stupid IE bug in getting styles with javascript on input type button and button elements so we have to do this awful browser check
		if (YAHOO.env.ua.ie < 1)
		{
			var xy = YAHOO.util.Dom.getStyle(this,"background-position").split(" ");
			Dom.setStyle(this,"background-position",o.x + " " + xy[1]);
		}else{
			this.style.backgroundPositionX = o.x;
		}
	}
};
Event.onDOMReady(setBtnHover.init);

//cufon.js
Cufon.replace('h1');
Cufon.replace('h2');
Cufon.replace('h3');
Cufon.replace('h4');
Cufon.replace('h5');
Cufon.replace('h6');
Cufon.replace('caption');
Cufon.replace('th');
Cufon.replace('legend');
Cufon.replace(Dom.getElementsByClassName("login"), { hover: true }); 
Cufon.replace(Dom.getElementsByClassName("back"), { hover: true }); 
if(Dom.get("recipeSearchForm")){
	Cufon.replace(Dom.getElementsByClassName("front","label","recipeSearchForm"));
} 
Cufon.replace(Dom.getElementsByClassName("cufon")); 
if(Dom.get("navigation")){
	Cufon.replace(Dom.get("navigation").getElementsByTagName("a"), { hover: true });
} 
Cufon.now();

//formValidation.js
var simpleValidate = {
	setBasicValues:function(){
		simpleValidate.elementTypes = ["input","select","textarea"];
		simpleValidate.validateOnClass = "required";
		simpleValidate.validatePassOnClass = "passvalidate";
		simpleValidate.ifInvalidClass = "message";
		simpleValidate.validateOnEvent = "submit";
		simpleValidate.messagesHtmlNode = "messagecontainer";
		simpleValidate.messagesHtmlStart = "<div class='message messageTop'><p>" + messages.messageHeader + "</p><ul>";
		simpleValidate.messagesHtmlBodyItemStart = "<li><span>";
		simpleValidate.messagesHtmlBody = "";
		simpleValidate.messagesHtmlBodyItemEnd = "</span></li>";
		simpleValidate.messagesHtmlEnd = "</ul></div>";
	},
	init: function(){
		simpleValidate.forms = Dom.getElementsByClassName("validate",null,"content-primary");
		simpleValidate.catchEvent({forms:simpleValidate.forms});
	},
	catchEvent:function(o){
		simpleValidate.setBasicValues();
		var i;
		var forms = o.forms;
		var formsLength = o.forms.length;
		for(i=0; i<formsLength; i++){
			Event.on(forms[i],simpleValidate.validateOnEvent,simpleValidate.getElements,{form:forms[i]});
		}
	},
	getElements:function(e,o){
		Event.preventDefault(e);
		var elements = [];
		var password = [];
		var i, j, k;
		var collection;
		var collectionLength;
		var passCollection;
		var passCollectionLength;
		var typesLength = simpleValidate.elementTypes.length;
		for(i=0; i<typesLength; i++){
			if(simpleValidate.elementTypes[i] == "input"){
				passCollection = Dom.getElementsByClassName(simpleValidate.validatePassOnClass,simpleValidate.elementTypes[i],o.form);
				passCollectionLength = passCollection.length;
				for(k=0; k<passCollectionLength; k++){
					password.push(passCollection[k]);
				}
			}
			collection = Dom.getElementsByClassName(simpleValidate.validateOnClass,simpleValidate.elementTypes[i],o.form);
			collectionLength = collection.length;
			for(j=0; j<collectionLength; j++){
				elements.push(collection[j]);
			}
		}
		simpleValidate.removeMessagesStyles({elements:elements,length:elements.length});
		simpleValidate.removeMessagesStyles({elements:password,length:password.length});
		simpleValidate.validateElements({form:o.form,elements:elements,password:password,length:elements.length});
	},
	validateElements:function(o){
		Dom.getElementsByClassName(simpleValidate.messagesHtmlNode,"fieldset",o.form)[0].innerHTML = "";
		simpleValidate.messagesHtmlBody = "";
		var i, j;
		var validated = true;
		var passwordLength = o.password.length;
		for(i=0;i<o.length; i++){
			o.elements[i].message = messages[o.elements[i].id];
			if(!simpleValidate.validateElement({element:o.elements[i]})){
				validated = false;
				simpleValidate.setMessageStyle({element:o.elements[i]});
				simpleValidate.addMessageToMessageContainer({element:o.elements[i]});
			}
		}
		if(passwordLength>0){
			var passEmpty = 0;
			for(j=0; j<passwordLength; j++){
				if(simpleValidate.validateElement({element:o.password[j]})){
					passEmpty++;
				}
			}
			if(passEmpty>0 && passEmpty<passwordLength){
				for(j=0; j<passwordLength; j++){
					o.password[j].message = messages[o.password[j].id];
					if(!simpleValidate.validateElement({element:o.password[j]})){
						validated = false;
						simpleValidate.setMessageStyle({element:o.password[j]});
						simpleValidate.addMessageToMessageContainer({element:o.password[j]});
					}
				}
			}
		}
		if(validated){
			o.form.submit();
		}else{
			simpleValidate.showMessageContainer({form:o.form});
		}
	},
	validateElement:function(o){
		switch (o.element.type){
		case "text":
			if(!o.element.value){return false;}else{return true;}
			break;
		case "hidden":
			if(!o.element.value){return false;}else{return true;}
			break;
		case "password":
			if(!o.element.value){return false;}else{return true;}
			break;
		case "checkbox":
			if(!o.element.checked){return false;}else{return true;}
			break;
		case "textarea":
			if(o.element.id=="comment"){
				if(!tinyMCE.get("comment").getContent()){return false;}else{return true;}
			}else{
				if(!o.element.value){return false;}else{return true;}
			}
			break;
		case "select-one":
			if(!o.element.value){return false;}else{return true;}
			break;
		}
	},
	removeMessagesStyles:function(o){
		var i;
		for(i=0;i<o.length; i++){
			Dom.removeClass(o.elements[i].parentNode,simpleValidate.ifInvalidClass);
		}
	},
	setMessageStyle:function(o){
		Dom.addClass(o.element.parentNode,simpleValidate.ifInvalidClass);
	},
	addMessageToMessageContainer:function(o){
		simpleValidate.messagesHtmlBody = simpleValidate.messagesHtmlBody + simpleValidate.messagesHtmlBodyItemStart + o.element.message + simpleValidate.messagesHtmlBodyItemEnd;
	},
	showMessageContainer:function(o){
		var messageContainer = Dom.getElementsByClassName(simpleValidate.messagesHtmlNode,"fieldset",o.form)[0];
		messageContainer.innerHTML = simpleValidate.messagesHtmlStart + simpleValidate.messagesHtmlBody + simpleValidate.messagesHtmlEnd; 
	}
};
Event.onDOMReady(simpleValidate.init);

//myRecipeBookDragDrop.js
(function() {
	YAHOO.namespace("myRecipeBook"); 
	YAHOO.myRecipeBook.DDApp = {
	    init: function() {
			Dom.get("recipeIds").value = "";
	        var i;
	        var myFavoritesList = Dom.get("myFavorites");
	        new YAHOO.util.DDTarget("myBook");
	        new YAHOO.util.DDTarget("myFavorites");
	        var recipes = myFavoritesList.getElementsByTagName("li");
	        var recipesLength = recipes.length;
            for (i=0;i<recipesLength;i++) {
                new YAHOO.myRecipeBook.DDList("recipe_" + i);
            }
	    },
	    setValue: function() {
	        var parseList = function(ul) {
	            var items = ul.getElementsByTagName("li");
	            var out = "";
	            for (i=0;i<items.length;i=i+1) {
	                out += items[i].className + ",";
	            }
	            return out;
	        };
	        var myBook=Dom.get("myBook");
	        var ids = parseList(myBook, "myBook");
	        Dom.get("recipeIds").value = ids.substr(0,ids.length-1);
	    }
	};
	YAHOO.myRecipeBook.DDList = function(id, sGroup, config) {
	    YAHOO.myRecipeBook.DDList.superclass.constructor.call(this, id, sGroup, config);
	    this.logger = this.logger || YAHOO;
	    var el = this.getDragEl();
	    Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent
	    this.goingUp = false;
	    this.lastY = 0;
	};
	YAHOO.extend(YAHOO.myRecipeBook.DDList, YAHOO.util.DDProxy, {
	    startDrag: function(x, y) {
	        this.logger.log(this.id + " startDrag");
	        // make the proxy look like the source element
	        var dragEl = this.getDragEl();
	        var clickEl = this.getEl();
	        Dom.setStyle(clickEl, "visibility", "hidden");
	        dragEl.innerHTML = clickEl.innerHTML;
	        Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color"));
	        Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor"));
	        Dom.setStyle(dragEl, "border", "2px solid gray");
	    },
	    endDrag: function(e) {
	        var srcEl = this.getEl();
	        var proxy = this.getDragEl();
	        // Show the proxy element and animate it to the src element's location
	        Dom.setStyle(proxy, "visibility", "");
	        var a = new YAHOO.util.Motion( 
	            proxy, { 
	                points: { 
	                    to: Dom.getXY(srcEl)
	                }
	            }, 
	            0.2, 
	            YAHOO.util.Easing.easeOut 
	        );
	        var proxyid = proxy.id;
	        var thisid = this.id;
	        // Hide the proxy and show the source element when finished with the animation
	        a.onComplete.subscribe(function() {
	                Dom.setStyle(proxyid, "visibility", "hidden");
	                Dom.setStyle(thisid, "visibility", "");
	            });
	        a.animate();
	    },
	    onDragDrop: function(e, id) {
	        // If there is one drop interaction, the li was dropped either on the list,
	        // or it was dropped on the current location of the source element.
	        if (DDM.interactionInfo.drop.length === 1) {
	            // The position of the cursor at the time of the drop (YAHOO.util.Point)
	            var pt = DDM.interactionInfo.point; 
	            // The region occupied by the source element at the time of the drop
	            var region = DDM.interactionInfo.sourceRegion; 
	            // Check to see if we are over the source element's location.  We will
	            // append to the bottom of the list once we are sure it was a drop in
	            // the negative space (the area of the list without any list items)
	            if (!region.intersect(pt)) {
	                var destEl = Dom.get(id);
	                var destDD = DDM.getDDById(id);
	                destEl.appendChild(this.getEl());
	                destDD.isEmpty = false;
	                DDM.refreshCache();
	            }
	        }
	        YAHOO.myRecipeBook.DDApp.setValue();
	    },
	    onDrag: function(e) {
	        // Keep track of the direction of the drag for use during onDragOver
	        var y = Event.getPageY(e);
	        if (y < this.lastY) {
	            this.goingUp = true;
	        } else if (y > this.lastY) {
	            this.goingUp = false;
	        }
	        this.lastY = y;
	    },
	    onDragOver: function(e, id) {
	        var srcEl = this.getEl();
	        var destEl = Dom.get(id);
	        // We are only concerned with list items, we ignore the dragover
	        // notifications for the list.
	        if (destEl.nodeName.toLowerCase() == "li") {
	            var orig_p = srcEl.parentNode;
	            var p = destEl.parentNode;
	            if (this.goingUp) {
	                p.insertBefore(srcEl, destEl); // insert above
	            } else {
	                p.insertBefore(srcEl, destEl.nextSibling); // insert below
	            }
	            DDM.refreshCache();
	        }
	    }
	});
	if(Dom.get("myRecipeBookSelection")){Event.onDOMReady(YAHOO.myRecipeBook.DDApp.init, YAHOO.myRecipeBook.DDApp, true);}
})();

//print.js
var printTriggers = {
	init: function(){
		var selectors = Dom.getElementsByClassName("print", "a");
		Event.on(selectors,"click",this.printDocument,{},this);
	},
	printDocument: function(e,o){
		Event.preventDefault(e);
		window.print();
	}
};
Event.onDOMReady(printTriggers.init,{},printTriggers);

//rating.js
var starSelectors = {
	init: function(){
		var selectors = Dom.getElementsByClassName("rating", "div", "ratingContainer");
		var i = 0;
		var selectorsLength = selectors.length;
		for (i=0; i<selectorsLength; i++){
			this.setStars({node:selectors[i]});
		}
	},
	setStars: function(o){
		o.hiddenField = o.node.id;
		var nodeInner = "<a href='/' class='1'></a><a href='/' class='2'></a><a href='/' class='3'></a><a href='/' class='4'></a><a href='/' class='5'></a>";
		o.node.innerHTML = nodeInner;
		this.setStartTriggers(o);
	},
	setStartTriggers: function(o){
		o.triggers = o.node.getElementsByTagName("a");
		Event.on(o.triggers, "mouseover", this.setStyle, o, this);
		Event.on(o.triggers, "mouseout", this.resetStyle, o, this);
		Event.on(o.triggers, "click", this.setValue, o, this);
	},
	setStyle: function(e,o){
		var currentNode = getTargetElement(e);
		var newClass = "stars-" + currentNode.className;
		var oldClass = "stars-" + currentNode.parentNode.className.slice(-1);
		Dom.replaceClass(currentNode.parentNode, oldClass, newClass);
	},
	setValue: function(e,o){
		Event.preventDefault(e);
		var currentNode = getTargetElement(e);
		currentNode.blur();
		Dom.get(o.hiddenField).value = currentNode.className;
		var callback = {success: this.successHandler,failure: this.failureHandler}; 
		var formObject = o.node.parentNode;
		YAHOO.util.Connect.setForm(formObject, true);
		var cObj = YAHOO.util.Connect.asyncRequest('POST', formObject.action, callback);
	},
	resetStyle: function(e,o){
		var currentNode = getTargetElement(e);
		var newClass = "stars-" + Dom.get(o.hiddenField).value;
		var oldClass = "stars-" + currentNode.parentNode.className.slice(-1);
		Dom.replaceClass(currentNode.parentNode, oldClass, newClass);
	},
	successHandler: function(o){},
	failureHandler: function(o){}
};
Event.onDOMReady(starSelectors.init,{},starSelectors);

//swf.js
var swfLoader = {
	MushroomRecipeClock : {
		id : "MushroomRecipeClock",
		file : "/swf/MushroomRecipeClock.swf",
		flashvars : {locale:getLocale()},
		params : {wmode:"transparent"},
		attributes : {},
		width : "760",
		height : "420",
		version : "9.0.124"
	},
	MushroomHealthWidget : {
		id : "MushroomHealthWidget",
		file : "/swf/MushroomHealthWidget.swf",
		flashvars : {locale:getLocale()},
		params : {wmode:"transparent"},
		attributes : {},
		width : "480",
		height : "450",
		version : "9.0.124"
	},
	Growth : {
		id : "Growth",
		file : "/swf/growth_"+getLocale()+".swf",
		flashvars : {locale:getLocale()},
		params : {wmode:"transparent"},
		attributes : {},
		width : "490",
		height : "276",
		version : "9.0.124"
	},
	RecipeSearchApplication : {
		id : "RecipeSearchApplication",
		file : "/swf/RecipeSearchApplication.swf",
		flashvars : {locale:getLocale()},
		params : {wmode:"transparent"},
		attributes : {},
		width : "760",
		height : "450",
		version : "9.0.124"
	},
	init: function()
	{
		if(Dom.get(swfLoader.MushroomRecipeClock.id)){
			swfLoader.load(swfLoader.MushroomRecipeClock);
		}
		if(Dom.get(swfLoader.MushroomHealthWidget.id)){
			swfLoader.load(swfLoader.MushroomHealthWidget);
		}
		if(Dom.get(swfLoader.RecipeSearchApplication.id)){
			swfLoader.load(swfLoader.RecipeSearchApplication);
		}
		if(Dom.get(swfLoader.Growth.id)){
			swfLoader.load(swfLoader.Growth);
		}
	},
	load:function(o){
		swfobject.embedSWF(o.file,o.id,o.width,o.height,o.version,"/swf/expressInstall.swf", o.flashvars, o.params, o.attributes);
	}
};
Event.onDOMReady(swfLoader.init);

//historyback.js
var historyBack = {
	init: function()
	{
		Event.on("historyBack","click",historyBack.backButtonClicked);
	},
	backButtonClicked: function(e){
		Event.preventDefault(e);
		history.go(-1);
	}
};
Event.onDOMReady(historyBack.init);