

/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;


/***************
 * global.js
 * $Rev: 1693 $
 */
 
if(typeof(SNI) == "undefined"){ SNI = {}; }
if(typeof(SNI.RZ) == "undefined"){ SNI.RZ = {}; }
 
function navto(navtolist) {
        var URL = navtolist.options[navtolist.selectedIndex].value;
        window.location.href = URL;
}
function e2(el,img) {
        if (document.getElementById(el).style.display == "none" ) {
                document.getElementById(el).style.display = "block"
                if (img) document.getElementById(img).src="http://img.recipezaar.com/images/2008/minus_sign_brownbkgrnd.gif";
        }
        else {
                document.getElementById(el).style.display = "none"
                if (img) document.getElementById(img).src="http://img.recipezaar.com/images/2008/plus_sign_brownbkgrnd.gif";
        }
        if (typeof t != 'undefined') xe(t);
}
function e3(el) {
        if (document.getElementById(el).style.display == "none" ) {
                document.getElementById(el).style.display = "block"
        }
        else {
                document.getElementById(el).style.display = "none"
        }
}

function e(el,img) {
        var t=window.setTimeout("e2('"+el+"','"+img+"')",600);
        return t;
}
function xe(t) {
        window.clearTimeout(t);
}
function nots() {
        for (var loop = 0; loop < document.nots[loop]; loop++)
{
        document.notes[loop].style.display = 'block';
}

}
function expandall() {
}
function collapseall() {
}
function Rzpop(url,w,h,s,selfdestruct){
        var thePopup=window.open(url,"popup","width="+w+",height="+h+",toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars="+s+",resizable=yes");
        thePopup.focus();
        return thePopup;
}
function closeandload(loc) {
        top.opener.location=loc;
        top.self.close();
}

function showFavorites(req) {
        list=XMLParse.xml2ObjArray(req.responseXML, 'favorites');

        new Insertion.Bottom($('faveslist'),'<h5>Categories</h5>');
        for (i=0;i<list[0].category.length;++i) {
                new Insertion.Bottom($('faveslist'),'<li><a href="/recipes/'+list[0].category[i].attributes['number']+'">'+list[0].category[i].name+'</a></li>');
        }

        new Insertion.Bottom($('faveslist'),'<h5>Members</h5>');
        for (i=0;i<list[0].chef.length;++i) {
                new Insertion.Bottom($('faveslist'),'<li><a href="/member/'+list[0].chef[i].attributes['number']+'">'+list[0].chef[i].name+'</a></li>');
        }

        new Insertion.Bottom($('faveslist'),'<h5>Cookbooks</h5>');
        for (i=0;i<list[0].cookbook.length;++i) {
                new Insertion.Bottom($('faveslist'),'<li><a href="/cookbook/'+list[0].cookbook[i].attributes['number']+'">'+list[0].cookbook[i].name+'</a></li>');
        }
        new Insertion.Bottom($('faveslist'),'<a href="javascript:void(0)" onclick="Element.hide($(\'faveslist\'));return false;" class="popclose"></a>');
        Element.show($('faveslist'));
}
function addFaveHandler(req) {
        var errors=req.responseXML.getElementsByTagName('exception');
        if (!errors.length) {
                Element.hide($('favbut'));
		Element.hide($('atf'));
                new Insertion.Bottom($('addfaveresult'),'Added to <a href="/members/favorites.php">Favorites</a>!');
        }
        else {
                new Insertion.Bottom($('addfaveresult'),'Saving Favorites requires Premium Membership. <a href="/members/premium">Learn about upgrading</a>');
        }
}

var g_fixie=0;
function closeShortcuts(e) {
        if (g_fixie) {
                g_fixie=0;
                return;
        }
        for (var tg=Event.element(e);tg.tagName!='BODY';tg=tg.parentNode) {
                if (tg.getAttribute('id')=='shortcuts')
                        return;
        }
        Event.stop(e);
        Event.stopObserving(document.body,'click',closeShortcuts,true);
        Element.hide($('shortcuts'));
}

function showShortcuts(elem) {
        if (!document.getElementById('shortcuts')) {
                var html='<div id="shortcuts" class="popup" style="display:none;">';
                if (g_app.user.id)
                        html+='<a href="/recipes.php?chef='+g_app.user.id+'"><img src="http://img.recipezaar.com/icongpublic.gif" />My Public Recipes</a>';
                html+='<a href="/members/myprivate.php"><img src="http://img.recipezaar.com/icongprivate.gif" />My Private Recipes</a>'
                if (g_app.user.id)
                        html+='<a href="/reviews.php?reviewer='+g_app.user.id+'"><img src="http://img.recipezaar.com/icongreview.gif" />My Recipe Reviews</a><a href="/photos.php?photog='+g_app.user.id+'"><img src="http://img.recipezaar.com/icongcamera.gif" />My Photos</a>';
                html+='<a href="/menu/mymenus.php"><img src="http://img.recipezaar.com/icongmenu.gif" />My Menus</a>'
                        +'<a href="/myshopcart/"><img src="http://img.recipezaar.com/icongshoppinglist.gif" />My Shopping List</a>'
                        +'<a href="/myplan/"><img src="http://img.recipezaar.com/icongmealplan.gif" />My Meal Plan</a>'
                        +'<a href="/recipe/mynotes/"><img src="http://img.recipezaar.com/icongprivatenote.gif" />My Recipe Notes</a>'
                        +'<a href="/members/favorites.php"><img src="http://img.recipezaar.com/icongfavorites.gif" />My Favorites</a>'
                        +'<a href="/bb/mytopics.zsp"><img src="http://img.recipezaar.com/icongforum.gif" />My Favorite Topics</a>'
                        +'<a href="/mail/" class="zmail"><img src="http://img.recipezaar.com/icongzmail.gif" />My Z-mail Messages</a>'
                        +'<a href="/addrecipe/"><img src="http://img.recipezaar.com/icongchef.gif" />Post a Recipe</a>'
                        +'<a href="javascript:void(0);" onclick="Element.hide($(\'shortcuts\'));return false;" class="popclose"></a>'
                        +'</div>';
                new Insertion.Bottom(elem,html);
                Element.hide($('shortcuts'));
        }
        if (Element.visible($('shortcuts')))
                closeShortcuts();
        else {
                Element.show($('shortcuts'));
                if (window.event)
                        g_fixie=1;
                Event.observe(document.body,'click',closeShortcuts,true);
        }
}

function closeCBList(e) {
        if (g_fixie) {
                g_fixie=0;
                return;
        }
        for (var tg=Event.element(e);tg.tagName!='BODY';tg=tg.parentNode) {
                if (tg.getAttribute('id')=='cookbooks')
                        return;
        }
        Event.stop(e);
        Event.stopObserving(document.body,'click',closeCBList,true);
        Element.hide('cookbooks');
}

function showCBList() {
        if ($('mybooklistdrop').hasChildNodes()) {
                if (Element.visible('cookbooks')) {
                        Element.hide('cookbooks');
                }
                else {
                        if (window.event)
                                g_fixie=1;
                        Event.observe(document.body,'click',closeCBList,true);
                        Element.show('cookbooks');
                }
        }
        else {
                if (window.event)
                        g_fixie=1;
                Event.observe(document.body,'click',closeCBList,true);
                if (g_app.user.id && g_app.user.lim_books)
                        Element.addClassName('mybooklistdrop','working');
                Element.show('cookbooks');
                if (g_app.user.id && g_app.user.lim_books)
                        new Ajax.Request('/services/rest/booklist.php',{method:'get',onComplete:makeCBListdrop});
                else {
                        new Insertion.Bottom($('mybooklistdrop'),'<div><a href="/cookbook.php?bookid=1" class="private">My Main Cookbook</a></div>Premium Members can have more than one cookbook in this list.  They can keep private cookbooks just for organizing their recipes, or share them publicly with friends or the world.  <a href="/members/premium?msg=multiplebooks">Learn more</a><a href="javascript:void(0);" onclick="Element.hide($(\'cookbooks\'));return false;" class="popclose"></a>');
                }
        }
}

function makeCBListdrop(req) {
        var booklistHtml = '';
        var books=req.responseXML.getElementsByTagName('book');
        for (i=0;i<books.length;++i) {
                names=books[i].getElementsByTagName('name');
                booklistHtml += '<li><a href="/cookbook.php?bookid='+books[i].getAttribute('lid')+'" class="'+((books[i].getAttribute('public')=='yes')?'public':'private')+'">'+names[0].childNodes[0].nodeValue+'</a></li>';
        }
        document.getElementById('mybooklistdrop').innerHTML = booklistHtml;
        Element.removeClassName('mybooklistdrop','working');
}

function addToCookbook(rid,lid) {
        new Ajax.Request('/services/rest/listadd',{method:'post',onComplete:addToCBHandler,parameters:'lid='+lid+'&rid='+rid});
}

//////////////////////////////////////////////////
// Cookbook List Popup Window
//////////////////////////////////////////////////
var CookbookListWindow=Class.create();
CookbookListWindow.prototype={
        initialize: function() {},
        create: function(bMini) {
                if (!$('addcbpopup')) {
                        if (!g_app.user.id) {
                                new Insertion.Bottom(document.body,'\
                                <div id="addcbpopup" class="popup" style="display:none;position:absolute;z-index:999;">\
                                        <div id="listadd_msg"></div>\
                                        <p></p>\
                                        <p class="smlite">Register to save your own custom cookbook of favorite recipes for quick access later. <b>It\'s FREE.</b> <a href="/members/login">Join now</a> or <a href="/members/login">Sign In</a> if you\'re already a member.</p>\
                                        <a href="javascript:void(0);" onClick="Element.hide(\'addcbpopup\');return false;" class="popclose"></a>\
                                </div>');
                        }
                        else if (bMini) {
                                new Insertion.Bottom(document.body,'\
                        <div id="addcbpopup" class="popup" style="display:none;position:absolute;z-index:999;">\
                                <div id="listadd_msg"></div>\
                                <p></p>\
                                <p class="smlite">Premium Members can create <a href="/members/premium?msg=multiplecookbooks">custom cookbooks</a> for better organization.</p>\
                                <a href="javascript:void(0);" onClick="Element.hide(\'addcbpopup\');return false;" class="popclose"></a>\
                        </div>');
                        }
                        else {
                                new Insertion.Bottom(document.body,'\
                <div id="addcbpopup" class="popup" style="display:none;position:absolute;">\
                        <a href="javascript:void(0);" onClick="addToCookbookWindow.hide();return false;" class="popclose"></a>\
                        <p class="smlite">Click the Cookbook to save to:</p>\
                        <div id="listadd_msg"></div>\
						<div id="mybooklist"></div>\
                        <a href="javascript:void(0);" onClick="Element.update(\'bookadd_msg\',\'\');Element.show(\'addbookdiv\');"><img src="http://img.recipezaar.com/add.gif">New cookbook</a>\
                        <div id="addbookdiv" style="display:none;">\
                        <form method="post" id="createbookform" action="/services/rest/books/create.php" onSubmit="addToCookbookWindow.createBook(\'createbookform\');Element.hide(\'addbookdiv\');return false;">\
                                <input type="text" name="name" value="" />\
                                <input type="submit" value="Create" />\
                        </form>\
                        </div>\
                        <div id="bookadd_msg" class="answer" style="display: inline;"></div>\
                </div>');
                        }
                }

                if ($('mybooklist') && Element.empty('mybooklist')) {
                        Element.addClassName('mybooklist','working');
                        new Ajax.Request('/services/rest/booklist.php',
                                {
                                        method:'get',
                                        onComplete:function(req) {
                                                var meta=req.responseXML.getElementsByTagName('books');
                                                var max=meta[0].getAttribute('max');
                                                if (!max) { // User has no custom cookbooks
                                                        new Insertion.Bottom('mybooklist','<div>Premium Members can create multiple cookbooks to organize recipes.</div>');
                                                }
                                                else {
                                                        Element.removeClassName('mybooklist','working');
                                                        var books=req.responseXML.getElementsByTagName('book');
                                                        obj=$('mybooklist');
                                                        while(obj.hasChildNodes()){
                                                                obj.removeChild(obj.firstChild);
                                                        };
                                                        for (var i=0;i<books.length;++i) {
                                                                names=books[i].getElementsByTagName('name');
                                                                new Insertion.Bottom('mybooklist','<div><a href="javascript:void(0);" onclick="addToCookbookWindow.addToCookbook('+books[i].getAttribute('lid')+');return false;" class="'+((books[i].getAttribute('public')=='yes')?'public':'private')+'">'+names[0].childNodes[0].nodeValue+'</a></div>');
                                                        }
                                                }
                                        }
                                }
                        );
                }
                this.onClick=this.click.bindAsEventListener(this);
        },
        click: function(e) {
                if (this.clickWasToOpen) {
                        this.clickWasToOpen = false;
                        return;
                }
                for (var tg=Event.element(e);tg.tagName!='BODY';tg=tg.parentNode) {
                        if (tg.getAttribute('id')=='addcbpopup')
                                return;
                }
                this.hide();
                Event.stop(e);
        },
        show: function(rid,event,elem,bMini) {
				if (!elem) {
                        elem=Event.element(event);
                }
                if (rid)
                        this.rid=rid;
                this.create(bMini);

                // Position it
                var pos=Position.cumulativeOffset(elem);
                var dim=Element.getDimensions(elem);
                Element.setStyle('addcbpopup',{left:pos[0]+'px',top:(pos[1]+dim.height)+'px'});

				Element.update('listadd_msg','');
                if ($('bookadd_msg'))
                        Element.update('bookadd_msg','');
                Element.show('addcbpopup');

                this.clickWasToOpen = true;
                Event.observe(document.body,'click',this.onClick,true);
        },
        hide: function() {
				if($('addcbpopup')){
					Element.hide('addcbpopup');
	                Event.stopObserving(document.body,'click',this.onClick,true);
				}
        },
        toggle: function(rid,event,elem) {
                if (!g_app.user.id) {
					window.location.href="/members/login.php?msg=cookbook";
                }
                else if (!g_app.user.lim_books)
                        this.quickAdd(rid,event,elem);
                else if ($('addcbpopup') && Element.visible('addcbpopup'))
                        this.hide();
                else
                        this.show(rid,event,elem);
        },
        quickAdd: function(rid,event,elem) {
                this.show(rid,event,elem,true);
                this.addToCookbook(1);
        },
        addToCookbook: function(lid) {
                if (!this.rid)
                        return;
                new Ajax.Request('/services/rest/listadd',
                        {
                                method:'post',
                                onComplete: function(req) {
                                        var answer=req.responseXML.getElementsByTagName('recipe');
                                        if (answer.length)
                                                Element.update('listadd_msg',"<p class='answer'>Recipe Saved <a href='/cookbook.php?bookid="+lid+"'>view cookbook</a></p>");
                                        else
                                                Element.update('listadd_msg',"<h3 class='answer'>All recipes in public cookbooks must also be public. Make the recipe public and then add it.</h3>");
                                },
                                parameters:'lid='+lid+'&rid='+this.rid
                        }
                );
        },
        createBook: function(formid) {
                var win=this;
                new Ajax.Request($(formid).getAttribute('action'),
                        {
                                method: 'post',
                                onComplete: function(req) {
                                        var errors=req.responseXML.getElementsByTagName('exception');
                                        if (errors.length) {
                                                var msg=errors[0].getElementsByTagName('msg');
                                                $('bookadd_msg').innerHTML=msg[0].firstChild.nodeValue;
                                        }
                                        else {
                                                var books=req.responseXML.getElementsByTagName('book');
                                                if (books.length) {
                                                        var names=books[0].getElementsByTagName('name');
                                                        if (names.length) {
                                                                $('bookadd_msg').innerHTML='This cookbook has been added!';
                                                                new Insertion.Top('mybooklist','<div><a href="javascript:void(0);" onclick="addToCookbookWindow.addToCookbook('+books[0].getAttribute('num')+');return false;" class="private">'+names[0].firstChild.nodeValue+'</a></div>');
                                                                win.addToCookbook(books[0].getAttribute('num'));
                                                        }
                                                }
                                        }
                                },
                                parameters: Form.serialize($(formid))
                        }
                );
        }
}

//////////////////////////////////////////////////
// Menu List Popup Window
//////////////////////////////////////////////////
var MenuListWindow=Class.create();
MenuListWindow.prototype={
        initialize: function() {},
        create: function() {
                if (!$('addmenupopup')) {
                        if (!g_app.user.lim_menus) {
                                new Insertion.Bottom(document.body,'\
                                <div id="addmenupopup" class="popup" style="display:none;position:absolute;z-index:999;">\
                                        <div id="menuadd_msg"></div>\
										<p></p>\
                                        <p class="smlite">Premium Members can create their own Menus for putting several recipes together to plan a special dinner, printing a shopping list, etc. </p><p class="smlite"><a href="/members/premium/">Learn more about Premium Membership</a></p>\
                                        <a href="javascript:void(0);" onClick="Element.hide(\'addmenupopup\');return false;" class="popclose"></a>\
                        </div>\
                                ');

                        }
                        else {
                                new Insertion.Bottom(document.body,'\
                <div id="addmenupopup" class="popup" style="display:none;position:absolute;">\
                        <a href="javascript:void(0);" onClick="addToMenuWindow.hide();return false;" class="popclose"></a>\
                        <p class="smlite">Click the Menu to add to:</p>\
                        <div id="menuadd_msg"></div>\
						<div id="mymenulist"></div>\
                        <a href="javascript:void(0);" onClick="Element.update(\'menuadd_msg\',\'\');Element.show(\'addmenudiv\');"><img src="http://img.recipezaar.com/add.gif">New menu</a>\
                        <div id="addmenudiv" style="display:none;">\
                        <form method="post" id="createmenuform" action="/services/rest/menu/create.php" onSubmit="addToMenuWindow.createMenu(\'createmenuform\');Element.hide(\'addmenudiv\');return false;">\
                                <input type="text" name="name" value="" />\
                                <input type="submit" value="Create" />\
                        </form>\
                        </div>\
                        <div id="menuadd_msg" class="answer" style="display: inline;"></div>\
                </div>');
                        }

                        if ($('mymenulist') && Element.empty('mymenulist')) {
                                Element.addClassName('mymenulist','working');
                                var brow=g_app.getBrowser();
                                var opt='';
                                if (brow && brow.name=='MSIE') { // Fix IE's caching bug
                                        var d=new Date();
                                        opt='?fixIE='+d.getTime();
                                }
                                new Ajax.Request('/services/rest/menu/mylist.php'+opt, {
                                                method:'get',
                                                onComplete:function(req) {
                                                        var menus=eval(req.responseText);
                                                        Element.removeClassName('mymenulist','working');
                                                        obj=$('mymenulist');
                                                        while(obj.hasChildNodes()){
                                                                obj.removeChild(obj.firstChild);
                                                        }
                                                        for (var i=0;i<menus.length;++i) {
                                                                new Insertion.Bottom('mymenulist','<div><a href="javascript:addToMenuWindow.addToMenu('+menus[i].menuid+');" class="'+((menus[i].ispublic=='yes')?'public':'private')+'">'+menus[i].name+'</a></div>');
                                                        }
                                                }
                                        }
                                );
                        }
                        this.onClick=this.click.bindAsEventListener(this);
                }
        },
        click: function(e) {
                                if (this.clickWasToOpen) {
                                                this.clickWasToOpen = false;
                        return;
                }
                for (var tg=Event.element(e);tg.tagName!='BODY';tg=tg.parentNode) {
                        if (tg.getAttribute('id')=='addmenupopup')
                                return;
                }
                this.hide();
                Event.stop(e);
        },
        show: function(rid,event,elem) {
                if (!elem) {
                        elem=Event.element(event);
                }
                if (rid)
                        this.rid=rid;
                this.create();

                // Position it
                var pos=Position.cumulativeOffset(elem);
                var dim=Element.getDimensions(elem);
                Element.setStyle('addmenupopup',{left:pos[0]+'px',top:(pos[1]+dim.height)+'px'});

                Element.update('menuadd_msg','');
                if ($('menuadd_msg'))
                        Element.update('menuadd_msg','');
                Element.show('addmenupopup');

                this.clickWasToOpen = true;
                Event.observe(document.body,'click',this.onClick,true);
        },
        hide: function() {
                                Element.hide('addmenupopup');
                Event.stopObserving(document.body,'click',this.onClick,true);
        },
        toggle: function(rid,event,elem) {
                if (!g_app.user.lim_menus)
                        window.location.href="/members/premium?msg=menus";
                else if ($('addmenupopup') && Element.visible('addmenupopup'))
                        this.hide();
                else
                        this.show(rid,event,elem);
        },
        addToMenu: function(menuid) {
                if (!this.rid)
                        return;
                new Ajax.Request('/services/rest/menu/putitem',
                        {
                                method:'post',
                                onSuccess: function(req) {
                                        Element.update('menuadd_msg',"<p class='answer'>Recipe Added <a href='/menu/"+menuid+"'>View menu</a></p>");
                                },
                                onFailure: function(req) {
                                        Element.update('menuadd_msg',"<h3 class='answer'>"+exceptionMsg(req.responseXML)+"</h3>");
                                },
                                parameters:'menuid='+menuid+'&type=recipe&id='+this.rid
                        }
                );
        },
        createMenu: function(formid) {
                var win=this;
                new Ajax.Request($(formid).getAttribute('action'),
                        {
                                method: 'post',
                                onSuccess: function(req) {
                                        var menus=req.responseXML.getElementsByTagName('menu');
                                        if (menus.length) {
                                                var names=menus[0].getElementsByTagName('name');
                                                if (names.length) {
                                                        new Insertion.Top('mymenulist','<div><a href="javascript:void(0);" onclick="addToMenuWindow.addToMenu('+menus[0].getAttribute('id')+');return false;" class="private">'+names[0].firstChild.nodeValue+'</a></div>');
                                                        win.addToMenu(menus[0].getAttribute('id'));
                                                }
                                        }
                                },
                                onFailure: function(req) {
                                        $('menuadd_msg').innerHTML='Menu not created.';
                                },
                                parameters: Form.serialize($(formid))
                        }
                );
        }
}


var addToCookbookWindow=new CookbookListWindow();
var addToMenuWindow=new MenuListWindow();

function sendMyselfMail(formid,answerdiv){
        if(!g_app.user.id){
                Element.update(answerdiv,'You must <a href="/members/login.php?msg=mobile&url=/members/info/%3Fpage=mobile">Sign in</a>.');
        }else{
                new Ajax.Request('/services/rest/sendmail', {
                        method: 'post',
                        parameters: Form.serialize(formid),
                        onComplete: function(req){
                                var hasExceptionTag = req.responseText.match(/<exception>/);
                                if(hasExceptionTag){
                                	var isUnknownAddressType = req.responseText.match('Blank email:');
                                	if (isUnknownAddressType) {//send to their mobile info page
                                		window.location='/members/info?page=mobile&msg=mobile';
                                	} else { //got to login page
                                        	window.location='/members/login.php?url=/members/info?page=mobile&msg=mobile';
                                        }
                                }else{
                                        $(answerdiv).innerHTML='Message Sent!';
                                }
                        }
                });
        }
}

var SelectedItems=Class.create();
SelectedItems.prototype={
        fooName: null,
        items: Array(),
        initialize: function(parentId,tagName) {
                self.fooName=tagName;

                this.onClick=this.click.bindAsEventListener(this);
                if ($(parentId)) {
                        Event.observe(parentId,'click',this.onClick);
                }
                self.items=new Array();
        },
        select: function(tg,elemid) {
                self.items.push(elemid);
                Element.addClassName(tg,'selected');
                this.callback(this);
        },
        unselect: function(tg,elemid) {
                var n=self.items.indexOf(elemid);
                if (n>=0)
                        self.items.splice(n,1);
                Element.removeClassName(tg,'selected');
                this.callback(this);
        },
        click: function(event) {
                if (Event.element(event).tagName=='A' || Event.element(event).tagName=='IMG') {
                        return; // Don't select if the user clicked a link
                }
                var tg=Event.findElement(event,self.fooName);
                if (tg.tagName==self.fooName.toUpperCase() && tg.id) {
                        if (Element.hasClassName(tg,'selected')) {
                                this.unselect(tg,tg.id);
                        }
                        else {
                                this.select(tg,tg.id);
                        }
                        if (event.modifiers&Event.SHIFT_MASK) {// Shift key down
                        }
                }
        },
        registerCallback: function(func) {
                this.callback=func;
        },
        count: function() {
                return self.items.length;
        },
        getItems: function() {
                return self.items;
        },
        clearItems: function() {
                self.items=new Array();
        }

}

var RzXMLUtil=new Object();
Object.extend(RzXMLUtil,{
        textOfElement: function(elem,tag) {
                var node=elem.getElementsByTagName(tag);
                if (!node.length || !node[0].firstChild)
                        return '';
                return node[0].firstChild.nodeValue;
        }
}
);

var SearchForm=new Object();
Object.extend(SearchForm,{
        click: function(inputObj) {
                                inputObj.form.setAttribute("action",inputObj.value);
        },
        checkSubmit: function(formObj) {
                                // try to get the value of the search input:
                                var searchInputValue = "";
                                try{
                                        searchInputValue = formObj.q.value;
                                }
                                catch(e){ // just in case the form does not have the expected structure, return true:
                                        return true;
                                }
                                if(searchInputValue != ""){ return true; }else{ return false; }
        }
});


var DelayedHoverables=Class.create();
DelayedHoverables.prototype={
        hoverData: Object(),
        delay:0,
        tagname:'',
        callbacks:Array(),
        initialize: function(containerid,tagname,delay) {
                if ($(containerid)) {
                        this.onMouseOver=this.startHover.bindAsEventListener(this);
                        this.onMouseOut=this.endHover.bindAsEventListener(this);
                        Event.observe(containerid,'mouseover',this.onMouseOver);
                        Event.observe(containerid,'mouseout',this.onMouseOut);
                }
                this.delay=delay;
                this.tagname=tagname;
        },
        endHover: function(e) {
                if (this.hoverData.timer && Position.within(Event.element(this.hoverData.myevent),Event.pointerX(e),Event.pointerY(e)))
                        return;
                if (this.hoverData.timer) {
                        window.clearTimeout(this.hoverData.timer);
                        this.hoverData.timer=null;
                        this.callbacks['unhover'](e);
                }
        },
        startHover: function(e) {
                if (this.hoverData.timer && Position.within(Event.element(this.hoverData.myevent),Event.pointerX(e),Event.pointerY(e)))
                        return;
                this.hoverData.myevent=e;
                var data={
                        target:Event.findElement(e,this.tagname),
                        x:Event.pointerX(e),
                        y:Event.pointerY(e)
                };
                var callback=this.callbacks['hover'];
                this.hoverData.timer=window.setTimeout(function(){
                                callback(data);
                        },
                        this.delay);
        },
        registerCallback: function(type,func) {
                this.callbacks[type]=func;
        }
}

var TabControl=Class.create();
TabControl.prototype={
        initialize: function(container,pages) {
                this.container=container;
                this.pages=pages;
                this.callbacks=[];
                this.onClick=this.select.bindAsEventListener(this);
                Event.observe(container,'click',this.onClick);
        },
        openTab: function(nTab) {
                var tabs=$(this.container).getElementsByTagName('A');
                for (var i=0,j=tabs.length;i<j;++i) {
                        if (i==nTab) {
                                Element.addClassName(tabs[i],'activetab');
                                Element.removeClassName(tabs[i],'tab');
                                Element.show(this.pages[i]);
                        }
                        else {
                                Element.addClassName(tabs[i],'tab');
                                Element.removeClassName(tabs[i],'activetab');
                                Element.hide(this.pages[i]);
                        }
                }
                if (this.callbacks[this.pages[nTab]])
                        this.callbacks[this.pages[nTab]]();
        },
        select: function(event) {
                var tab=Event.findElement(event,'A');
                if (tab && tab.parentNode) {
                        var nTab=-1;
                        for (var li=tab.parentNode;li.previousSibling;li=li.previousSibling) {
                                if (li.previousSibling.tagName=='LI')
                                        ++nTab;
                        }
                        this.openTab(nTab);
                }
        },
        setCallback: function(tabname,func) {
                this.callbacks[tabname]=func;
        }
};

var RecipeMenu=Class.create();
RecipeMenu.prototype={
        rid: 0,
        context:null,
        initialize: function(recipeid){
                this.rid=recipeid;
                if(!$('rmenu-'+this.rid)){
                        var html='<div id="rmenu-'+this.rid+'" class="mmenu"><ul>';
                        if(g_app.user.id){
                                if(g_app.user.lim_books)
                                        html+='<li><a href="javascript:void(0);" onclick="addToCookbookWindow.hide(); addToCookbookWindow.show(\''+this.rid+'\',event);aRecipeMenus[\''+this.rid+'\'].submenuOpen(\'addcbpopup\'); aRecipeMenus[\''+this.rid+'\'].close(); return false;">Add to Cookbook</a></li>';
                                else
                                        html+='<li><a href="javascript:void(0);" onclick="new Ajax.Request(\'/services/rest/listadd\',{parameters:\'rid='+this.rid+'&lid=defcookbook\',method:\'post\',onComplete:function(req){\
                        var errors=req.responseXML.getElementsByTagName(\'error\');\
                        if (!errors.length) {\
                                Element.update(\'rmenu-'+this.rid+'-result\',\'This recipe has been added!\');\
                        }\
                }\
        });return false;">Add to My Cookbook</a></li>';

                        if (g_app.user.lim_menus) {
                                html+='<li><a href="javascript:void(0);" onclick="addToMenuWindow.show(\''+this.rid+'\',event);aRecipeMenus[\''+this.rid+'\'].submenuOpen(\'addmenupopup\'); aRecipeMenus[\''+this.rid+'\'].close(); return false;">Add to Menu</a></li>';
                        }

                                html+='<li><a href="javascript:void(0);" onclick="new Ajax.Request(\'/services/rest/listadd\',{parameters:\'rid='+this.rid+'&lid=shoplist\',method:\'post\',onComplete:function(req){\
                        var errors=req.responseXML.getElementsByTagName(\'error\');\
                        if (!errors.length) {\
                                Element.update(\'rmenu-'+this.rid+'-result\',\'Added! Go to <a href=/myshopcart/>My List</a>\');\
                        }\
                }\
        });return false;">Add to Shopping List</a></li>';
                        }
                        else {
                                html+='<li><a href="/members/login.php?url=%2Fmycookbook%2F%3Faddid%3D'+this.rid+'&msg=cookbook">Add to Cookbook</a></li>';
                                html+='<li><a href="/members/login.php?url=%2Fmyshopcart%2F%3Fscaleto%3D0%26addid%3D'+this.rid+'&msg=shopcart">Add to Shopping List</a></li>';
                        }

                        html+='<li><form id="recipemailform"><input type="hidden" name="address" value="mobile"><input type="hidden" name="tpl" value="mobilerecipelink"><input type="hidden" name="data[rid]" value="'+this.rid+'"></form><a href="javascript:void(0);" onclick="sendMyselfMail(\'recipemailform\',\'rmenu-'+this.rid+'-result\');">Send to Mobile Phone</a></li>\
        <li><a href="/similar.php?rid='+this.rid+'">Find Similar</a></li>\
</ul>\
<div id="rmenu-'+this.rid+'-result" class="answer"></div>\
</div>';
                        new Insertion.Bottom(document.body,html);
                        Element.hide('rmenu-'+this.rid);
                }
                this.onClick=this.click.bindAsEventListener(this);
        },
        addDeleteOption: function(bookid) {
                if (this.bookid && this.bookid==bookid)
                        return;
                this.bookid=bookid;
                var uls=$('rmenu-'+this.rid).getElementsByTagName('UL');
                if (uls)
                        new Insertion.Bottom(uls[0],'<li><a href="javascript:void(0);" onclick="aRecipeMenus[\''+this.rid+'\'].removeFromBook(event);return false;">Remove from this Cookbook</a></li>');
        },
        removeFromBook: function(event) {
                if (this.bookid) {
					rid=this.rid;
					lid=this.bookid;
					new Ajax.Request('/services/rest/listdel',{
							method:'post',
							parameters:'rid='+this.rid+'&lid='+this.bookid,
							onSuccess: function(req) {
								Element.addClassName('rec'+rid,'removed');
								if (selItems){ selItems.unselect($('rec'+rid),'rec'+rid); }
								// bug fix for ZAARRD-1826 //
								if (rid.match('rz')) {					// check to see if we're dealing with a private recipe
									rid =  rid.replace("rz.", ""); 		// temporarily removing the "rz."  string from the recipe id
									var rid_prefix = 'rz.';				//	reassigning the "rz." var to a prefix.
									var rid_private = 1;			//	assign TRUE to the rid_private var -- used to readd teh "rz." prefix back in the event of an 'undo' action.
								}  else {
									var rid_prefix = '';				// if we're not dealing with a private recipe set the prefix var to NULL
									var rid_private = 0; 			// assign FALSE to rid_private var b/c we're dealing w/ a public recipe.
								}
								Element.update('rmenu-'+rid_prefix+rid+'-result','<li><a href="javascript: void(0);" onclick="undoRemove(event,'+rid+','+lid+', '+rid_private+');" style="text-decoration:underline; font-weight: bold"><img src="http://img.recipezaar.com/undo.gif" class="mid" /> Undo</a></li>');
							}	// end onSuccess
						});	// end ajax request
				}	// end if this.bookid 
        }, // end removeFromBook
        click: function(e) {
                for (var tg=Event.element(e);tg.tagName!='BODY';tg=tg.parentNode) {
                        if (tg.id=='rmenu-'+this.rid)
                                return;
                }
                if (this.submenu && Element.visible(this.submenu))
                        return;
                this.submenu=null;
                this.close();
                Event.stop(e);
        },
        open: function(element) {
       			
                this.context=element;

				Event.observe(document.body,'click',this.onClick,true);


                var pos=Position.cumulativeOffset(this.context);
                var dim=Element.getDimensions(this.context);
                var dim2=Element.getDimensions('rmenu-'+this.rid);
                Element.setStyle('rmenu-'+this.rid,{position:'absolute',left:(pos[0]+dim.width-dim2.width)+'px',top:pos[1]+dim.height+'px'});

                Element.update('rmenu-'+this.rid+'-result',''); // Clear any messages
                Element.show('rmenu-'+this.rid);
                
                // checking to see if an element has already been removed from this list.
                
                // bug fix for ZAARRD-1826 //
       			var rid = this.rid;
				if (rid.match('rz')) {					// check to see if we're dealing with a private recipe
					rid =  rid.replace("rz.", ""); 		// temporarily removing the "rz."  string from the recipe id
					var rid_prefix = 'rz.';				//	reassigning the "rz." var to a prefix.
					var rid_private = 1;			//	assign TRUE to the rid_private var -- used to readd teh "rz." prefix back in the event of an 'undo' action.
				}  else {
					var rid_prefix = '';				// if we're not dealing with a private recipe set the prefix var to NULL
					var rid_private = 0; 			// assign FALSE to rid_private var b/c we're dealing w/ a public recipe.
				}
               
               
	           if(Element.hasClassName('rec'+rid_prefix+rid, 'removed')){ 
					Element.update('rmenu-'+rid_prefix+rid+'-result','<a href="javascript: void(0);" onclick="undoRemove(event,'+rid+','+lid+', '+rid_private+');" style="text-decoration:underline; font-weight: bold"><img src="http://img.recipezaar.com/undo.gif" class="mid" /> Undo</a>');
				}
                
                
        },
        submenuOpen: function(n) {
				this.submenu=n;
        },
        close: function() {
                Event.stopObserving(document.body,'click',this.onClick,true);
                Element.hide('rmenu-'+this.rid);
        }
};

var aRecipeMenus=new Object();

function openRecipeMenu(recipeid,element,event,memberid,lim_books) {
        if (event)
                Event.stop(event);
        else if (window.event)
                Event.stop(window.event); // IE-specific
        for (rid in aRecipeMenus) { // Close all open mmenus
                aRecipeMenus[rid].close();
        }
        if (aRecipeMenus[recipeid]==null)
                aRecipeMenus[recipeid]=new RecipeMenu(recipeid);
        aRecipeMenus[recipeid].open(element);
}

var MemberMenu=Class.create();
MemberMenu.prototype={
        mid: 0,
        context:null,
        initialize: function(memberid) {
                this.mid=memberid;
                if (!$('mmenu-'+this.mid)) {
                        new Insertion.Bottom(document.body,'\
<div id="mmenu-'+this.mid+'" class="mmenu">\
<ul>\
        <li><a href="/mail/compose?to='+this.mid+'">Z-mail me</a></li>\
        <li><a href="/member/'+this.mid+'">My Page</a></li>\
        <li><a href="/recipes.php?chef='+this.mid+'">My Recipes</a></li>\
        <li><a href="/photos.php?photog='+this.mid+'">My Photos</a></li>\
        <li><a href="/reviews.php?reviewer='+this.mid+'">My Reviews</a></li>\
        <li><a href="/cookbooks.php?mid='+this.mid+'">My Cookbooks</a></li>\
        <li><a href="/menus.php?owner='+this.mid+'">My Menus</a></li>\
        <li><a href="javascript:void(0);" onclick="new Ajax.Request(\'/services/rest/member/favorites\',{parameters:\'op=add&type=chef&id='+this.mid+'\',\
        onComplete: function(req) {\
                var errors=req.responseXML.getElementsByTagName(\'exception\');\
                if (!errors.length) \
                        Element.update(\'mmenu-'+this.mid+'-addfaveresult\',\'Added to <a href=&quot;/members/favorites.php&quot;>Favorites</a>!\');\
                else\
                        Element.update(\'mmenu-'+this.mid+'-addfaveresult\',\'Saving Favorites requires Premium Membership <a href=&quot;/members/premium&quot;>Learn about upgrading</a>\');\
        }\
        }); return false;">Add to My Favorites</a></li>\
</ul>\
<div id="mmenu-'+this.mid+'-addfaveresult" class="answer"></div>\
</div>\
');

                        Element.hide('mmenu-'+this.mid);
                }
                this.onClick=this.click.bindAsEventListener(this);
        },
        click: function(e) {
                if (Position.within($('mmenu-'+this.mid),Event.pointerX(e),Event.pointerY(e))) {
                }
                else {
                        this.close();
                        Event.stop(e);
                }
        },
        open: function(element) {
                this.context=element;
                Event.observe(document.body,'click',this.onClick,true);

                var pos=Position.cumulativeOffset(this.context);
                var dim=Element.getDimensions(this.context);
                var dim2=Element.getDimensions('mmenu-'+this.mid);
                Element.setStyle('mmenu-'+this.mid,{position:'absolute',left:(pos[0]+dim.width-dim2.width)+'px',top:pos[1]+dim.height+'px'});

                Element.show('mmenu-'+this.mid);
        },
        close: function() {
                Event.stopObserving(document.body,'click',this.onClick,true);
                Element.hide('mmenu-'+this.mid);
        }
};

var aMemberMenus=new Object();

function openMemberMenu(memberid,element,event) {
        if (event)
                Event.stop(event);
        else if (window.event)
                Event.stop(window.event); // IE-specific
        for (mid in aMemberMenus) { // Close all open mmenus
                aMemberMenus[mid].close();
        }
        if (aMemberMenus[memberid]==null)
                aMemberMenus[memberid]=new MemberMenu(memberid);
        aMemberMenus[memberid].open(element);
}



function AjaxFormPost(form,func) {
        new Ajax.Request($(form).getAttribute('action'),{method:'post',parameters:Form.serialize(form),onComplete:func});
}

function searchWithin() {
        if ($F('param_q')) {
                var prev=$F('param_q').split(' ');
                var newt=document.searchwithin.q.value.split(' ');

                var q=$F('param_q');
                for (var i=0,j=newt.length;i<j;++i) {
                        if (prev.indexOf(newt[i])<0)
                                q+=' '+newt[i];
                }

                document.searchwithin.q.value=q;
                return true;
        }
        return true;
}


function helpfulReviewVote(revid,vote) {
        if (!g_app.user.id) {
                Element.update('helpfulvote_'+revid,"We don't know who you are. <a href=\"/members/login\">Sign in or create an account</a>");
        }
        else {
                new Ajax.Request('/services/rest/reviews/helpful.php',{parameters:'revid='+revid+'&helpful='+vote,onComplete: function (req) {
                        var err=req.responseXML.getElementsByTagName('exception');
                        if (err.length) {
                                var msg=req.responseXML.getElementsByTagName('msg');
                                Element.update('helpfulvote_'+revid,msg[0].firstChild.nodeValue);
                        }
                        else {
                                var votes=req.responseXML.getElementsByTagName('helpfulvote');
                                for (var i=0;i<votes.length;++i) {
                                        Element.update('helpfulvote_'+votes[i].getAttribute('revid'),"Thank you. Your feedback will appear here tomorrow.");
                                        Element.hide($('buttons_'+votes[i].getAttribute('revid')));
                                }
                        }
                }
                });
        }
}

// Moved from the smarty/menu/view.tpl file so that the function could be used by the menu review page.
// TS -- 03/31/2008
function voteMenuReview(menuid,mid,vote) {
        if (!g_app.user.id) {
                Element.update('helpfulvote_'+menuid+'-'+mid,'Please <a href="/members/login.php">sign in</a> to vote.')
        }
        else {
                new Ajax.Request('/services/rest/menu/reviewvote', {
                        method: 'post',
                        parameters: 'menuid='+menuid+'&mid='+mid+'&vote='+vote,
                        onSuccess: function(req) {
                                Element.update('helpfulvote_'+menuid+'-'+mid,'Thank you. Your feedback will appear here soon.');
                        },
                        onFailure: function(req) {
                                Element.update('helpfulvote_'+menuid+'-'+mid,exceptionMsg(req.responseXML));
                        }
                });
        }
}


var g_menuid=1;
function openAsMenuClick(e) {
        if (window.event && g_fixie) {// IE fix
                g_fixie=0;
                return;
        }
        for (var tg=Event.element(e);tg.tagName!='BODY';tg=tg.parentNode) {
                if (tg.getAttribute('id')==g_menuid)
                        return;
        }
        Event.stopObserving(document.body,'click',openAsMenuClick,true);
        Element.hide(g_menuid);
        Event.stop(e);
}

function openAsMenu(context,menuid) {
        g_menuid=menuid;

        var pos=Position.cumulativeOffset(context);
        var dim=Element.getDimensions(context);
        var dim2=Element.getDimensions(menuid);
        document.body.appendChild($(menuid)); // Move it outside all <div>s
        Element.setStyle(menuid,{position:'absolute',left:(pos[0]+dim.width-dim2.width)+'px',top:(pos[1]+dim.height)+'px'});

        Element.show(menuid);
        g_fixie=1;
        Event.observe(document.body,'click',openAsMenuClick, true);
}

var g_windows=new Object;
function openModalWindow(elem) {
        var name=$(elem).id;
        if (!$(name+'_win')) {
                var dim=Element.getDimensions(elem);
                g_windows[name]=new Window(name+'_win',{width:dim.width,height:dim.height,resizable:false,minimizable:false,maximizable:false,draggable:false,recenterAuto:false});
        }
        g_windows[name].setContent(elem);
        g_windows[name].showCenter(true);
}
function closeModalWindow(name) {
        if (g_windows[name]) {
                g_windows[name].hide();
        }
}

function exceptionMsg(xml) {
        var msg=xml.getElementsByTagName('msg');
        if (msg) {
                return msg[0].childNodes[0].nodeValue.replace(/:.*$/,'');
        }
        else
                return 'Unknown error';
}

var RzApp=Class.create();
RzApp.prototype={
        initialize: function() {
                this.mydomain=window.location.hostname.replace(/^[^\.]+\.([^\.]+\.com$)/,'$1');

                this.user=this.readJSONCookie('userdata');
                if (this.user==null) {
                        this.user=new Object;
                        this.user.id=0;
                }
                else {
                        this.user.session=this.readJSONCookie('session');
                        if (this.user.session==null && this.readCookie('uid')!=null) {
                                var app=this;
                                new Ajax.Request('/services/rest/ping.php',{
                                        method: 'get',
                                        onSuccess: function(req) {
                                                app.user.session=app.readJSONCookie('session');
                                                Element.update('newmailnotif',app.newMailHTML(app.user.session?app.user.session.unread:0));
                                        }
                                });
                        }
                }
        },
        getBrowser: function() {
                var m;
                var b=null;
                // Not 100% reliable, some browsers allow users to change user-agent strings
                if ((m=window.navigator.userAgent.match(/(MSIE|Firefox|Safari)[\/ ](\d+\.\d+)/))!=null) {
                        b={ name: m[1], version: m[2]};
                }
                return b;
        },
        newMailHTML: function(n) {
                if (n)
                        return '<b><a href="/mail/">'+n+' new</a> <a href="/mail/"><img src="http://img.'+g_app.mydomain+'/env.gif" alt="new messages" class="mid" style="padding-right: 5px"></a></b>';
                return '';
        },
        createCookie: function(name,value,mins) {
                if (mins) {
                        var date = new Date();
                        date.setTime(date.getTime()+(mins*60*1000));
                        var expires = "; expires="+date.toGMTString();
                }
                else
                        var expires = "";
                document.cookie = name+"="+escape(value)+expires+"; path=/; domain=."+this.mydomain;
        },
        storeSessionInfo: function() {
                if (this.user.id==0)
                        this.createCookie('session','',-1440); // delete it
                else {
                        var s='{unread: '+this.user.session.unread+'}';
                        this.createCookie('session',s,10);
                }
        },
        readCookie: function(name) {
                var name=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(name) == 0) {
                                return c.substring(name.length,c.length);
                        }
                }
                return null;
        },
        readJSONCookie: function(name) {
                var s=this.readCookie(name);
                if (s==null)
                        return null;
                s=decodeURIComponent(s).replace(/\+/g,' ').replace(/\\/g,'');
                if (s.length)
                        s=eval('('+s+')');
                else
                        s={};
                return s;
        },
        decUnreadCount: function() {
                if (this.user.session && this.user.session.unread) {
                        this.user.session.unread--;
                        this.storeSessionInfo();
                        Element.update('newmailnotif',this.newMailHTML(this.user.session.unread));
                }
        }
};

var g_app=new RzApp;

function isPremiumUser()
{
        return (g_app.user.id && g_app.user.permit&32);
}

function hdrShowGreetMsg()
{
        if(g_app.user.id)
        {
                var memberhtml='<p id="gpm-loggedin">Hi ' + g_app.user.name + '! <span id="newmailnotif" class="noa">'+g_app.newMailHTML(g_app.user.session?g_app.user.session.unread:0)+'</span></p>';
        } else {
                //var memberhtml='<p>&nbsp;</p>';
				var memberhtml = '';
        }

        // invite to get premium if not currently premium
        if (!isPremiumUser()) {
                memberhtml += '<p id="gpm"><a href="https://secure.recipezaar.com/members/pay?pmurl=&pkgid=3" title="Get Premium Membership!">Get Premium Membership!</a></p>';
        }

        document.write(memberhtml);
}

function hdrShowSigninMsg()
{
        if(g_app.user.id)
        {
                var loginhtml='<a href="/members/logout.zsp" title="sign out" id="logout">Sign Out</a>';
        }
        else
        {
                var loginhtml='<a href="/members/login" id="login">Sign In</a>';
        }

        document.write(loginhtml);
}

/*
 * end global.js
 *********/




/***************
 * metadata_manager.js
 * this file was merged with global.js by jay hung on 2/2/2008
 */

/* -------------------------------------------
                Paramter Object
------------------------------------------- */
function Parameter()
{
    // variables
    var parameters              = new Object;

        // functions
        this.addParameter       = addParameter;
        this.getParameter       = getParameter;
        this.getParameterString	= getParameterString;
		this.getParameters      = getParameters;
        this.getKeys            = getKeys;
		this.replaceParameter   = replaceParameter;

        // return the parameter for looping of the keys
        function getKeys() {
                return parameters;
        }

        // add the parameter
        function addParameter(key, value) {
                if(!parameters[key])
                        parameters[key] = new Array();

        	parameters[key].push(value);
        }

        // get the parameter
        function getParameter(key, separator) {
                if(!parameters[key])
                        return;

                return parameters[key].join(separator);
        }
				
		function getParameters() {
			return parameters;
		}
			
		function replaceParameter(key, value) {
			parameters[key] = new Array(); //nuke any previous content
			parameters[key].push(value);
		}
		function getParameterString(key){
			var s=this.getParameter(key," ");
			if(s==null){s="";}
			return s;
		}
}


/* -------------------------------------------
                        MetaDataManager
------------------------------------------- */
function MetaDataManager()
{
        var m = new Parameter();
				this.m = m;
				this.features = [];
				this.blockFeatures = ["Title", "Sponsorship", "sponsorship"];
       			this.addParameter = m.addParameter;
        		this.getParameter = m.getParameter;
				this.getParameterString = m.getParameterString;
				this.replaceParameter = m.replaceParameter;
        		this.getKeys = m.getKeys;
				
				this.loadParameters = loadParameters;
				this.finalizeMD = finalizeMD;
				this.getFeatures = getFeatures;
        this.getPageType = getPageType;
        this.getPageTitle = getPageTitle;
				this.getRequiredKeys = getRequiredKeys;
        this.getSite = getSite;
        this.getSctnId = getSctnId;
        this.getSctnName = getSctnName;
        this.getSponsorship = getSponsorship;
        this.getAbstract = getAbstract;
        this.getKeywords = getKeywords;
        this.getClassification = getClassification;
        this.getSctnDspName = getSctnDspName;
        this.getCategoryDspName = getCategoryDspName;
        this.getShowAbbr = getShowAbbr;
        this.getChefName = getChefName;
        this.getMealPart = getMealPart;
        this.getCusine = getCusine;
        this.getOccasion = getOccasion;
        this.getSpecialInterest = getSpecialInterest;
        this.getMainIngredient = getMainIngredient;
        this.getSeason = getSeason;
        this.getTechnique = getTechnique;
        this.getVodType = getVodType;
        this.getRole = getRole;
        this.getMultimediaFlag = getMultimediaFlag;
        this.setMultimediaFlag = setMultimediaFlag;
        this.getDetailId = getDetailId;
        this.getSearchTerm = getSearchTerm;
        this.getPageNumber = getPageNumber;
        this.getUniqueId = getUniqueId;
        this.getUserId = getUserId;
        this.getUserIdEmail = getUserIdEmail;
        this.getUserIdCreateDt = getUserIdCreateDt;
        this.getUserIdVersion = getUserIdVersion;
				
				function loadParameters(arrObj, replaceData) {
					if (replaceData == undefined) { //default true
						replaceData = true;
					}
					//this is an oddball but required as per ZAARRD-2636
					arrObj.topic = arrObj.Sponsorship ? arrObj.Sponsorship : null;
					outerloop: 
						for (i in arrObj) {
							if (replaceData) {
								this.replaceParameter(i, arrObj[i]);
							} else {
								this.addParameter(i, arrObj[i]);
							}
							for(b = 0; b < this.blockFeatures.length; b++) {
								if (i == this.blockFeatures[b]) {
									continue outerloop;
								}
							}
							this.features.push(i); //Reference for other objects to retrieve features inserted into mdManager.
						}
				}
				
				//Checks parameters to see if anything hasn't yet been set that may be required.
				function finalizeMD() {
					var keys = this.getRequiredKeys();
					for(i in keys) {
						if (!this.getParameter(i, "")) {
							this.addParameter(i, keys[i]);
						}
					}
				}
				
				function getFeatures () {
					return this.features;
				}
				
        function getPageType ( ) {
                var type =  this.getParameter( "Type"," ");
                if ( type == null ) {
                        type = "";
                }
                return type;
        }

        function getPageTitle ( ) {
                var title =  this.getParameter( "Title"," ");
                if ( title == null ) {
                        title = "" ;
                }
                return title;
        }
				//Returns back an object with required key/value pairs to be set
				function getRequiredKeys() {
					var keys = new Object();
					keys.Url = window.location.href;
					keys.Site = "ZAAR";
					//keys.Classification = "ZAAR"; //Does this need pre-declaration?
					keys.Keywords = g_adkeyword;
					keys.UniqueId = g_aduniqueid;
					keys.Ord = mdOrd;
					keys.Tile = mdTile;
					return keys;
				}
				
        function getSite ( ) {
                var site = this.getParameter("Site"," ");
                if ( site == null ) {
                        site = "" ;
                }
                return site;
        }

        function getSctnId ( ) {
                var sctnId = this.getParameter("SctnId"," ");
                if ( sctnId == null ) {
                        sctnId = 0;
                }
                return sctnId;
        }

        function getSctnName ( ) {
                var sctnName = this.getParameter("SctnName"," ");
                if ( sctnName == null ) {
                        sctnName = "";
                }
                return sctnName;
        }

        function getSponsorship ( ) {
                var sponsor = this.getParameter("Sponsorship"," ");
                if ( sponsor == null ) {
                        sponsor = "";
                }
                return sponsor;
        }

        function getAbstract ( ) {
                var abst = this.getParameter("Abstract"," ");
                if ( abst == null ) {
                        abst = "";
                }
                return abst;
        }

        function getKeywords ( ) {
                var keywords = this.getParameter("Keywords"," ");
                if ( keywords == null ) {
                        keywords = "";
                }
                return keywords;
        }

        function getClassification ( ) {
                var classification = this.getParameter("Classification"," ");
                if ( classification == null ) {
                        classification = "";
                }
                return classification;
        }

        function getSctnDspName ( ) {
                var sctnDspName = this.getParameter("SctnDspName"," ");
                if ( sctnDspName == null ) {
                        sctnDspName = "";
                }
                return sctnDspName;
        }

        function getCategoryDspName ( ) {
                var categoryDspName = this.getParameter("CategoryDspName"," ");
                if ( categoryDspName == null ) {
                        categoryDspName = "";
                }
                return categoryDspName;
        }

        function getShowAbbr ( ) {
                var showAbbr = this.getParameter("Show_Abbr"," ");
                if ( showAbbr == null ) {
                        showAbbr = "";
                }
                return showAbbr;
        }

        function getMultimediaFlag ( ) {
                var flag = this.getParameter("MultimediaFlag"," ");
                if ( flag == null ) {
                        flag = "";
                }
                return flag;
        }
        function setMultimediaFlag ( flag ) {
                if ( flag != null ) {
                        this.addParameter("MultimediaFlag",flag);
                } else {
                        this.addParameter("MultimediaFlag","");
                }
        }

        function  getChefName ( ) {
                var chefName = this.getParameter("ChefName", " ");
                if ( chefName == null ) {
                        chefName = "";
                }
                return chefName;
        }

        function getMealPart ( ) {
                var mealPart = this.getParameter("MealPart", " ");
                if ( mealPart == null ) {
                        mealPart = "";
                }
                return mealPart;
        }

        function getCusine ( ) {
                var cusine = this.getParameter("Cusine", " ");
                if ( cusine == null ) {
                        cusine = "";
                }
                return cusine;
        }

        function getOccasion ( ) {
                var occasion = this.getParameter("Occasion", " ");
                if ( occasion == null ) {
                        occasion = "";
                }
                return occasion;
        }

        function getSpecialInterest ( ) {
                var special = this.getParameter("SpecialInterest"," ");
                if ( special == null ) {
                        special = "";
                }
                return special;
        }

        function getMainIngredient ( ) {
                var mainIngredient = this.getParameter("MainIngredient"," ");
                if ( mainIngredient == null ) {
                        mainIngredient = "";
                }
                return mainIngredient;
        }

        function getSeason ( ) {
                var season = this.getParameter("Season", " ");
                if ( season == null ) {
                        season = "";
                }
                return season;
        }

        function getTechnique ( ) {
                var technique = this.getParameter( "Season", " ");
                if ( technique == null ) {
                        technique = "";
                }
                return technique;
        }

        function getVodType ( ) {
                var vtype = this.getParameter("VodType"," ");
                if ( vtype == null ) {
                        vtype = "";
                }
                return vtype;
        }

        function getRole ( ) {
                var vrole = this.getParameter("Role"," ");
                if ( vrole == null ) {
                        vrole = "";
                }
                return vrole;
        }

        function getDetailId ( ) {
                var vdid = this.getParameter("DetailId"," ");
                if ( vdid == null ) {
                        vdid = "";
                }
                return vdid;
        }

        function getPageNumber ( ) {
                var vpn = this.getParameter("PageNumber"," ");
                if ( vpn == null ) {
                        vpn = "";
                }
                return vpn;
        }

        function getUniqueId ( ) {
                var vpn = this.getParameter("UniqueId"," ");
                if ( vpn == null ) {
                        vpn = "";
                }
                return vpn;
        }

        function getUserId ( ) {
                var uId = this.getParameter("UserId"," ");
                if ( uId == null ) {
                        uId = "";
                }
                return uId;
        }

        function getUserIdEmail ( ) {
                var eId = this.getParameter("UserIdEmail"," ");
                if ( eId == null ) {
                        eId = "";
                }
                return eId;
        }

        function getUserIdCreateDt ( ) {
                var uCdt = this.getParameter("UserIdCreateDt"," ");
                if ( uCdt == null ) {
                        uCdt = "";
                }
                return uCdt;
        }

        function getUserIdVersion ( ) {
                var uVer = this.getParameter("UserIdVersion"," ");
                if ( uVer == null ) {
                        uVer = "";
                }
                return uVer;
        }

        function getSearchTerm ( ) {
                var args = parseQueryString ();
                for (var arg in args) {
                        var s = arg.toUpperCase();
                        if ( s == 'SEARCHSTRING' ){
                                return args[arg];
                        }
                }
                return "";
        }

        function parseQueryString (str) {
          str = str ? str : document.location.search;
          var query = str.charAt(0) == '?' ? str.substring(1) : str;
          var args = new Object();
          if (query) {
            var fields = query.split('&');
            for (var f = 0; f < fields.length; f++) {
              var field = fields[f].split('=');
              args[unescape(field[0].replace(/\+/g, ' '))] =
                        unescape(field[1].replace(/\+/g, ' '));
            }
          }
          return args;
        }

}



//==ENDECA Functions Begin ======================

// mdManager.getFilters() function. would extend existing metadata manager library.
// it can be stored in a separate file that is only referenced by the search results pages.
// our code won't use it, but it may be good to add for consistency since
// metadataManager library in general has get functions defined for the other parameter values
function getFilters ( ) {
        var keywords = this.getParameter("Filters"," ");
        if (filters == null ) {
                filters = "";
        }
        return filters;
}

//==ENDECA Functions End =========================


/*
 * end metadata_manager.js
 *********/




/***************
 * ad_manager.js
 * this file was merged with global.js by jay hung on 2/2/2008
 */


// Url obj
function Url()
{
        var p = new Parameter();

        // functions
        this.addParameter                       = p.addParameter;
        this.getParameter                       = p.getParameter;
        this.getKeys                            = p.getKeys;
        this.url                        = new String();
        this.buildUrl           = buildUrl;
        this.buildExpandedUrl = buildExpandedUrl;
        this.setUrl             = setUrl;
        this.getUrl             = getUrl;
        this.buildQueryStringValuePairs = buildQueryStringValuePairs;
        this.buildExpandedQueryStringValuePairs = buildExpandedQueryStringValuePairs;

        // setUrl
        function setUrl(u) {
            this.url = u
        }


        // getUrl
        function getUrl() {
            return this.url;
        }

        // buildQueryStringValuePairs
        function buildQueryStringValuePairs() {
                        var queryString = "";
                        for ( key in this.getKeys() ) {
                                if (queryString != "")
                                        queryString += '&'
                                queryString += key +'='+ this.getParameter(key, ',');
                }
                return queryString;
        }

        // buildUrl
        function buildUrl() {
                return this.getUrl() + this.buildQueryStringValuePairs();
        }


        // buildExpandedQueryStringValuePairs
        function buildExpandedQueryStringValuePairs() {
                        var queryString = "";

                        for ( key in this.getKeys() ) {
                                        var item = new String(this.getParameter(key, ","));
                                        var iArray = item.split(",");

                                        for(i = 0; i < iArray.length; i++) {
                                                if (queryString != "" && iArray[i] != "" && iArray[i] != undefined)
                                                        queryString += '&'
                                                if (iArray[i] != "" && iArray[i] != undefined) {
                                                        if ( key == "keyword") {
                                                                jArray = iArray[i].split("+");
                                                                for(j = 0; j < jArray.length; j++) {
                                                                        if ( j != 0 ) queryString += '&';
                                                                        queryString += key +'='+jArray[j].toLowerCase();

                                                                }
                                                        }
                                                        else {
                                                                queryString += key +'='+ encodeURI(iArray[i]);
                                                        }
                                                }
                                        }
                        }
								if (SNI.RSI) {
									queryString += SNI.RSI.getSegQS();
								}
                return queryString;
        }

        // buildUrl
        function buildExpandedUrl() {
                return this.getUrl() + this.buildExpandedQueryStringValuePairs();
        }

}


Ad.prototype = new Url;
function Ad()
{
        var url = new Url();
        this.addParameter       = url.addParameter;
        this.getParameter       = url.getParameter;
        this.getKeys            = url.getKeys;
        this.buildUrl           = url.buildUrl;
        this.buildExpandedUrl = url.buildExpandedUrl;

        var feature             = new Parameter();
        this.useFeature         = useFeature;
        this.getFeature         = getFeature;
        this.debug                      = debug;
        this.write                      = write;
    this.deferrable             = 1;

        // add the parameter
        function useFeature(key) {
             feature.addParameter(key, "T");
        }

        // add the parameter
        function getFeature(key) {
                   return feature.getParameter(key, ",");
        }

        // this should be overloaded
        function debug() {
                document.write('<DIV style="BACKGROUND-COLOR:RED;COLOR:WHITE">'+ this.buildExpandedUrl() +'</DIV>');
        }

        // this should be overloaded
        function write(returnString) {
        }
}


/* -------------------------------------------
Ad Object inherits paramter
------------------------------------------- */

DartAd.prototype = new Ad();
function DartAd()
{
        DartAd.prototype = new Ad();
        
        if(adManager == 'undefined'){
        	adManager = new adManager();
        }
        
        this.write = write;
        this.useFeature("site");
        this.useFeature("category");
        this.useFeature("vgncontent");
        this.useFeature("ord");
        this.useFeature("topic");
        this.useFeature("tile");
        this.useFeature("pagetype");
        this.useFeature("SECTION_ID");
        this.useFeature("SUBSECTION");
        this.useFeature("page");
				//Autoload features found in adManager
				var features = adManager.getFeatures();
				if (features) { //autoload features found on adManager
					for (i=0; i < features.length; i++) {
						var featureName = features[i];
						this.useFeature(featureName.toLowerCase());
					}
				}
        this.adClass = new String("AD_CLASS");

        function write(returnString) {
					var str = '<script type="text/javascript" language="JavaScript" src="'+ this.buildExpandedUrl() +'"></script>';
					if (returnString) {
						return str;
					} else {
						document.write(str);
					}
        }
}

AdUrl.prototype = new Ad();
function AdUrl()
{
        AdUrl.prototype = new Ad();
        this.write = write;
        this.useFeature("site");
        this.useFeature("category");
        this.useFeature("vgncontent");
        this.useFeature("ord");
        this.useFeature("topic");
        this.useFeature("tile");
        this.useFeature("pagetype");
        this.useFeature("SECTION_ID");
        this.useFeature("SUBSECTION");
        this.useFeature("page");
        this.useFeature("uniqueid");
        this.useFeature("SearchKeywords");
        this.useFeature("SearchFilters");

        function write() {
        }
}

/* -------------------------------------------
AdManager
------------------------------------------- */
function AdManager()
{
        var p = new Parameter();
        this.addParameter = p.addParameter;
        this.getParameter = p.getParameter;
        this.getKeys = p.getKeys;
				this.features = [];
        this.createAd = createAd;
        this.createDeferredAd = createDeferredAd;
				this.getFeatures = getFeatures;
        this.moveAds = moveAds;
        this.ads = new Array();
        this.defer = false;

        if(document.deferAds != null &&
                   document.deferAds == 1 &&
                   document.deferEnabled != null &&
                   document.deferEnabled == 1) {
                   this.defer = true;
         }

        // add the parameter
        function createAd(ad, returnString) {

                // add the site params
                for ( key in this.getKeys()) {
                        if ( ad.getFeature(key) != undefined && !ad.getParameter(key)) {
                                ad.addParameter(key, this.getParameter(key, ','));
                        }
                }

                if(document.debug == 1)
                                ad.debug();

                // defer the ad
                if (this.defer == true && ad.deferrable == 1) {
                        this.ads.push(ad);
                        document.write('<DIV id="AD_'+ (this.ads.length -1) +'" class="'+ ad.adClass +'" ></DIV>');
                } else {
                        return ad.write(returnString);
                }
        }

        // Create Deferred Ad
        function createDeferredAd(i) {
                if(this.defer == true)  {
                                var count = i
                                var ad = this.ads[count];
                                var scriptId = 'AD_'+ i +'_SCRIPT';

                                if(ad != null) {
                                        document.write('<script id="'+ scriptId +'" type="text/javascript" language="JavaScript" src="'+ ad.buildExpandedUrl() +'"></script>');
                                }
                        }

        }
				
				function getFeatures() {
					return this.features;
				}
				
				function loadMDParameters(arrObj) {
					for (i in arrObj) {
							this.replaceParameter(i, arrObj[i]);
					}
				}

        // Move Ads
        function moveAds() {
                if(this.defer == true) {

                        for(var i = 0; i <= this.ads.length; i++ ) {
                                var ad = this.ads[i];
                                var fromId = 'AD_'+ i +'_HIDDEN'
                                var toId = 'AD_' + i  +'';
                                var scriptId = 'AD_'+ i +'_SCRIPT';
                                var fromElement = document.getElementById(fromId);
                                var toElement = document.getElementById(toId);
                                var scriptElement = document.getElementById(scriptId);
                                if(toElement != null && fromElement != null) {
                                        if(scriptElement)
                                                scriptElement.src = "";

                                        // clean third party tags
                                        children = fromElement.childNodes;
                                        for(var j = 0; j < children.length; j++) {
                                                var tag = children[j].tagName;
                                                if(new String(tag).toUpperCase() == 'SCRIPT')
                                                        children[j].src = "";
                                        }

                                        toElement.innerHTML = fromElement.innerHTML;
                                        toElement.style.display = 'block';
                                }
                        }
                }
        }
}

/*
 * end ad_manager.js
 *********/

/***************
 * ad restriction support from coreAd
 * added by sjohnson on 7/10/08
 */
function AdRestriction()
{
	var p = new Parameter();
	// functions
	this.addParameter 			= p.addParameter;
	this.getParameter 			= p.getParameter;
	this.getKeys 			 	= p.getKeys;
	this.isActive = true;
	this.isIframe = false;

}

function AdDefault()
{
	var p = new Parameter();
	// functions
	this.addParameter 			= p.addParameter;
	this.getParameter 			= p.getParameter;
	this.getKeys 			 	= p.getKeys;
	this.display				= false;
}

function AdRestrictionManager() {
	this.restriction = new Array();
	this.adDefaults = new Array();
	this.isActive = isActive;
	this.isIframe = isIframe;
	this.isMatch = isMatch;
	this.startMatch = startMatch;
	// is active
	function isActive(ad, mdm) {
		var value = false;
		var adDefaultMatch = false;
		var defaultReturnValue = true;

		for (var i = 0; i < this.adDefaults.length; i++){
			adDefaultMatch = this.startMatch(ad, mdm, this.adDefaults[i]);
			if (adDefaultMatch == true) {
				defaultReturnValue = this.adDefaults[i].display;
				break;
			}
		}

		for (var i = 0; i < this.restriction.length; i++){
			adRestriction = this.restriction[i];
			if(!adRestriction.isActive) {
				value = this.startMatch(ad, mdm, adRestriction);
			}
			if(value == true)
				return !defaultReturnValue;
		}

		return defaultReturnValue;
	}

	// is Iframe
	function isIframe(ad, mdm) {
		var value = false;
		for (var i = 0; i < this.restriction.length; i++){
			adRestriction = this.restriction[i];
			if(adRestriction.isIframe) {
				value = this.startMatch(ad, mdm, adRestriction);
			}

		}
		return value;

	}

	function startMatch(ad, mdm, adRestriction) {
		var match = true;
		for ( var key in adRestriction.getKeys() ) {
					var restrictions = adRestriction.getParameter(key, ',');

					// get it from the mdm
					var value = mdm.getParameter(key, '----');
					match = this.isMatch(value, restrictions);

					// ad
					if(!match) {
						value = ad.getParameter(key, '----');
						match = this.isMatch(value, restrictions);
					}
					if(!match) return false;

		}
		return match;
	}

	function isMatch(value, restrictions) {
		var match = false;
		if(value) {
			splitValue = value.split('----');
			for(var x = 0; x < splitValue.length; x++) {
				if(restrictions == splitValue[x]) match = true;
				for(var a; a < restrictions.length; a++) {
					if(splitValue[x] == restrictions[a]) {
						return match = true;
					}
				}
			}
		}
		return match;
	}

}

/*
 * end ad restrictions
 *********/



/***************
 * zaar_ads.js
 * this file was merged with global.js by jay hung on 2/2/2008
 */

// Globals
var g_ad_label = '<p>ADVERTISEMENT</p>';
var g_premium_label = '<p><a href="/members/premium/?msg=noads">Remove ads with Premium</a></p>';
var g_sponsor_label = '<p class="smlite" style="text-align: center; margin: 0 auto;">sponsored by</p>';

// define debug
document.debug = 0;

// set usemetadataManager to 1 to use the metadataManager
document.usemetadataManager  = 1;

function initAdManager(am) {

// Ignore for premium members
	if (g_app.user.id && g_app.user.permit&32) return;

// If using the metadata manager
	if ( document.usemetadataManager == 1 && "mdManager" in window ) {
		var features = mdManager.getFeatures();
		am.features = features;
		var s = mdManager.getSite();
		var amKeywords = mdManager.getKeywords();
		var amUniqueId = mdManager.getUniqueId();
		var amUrl = mdManager.getParameter('Url',' ');
		var amOrd = mdManager.getParameter('Ord',' ');
		var amTile = mdManager.getParameter('Tile',' ');
		var amCategory = mdManager.getParameter('Category', ' ');
		var amSearchType = mdManager.getParameter('search_type', ' ');
		var amEnvironment = mdManager.getParameter('Environment', ' ');
		var amCurrentPageType = mdManager.getParameter('CurrentPageType', '');

		if (amKeywords !="" && amKeywords != undefined) {
						amKeywords = amKeywords.replace(/,/g , "_");
		}

		if (amUniqueId != undefined && amUniqueId != "") {
						amUniqueId = amUniqueId.replace(/,/g , "_");
		} else {
						amUniqueId = "";
		}

		am.addParameter("url", amUrl);
		am.addParameter("site",s );
		am.addParameter("keyword", amKeywords);
		am.addParameter("uniqueid", amUniqueId);
		am.addParameter("ord", amOrd);
		am.addParameter("tile", amTile);
		am.addParameter("category", amCategory);
		am.addParameter("search_type", amSearchType);
		am.addParameter("CurrentPageType", amCurrentPageType);
		//Autoload parameters from features.
		for (i = 0; i < am.features.length; i++) {
			am.addParameter(am.features[i], mdManager.getParameter(am.features[i]));
		}

		if (typeof(g_recipesource)!=='undefined')
		{
			if (g_recipesource != "")
			{
				am.addParameter("recipesource", g_recipesource);
			}
		}
		am.addParameter("environment", amEnvironment);

// If not using the metadata manager
	} else {
					var amOrd = String(Math.round(Math.random()*10000000000));
					var amTile = String(Math.round(Math.random()*10000000000));

					am.addParameter("ord", amOrd);
					am.addParameter("tile", amTile);
					am.addParameter("adSource", "http://adsremote.scrippsnetworks.com/js.ng/");
					am.addParameter("site","ZAAR");
					am.addParameter("keyword", g_adkeyword);
		if (typeof(g_currentPageType)!=='undefined')
		{
			am.addParameter("CurrentPageType", g_currentPageType);
		}
/*
		if (typeof g_recipesource != "undefined") {
			am.addParameter("recipesource", g_recipesource);
		}
*/
//KFIX          am.addParameter("uniqueid", g_aduniqueid);
document.write("KEYWORDS=" + g_adkeyword + "<BR>");
	}
}

// sjohnson: added 7/10/08
function writeAd(ad, returnString) {
	if (typeof adRestrictionManager != 'undefined') {
		ad.useIframe = adRestrictionManager.isIframe(ad, mdManager);
		if( adRestrictionManager.isActive(ad, mdManager) != false)
			return adManager.createAd(ad, returnString);
	} else {
		return adManager.createAd(ad, returnString);
	}
}

function zaarAd(adtype, pos, returnString) {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        var ad = new DartAd();
		ad.setUrl(mdManager.getParameter("adSource"));
		ad.addParameter("recipesource", adManager.getParameter("recipesource"));
		ad.addParameter("search_type", adManager.getParameter("search_type"));
		ad.addParameter("keyword", adManager.getParameter("keyword"));
		ad.addParameter("topic2", adManager.getParameter("environment"));
		ad.addParameter("pagetype", adManager.getParameter("CurrentPageType"));
		//Autoload some parameters based on adManager's features.
		var features = adManager.getFeatures();
		for (i = 0; i < features.length; i++) {
			var featureName = features[i];
			ad.addParameter(featureName.toLowerCase(), adManager.getParameter(features[i]));
		}
	
		//Hack: Sponsorship needs to be passed as topic to ad server (per ZAARRD-2636)
		ad.addParameter("topic", ad.getParameter("sponsorship"));
        /* WHEN NOT COMMENTED, THIS CALLS DUPLICATES THE KEYWORDS IN THE AD URL */
        //ad.useFeature("keyword");

        if (adtype != '') ad.addParameter("adtype", adtype);
        if (pos != '') ad.addParameter("PagePos", pos);
        // adManager.createAd(ad);
		return writeAd(ad, returnString);
}

/* LOGO ADD */
function zaarLogoAd(logoPagePos,logoNum)
{
// Ignore for premium members
	if (g_app.user.id && g_app.user.permit&32) return;

	if (logoNum==undefined || logoNum=='' || logoNum>4 || logoNum<1){
		logoNum=4;
	}	
	if (logoPagePos == '' || logoPagePos==undefined) logoPagePos=1;

	oldSource = mdManager.getParameter("adSource");
	mdManager.replaceParameter("adSource","http://adsremote.scrippsnetworks.com/snDigitalLogo"+logoNum+".html?");
	zaarAd('LOGO',logoPagePos);
	mdManager.replaceParameter("adSource",  oldSource);
	
	
	document.observe("dom:loaded", function() {	
		var ad_test = $$('#multiLogoAd a img');
		if(ad_test != ''){ 
			//if(ad_test.width > 1){  // only prepend "sponsored by text"  if the image width is greater than 1px. 
				document.getElementById('sb-caption').innerHTML = "Sponsored By"; 
			//}
		}
	});


/*
	$(document).ready(function() {
		if($(".sponsor-multi-logo a img").length>0){
			if($(".sponsor-multi-logo").parent().hasClass("west-spons")){
				$(".sponsor-multi-logo").prepend("<em>Sponsored by:</em>");
				$(".west-spons").css("display","block");
			} else{
				$(".sponsor-multi-logo").prepend("<em>Sponsored by:</em>");
			}
		}
	});
*/

}

/* TOWER 160x600, 120x600 ADUNIT */
function zaarTower(){
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        document.write(g_ad_label);
        zaarAd('TOWER','1');
        document.write(g_premium_label);
}

/* LEADERBOARD 728x90 ADUNIT */
function zaarLeader() {
// Ignore for premium members
	var brow=g_app.getBrowser();
	if (g_app.user.id && g_app.user.permit&32) return;
	document.write('<span id="adLEADERBOARD" style="height:90px; width:728px;">');
	zaarAd('LEADERBOARD','1');
	//if (brow && (brow.name!='MSIE' && brow.version == '6.0')) {
		document.write("</span>");
	//}
}

/* GOOGLE LEADERBOARD 728x90 FOOTER */
function zaarGoogleFooter() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        zaarAd('GOOGLE','3');
}

/* BIG BOX 300x250 ADUNIT */
function zaarBigBox() {
// Ignore for premium members
	var brow=g_app.getBrowser();
	if (g_app.user.id && g_app.user.permit&32) return;
	document.write(g_ad_label);
	document.write("<span style='width: 300px; height: 250px;' id='adBIGBOX'>");
	document.write(zaarAd('BIGBOX','5', true));
	//if (brow && (brow.name!='MSIE' && brow.version == '6.0')) {
		document.write("</span>");
	//}
}

/* BIG BOX 300x250 ADUNIT WITHOUT ADVIRTISEMENT BANNER */
function zaarBigBoxNoBanner()
{
	//Ignore for premium members
	if (g_app.user.id && g_app.user.permit&32) return;
	zaarAd('BIGBOX','5');
}

/* BIG BOX 300x250 ADUNIT */
function zaarBigBoxBelowFold() {
// Ignore for premium members
	var brow=g_app.getBrowser();
	if (g_app.user.id && g_app.user.permit&32) return;
	document.write(g_ad_label);
	document.write("<span style='width: 300px; height: 250px;' id='ad8BIGBOX'>");
	zaarAd('BIGBOX','8');
	//if (brow && (brow.name!='MSIE' && brow.version == '6.0')) {
		document.write("</span>");
	//}
}

/* LOGO ADUNIT (CATEGORY SPONSOR) */
function zaarLogo() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        zaarAd('LOGO','1');
}

/* GOOGLE TOWER */
function zaarGoogleTower() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        zaarAd('GOOGLE','2');
}

/* AD 180x180 ADUNIT (SPONSORSHIP) */
function zaarSponsorship() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        document.write(g_sponsor_label);
        zaarAd('AD180X180', '1');
}

/* GOOGLE BIGBOX 300X250*/
function zaarGoogleBigBox() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        zaarAd('GOOGLE','1');
}

/* PUSHDOWN AD */
function zaarPushdown() {
// Ignore for premium members
	if (g_app.user.id && g_app.user.permit&32) return;
	zaarAd('PUSHDOWN', '1');
}

/* SUPERSTITIAL AD */
function zaarSuperstitial() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        zaarAd('SUPERSTITIAL', '1');
}

/* CATSPONSOR AD */
function zaarCatSponsor() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        document.write(g_sponsor_label);
        zaarAd('CATSPONSOR', '1');
}

/* COUPONS INC */
function zaarCoupons() {
// Ignore for premium members
        if (g_app.user.id && g_app.user.permit&32) return;
        document.write('<script language="javascript" type="text/javascript">var ci_cap_scriptId = "837";var ci_cap_bid = "1020720001";var ci_cap_format = "180x150";var ci_cap_channel = "rz";</script><script language="javascript" type="text/javascript" src="http://bc.coupons.com/"></script>');
}


/* --------------------------------
 *       Utility Functions (MAY NOT BE NEEDED FOR ZAAR ADS
 * --------------------------------*/
/*
function packQS() {
        var qs= "ai='"+ document.globalPageSite +"!"+ document.globalPageSctnName +"!"+ document.globalPageSctnId +"!"+ document.globalPageType +"!"+ document.globalPageSponsorship +"!"+ document.globalSctnLineage +"'";

        return qs;
}

function unpackQS() {
        qsArray = window.location.search.split("!");

        document.globalPageSite = "GAC"
        document.globalPageSctnName = qsArray[1];
        document.globalPageSctnId = qsArray[2];
        document.globalPageType = qsArray[3];
        document.globalPageSponsorship = qsArray[4];
        document.globalSctnLineage = qsArray[5];
}

function invokePrestitialAd() {
        pa_SetupAd("preinterstitial");
}

//--Cookie expires days function
function pa_expTime(noDays){
    var today = new Date();
    var expr = new Date(today.getTime() + noDays * 24 * 60 * 60 *1000);
        expr.setHours(0);
        expr.setMinutes(0);

    return  expr.toString();
}

//-- Cookie enabled check
function pa_validateAd (){
        var idxresult = document.cookie.indexOf(preintCookieName);
        if (idxresult == -1){
                return 0;
        } else{
                return 1;
        }
}

//--Checking for existing cookie, setting cookie, calling Cookie enabled check function,
function pa_SetupAd(pa_cookieName){
    var tko = document.cookie.indexOf(pa_cookieName);
    if (tko == -1){
                document.cookie = preintCookieName +"=yes; expires=" + pa_expTime(cookielife);

                if (pa_validateAd())
                        window.location=pa_getAdPageURL();
        }
}

function pa_getAdPageURL() {
        return adPagePath +"?"+ packQS();
}
*/

// Determine the current environment
	var hostname = window.location.host.split(".");
	var environment;

	switch (hostname[1])
	{
		case "dev-recipezaar":
			environment = "d";
			break;
		case "staging-recipezaar":
			environment = "s";
			break;
		default:
			environment = "p";
			break;
	}

// ads init code
	if(!g_adkeyword){ var g_adkeyword = "recipes_tab"; }
	if(!g_aduniqueid){ var g_aduniqueid = ""; }
        var iArray = (window.location.search).split("&");
        var i = 0;
        var v_length = iArray.length;
        var mdManager = new MetaDataManager();
        var mdOrd = String(Math.round(Math.random()*10000000000));
        var mdTile = String(Math.round(Math.random()*10000000000));

	mdManager.addParameter("Environment", environment);
	mdManager.addParameter("adSource", "http://adsremote.scrippsnetworks.com/js.ng/");

        for (i = 0; i < v_length; i++)
	{
		var splitArray = iArray[i].split("=");
/*
                if ( (iArray[i].split("="))[0] == "Search")
                        mdManager.addParameter("Category", "SEARCH");
*/
		if (splitArray[0] == "Search")
		{
			mdManager.addParameter("Category", "SEARCH");
		}
		if ((splitArray[0] == "s_type" || splitArray[0] == "?s_type") && splitArray.length > 0)
		{

			switch(splitArray[1])
			{
				case "%2Frecipes.php":
					mdManager.addParameter("search_type", "recipe");
					break;
				case "%2Fcookbooks.php":
					mdManager.addParameter("search_type", "cookbook");
					break;
				case "%2Fingreds.php":
					mdManager.addParameter("search_type", "ingredient");
					break;
				case "%2Fmembers.php":
					mdManager.addParameter("search_type", "members");
					break;
				default:
					mdManager.addParameter("search_type", "unknown");
					break;
			}
		}
	}
		
	if (typeof(g_currentPageType)!=='undefined')
	{
	 mdManager.addParameter("CurrentPageType", g_currentPageType);
	}
// end init code


/*
 * end zaar_ads.js
 *********/




/***************
 * browsectl.js
 * this file was added to this global.js file by jay hung on 2/2/2008
 */

Effect.QueueThis = Class.create();
Object.extend( Object.extend( Effect.QueueThis.prototype, Effect.Base.prototype ), {
        initialize: function(element) {
                this.element = $(element);
                this.func = arguments[1];
                this.start(arguments[2]);
        },
        finish: function(position){
                this.func(this.element);
        }
});

var BrowseControl=Class.create();
BrowseControl.prototype={
        initialize: function() {
                this.bCategsOpened=false;
                this.currPage=null;
                this.bChanged=true;
                this.dirtyPages={inglist:true};
                this.ajax_ings=null;
                this.ajax_filter=null;
        },
        updateCounter: function(req) {
                var json=eval('('+req.responseText+')');
                Element.update('recipetotal',''+json.meta.total);
                $('showrecipeslink').setAttribute('href',$('navparams').getAttribute('action')+'?'+Form.serialize('navparams'));

                // Grey all items in category tree
                var all=$('page_categories').getElementsByTagName('LI');
                for (var i=0,j=all.length;i<j;++i) {
                        if (!Element.hasClassName(all[i],'catgroup'))
                                Element.addClassName(all[i],'greyed');
                }

                // Ungrey
                for (var i=0;i<json.categories.length;++i) {
                        Element.removeClassName('c'+json.categories[i],'greyed');
                }
                Element.removeClassName('status','sifting');
        },
        refreshCounter: function(bForce) {
                if (!bForce &&
                        (!$('param_categ')   || !$F('param_categ')  ) &&
                   (!$('param_categx')  || !$F('param_categx')  ) &&
                   (!$('param_nutr')       || !$F('param_nutr')    ) &&
                   (!$('param_nutrx')   || !$F('param_nutrx')   ) &&
                   (!$('param_foodid')  || !$F('param_foodid')  ) &&
                   (!$('param_foodido') || !$F('param_foodido') ) &&
                   (!$('param_foodidx') || !$F('param_foodidx') ) &&
                   (!$('param_chef')       || !$F('param_chef')    ) &&
                   (!$('param_chefx')   || !$F('param_chefx')   ) &&
                   (!$('param_bookid')  || !$F('param_bookid')  ) &&
                   (!$('param_q')                  || !$F('param_q')               )) {

                        $('recipetotal').innerHTML='';
                        $('showrecipeslink').setAttribute('href','/recipes/');
                        // Ungrey all items in category tree
                        var all=$('page_categories').getElementsByTagName('LI');
                        for (var i=0,j=all.length;i<j;++i) {
                                Element.removeClassName(all[i],'greyed');
                        }
                        return;
                }
                Element.addClassName('status','sifting');
                if (this.ajax_filter)
                        this.ajax_filter.transport.abort();
                this.ajax_filter=new Ajax.Request(
                        '/services/rest/recipes/filter',
                        {
                                method: 'get',
                                parameters: Form.serialize('navparams')+'&total_only',
                                onComplete: browseControl.updateCounter
                        }
                );
        },
        remove: function(elemid,bNoRefresh) {
                var type=elemid.substring(0,1);
                var iid=elemid.substring(1);
                switch (type) {
                        case 'c':
                                Element.remove($('c'+elemid));
                                if ((this.delnavparam('categ',iid) || this.delnavparam('categx',iid)) && !bNoRefresh )
                                        this.bChanged=true;
                                break;
                        case 'o':
                                Element.remove($('o'+elemid));
                                if ((this.delnavparam('foodido',iid) || this.delnavparam('foodidx',iid)) && !bNoRefresh)
                                        this.bChanged=true;
                                break;
                        case 'f':
                                Element.remove($('f'+elemid));
                                if ((this.delnavparam('foodid',iid) || this.delnavparam('foodidx',iid)) && !bNoRefresh)
                                        this.bChanged=true;
                                break;
                        case 'n':
                                Element.remove($('n'+elemid));
                                if ((this.delnavparam('nutr'+iid,0) || this.delnavparam('nutrx'+iid,0)) && !bNoRefresh)
                                        this.bChanged=true;
                                break;
                        case 'q':
                                if (this.delnavparam('q',0) && !bNoRefresh)
                                        this.bChanged=true;
                                break;
                }

                if (this.bChanged) {
                        this.dirtyPages['inglist']=true;
                        this.updatePages();
                }
        },
        addnavparam: function(param,value) {
                if (!$('param_'+param)) {
                        new Insertion.Bottom('navparams','<input type="hidden" name="'+param+'" id="param_'+param+'" value="" />');
                }
                if (param.substring(0,4)=='nutr') {
                        $('param_'+param).setAttribute('value',value);
                }
                else {
                        var list=new Array();
                        list=$('param_'+param).getAttribute('value').split(',');
                        for (var i=0;i<list.length;++i) {
                                if (!list[i].length)
                                        list.splice(i--,1);
                                else if (list[i]==value)
                                        return false; // Already in the list
                        }
                        list[list.length]=value;
                        $('param_'+param).setAttribute('value',list.join(','));
                }
                return true;
        },
        delnavparam: function(param,value) {
                var changed=false;
                if (param.substring(0,4)=='nutr') {
                        if ($('param_'+param)) {
                                Element.remove('param_'+param);
                                changed=true;
                        }
                }
                else if (param.substr(0,1)=='q') {
                        Element.remove('param_q');
                        Element.remove('qq');
                        changed=true;
                }
                else {
                        if (!$('param_'+param)) {
                                new Insertion.Bottom('navparams','<input type="hidden" name="'+param+'" id="param_'+param+'" value="" />');
                        }
                        var list=new Array();
												if ($('param_'+param)) {
													list=$('param_'+param).getAttribute('value').split(',');
													for (var i=0;i<list.length;++i) {
																	if (!list[i].length)
																					list.splice(i--,1);
																	else if (list[i]==value) {
																					list.splice(i--,1);
																					changed=true;
																	}
													}
												}
                        if (list.length==0)
                                Element.remove('param_'+param);
                        else
                                $('param_'+param).setAttribute('value',list.join(','));
                }
                return changed;
        },
        include: function(elemid,bRefresh) {
                if (elemid.length>1) {
                        var type=elemid.substring(0,1);
                        var iid=parseInt(elemid.substring(1));
                        // Hide the placeholder option element
                        Element.hide('incplaceholder');

                        switch (type) {
                                case 'c': // Category
                                        if (!$('cc'+iid))
                                                new Insertion.Bottom($('incc'),'<li id="cc'+iid+'"><span onClick="browseControl.remove(\'c'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'c'+iid+'\');" class="toggle" title="Click to switch boxes"></span>'+$(elemid).firstChild.nodeValue+'</li>');
                                        else
                                                $('incc').appendChild($('cc'+iid));
                                        var b1=this.delnavparam('categx',iid);
                                        var b2=this.addnavparam('categ',iid);
                                        if (b1||b2) {
                                                this.bChanged=true;
                                        }
                                        break;
                                case 'o':
                                        if (!$('oo'+iid)) {
                                                new Insertion.Bottom($('incc'),'<li id="oo'+iid+'"><span onClick="browseControl.remove(\'o'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'o'+iid+'\');" class="toggle" title="Click to switch boxes"></span>Optional Food:'+$('f'+iid).firstChild.nodeValue+'</li>');
                                        }
                                        else
                                                $('incc').appendChild($('oo'+iid));
                                        var b1=this.delnavparam('foodidx',iid);
                                        var b2=this.addnavparam('foodido',iid);
                                        if (b1||b2) {
                                                this.bChanged=true;
                                        }
                                        break;
                                case 'f':
                                        if (!$('ff'+iid)) {
                                                new Insertion.Bottom($('incc'),'<li id="ff'+iid+'"><span onClick="browseControl.remove(\'f'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'f'+iid+'\');" class="toggle" title="Click to switch boxes"></span>Food:'+$(elemid).firstChild.nodeValue+'</li>');
                                        }
                                        else
                                                $('incc').appendChild($('ff'+iid));
                                        var b1=this.delnavparam('foodidx',iid);
                                        var b2=this.addnavparam('foodid',iid);
                                        if (b1||b2) {
                                                this.bChanged=true;
                                        }
                                        break;
                                case 'n':
                                        var unit='';
                                        switch (iid) {
                                                case 6:
                                                case 19:
                                                case 17:
                                                case 23:
                                                case 3:
                                                case 15:
                                                case 16:
                                                case 2:
                                                case 25:
                                                        unit='mg';
                                                        break;
                                                case 4:
                                                        unit='';
                                                        break;
                                                case 22:
                                                case 23:
                                                case 24:
                                                case 26:
                                                        unit='mcg';
                                                        break;
                                                default:
                                                        unit='g';
                                                        break;
                                        }
                                        
                                        var html='<span onClick="browseControl.remove(\'n'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'n'+iid+'\');" class="toggle" title="Click to switch boxes"></span>'+$(elemid).getAttribute('name')+': &lt;'+$(elemid).value+unit;
                                        if (!$('nn'+iid)) {
                                        				var insertHtml='<li id="nn'+iid+'">'+html+'</li>';
                                                new Insertion.Bottom($('incc'),insertHtml);
                                        }
                                        else {
                                                Element.update('nn'+iid,html);
                                                $('incc').appendChild($('nn'+iid));
                                        }
                                        var b1=this.delnavparam('nutrx'+iid,$(elemid).value);
                                        var b2=this.addnavparam('nutr'+iid,$(elemid).value);
                                        if (b1||b2) {
                                                this.bChanged=true;
                                        }
                                        break;

                        }

                        if (bRefresh) {
                                if (this.bChanged)
                                        this.dirtyPages['inglist']=true;
                                this.updatePages();
                        }
                }
        },
        exclude: function(elemid,bRefresh) {
                if (elemid.length>1) {
                        var type=elemid.substring(0,1);
                        var iid=elemid.substring(1);
                        // Hide the placeholder option element
                        Element.hide('excplaceholder');
                        switch (type) {
                                case 'c':
                                        if (!$('cc'+iid)) {
                                                new Insertion.Bottom($('excc'),'<li id="cc'+iid+'"><span onClick="browseControl.remove(\'c'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'c'+iid+'\');" class="toggle" title="Click to switch boxes"></span>'+$(elemid).firstChild.nodeValue+'</li>');
                                        }
                                        else {
                                                $('excc').appendChild($('cc'+iid));
                                        }
                                        var b1=this.delnavparam('categ',iid);
                                        var b2=this.addnavparam('categx',iid);
                                        break;
                                case 'o':
                                        if (!$('oo'+iid)) {
                                                new Insertion.Bottom($('excc'),'<li id="oo'+iid+'"><span onClick="browseControl.remove(\'o'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'o'+iid+'\');" class="toggle" title="Click to switch boxes"></span>Optional Food:'+$('f'+iid).firstChild.nodeValue+'</li>');
                                        }
                                        else {
                                                $('excc').appendChild($('oo'+iid));
                                        }
                                        var b1=this.delnavparam('foodido',iid);
                                        var b2=this.addnavparam('foodidx',iid);
                                        break;
                                case 'f':
                                        if (!$('ff'+iid)) {
                                                new Insertion.Bottom($('excc'),'<li id="ff'+iid+'"><span onClick="browseControl.remove(\'f'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'f'+iid+'\');" class="toggle" title="Click to switch boxes"></span>Food:'+$(elemid).firstChild.nodeValue+'</li>');
                                        }
                                        else {
                                                $('excc').appendChild($('ff'+iid));
                                        }
                                        var b1=this.delnavparam('foodid',iid);
                                        var b2=this.addnavparam('foodidx',iid);
                                        break;
                                case 'n':
                                        if (!$('nn'+iid)) {
                                                new Insertion.Bottom($('excc'),'<li id="nn'+iid+'"><span onClick="browseControl.remove(\'n'+iid+'\');" class="cancelx" title="Click to remove this filter"></span><span onClick="browseControl.toggle(\'n'+iid+'\');" class="toggle" title="Click to switch boxes"></span>'+$(elemid).firstChild.nodeValue+'</li>');
                                        }
                                        else {
                                                $('excc').appendChild($('nn'+iid));
                                        }
                                        var b1=this.delnavparam('nutr'+iid,$(elemid).value);
                                        var b2=this.addnavparam('nutrx'+iid,$(elemid).value);
                                        break;
                        }

                        if (b1||b2) {
                                this.bChanged=true;
                        }

                        if (bRefresh) {
                                if (this.bChanged)
                                        this.dirtyPages['inglist']=true;
                                this.updatePages();
                        }
                }
        },
        toggle: function(elemid) {
                var type=elemid.substring(0,1);
                var parent=$(type+elemid).parentNode;
                if (parent.getAttribute('id')=='incc') {
                        this.exclude(elemid,true);
                }
                else {
                        this.include(elemid,true);
                }
        },
        clearAll: function() {
                for (var i=$('incc').childNodes.length;i;--i) {
                        if ($('incc').childNodes[i-1].tagName=='LI') {
                                this.remove($('incc').childNodes[i-1].id.substr(1),true);
                        }
                }
                for (var i=$('excc').childNodes.length;i;--i) {
                        if ($('excc').childNodes[i-1].tagName=='LI') {
                                this.remove($('excc').childNodes[i-1].id.substr(1),true);
                        }
                }
                Element.show('incplaceholder');
                Element.show('excplaceholder');
                this.bChanged=true;
                this.updatePages();
        },
        updatePages: function() {
                if (this.bChanged) {
                        this.refreshCounter();
                        this.bChanged=false;
                        if (this.currPage=='inglist' && this.dirtyPages['inglist']) {
                                ingred_query();
                                this.dirtyPages['inglist']=false;
                        }
                }
        },
        navigate: function() {
                window.location=$('navparams').getAttribute('action')+'?'+Form.serialize('navparams');
        },
        foodSearch: function(elemid) {
                Element.addClassName('ingresults','working');
                if (this.ajax_ings)
                        this.ajax_ings.transport.abort();
                this.ajax_ings=new Ajax.Request(
                        '/services/rest/recipes/ings',
                        {
                                method: 'get',
                                parameters: Form.Element.serialize(elemid)+'&'+Form.serialize('navparams')+'&ls=ir',
                                onComplete: function(req) {
                                        Element.removeClassName('ingresults','working');
                                        // Remove existing results
                                        while ($('ingresults').childNodes.length) {
                                                $('ingresults').removeChild($('ingresults').firstChild);
                                        }
                                        var json=eval('('+req.responseText+')');
                                        //var foods=req.responseXML.getElementsByTagName('food');
                                        var html=new String;
                                        for (var i=0;i<json.length;++i) {
                                                if (!i) {
                                                        if (json.length<10)
                                                                html+='<ul><li class="unexp">'+json.length+' different types of <b>'+$F(elemid)+'</b> <a href="javascript:void(0);"  onclick="javascript:addAllFoods(this);">Include all</a> <a href="javascript:void(0);" onclick="javascript:excludeAllFoods(this);">Exclude all</a> <ul>';
                                                        else
                                                                html+='<ul><li class="unexp">'+json.length+' different types of <b>'+$F(elemid)+'</b> <a href="javascript:void(0);"  onclick="javascript:addAllFoods(this);">Include all</a><br />  <a href="javascript:void(0);" onclick="javascript:excludeAllFoods(this);">Exclude all</a> <span class="smlite">(you might want to try your search again with more specific terms)</span><ul>';
                                                }
                                                html+='<li id="f'+json[i].fid+'">'+json[i].name+'</li>';
                                        }
                                        if (json.length)
                                                html+='</li></ul>';
                                        else
                                                html+='<div class="error">0 ingredients found in this set.  Check your spelling and try again.</div>';
                                        new Insertion.Bottom('ingresults',html);
                                }
                        }
                );
        },
        close: function() {
                if (Element.visible('thepane'))
                        Effect.SlideUp('thepane');
        },
        openPage: function(pagename) {

                if (Element.empty('page_categories')) {
                        Element.update($('page_categories'),
                        '<ul><div class="split"><li id="gcourse" class="catgroup"><div class="v-t"><h3>Course</h3></div>'+htmltree['course']+'</li><li id="ginglist" class="catgroup"><div class="v-t"><h3>Main Ingredient</h3></div>'+htmltree['inglist']+'</li><li id="gcuisine" class="catgroup"><div class="v-t"><h3>Cuisine</h3></div>'+htmltree['cuisine']+
                        '</li></div><div class="split"><li id="gprep" class="catgroup"><div class="v-t"><h3>Preparation</h3></div>'+htmltree['prep']+'</li><li id="goccasion" class="catgroup"><div class="v-t"><h3>Occasion</h3></div>'+htmltree['occasion']+'</li><li id="gdietary" class="catgroup"><div class="v-t"><h3>Diet</h3></div>'+htmltree['dietary']+'</li></div></ul>'+
                        '<div class="smlite" style="clear: both;"><span class="greyed">Strikethrough</span> = none in this category</div>'
                        );
                }

                if (pagename=='categories') {
                        if (!this.bCategsOpened) {
                                this.bCategsOpened=true;
                                var groups=['gcourse','ginglist','gcuisine','gprep','goccasion','gdietary'];
                                // Collapse all the top-level nodes
                                for (var gi=0;gi<groups.length;++gi) {
                                        for (var kid=$(groups[gi]).firstChild;kid;kid=kid.nextSibling) {
                                                if (kid.tagName=='UL') {
                                                        var uls=kid.getElementsByTagName('UL');
                                                        for (var i=0;i<uls.length;++i) {
                                                                Element.hide(uls[i]);
                                                        }
                                                }
                                        }
                                }
                        }
                }
                else if (pagename=='inglist') {
                        if (this.currPage && this.dirtyPages['inglist']) {
                                ingred_query();
                                this.dirtyPages['inglist']=false;
                        }
                }

                // Always put Nutrition Facts on so that elements with the nutrition data exist to populate the Show/Don't boxes
                if (Element.empty('page_nutrinfo')) {
                        Element.update('page_nutrinfo',htmlnutr);
                        // Populate form with values
                        for (var np=$('navparams').firstChild;np;np=np.nextSibling) {
                                if (np.tagName=='INPUT' && np.getAttribute('name').substr(0,4)=='nutr') {
                                        var nid=np.getAttribute('name').substr(4);
                                        var nv=np.getAttribute('value');
                                        $('n'+nid).value=nv;
                                }
                        }
                }

                if (!Element.visible('thepane')) {
                        Effect.SlideDown('thepane',{queue: {position:'end',scope:'sifterQ'}});
                        new Effect.QueueThis(
                                'thepane',
                                function () { browseControl.updatePages(); },
                                {queue: {position:'end',scope:'sifterQ'}}
                        );

                        var pages=['categories','inglist','nutrinfo'];
                        for (var pg=0;pg<pages.length;++pg) {
                                Event.observe($('page_'+pages[pg]),'click',Expando.clicknav,false);
                                Event.observe($('page_'+pages[pg]),'mouseover',Expando.mouseover,false);
                                Event.observe($('page_'+pages[pg]),'mouseout',Expando.mouseout,false);
                        }

                        if ($('param_q')) {
                                Element.hide('incplaceholder');
                                new Insertion.Bottom($('incc'),'<li id="qq"><span onClick="browseControl.remove(\'q0\');" class="cancelx"></span>Search: '+$('param_q').getAttribute('value')+'</li>');
                        }

                        if ($('inglist')) {
                                Event.observe($('inglist'),'click',Expando.clicknav,false);
                                Event.observe($('inglist'),'mouseover',Expando.mouseover,false);
                                Event.observe($('inglist'),'mouseout',Expando.mouseout,false);
                        }

                        if ($('param_categ')) {
                                var list=$('param_categ').getAttribute('value').split(',');
                                for (i=0;i<list.length;++i) {
                                        if (list[i].length)
                                                browseControl.include('c'+list[i]);
                                }
                        }

                        if ($('param_categx')) {
                                list=$('param_categx').getAttribute('value').split(',');
                                for (i=0;i<list.length;++i) {
                                        if (list[i].length)
                                                browseControl.exclude('c'+list[i]);
                                }
                        }

                        if ($('param_foodid')) {
                                list=$('param_foodid').getAttribute('value').split(',');
                                for (i=0;i<list.length;++i) {
                                        if (list[i].length)
                                                browseControl.include('f'+list[i]);
                                }
                        }

                        if ($('param_foodido')) {
                                list=$('param_foodido').getAttribute('value').split(',');
                                for (i=0;i<list.length;++i) {
                                        if (list[i].length)
                                                browseControl.include('o'+list[i]);
                                }
                        }

                        if ($('param_foodidx')) {
                                list=$('param_foodidx').getAttribute('value').split(',');
                                for (i=0;i<list.length;++i) {
                                        if (list[i].length)
                                                browseControl.exclude('f'+list[i]);
                                }
                        }

                        for (var i=0;i<26;++i) {
                                if ($('param_nutr'+i)) {
                                        browseControl.include('n'+i);
                                }
                                if ($('param_nutrx'+i)) {
                                        browseControl.exclude('n'+i);
                                }
                        }
                }

                this.currPage=pagename;
        }
}

function addAllFoods(elem) {
        for (;elem;elem=elem.nextSibling) {
                if (elem.tagName=='UL') {
                        var lis=elem.getElementsByTagName('LI');
                        for (var i=0,j=lis.length;i<j;++i) {
                                // Change id to 'o' from 'f' because we're adding many foods at once
                                browseControl.include('o'+lis[i].id.substring(1),(i+1)==j);
                        }
                        return;
                }
        }
}

function excludeAllFoods(elem) {
        for (;elem;elem=elem.nextSibling) {
                if (elem.tagName=='UL') {
                        var lis=elem.getElementsByTagName('LI');
                        for (var i=0,j=lis.length;i<j;++i) {
                                browseControl.exclude(lis[i].id,(i+1)==j);
                        }
                        return;
                }
        }
}

function depthFirst(node,e) {
        for (var i=0,j=node.childNodes.length;i<j;++i) {
                if (Position.within(node.childNodes[i],Event.pointerX(e),Event.pointerY(e))) {
                        return depthFirst(node.childNodes[i],e);
                }
        }
        return node;
}

var Expando=new Object();
Object.extend(Expando,{
        toggle: function(elem) {
                // Expand child UL
                for (var i=0;i<elem.childNodes.length;++i) {
                        if (elem.childNodes[i].tagName=='UL') {
                                if (Element.hasClassName(elem,'exp')) {
                                        Element.hide(elem.childNodes[i]);
                                        Element.addClassName(elem,'unexp');
                                        Element.removeClassName(elem,'exp');
                                }
                                else {
                                        Element.show(elem.childNodes[i]);
                                        Element.addClassName(elem,'exp');
                                        Element.removeClassName(elem,'unexp');
                                }
                                break;
                        }
                }
        },
        clicknav: function(e) {
                var tg=Event.element(e);

                if (window.event && Element.hasClassName(tg,'catgroup')) { // IE-only
                        // Fix IE bug, IE generates an event on the parent element! So for IE, we
                        // have to walk down the descendants and find out where the user really
                        // clicked. IE is junk >:-(
                        tg=depthFirst(tg,e);
                }

                if (tg.tagName=='LI' && !Element.hasClassName(tg,'catgroup') && !Element.hasClassName(tg,'greyed')) {
                        var pos=Position.cumulativeOffset(tg);
                        var x=Event.pointerX(e)-pos[0];
                        var y=Event.pointerY(e)-pos[1];

                        Expando.toggle(tg);
                        if (x>18) { // if they clicked the name, not the expander img
                                browseControl.include(Event.element(e).id,true);
                        }
                }
        },
        mouseover: function(e) {
                var elem=Event.element(e);
                if (elem.tagName=='LI' && !Element.hasClassName(elem,'catgroup') && !Element.hasClassName(elem,'greyed')) {
                        Element.addClassName(elem,'cathover');
                }
        },
        mouseout: function(e) {
                Element.removeClassName(Event.element(e),'cathover');
        }
});

function ingred_query() {
        var p=Form.serialize('navparams');
        if (!p.length)
                return;
        Element.addClassName('foodlist','working');
        new Ajax.Request('/services/rest/recipes/ings',{
                method: 'get',
                parameters: p+'&ls=ir',
                onComplete: function(req) {
                        Element.removeClassName('foodlist','working');
                        var html='<ul>';
                        var json=eval('('+req.responseText+')');

                        for (var i=0,j=json.length;i<j;++i) {
                                html+='<li id="f'+json[i].fid+'">'+json[i].name+'<span> ('+json[i].nrecs+')</span></li>';
                        }
                        html+='</ul>';
                        Element.update('foodlist',html);
                }
        });
}

function onClickAddToSifter() {
	var inputs=$('nutrinfo-form').getElementsByTagName('INPUT');
	for (var i=0;i<inputs.length;++i) {
		if (inputs[i].value.length) browseControl.include(inputs[i].id,true);
	}
	return false;
}

var htmltree={
course:'<ul><li class="unexp" id="c81" slug="appetizers">Appetizers<ul><li id="c171" slug="dips">Dips</li><li id="c194" slug="spreads">Spreads</li></ul></li><li class="unexp" id="c82" slug="beverages">Beverages<ul><li id="c195" slug="cocktails">Cocktails</li><li id="c197" slug="punch">Punch</li><li id="c196" slug="smoothies">Smoothies</li><li id="c274" slug="shakes">Shakes</li></ul></li><li class="unexp" id="c83" slug="breads">Breads<ul><li id="c201" slug="coffee-cakes">Coffee Cakes</li><li id="c35" slug="flat-shapes">Flat Shapes</li><li id="c198" slug="rolls-biscuits">Rolls/Biscuits</li><li class="unexp" id="c333" slug="yeast">Yeast<ul><li id="c36" slug="sourdough">Sourdough</li></ul></li><li class="unexp" id="c334" slug="quick-breads">Quick Breads<ul><li id="c172" slug="muffins">Muffins</li><li id="c272" slug="scones">Scones</li></ul></li></ul></li><li class="unexp" id="c84" slug="breakfast">Breakfast<ul><li id="c37" slug="granola-porridge">Granola &amp; Porridge</li><li id="c38" slug="omelets-frittatas">Omelets &amp; Frittatas</li><li id="c39" slug="pancakes-waffles">Pancakes &amp; Waffles</li></ul></li><li class="unexp" id="c91" slug="condiments-etc">Condiments, etc.<ul><li id="c289" slug="garnishes">Garnishes</li><li id="c40" slug="jams-preserves">Jams &amp; Preserves</li><li id="c41" slug="jellies">Jellies</li><li id="c207" slug="marinades-rubs">Marinades &amp; Rubs</li><li class="unexp" id="c42" slug="sauces">Sauces<ul><li id="c43" slug="chutneys">Chutneys</li><li id="c181" slug="salsas">Salsas</li><li id="c307" slug="savory-sauces">Savory Sauces</li><li id="c320" slug="sweet-sauces">Sweet Sauces</li></ul></li><li class="unexp" id="c306" slug="cooking-mixes">Cooking Mixes<ul><li id="c208" slug="herb-spice-mixes">Herb &amp; Spice Mixes</li></ul></li></ul></li><li class="unexp" id="c87" slug="desserts">Desserts<ul><li class="unexp" id="c173" slug="cakes">Cakes<ul><li id="c44" slug="cupcakes">Cupcakes</li><li id="c275" slug="fillings-frostings">Fillings &amp; Frostings</li></ul></li><li class="unexp" id="c174" slug="candy">Candy<ul><li id="c45" slug="fudge">Fudge</li></ul></li><li id="c46" slug="cobblers">Cobblers</li><li class="unexp" id="c175" slug="cookies-brownies">Cookies &amp; Brownies<ul><li class="unexp" id="c203" slug="bar-cookies">Bars<ul><li id="c204" slug="brownies">Brownies</li></ul></li><li id="c47" slug="drop-cookies">Drop</li><li id="c48" slug="hand-formed-cookies">Hand-formed</li><li id="c49" slug="rolled-cookies">Rolled</li><li id="c273" slug="biscotti">Biscotti</li></ul></li><li id="c176" slug="frozen-desserts">Frozen</li><li id="c50" slug="gelatin">Gelatin</li><li class="unexp" id="c51" slug="pies-tarts">Pies &amp; Tarts<ul><li id="c177" slug="pies">Pies</li><li id="c52" slug="tarts">Tarts</li><li id="c179" slug="crusts-pastry-dough">Crusts/Pastry Dough</li></ul></li><li id="c178" slug="puddings-mousses">Puddings &amp; Mousses</li><li id="c200" slug="cheesecakes">Cheesecakes</li></ul></li><li class="unexp" id="c88" slug="lunch-snacks">Lunch/Snacks<ul><li id="c93" slug="snacks">Snacks</li><li id="c276" slug="sandwiches">Sandwiches</li></ul></li><li class="unexp" id="c89" slug="main-dish">Main Dish<ul><li id="c210" slug="chili">Chili</li><li id="c2" slug="curries">Curries</li><li id="c180" slug="pizza">Pizza</li><li id="c53" slug="savory-pies">Savory Pies</li><li class="unexp" id="c211" slug="stews">Stews<ul><li id="c54" slug="gumbo">Gumbo</li></ul></li><li id="c258" slug="one-dish-meal">One-Dish Meal</li></ul></li><li class="unexp" id="c90" slug="salads">Salads<ul><li id="c206" slug="salad-dressings">Salad dressings</li></ul></li><li class="unexp" id="c92" slug="side-dishes">Side Dishes<ul><li id="c55" slug="stuffings-dressings">Stuffings/Dressings</li></ul></li><li class="unexp" id="c94" slug="soups">Soups<ul><li id="c56" slug="bisques-cream">Bisques/Cream</li><li id="c212" slug="chowders">Chowders</li><li id="c57" slug="clear-soups">Clear</li><li id="c213" slug="stocks">Stocks</li></ul></li></ul>',
inglist:'<ul><li class="unexp" id="c95" slug="beans">Beans<ul><li id="c303" slug="black-beans">Black Beans</li><li id="c302" slug="lentils">Lentils</li><li class="unexp" id="c301" slug="soy-tofu">Soy/Tofu<ul><li id="c328" slug="tempeh">Tempeh</li></ul></li><li id="c304" slug="chick-peas-garbanzos">Chick peas/Garbanzos</li></ul></li><li id="c191" slug="chocolate">Chocolate</li><li class="unexp" id="c97" slug="eggs-dairy">Eggs/Dairy<ul><li id="c220" slug="cheese">Cheese</li><li id="c221" slug="eggs">Eggs</li></ul></li><li class="unexp" id="c99" slug="fruit">Fruit<ul><li id="c349" slug="apples">Apples</li><li class="unexp" id="c350" slug="berries">Berries<ul><li id="c351" slug="blueberries">Blueberries</li><li id="c352" slug="grapes">Grapes</li><li id="c353" slug="raspberries">Raspberries</li><li id="c354" slug="strawberries">Strawberries</li></ul></li><li class="unexp" id="c355" slug="citrus">Citrus<ul><li id="c356" slug="lemon">Lemon</li><li id="c357" slug="lime">Lime</li><li id="c358" slug="oranges">Oranges</li></ul></li><li id="c359" slug="melons">Melons</li><li class="unexp" id="c209" slug="nuts">Nuts<ul><li id="c360" slug="coconut">Coconut</li></ul></li><li id="c361" slug="pears">Pears</li><li class="unexp" id="c362" slug="pitted-fruit">Pitted<ul><li id="c363" slug="cherries">Cherries</li><li id="c364" slug="peaches">Peaches</li><li id="c365" slug="plums">Plums</li></ul></li><li class="unexp" id="c366" slug="tropical-fruit">Tropical<ul><li id="c367" slug="bananas">Bananas</li><li id="c368" slug="mango">Mango</li><li id="c369" slug="papaya">Papaya</li><li id="c370" slug="pineapple">Pineapple</li><li id="c371" slug="kiwifruit">Kiwifruit</li></ul></li></ul></li><li class="unexp" id="c372" slug="meat">Meat<ul><li class="unexp" id="c96" slug="beef">Beef<ul><li id="c332" slug="ground-beef">Ground Beef</li><li class="unexp" id="c315" slug="beef-organ-meats">Organ meats<ul><li id="c316" slug="beef-liver">Liver</li><li id="c373" slug="kidney">Kidney</li></ul></li><li id="c374" slug="beef-ribs">Ribs</li><li id="c375" slug="roast-beef">Roast</li><li id="c376" slug="beef-sausage">Sausage</li><li id="c305" slug="veal">Veal</li><li id="c377" slug="steaks">Steaks</li></ul></li><li id="c100" slug="lamb-sheep">Lamb/Sheep</li><li class="unexp" id="c102" slug="pork">Pork<ul><li id="c6" slug="bacon">Bacon</li><li id="c378" slug="pork-chops">Chops</li><li id="c7" slug="ham">Ham</li><li id="c379" slug="pork-loins">Loins</li><li id="c380" slug="pork-ribs">Ribs</li><li id="c381" slug="pork-sausage">Sausage</li></ul></li><li class="unexp" id="c104" slug="poultry">Poultry<ul><li class="unexp" id="c223" slug="chicken">Chicken<ul><li id="c382" slug="chicken-breasts">Breasts</li><li id="c383" slug="chicken-livers">Livers</li><li id="c384" slug="chicken-thighs-legs">Thighs/Legs</li><li id="c385" slug="whole-chicken">Whole</li><li id="c386" slug="wings">Wings</li></ul></li><li class="unexp" id="c387" slug="duck">Duck<ul><li id="c388" slug="duck-breasts">Breasts</li><li id="c389" slug="whole-duck">Whole</li></ul></li><li class="unexp" id="c224" slug="turkey">Turkey<ul><li id="c391" slug="turkey-breasts">Breasts</li><li id="c392" slug="whole-turkey">Whole</li></ul></li><li id="c390" slug="goose">Goose</li></ul></li><li class="unexp" id="c310" slug="wild-game">Wild game<ul><li id="c393" slug="bear">Bear</li><li id="c311" slug="deer">Deer</li><li id="c313" slug="elk">Elk</li><li id="c394" slug="moose">Moose</li><li id="c395" slug="pheasant">Pheasant</li><li id="c312" slug="quail">Quail</li><li id="c396" slug="rabbit">Rabbit</li></ul></li></ul></li><li class="unexp" id="c106" slug="seafood">Seafood<ul><li class="unexp" id="c219" slug="fish">Fish<ul><li class="unexp" id="c409" slug="freshwater-fish">Freshwater<ul><li id="c410" slug="bass">Bass</li><li id="c411" slug="catfish">Catfish</li><li id="c415" slug="perch">Perch</li><li id="c414" slug="pickeral">Pickerel</li><li id="c412" slug="trout">Trout</li><li id="c413" slug="whitefish">Whitefish</li><li id="c422" slug="tilapia">Tilapia</li></ul></li><li class="unexp" id="c416" slug="saltwater-fish">Saltwater<ul><li id="c417" slug="cod">Cod</li><li id="c418" slug="halibut">Halibut</li><li id="c419" slug="mahi-mahi">Mahi Mahi</li><li id="c420" slug="orange-roughy">Orange Roughy</li><li id="c218" slug="salmon">Salmon</li><li id="c300" slug="tuna">Tuna</li><li id="c421" slug="sole-flounder">Sole &amp; Flounder</li></ul></li></ul></li><li class="unexp" id="c423" slug="no-shell-seafood">No Shell<ul><li id="c424" slug="octopus">Octopus</li><li id="c425" slug="squid">Squid</li></ul></li><li class="unexp" id="c426" slug="shellfish">Shellfish<ul><li id="c427" slug="clams">Clams</li><li id="c217" slug="crab">Crab</li><li id="c216" slug="lobster">Lobster</li><li id="c318" slug="mussels">Mussels</li><li id="c1" slug="oysters">Oysters</li><li id="c317" slug="scallops">Scallops</li><li id="c215" slug="shrimp">Shrimp</li><li id="c428" slug="crawfish">Crawfish</li></ul></li></ul></li><li class="unexp" id="c107" slug="vegetables">Vegetables<ul><li id="c429" slug="asparagus">Asparagus</li><li id="c430" slug="broccoli">Broccoli</li><li id="c431" slug="carrots">Carrots</li><li id="c432" slug="cauliflower">Cauliflower</li><li id="c433" slug="corn">Corn</li><li id="c434" slug="green-yellow-beans">Green/Yellow Beans</li><li class="unexp" id="c435" slug="greens">Greens<ul><li id="c439" slug="chard">Chard</li><li id="c438" slug="collards">Collards</li><li id="c437" slug="lettuces">Lettuces</li><li id="c436" slug="spinach">Spinach</li><li id="c440" slug="bok-choys">Bok Choys</li></ul></li><li id="c309" slug="mushrooms">Mushrooms</li><li id="c441" slug="onions">Onions</li><li id="c442" slug="peppers">Peppers</li><li class="unexp" id="c103" slug="potatoes">Potatoes<ul><li id="c19" slug="yams-sweet-potatoes">Yams/Sweet potatoes</li></ul></li><li id="c443" slug="squash">Squash</li><li id="c444" slug="tomatoes">Tomatoes</li></ul></li><li class="unexp" id="c397" slug="pasta-rice-grains">Pasta, Rice &amp; Grains<ul><li class="unexp" id="c101" slug="pasta">Pasta<ul><li id="c398" slug="elbow-macaroni">Elbow</li><li id="c205" slug="lasagna">Lasagna</li><li id="c399" slug="manicotti">Manicotti</li><li id="c400" slug="penne">Penne</li><li id="c401" slug="pasta-shells">Shells</li><li id="c402" slug="spaghetti">Spaghetti</li><li id="c403" slug="ravioli-tortellini">Ravioli/Tortellini</li></ul></li><li class="unexp" id="c105" slug="rice">Rice<ul><li id="c404" slug="brown-rice">Brown rice</li><li id="c406" slug="long-grain-rice">Long-grain rice</li><li id="c407" slug="short-grain-rice">Short-grain rice</li><li id="c405" slug="white-rice">White rice</li><li id="c408" slug="medium-grain-rice">Medium-grain rice</li></ul></li><li id="c214" slug="grains">Grains</li></ul></li></ul>',
cuisine:'<ul><li class="unexp" id="c108" slug="african">African<ul><li class="unexp" id="c58" slug="central-western-africa">Central/Western<ul><li id="c59" slug="angolan">Angolan</li><li id="c60" slug="congolese">Congolese</li><li id="c61" slug="nigerian">Nigerian</li></ul></li><li class="unexp" id="c62" slug="northern-african">Northern<ul><li id="c63" slug="libyan">Libyan</li><li id="c186" slug="moroccan">Moroccan</li><li id="c234" slug="egyptian">Egyptian</li></ul></li><li class="unexp" id="c64" slug="southern-africa">Southern<ul><li id="c65" slug="namibian">Namibian</li><li id="c66" slug="south-african">South African</li></ul></li><li class="unexp" id="c67" slug="sub-saharan">Sub-Saharan<ul><li id="c68" slug="somalian">Somalian</li><li id="c69" slug="sudanese">Sudanese</li><li id="c235" slug="ethiopian">Ethiopian</li></ul></li></ul></li><li class="unexp" id="c110" slug="asian">Asian<ul><li class="unexp" id="c70" slug="eastern-asian">Eastern<ul><li class="unexp" id="c116" slug="chinese">Chinese<ul><li id="c31" slug="beijing">Beijing</li><li id="c28" slug="cantonese">Cantonese</li><li id="c27" slug="hunan">Hunan</li><li id="c26" slug="szechuan">Szechuan</li><li id="c34" slug="mongolian">Mongolian</li></ul></li><li id="c123" slug="japanese">Japanese</li><li id="c125" slug="korean">Korean</li></ul></li><li class="unexp" id="c76" slug="southeastern-asia">Southeastern<ul><li id="c77" slug="cambodian">Cambodian</li><li id="c239" slug="filipino">Filipino</li><li id="c78" slug="laotian">Laotian</li><li id="c79" slug="malaysian">Malaysian</li><li id="c135" slug="thai">Thai</li><li id="c136" slug="vietnamese">Vietnamese</li><li id="c241" slug="indonesian">Indonesian</li></ul></li><li class="unexp" id="c80" slug="southern-asia">Southern<ul><li id="c122" slug="indian">Indian</li><li id="c98" slug="nepalese">Nepalese</li><li id="c142" slug="pakistani">Pakistani</li></ul></li><li class="unexp" id="c128" slug="middle-eastern">S.W. (Middle Eastern)<ul><li id="c71" slug="georgian">Georgian</li><li id="c129" slug="iranian-persian">Iranian/Persian</li><li id="c72" slug="iraqi">Iraqi</li><li id="c73" slug="jewish-sephardi">Jewish (Sephardi)</li><li id="c236" slug="lebanese">Lebanese</li><li id="c74" slug="palestinian">Palestinian</li><li id="c75" slug="saudi-arabian">Saudi Arabian</li><li id="c238" slug="turkish">Turkish</li></ul></li></ul></li><li class="unexp" id="c143" slug="european">European<ul><li class="unexp" id="c117" slug="eastern-european">Eastern<ul><li id="c121" slug="hungarian">Hungarian</li><li id="c192" slug="polish">Polish</li><li id="c189" slug="russian">Russian</li><li id="c243" slug="czech">Czech</li></ul></li><li id="c124" slug="jewish-ashkenazi">Jewish (Ashkenazi)</li><li class="unexp" id="c126" slug="mediterranean">Southern (Mediterranean)<ul><li id="c120" slug="greek">Greek</li><li id="c183" slug="italian">Italian</li><li id="c133" slug="spanish">Spanish</li><li id="c190" slug="portuguese">Portuguese</li></ul></li><li class="unexp" id="c22" slug="western-european">Western<ul><li id="c149" slug="austrian">Austrian</li><li id="c242" slug="belgian">Belgian</li><li id="c244" slug="dutch">Dutch</li><li id="c184" slug="english">English</li><li id="c118" slug="french">French</li><li id="c119" slug="german">German</li><li id="c185" slug="irish">Irish</li><li id="c193" slug="scottish">Scottish</li><li id="c187" slug="swiss">Swiss</li><li id="c266" slug="welsh">Welsh</li></ul></li><li class="unexp" id="c130" slug="scandinavian">Scandinavian<ul><li id="c4" slug="danish">Danish</li><li id="c245" slug="finnish">Finnish</li><li id="c146" slug="icelandic">Icelandic</li><li id="c188" slug="swedish">Swedish</li><li id="c246" slug="norwegian">Norwegian</li></ul></li></ul></li><li class="unexp" id="c21" slug="north-american">North American<ul><li class="unexp" id="c114" slug="canadian">Canadian<ul><li id="c325" slug="atlantic-canadian">Atlantic</li><li id="c321" slug="british-columbian">British Columbian</li><li id="c323" slug="ontario">Ontario</li><li id="c322" slug="prairies">Prairies</li><li id="c324" slug="quebec">Quebec</li><li id="c326" slug="northern-canadian">Northern</li></ul></li><li class="unexp" id="c150" slug="central-american">Central American<ul><li class="unexp" id="c115" slug="caribbean">Caribbean<ul><li id="c20" slug="puerto-rican">Puerto Rican</li><li id="c233" slug="cuban">Cuban</li></ul></li><li id="c329" slug="costa-rican">Costa Rican</li><li id="c330" slug="guatemalan">Guatemalan</li><li id="c331" slug="honduran">Honduran</li></ul></li><li class="unexp" id="c127" slug="mexican">Mexican<ul><li id="c237" slug="baja">Baja</li><li id="c247" slug="central-mexico">Central</li><li id="c248" slug="gulf-coast-mexico">Gulf Coast</li><li id="c249" slug="oaxacan">Oaxacan</li><li id="c250" slug="pacific-mexico">Pacific</li></ul></li><li class="unexp" id="c109" slug="united-states">United States<ul><li id="c291" slug="midwestern">Midwestern</li><li class="unexp" id="c319" slug="northeastern-united-states">Northeastern<ul><li id="c292" slug="amish-mennonite">Amish/Mennonite</li><li id="c327" slug="pennsylvania-dutch">Pennsylvania Dutch</li></ul></li><li class="unexp" id="c131" slug="southern-united-states">Southern<ul><li id="c113" slug="cajun">Cajun</li><li id="c232" slug="creole">Creole</li></ul></li><li class="unexp" id="c132" slug="southwestern-united-states">Southwestern<ul><li id="c134" slug="tex-mex">Tex-Mex</li></ul></li><li class="unexp" id="c335" slug="western-united-states">Western<ul><li id="c283" slug="californian">Californian</li><li id="c284" slug="pacific-northwest">Pacific Northwest</li></ul></li></ul></li><li id="c270" slug="native-american">Native American</li></ul></li><li class="unexp" id="c23" slug="oceania">Oceania<ul><li id="c111" slug="australian">Australian</li><li id="c240" slug="hawaiian">Hawaiian</li><li class="unexp" id="c336" slug="micro-melanesia">Micro/Melanesia<ul><li id="c337" slug="guam-chamorro">Guam/Chamorro</li></ul></li><li id="c338" slug="new-zealand">New Zealand</li><li id="c339" slug="polynesian">Polynesian</li></ul></li><li class="unexp" id="c251" slug="south-american">South American<ul><li id="c267" slug="argentinean">Argentinean</li><li id="c112" slug="brazilian">Brazilian</li><li id="c340" slug="chilean">Chilean</li><li id="c341" slug="colombian">Colombian</li><li id="c342" slug="ecuadorean">Ecuadorean</li><li id="c343" slug="peruvian">Peruvian</li><li id="c344" slug="venezuelan">Venezuelan</li></ul></li></ul>',
prep:'<ul><li class="unexp" id="c460" slug="equipment">Equipment<ul><li id="c225" slug="crockpot">Crock-Pot</li><li id="c227" slug="freezer">Freezer</li><li id="c144" slug="microwave">Microwave</li><li class="unexp" id="c461" slug="outdoor">Outdoor<ul><li id="c139" slug="barbecue">Barbecue</li><li id="c230" slug="smoker">Smoker</li></ul></li><li class="unexp" id="c138" slug="oven">Oven<ul><li id="c86" slug="casseroles">Casseroles</li><li id="c148" slug="roast">Roast</li><li id="c222" slug="broil-grill">Broil/Grill</li></ul></li><li id="c147" slug="refrigerator">Refrigerator</li><li class="unexp" id="c231" slug="stove-top">Stove Top<ul><li id="c229" slug="pressure-cooker">Pressure Cooker</li></ul></li><li class="unexp" id="c462" slug="small-appliance">Small Appliance<ul><li id="c140" slug="bread-machine">Bread Machine</li><li id="c463" slug="dehydrator">Dehydrator</li><li id="c226" slug="food-processor-blender">Food Processor/Blender</li><li id="c464" slug="mixer">Mixer</li></ul></li></ul></li><li id="c299" slug="inexpensive">Inexpensive</li><li class="unexp" id="c465" slug="number-of-servings">Number of Servings<ul><li id="c25" slug="for-1-or-2">For 1 or 2</li><li id="c24" slug="for-large-groups">For Large Groups</li><li id="c285" slug="oamc-freezer-make-ahead">OAMC/Freezer/Make Ahead</li></ul></li><li class="unexp" id="c466" slug="presentation">Presentation<ul><li id="c158" slug="finger-food">Finger Food</li><li id="c467" slug="served-cold">Served Cold</li><li id="c468" slug="served-hot">Served Hot</li></ul></li><li class="unexp" id="c141" slug="simple">Simple<ul><li id="c32" slug="5-or-less-ingredients">5 or Less Ingredients</li><li id="c153" slug="beginner-cook">Beginner Cook</li><li id="c469" slug="3-or-less-steps">3 or Less Steps</li></ul></li><li class="unexp" id="c12" slug="time-to-make">Time to Make<ul><li id="c11" slug="less-than-15-mins">&lt; 15 mins</li><li id="c10" slug="less-than-30-mins">&lt; 30 mins</li><li id="c9" slug="less-than-60-mins">&lt; 60 mins</li><li id="c137" slug="more-than-1-day">&gt; 1 day</li><li id="c475" slug="less-than-4-hours">&lt; 4 hours</li></ul></li><li class="unexp" id="c470" slug="technique">Technique<ul><li class="unexp" id="c85" slug="canning">Canning<ul><li id="c473" slug="pressure-canning">Pressure</li><li id="c472" slug="water-bath">Water Bath</li><li id="c474" slug="unprocessed-freezer">Unprocessed/Freezer</li></ul></li><li id="c228" slug="deep-fry">Deep Fry</li><li id="c145" slug="no-cook">No Cook</li><li id="c151" slug="steam">Steam</li><li id="c281" slug="stir-fry">Stir-fry</li><li id="c471" slug="brewing">Brewing</li></ul></li></ul>',
occasion:'<ul><li id="c445" slug="brunch">Brunch</li><li id="c156" slug="dinner-party">Dinner Party</li><li id="c253" slug="gifts">Gifts</li><li class="unexp" id="c160" slug="holiday-event">Holiday/Event<ul><li id="c159" slug="historical-traditional">Historical/Traditional</li><li class="unexp" id="c446" slug="non-religious">Non-Religious<ul><li id="c269" slug="halloween">Halloween</li><li id="c293" slug="independence-day">Independence Day</li><li id="c448" slug="kwanzaa">Kwanzaa</li><li id="c261" slug="new-years">New Years</li><li id="c297" slug="st-patricks-day">St. Patricks Day</li><li id="c447" slug="superbowl">Superbowl</li><li id="c262" slug="thanksgiving">Thanksgiving</li><li id="c298" slug="valentines-day">Valentines Day</li><li id="c449" slug="mardi-gras-carnival">Mardi Gras/Carnival</li></ul></li><li id="c288" slug="wedding">Wedding</li><li class="unexp" id="c450" slug="religious">Religious<ul><li id="c259" slug="christmas">Christmas</li><li id="c182" slug="easter">Easter</li><li id="c260" slug="hanukkah">Hanukkah</li><li id="c294" slug="passover">Passover</li><li id="c295" slug="ramadan">Ramadan</li><li id="c296" slug="rosh-hashana">Rosh Hashana</li></ul></li></ul></li><li class="unexp" id="c451" slug="novelty">Novelty<ul><li id="c255" slug="bizarre">Bizarre</li><li id="c3" slug="celebrity">Celebrity</li><li class="unexp" id="c18" slug="non-food-products">Non-Food Products<ul><li id="c452" slug="bath-beauty">Bath/Beauty</li><li id="c453" slug="homeopathy-remedies">Homeopathy/Remedies</li><li id="c454" slug="household-cleansers">Household/Cleansers</li></ul></li><li id="c256" slug="pet-food">Pet Food</li><li id="c257" slug="copycat">Copycat</li></ul></li><li class="unexp" id="c271" slug="seasonal">Seasonal<ul><li id="c157" slug="fall">Fall</li><li id="c166" slug="spring">Spring</li><li id="c167" slug="summer">Summer</li><li id="c170" slug="winter">Winter</li></ul></li><li class="unexp" id="c455" slug="taste-mood">Taste/Mood<ul><li id="c282" slug="comfort-food">Comfort Food</li><li id="c165" slug="romantic">Romantic</li><li id="c456" slug="savory">Savory</li><li id="c254" slug="spicy">Spicy</li><li id="c457" slug="sweet">Sweet</li></ul></li><li class="unexp" id="c458" slug="to-go">To Go...<ul><li id="c290" slug="brown-bag">Brown Bag</li><li id="c164" slug="picnic">Picnic</li><li id="c154" slug="potluck">Potluck</li><li id="c459" slug="camping">Camping</li></ul></li></ul>',
dietary:'<ul><li id="c155" slug="diabetic">Diabetic</li><li class="unexp" id="c345" slug="free-of-something">Free of...<ul><li id="c264" slug="gluten-free">Gluten-free</li><li id="c5" slug="lactose">Lactose-free</li><li id="c308" slug="egg-free">Egg-free</li></ul></li><li class="unexp" id="c346" slug="high-in-something">High in...<ul><li id="c279" slug="high-calcium">High Calcium</li><li id="c280" slug="high-fiber">High Fiber</li><li id="c286" slug="high-protein">High Protein</li></ul></li><li class="unexp" id="c161" slug="kid-pleaser">Kid Pleaser<ul><li id="c268" slug="infant-baby">Infant/Baby</li><li id="c347" slug="toddlers">Toddlers</li></ul></li><li id="c162" slug="kosher">Kosher</li><li class="unexp" id="c30" slug="lighter-fare">Lighter Fare<ul><li id="c314" slug="healthy">Healthy</li></ul></li><li class="unexp" id="c169" slug="vegetarian">Vegetarian<ul><li id="c168" slug="vegan">Vegan</li></ul></li><li class="unexp" id="c348" slug="low-in-something">Low in...<ul><li id="c278" slug="low-calorie">Low Calorie</li><li id="c265" slug="low-cholesterol">Low Cholesterol</li><li id="c163" slug="low-fat">Low Fat</li><li id="c29" slug="low-protein">Low Protein</li><li id="c277" slug="low-saturated-fat">Low Sat. Fat</li><li id="c263" slug="low-sodium">Low Sodium</li><li class="unexp" id="c287" slug="reduced-carbs">Reduced Carbs<ul><li id="c33" slug="very-low-carbs">Very Low Carbs</li></ul></li></ul></li></ul>'};


var htmlnutr='\
                <div class="v-t"><p>Enter your nutritional criteria and click Add to Sifter.</p>\</div>\
                <form id="nutrinfo-form">\
                        <div class="nfacts nfactsbord">\
                                <h3>Nutrition Facts</h3>\
                                <div class="nf ctype1 clrfix">\
                                        <span>Calories</span> <input id="n4" name="Calories" value="" type="text"> <label>or less</label>\
                                </div>\
                                <div class="nf ctype2 clrfix">\
                                        <span>Amount Per Serving</span>\
                                </div>\
                                <div class="nf ctype3 clrfix">\
                                        <span>Total Fat</span> <input id="n7" name="Fat" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype3 clrfix">\
                                        <span>Saturated Fat</span> <input id="n10" name="Saturated Fat" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype3 clrfix">\
                                        <span>Polyunsat. Fat</span> <input id="n9" name="Polyunsaturated Fat" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype3 clrfix">\
                                        <span>Monounsat. Fat</span> <input id="n8" name="Monounsaturated Fat" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype3 clrfix">\
                                        <span>Trans Fat</span> <input id="n11" name="Trans Fat" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype2 clrfix">\
                                        <span>Cholesterol</span> <input id="n6" name="Cholesterol" value="" type="text"> <label>mg or less</label>\
                                </div>\
                                <div class="nf ctype2 clrfix">\
                                        <span>Sodium</span> <input id="n19" name="Sodium" value="" type="text"> <label>mg or less</label>\
                                </div>\
                                <div class="nf ctype2 clrfix">\
                                        <span>Potassium</span> <input id="n17" name="Potassium" value="" type="text"> <label>mg or less</label>\
                                </div>\
                                <div class="nf ctype2 clrfix">\
                                        <span>Total Carbohydrates</span> <input id="n5" name="Carbohydrates" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype3 clrfix">\
                                        <span>Dietary Fiber</span> <input id="n12" name="Fiber" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype3 clrfix">\
                                        <span>Sugars</span> <input id="n21" name="Sugars" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype1 clrfix">\
                                        <span>Protein</span> <input id="n18" name="Protein" value="" type="text"> <label>g or less</label>\
                                </div>\
                                <div class="nf ctype4 clrfix">\
                                        <ul>\
                                                <li class="nf-lt">\
                                                        <span>Vitamin A</span> <input id="n22" name="Vitamin A" value="" type="text"> <label>mg</label>\
                                                </li>\
                                                <li class="nf-rt">\
                                                        <span>Vitamin C</span> <input id="n25" name="Vitamin C" value="" type="text"> <label>mg</label>\
                                                </li>\
                                        </ul>\
                                        <ul>\
                                                <li class="nf-lt">\
                                                        <span>Vitamin B6</span> <input id="n23" name="Vitamin B" value="" type="text"> <label>mg</label>\
                                                </li>\
                                                <li class="nf-rt">\
                                                        <span>Calcium</span> <input id="n3" name="Calcium" value="" type="text"> <label>mg</label>\
                                                </li>\
                                        </ul>\
                                        <ul>\
                                                <li class="nf-lt">\
                                                        <span>Vitamin B12</span> <input id="n24" name="Vitamin B12" value="" type="text"> <label>mg</label>\
                                                </li>\
                                                <li class="nf-rt">\
                                                        <span>Iron</span> <input id="n15" name="Iron" value="" type="text"> <label>mg</label>\
                                                </li>\
                                        </ul>\
                                        <ul>\
                                                <li class="nf-lt">\
                                                        <span>Vitamin E</span> <input id="n26" name="Vitamin E" value="" type="text"> <label>mg</label>\
                                                </li>\
                                                <li class="nf-rt">\
                                                        <span>Magnesium</span> <input id="n16" name="Magnesium" value="" type="text"> <label>mg</label>\
                                                </li>\
                                        </ul>\
                                </div>\
                                <div class="nf ctype5 clrfix">\
                                        <ul>\
                                                <li class="nf-lt">\
                                                        <span>Alcohol</span> <input id="n1" name="Alcohol" value="" type="text"> <label>g</label>\
                                                </li>\
                                                <li class="nf-rt">\
                                                        <span>Caffeine</span> <input id="n2" name="Caffeine" value="" type="text"> <label>mg</label>\
                                                </li>\
                                        </ul>\
                                </div>\
                        </div>\
                </form>\
                <button id="ats" type="button" onclick="return onClickAddToSifter();" style="margin-top: 50px">Add to Sifter</button>';

/*
 * end browsectl.js
 *********/





/***************
 * scripps.js
 * this file merged into global.js by jay hung on 2/3/2008
 */

// This is a sample for Eli

var menu_timeout = 300; //timeout for top drop-downs in miliseconds
var slide_interval = 15000; //switcher module slide interval in miliseconds
var switcher_time = 0; //switcher interval variable

var brb_layers = ['course','ingredient','cuisine','diet','occasion','preparation']; //main browse-by layers

// the subcategory arrays should/will probably be drawn out dynamically on the php side, and thus may not live here...
//sub-categorues for browse-by layers
var brb_sublayers = ['appetizers','beverages','breads','breakfast','condiments','desserts','lunch-snacks','main-dish','salads','side-dishes',
                                                  'soups',//Course
                                                  'beef','chicken','shrimp','pasta','squash','cheese','fish',//Ingredient
                                                  'african','asian','european','north-american','oceania','south-american',//Cuisine
'free-of-something','high-in-something','kid-pleaser','kosher','lighter-fare','vegetarian','low-in-something',//Diet
                                                  'brunch','dinner-party','gifts','historical','novelty','seasonal','to-go',//Occasion
                                                  'equipment','number-of-servings','presentation','simple','time-to-make','technique'];//Preperation

// code for hover panels/menus
var navHover = {
        timer:0,
        delayBeforeClose: 250,
        links: [], // array to hold IDs of all elements that trigger hover-panels
        add:function(linkId,hoverId){
                navHover.links.push(linkId); // add to array
                $(linkId).hoverContent = $(hoverId); // tell link what its hover content is
                $(linkId).observe("mouseover", navHover.showHoverContent);
                $(linkId).observe("mouseout",
                        function(event){
                                clearTimeout(navHover.timer);
                                navHover.timer = setTimeout("navHover.hideAllHoverPanels()",navHover.delayBeforeClose);
                        }
                );

                Event.observe(hoverId, 'mousemove', function(event){ Event.stop(event); });
                Event.observe(hoverId, 'mouseover', function(event){
                        clearTimeout(navHover.timer);
                        document.observe("mousemove", navHover.hideAllHoverPanelsAfterDelay);
                });
        },
        showHoverContent:function(event){
                clearTimeout(navHover.timer);
                navHover.hideAllHoverPanels();
                event.element().hoverContent.style.display = "block";
        },
        hideHoverContent:function(){
                this.style.display = "none";
        },
        hideAllHoverPanels:function(){
                document.stopObserving("mousemove", navHover.hideAllHoverPanelsAfterDelay);
                for(var i=0; i < navHover.links.length; i++){
                        $(navHover.links[i]).hoverContent.style.display = "none";
                }
        },
        hideAllHoverPanelsAfterDelay:function(){
                clearTimeout(navHover.timer);
                navHover.timer = setTimeout("navHover.hideAllHoverPanels()",navHover.delayBeforeClose);
        }
}



//page load setup

Event.observe(window, "load", function(){
        // browse recipes by setup
        if($(brb_layers[0])){
                brb(brb_layers[0]);//default view
                for (var i = 0; i < brb_layers.length; i++){
                        ael('a'+brb_layers[i], "mouseover", "brb('"+brb_layers[i]+"')");
                }
        }

        if($(brb_sublayers[0])){
                for(var i = 0; i < brb_sublayers.length; i++){
                        ael(brb_sublayers[i],"mouseover","browse_by('"+brb_sublayers[i]+"')");
                }
        }

        //switcher module
        if($('v1')){
                for(var i = 1; i < 5; i++){
                        ael("slide_"+i,"click","clickSlide('"+i+"')");
                }
                ael("play_pause","click","playPauseSlides()");
                switcher_time = window.setInterval('runSlides()', slide_interval);
        }

        //slide module
        if($('s1')){
                for(var i = 1; i < 5; i++){
                        ael("slide_"+i,"click","switch_slide('"+i+"')");
                }
        }
});
// end page load setup

//general functions
function AddEventListener(element, eventType, handler, capture){
        if (element.addEventListener){
                element.addEventListener(eventType, handler, capture);
        }else if (element.attachEvent){
                element.attachEvent("on" + eventType, handler);
        }
}

function ael(elayer, mevent, efunction){
        eval('AddEventListener(document.getElementById("' + elayer + '"), "' + mevent + '", function(e){' + efunction + ';if (e.preventDefault){ e.preventDefault();}else{ e.returnResult = false;}if (e.stopPropagation){ e.stopPropagation();}else{ e.cancelBubble = true;}}, false);');
}

function gup( name ){
  name = name.replace(/[[]/,"\\[").replace(/[]]/,"\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

//module specific functions
//browse recipes by...
function brb(layer){
        for(var i = 0; i < brb_layers.length; i++){
                (layer == brb_layers[i])?Element.setStyle(brb_layers[i], {visibility: 'visible'}):Element.setStyle(brb_layers[i], {visibility: 'hidden'});
                (layer == brb_layers[i])?Element.addClassName('a'+brb_layers[i], 'on'):Element.removeClassName('a'+brb_layers[i], 'on');
        }
}

function browse_by(cat) {
	// the argument 'cat' is a value from the array 'brb_sublayers';
	// the value is the same as the id of the element firing the event

	// this loop turns 'on' the currently selected sub-cat control,
	// and turns 'off' all others:
	for(var i = 0; i < brb_sublayers.length; i++){
	        (cat == brb_sublayers[i])?Element.addClassName(brb_sublayers[i], 'on'):Element.removeClassName(brb_sublayers[i], 'on');
	}

	// form the url of the file to fetch:
	var dataUrl = "/static/browse_recipes_by/" + $(cat).parentNode.parentNode.id + "_" + cat +".html";
	var ajax = new Ajax.Updater('c3', dataUrl,{method:'get'});
}


//slider module
function switch_slide(num){
        for(var i = 1; i < 5; i++){
                Element.setStyle('s' + i, {display: (num == i)?'block':'none'});
                (num == i)?Element.addClassName('slide_' + i, 'on'):Element.removeClassName('slide_' + i, 'on');
        }
        $('fmtit').innerHTML = $('slide_' + num).title;
}


//switcher module
var current_slide = 2;
var play_mode = true;
function switch_module(num){
        for(var i = 1; i < 5; i++){
                Element.setStyle('v' + i, {display: (num == i)?'block':'none'});
                (num == i)?Element.addClassName('slide_' + i, 'on'):Element.removeClassName('slide_' + i, 'on');
        }
        current_slide = num;
}
function clickSlide(num){
        play_mode = false;
        switch_module(num);
        Element.setStyle('play_pause', {backgroundImage: 'url(http://img.recipezaar.com/images/2008/switcher_btn_play.gif)'});
}
function runSlides(){
        if(play_mode){
                switch_module(current_slide);
                current_slide++;
                if(current_slide > 4)current_slide = 1;
        }
}
function playPauseSlides(){
        play_mode = !play_mode;
        Element.setStyle('play_pause', {backgroundImage: 'url(http://img.recipezaar.com/images/2008/switcher_btn_'+(play_mode?'pause':'play')+'.gif)'});
        if(play_mode){
                switcher_time = window.setInterval('runSlides()', slide_interval);
        }else{
                window.clearInterval(switcher_time);
                switcher_time = null;
        }
}


//small carousel

var lock = false;

function scarou(move){
        if(!lock){
                lock = true;
                var eff = 'appear';
                var id_current = total_imgs = count = new_id = 1;

                while($('rotate' + count)){
                        total_imgs = count;
                        if($('rotate' + count).style.display != 'none'){
                                id_current = count;
                                Effect.toggle('rotate' + count, eff, { duration: 0 });
                                new_id = count + move;
                        }
                        count ++;
                }
                new_id = (new_id > total_imgs)? 1: (new_id < 1)? total_imgs: new_id;

                $('curr_pic').innerHTML = new_id + ' of ' + total_imgs + ' photos';
                $('ca_aut').innerHTML = 'Photo by: <a href="#?id='+$('rotate' + new_id).getAttribute('uid')+'" class="aut">'+$('rotate' + new_id).getAttribute('name')+'</a>';
                Effect.toggle('rotate' + new_id, eff, { duration: 0.5 });
                lock = false;
        }

}

var x_position = 0;

function bcarou(move){
	var total_imgs = $("bcarou_ul").childElements().length;
	var max_right = Math.floor(total_imgs/5) * move;
	if(max_right > 0){
		max_right = max_right * -1
	}
	var new_x =  x_position + move;
	if(
		(new_x <= 0) &&
		(new_x >= max_right) &&
		!((total_imgs % 5 == 0) && (new_x == max_right))
	){
		new Effect.MoveBy('bcarou_ul', 0, move);
		x_position += move;
	}
}

function bc_sel(position,fullSizeAllowed){
	var total_imgs = $("bcarou_ul").childElements().length;

	for(var p=1; p <= total_imgs; p++){
		// turn 'off' thumbnails:
		Element.removeClassName($('thumbnail_' + p), 'on');
		// hide other large images:
		if(fullSizeAllowed){
			$('main_image' + p).style.display = 'none';
		}
	}
	Element.addClassName($('thumbnail_' + position), 'on');
	if(fullSizeAllowed){
		// these two lines replicate the link from the thumbnail
		$('pic_aut').innerHTML = $('aut_' + position).innerHTML;
		$('pic_aut').href = $('aut_' + position).href;
		$('pic_date').innerHTML = $('post_' + position).innerHTML;
		$('pic_avatar').src = $('avatar_' + position).src;
		Element.appear($('main_image' + position));
	}
}

/* gallery edit functions */
function bc_mkdef(rid,picid) {
	var ajax_mkdef=new Ajax.Request(
     '/services/rest/recipes/photo_mod', {
      method: 'post',
      parameters: 'rid='+rid+'&default='+picid,
			onSuccess: function(req) {
				var j=req.responseJSON;
				if(j.recipe.photoDefault) {
					var src_picid=j.recipe.photoDefault.old;
					var dst_picid=j.recipe.photoDefault.updated;
					var e='mkdef'+src_picid;
					$(e).innerHTML='<a href="javascript:bc_mkdef(\''+j.recipe.rid+'\',\''+dst_picid+'\',\''+src_picid+'\')">make default</a>';
					var f='mkdef'+dst_picid;
					$(f).innerHTML='default';
				}
			}
   }
 );
}

function bc_rmpic(rid,picid) {
	var r=confirm('Are you sure you want to permanently delete this photo?');
	if(r == true) {
  	var ajax_rmpic=new Ajax.Request(
     '/services/rest/recipes/photo_rm', {
      method: 'post',
      parameters: 'rid='+rid+'&picid='+picid,
      onSuccess: function(req) {
					var j=req.responseJSON;
					if(j.recipe.photoDefault) {
						var src_picid=j.recipe.photoDefault.old;
						var dst_picid=j.recipe.photoDefault.updated;
						if(j.recipe.photosRemaining > 1) {
	            var e='mkdef'+src_picid;
  	          $(e).innerHTML='<a href="javascript:bc_mkdef(\''+j.recipe.id+'\',\''+dst_picid+'\',\''+src_picid+'\')">make default</a>'
						}
            var f='mkdef'+dst_picid;
            $(f).innerHTML='default';
					}
					var g='thumbnail_'+picid;
					Effect.DropOut(g);
				}
      }
    );
	}
}

/* ADDED FOR ADMIN SWITCHER TOOL */
function admin_switcher_show(id)
{
	var items = document.getElementsByName(id);
	var x;
	for(x in items)
	{
		if(items[x])
		{
    		items[x].className = (items[x].className=='admin_hide') ? 'admin_unhide' : 'admin_hide';
  		}
	}
}
/* ADDED FOR ADMIN SWITCHER TOOL */

/* ADDED FOR SPONSORSHIP SEARCH RESULTS */

function removeDuplicateRecipe(id)
{
	Element.remove(id);
}
/* ADDED FOR SPONSORSHIP SEARCH RESULTS */

/* ADDED FOR SHOPPING LIST */
function removeShoppingListIngredient(elementNumber, mid)
{
	// Declare variables
	var ingredientNumber = elementNumber + 1;
	var ingredientNodeName = "ingnum" + elementNumber;
	var itemToBuyNumber = "itb" + elementNumber;
	var itemToBuyNumberOr = "itb" + elementNumber + "or";
	var lettersNumber = "let" + elementNumber;
	var removeNumber = "rem" + elementNumber;
	var tableRowNumber = "tr" + elementNumber;
	var tableRowNumberOr = "tr" + elementNumber + "or";
	var elementHtml = $(removeNumber).innerHTML;
	// Perform regexp to find innerHTML string
	var pattern = new RegExp("Remove");
	var patternTest = pattern.test(elementHtml);

	var luid=undefined;
	var labelElem=$(itemToBuyNumber).getElementsByTagName('label');
	if($(labelElem[0])) luid=$(labelElem[0]).htmlFor;

	var elementHtmlRemove = '<span style="cursor:pointer;cursor:hand;" onclick="removeShoppingListIngredient(' + elementNumber + ', ' + mid + ');">Remove</span>';
	var elementHtmlAdd = '<span style="cursor:pointer;cursor:hand;" onclick="removeShoppingListIngredient(' + elementNumber + ', ' + mid + ');">Add</span>';

	// Change DOM based on innerHTML text value
	if (patternTest == true)
	{
		$(itemToBuyNumber).removeClassName('itemtobuy');
		$(itemToBuyNumber).addClassName('itemtobuylt');
		$(lettersNumber).removeClassName('letters');
		$(lettersNumber).addClassName('letterslt');
		$(removeNumber).innerHTML = elementHtmlAdd;
		$(tableRowNumber).removeClassName('normal');
		$(tableRowNumber).addClassName('remove');
		if($(itemToBuyNumberOr)) $(itemToBuyNumberOr).removeClassName('itemtobuy');
		if($(itemToBuyNumberOr)) $(itemToBuyNumberOr).addClassName('itemtobuylt');
		if($(tableRowNumberOr)) $(tableRowNumberOr).removeClassName('normal');
		if($(tableRowNumberOr)) $(tableRowNumberOr).addClassName('remove');
		//alert("First Loop || " + patternTest);

		var luidPattern = /^\d+-\d+$/;
		if(luidPattern.test(luid) == true) {
			var ajax_shlist=new Ajax.Request(
	      '/services/rest/myshopcart/cingset', {
	        method: 'post',
	        parameters: 'mid='+mid+'&cluid='+luid+'&off=1'
	      }
	    );
	  } else {
			var ajax_shlist=new Ajax.Request(
	      '/services/rest/myshopcart/cingset', {
	        method: 'post',
	        parameters: 'mid='+mid+'&luid='+luid+'&off=1'
	      }
	    );
	  }
	}
	else
	{
		$(itemToBuyNumber).removeClassName('itemtobuylt');
		$(itemToBuyNumber).addClassName('itemtobuy');
		$(lettersNumber).removeClassName('letterslt');
		$(lettersNumber).addClassName('letters');
		$(removeNumber).innerHTML = elementHtmlRemove;
		$(tableRowNumber).removeClassName('remove');
		$(tableRowNumber).addClassName('normal');
		if($(itemToBuyNumberOr)) $(itemToBuyNumberOr).removeClassName('itemtobuylt');
		if($(itemToBuyNumberOr)) $(itemToBuyNumberOr).addClassName('itemtobuy');
		if($(tableRowNumberOr)) $(tableRowNumberOr).removeClassName('remove');
		if($(tableRowNumberOr)) $(tableRowNumberOr).addClassName('normal');
		//alert("Second Loop || " + patternTest);

		var luidPattern = /^\d+-\d+$/;
		if(luidPattern.test(luid) == true) {
			var ajax_shlist=new Ajax.Request(
	      '/services/rest/myshopcart/cingset', {
	        method: 'post',
	        parameters: 'mid='+mid+'&cluid='+luid+'&on=1'
	      }
	    );
	  } else {
			var ajax_shlist=new Ajax.Request(
	      '/services/rest/myshopcart/cingset', {
	        method: 'post',
	        parameters: 'mid='+mid+'&luid='+luid+'&on=1'
	      }
	    );		
	  }	  	
	}
}


function shoppingListUpdate()
{
	var tableRowToHide = $$('tr.remove');
	tableRowToHide.each(Element.hide);
}

function hideForPremium(v_id)
{
	if (g_app.user.id && g_app.user.permit&32)
	{
		document.getElementById(v_id).style.display="none";
	}
}
/* ADDED FOR SHOPPING LIST */
/*
 * end scripps.js
 *********/
