function BrowserDetect() {
var ua = navigator.userAgent.toLowerCase(); 

this.isBrowserInfo = "YES";

this.isGecko       = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1);
this.isAppleWebKit = (ua.indexOf('applewebkit') != -1);

this.isKonqueror   = (ua.indexOf('konqueror') != -1); 
this.isSafari      = (ua.indexOf('safari') != - 1);
this.isOmniweb     = (ua.indexOf('omniweb') != - 1);
this.isOpera       = (ua.indexOf('opera') != -1); 
this.isIcab        = (ua.indexOf('icab') != -1); 
this.isAol         = (ua.indexOf('aol') != -1); 
this.isIE          = (ua.indexOf('msie') != -1 && !this.isOpera && (ua.indexOf('webtv') == -1) ); 
this.isMozilla     = (this.isGecko && ua.indexOf('gecko/') + 14 == ua.length);
this.isFirebird    = (ua.indexOf('firebird/') != -1);
this.isNS          = ( (this.isGecko) ? (ua.indexOf('netscape') != -1) : ( (ua.indexOf('mozilla') != -1) && !this.isOpera && !this.isSafari && (ua.indexOf('spoofer') == -1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('webtv') == -1) && (ua.indexOf('hotjava') == -1) ) );

this.isIECompatible = ( (ua.indexOf('msie') != -1) && !this.isIE);
this.isNSCompatible = ( (ua.indexOf('mozilla') != -1) && !this.isNS && !this.isMozilla);

this.geckoVersion = ( (this.isGecko) ? ua.substring( (ua.lastIndexOf('gecko/') + 6), (ua.lastIndexOf('gecko/') + 14) ) : -1 );
this.equivalentMozilla = ( (this.isGecko) ? parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) ) : -1 );
this.appleWebKitVersion = ( (this.isAppleWebKit) ? parseFloat( ua.substring( ua.indexOf('applewebkit/') + 12) ) : -1 );

this.versionMinor = parseFloat(navigator.appVersion); 

if (this.isGecko && !this.isMozilla) {
this.versionMinor = parseFloat( ua.substring( ua.indexOf('/', ua.indexOf('gecko/') + 6) + 1 ) );
} else if (this.isMozilla) {
this.versionMinor = parseFloat( ua.substring( ua.indexOf('rv:') + 3 ) );
} else if (this.isIE && this.versionMinor >= 4) {
this.versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );
} else if (this.isKonqueror) {
this.versionMinor = parseFloat( ua.substring( ua.indexOf('konqueror/') + 10 ) );
} else if (this.isSafari) {
this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('safari/') + 7 ) );
} else if (this.isOmniweb) {
this.versionMinor = parseFloat( ua.substring( ua.lastIndexOf('omniweb/') + 8 ) );
} else if (this.isOpera) {
this.versionMinor = parseFloat( ua.substring( ua.indexOf('opera') + 6 ) );
} else if (this.isIcab) {
this.versionMinor = parseFloat( ua.substring( ua.indexOf('icab') + 5 ) );
}

this.versionMajor = parseInt(this.versionMinor); 

this.isDOM1 = (document.getElementById);
this.isDOM2Event = (document.addEventListener && document.removeEventListener);

this.mode = document.compatMode ? document.compatMode : 'BackCompat';

this.isWin    = (ua.indexOf('win') != -1);
this.isWin32  = (this.isWin && ( ua.indexOf('95') != -1 || ua.indexOf('98') != -1 || ua.indexOf('nt') != -1 || ua.indexOf('win32') != -1 || ua.indexOf('32bit') != -1 || ua.indexOf('xp') != -1) );
this.isMac    = (ua.indexOf('mac') != -1);
this.isUnix   = (ua.indexOf('unix') != -1 || ua.indexOf('sunos') != -1 || ua.indexOf('bsd') != -1 || ua.indexOf('x11') != -1)
this.isLinux  = (ua.indexOf('linux') != -1);

this.isNS4x = (this.isNS && this.versionMajor == 4);
this.isNS40x = (this.isNS4x && this.versionMinor < 4.5);
this.isNS47x = (this.isNS4x && this.versionMinor >= 4.7);
this.isNS4up = (this.isNS && this.versionMinor >= 4);
this.isNS6x = (this.isNS && this.versionMajor == 6);
this.isNS6up = (this.isNS && this.versionMajor >= 6);
this.isNS7x = (this.isNS && this.versionMajor == 7);
this.isNS7up = (this.isNS && this.versionMajor >= 7);

this.isIE4x = (this.isIE && this.versionMajor == 4);
this.isIE4up = (this.isIE && this.versionMajor >= 4);
this.isIE5x = (this.isIE && this.versionMajor == 5);
this.isIE55 = (this.isIE && this.versionMinor == 5.5);
this.isIE55up = (this.isIE && this.versionMinor >= 5.5);
this.isIE5up = (this.isIE && this.versionMajor >= 5);
this.isIE6x = (this.isIE && this.versionMajor == 6);
this.isIE6up = (this.isIE && this.versionMajor >= 6);

this.isIE4xMac = (this.isIE4x && this.isMac);
}
document.browserInfo = new BrowserDetect();
if (typeof(BuilderEvents)=="undefined") var BuilderEvents = (function () {
    var unloadListeners = [];
    var onPageUnload = function () {
        var i=unloadListeners.length;
        while (-1<--i) if (typeof(unloadListeners[i])=="function") {
            if (!(unloadListeners[i]())) return false;
        } else {
            if (!eval(unloadListeners[i]())) return false;
        }
        return true;
    }
    var addUnloadListener = function (listener) {
        if ((typeof(listener)=="function") || (typeof(listener)=="string")) return unloadListeners.push(listener)>0;
        return false;
    }
    var onloadListeners = [];
    var pageLoaded=false;
    var onPageLoad = function () {
        pageLoaded=true;
        var i=onloadListeners.length;
        var rv;
        while (-1<--i) if (typeof(onloadListeners[i])=="function") {
            rv = onloadListeners[i]();
            if (rv == false) return false;
        } else {
            rv = eval(onloadListeners[i]);
            if (rv == false) return false;
        }
        return true;
    }
    var addOnloadListener = function (listener) {
        if ((typeof(listener)=="function") || (typeof(listener)=="string")) return onloadListeners.push(listener)>0;
        return false;
    }
    var copyTasks = [];
    var defermentTasks={};
    var checkCopyTasks = (function () {
        var intervalID;
        var i;
        var source;
        var target;
        var task;
        var lid;
        return function () {
            i=copyTasks.length;
            while (-1<--i) {
                task=copyTasks[i];
                source=document.getElementById(task.source);
                target=document.getElementById(task.target);
                if ((source!=null) && (target!=null)) {
                    target.innerHTML = source.innerHTML;
                    source.innerHTML = "";
                    for (lid in task.listeners) task.listeners[lid]();
                    copyTasks.splice(i,1);
                    task.complete=true;
                }
            }
            if (copyTasks.length) {
                setTimeout(checkCopyTasks,333);
            }
        }
    })();
    function addCopyTask(task) {
        if (defermentTasks[task.target]==null) {
            task.complete=false;
            if (task.listeners==null) task.listeners={};
            defermentTasks[task.target]=task;
            copyTasks.push(task);
            if (pageLoaded || !document.browserInfo.isIE) checkCopyTasks();
            return true;
        }
        return false;
    }
    if (document.browserInfo.isIE) addOnloadListener(checkCopyTasks);
    function addDefermentListener(target,listener,listenerID) {
        if (defermentTasks[target]!=null) {
            if (defermentTasks[target].listeners[listenerID]!=null) return
            if (!defermentTasks[target].complete) {
                defermentTasks[target].listeners[listenerID]=listener;
                return;
            }
        }
        if (!document.browserInfo.isIE) {
            listener();
        } else {
            addOnloadListener(listener);
        }
    }

    var events={}
    function addListener(eventName,eventListener) {
        if (events[eventName]==null) events[eventName]=[];
        events[eventName].push(eventListener);
    }
    function fireEvent(eventName,data) {
        var e=events[eventName];
        if (e!=null) {
            var i=e.length;
            while (-1<--i) e[i](data);
        }
    }

    return {onPageUnload:onPageUnload,
            onPageLoad:onPageLoad,
            addUnloadListener:addUnloadListener,
            addOnloadListener:addOnloadListener,
            addCopyTask:addCopyTask,
            addListener:addListener,
            fireEvent:fireEvent,
            addDefermentListener:addDefermentListener};
})();
AJS.toInit(function($) {
	// Right align the search drop-down with the search box
	$('#quick-search-query').one('focus', function() {
		var qs = $(this),
			right = jQuery('body').width() - (qs.offset().left + qs.outerWidth());
		$('<style>#quick-nav-drop-down { right: '+right+'px; }</style>').appendTo('head');
	});
});


if (typeof(Visibility)=="undefined") var Visibility = (function () {
    // visibilty toggle & store
    var visibilitySetting={};
    function getVisibilityData(id) {
        var data = {method:null, states:"", visible:null};
        if (document.cookie!=null) {
            var s=document.cookie.indexOf("sitebuilder_visibility")
            if (s>-1) {
                s+=23;
                var e=document.cookie.indexOf(";",s)-s;
                if (e<1) e=document.cookie.length-s;
                if (e>-1) {
                    var states=data.states=document.cookie.substr(s,e);
                    if ((s=states.indexOf(":"+id+":"))>-1) {
                        data.states=states.substr(0,s)+states.substr(s+id.length+4);
                        data.method=states.substr(s+id.length+2,1);
                        data.visible=(states.substr(s+id.length+3,1)=="t")
                    }
                }
            }
        }
        return data;
    }
    function setVisibilityCookie (id, state, method) {
        if (document.cookie!=null) {
            var visData = getVisibilityData(id);
            method=(method!=null) ? method : "p";
            document.cookie = "sitebuilder_visibility="+visData.states+":"+id+":"+method+((state) ? "t" : "f")+"; path=/;";
        }
    }
    // Highlight Fade Appear Puff BlindUp BlindDown SwitchOff DropOut Shake SlideDown SlideUp Squish Grow Shrink Pulsate Fold
    var visibilityStyles = {fade:{show:"Appear",hide:"Fade"}};
    function addVisibilityStyle (style, show, hide) {
        if ((style==null) ||(show==null) ||(show==null)) return false;
        visibilityStyles[style]={show:show,hide:hide};
        return true;
    }
    function setVisibility (id, state, store, style) {
        var visData = getVisibilityData(id);
        var chosenStyle=visibilityStyles[style];
        var scAvail=(!document.browserInfo.isOpera) && (chosenStyle!=null) && (typeof(Effect) != "undefined") && (typeof(Effect[chosenStyle.show])!="undefined") && (typeof(Effect[chosenStyle.hide])!="undefined");
        var method;
        if (!state) {
            method = (scAvail) ? "s" : "p";// we can use either since we are hiding
        } else {
            method = ((scAvail) && (visData.method!=null)) ? visData.method : "p";// if scr is avail then use what we used last time otherwise use plain mode
        }
        visibilitySetting[id]=state;
        if (method=="s") {
            method="s";// script
            if (!state) {
                Effect[chosenStyle.hide](id);
            } else {
                Effect[chosenStyle.show](id);
            }
        } else {
            method="p";// plain
            var panelDiv = document.getElementById(id);
            if (panelDiv!=null) {
              if (!state) {
                  if (document.browserInfo.isIE) {
                      panelDiv.style.display = "none";
                  } else {
                      panelDiv.style.visibility = "collapse";
                      panelDiv.style.display = "none";
                  }
              } else {
                  if (document.browserInfo.isIE) {
                      panelDiv.style.display = "block";
                  } else {
                      panelDiv.style.visibility = "visible";
                      panelDiv.style.display = (typeof(panelDiv.cellIndex)!="undefined") ? "table-cell" : null;
                  }
              }
            }
        }
        if (store) setVisibilityCookie(id,state,method);
        if (typeof(BuilderEvents)!="undefined") BuilderEvents.fireEvent("set-"+id+"visibility",{id:id, state:state})
        return state;
    }
    function toggleVisibility (id,store,style) {
        visibilitySetting[id] = visibilitySetting[id]==null || visibilitySetting[id];
        return setVisibility(id,!visibilitySetting[id],store,style);
    }
    function restoreVisibility (id,def,store,style,force) {
        var visData = getVisibilityData(id);
        var visible = (force) ? def :(visData!=null && visData.visible!=null) ? visData.visible : def;
        return setVisibility(id,visible,store,style);
    }
    function addClass(target,className) {
        var orig=target.className;
        if (orig!=null) {
            var i=orig.indexOf(className);
            if (i<0) {
                target.className=target.className+" "+className;
            }
        } else {
            target.className=className;
        }
    }
    function removeClass(target,className) {
        var orig=target.className;
        if (orig!=null) {
            var i=orig.indexOf(className);
            if (i>-1) {
                var newClass=orig.substr(0,i);
                if (i+className.length<orig.length) {
                    newClass+=orig.substr(i+className.length);
                }
                target.className=newClass;
            }
        }
    }
    function setState (id, state, postfix) {
        var target=document.getElementById(id+postfix);
        if (target!=null) {
            if (state) {
                removeClass(target,"collapsed"+postfix);
                addClass(target,"expanded"+postfix);
            } else {
                removeClass(target,"expanded"+postfix);
                addClass(target,"collapsed"+postfix);
            }
        }
    }
    function toggleSidebar (id) {
        var state=toggleVisibility("atb-"+id,true,"fade");
        setState("atb-"+id,state,"");
        setState("atb-"+id,state,"-slider");
        if (typeof(BuilderEvents)!="undefined") BuilderEvents.fireEvent("toggle-sidebar",{id:id, state:state})
    }
    function restoreSidebar (id,collapse,force) {
        var state=restoreVisibility("atb-"+id,!collapse,true,"fade",force);
        setState("atb-"+id,state,"");
        setState("atb-"+id,state,"-slider");
    }
    return {addVisibilityStyle:addVisibilityStyle,
            setVisibility:setVisibility,
            setVisibilityCookie:setVisibilityCookie,
            toggleVisibility:toggleVisibility,
            restoreVisibility:restoreVisibility,
            toggleSidebar:toggleSidebar,
            addClass:addClass,
            removeClass:removeClass,
            restoreSidebar:restoreSidebar};
})();

var DynarchMenu = undefined;

