/*
 * JSMin
 * Javascript Compressor
 * http://www.crockford.com/
 * http://www.smallsharptools.com/
*/

if("undefined"==typeof $ektron)
{(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}
if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])
selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])
return jQuery().find(selector);return jQuery(elem);}
selector=[];}}else
return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))
return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)
if(value===undefined)
return this[0]&&jQuery[type||"attr"](this[0],name)||undefined;else{options={};options[name]=value;}
return this.each(function(i){for(name in options)
jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)
value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)
return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)
ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])
jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)
elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)
this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)
this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)
this[expando]=null;});if(events===true)
this.find("*").andSelf().each(function(i){if(this.nodeType==3)
return;var events=jQuery.data(this,"events");for(var type in events)
for(var handler in events[type])
jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)
if(isSimple.test(selector))
return this.pushStack(jQuery.multiFilter(selector,this,true));else
selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)
return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)
return value;values.push(value);}}
return values;}else
return(this[0].value||"").replace(/\r/g,"");}
return undefined;}
if(value.constructor==Number)
value+='';return this.each(function(){if(this.nodeType!=1)
return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))
this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)
this.selectedIndex=-1;}else
this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)
data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)
elems.reverse();}
var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))
obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));if($ektron.isEditableElement(this)||"true"==this.getAttribute("contenteditable"))
{jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;callback.call(obj,elem);});}
else
{var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))
scripts=scripts.add(elem);else{if(elem.nodeType==1)
scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);}});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){try
{if(elem.src)
jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)
elem.parentNode.removeChild(elem);}
catch(ex)
{}}
function now(){return+new Date;}
jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}
if(typeof target!="object"&&typeof target!="function")
target={};if(length==i){target=this;--i;}
for(;i<length;i++)
if((options=arguments[i])!=null)
for(var name in options){var src=target[name],copy=options[name];if(target===copy)
continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)
target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)
target[name]=copy;}
return target;};var expando="ektronjs"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)
window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)
script.text=data;else
script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)
id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])
jQuery.cache[id]={};if(data!==undefined)
jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])
break;if(!name)
jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)
elem.removeAttribute(expando);}
delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)
if(callback.apply(object[name],args)===false)
break;}else
for(;i<length;)
if(callback.apply(object[i++],args)===false)
break;}else{if(length==undefined){for(name in object)
if(callback.call(object[name],name,object[name])===false)
break;}else
for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}
return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))
value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))
elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)
elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}
callback.call(elem);for(var name in options)
elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}
if(jQuery(elem).is(":visible"))
getWH();else
jQuery.swap(elem,props,getWH);return Math.max(0,val);}
return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)
return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}
if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}
if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}
if(name.match(/float/i))
name=styleFloat;if(!force&&style&&style[name])
ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))
name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))
ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)
stack.unshift(a);for(;i<stack.length;i++)
if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}
ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)
if(swap[i]!=null)
stack[i].style.display=swap[i];}
if(name=="opacity"&&ret=="")
ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}
return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')
context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)
return;if(elem.constructor==Number)
elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)
div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)
if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)
tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))
div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}
elem=jQuery.makeArray(div.childNodes);}
if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))
return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)
ret.push(elem);else
ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)
return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)
elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)
throw"type property can't be changed";elem[name]=value;}
if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))
return elem.getAttributeNode(name).nodeValue;return elem[name];}
if(msie&&notxml&&name=="style")
return jQuery.attr(elem.style,"cssText",value);if(set)
elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}
if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+
(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}
return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}
name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)
elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)
ret[0]=array;else
while(i)
ret[--i]=array[i];}
return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)
if(array[i]===elem)
return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])
if(elem.nodeType!=8)
first[pos++]=elem;}else
while(elem=second[i++])
first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}
return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)
if(!inv!=!callback(elems[i],i))
ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)
ret[ret.length]=value;}
return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")
ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)
jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)
this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)
this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)
this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}
return cur;},find:function(t,context){if(typeof t!="string")
return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)
return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)
for(var c=ret[i].firstChild;c;c=c.nextSibling)
if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))
r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)
if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}
if(m=="+")break;}}
ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}
if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}
m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])
oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")
tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}
if(m[1]==".")
r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)
if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}
r=tmp;}
ret=r;}
t=t.replace(re2,"");}}
if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}
if(t)
ret=[];if(ret&&context==ret[0])
ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)
tmp.push(r[i]);}
return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}
if(!m)
break;if(m[1]==":"&&m[2]=="not")
r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")
r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))
z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)
tmp.push(a);}
r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)
if(n.nodeType==1)
n.nodeIndex=c++;merge[id]=true;}
var add=false;if(first==0){if(node.nodeIndex==last)
add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)
add=true;if(add^not)
tmp.push(node);}
r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")
fn=fn[m[2]];if(typeof fn=="string")
fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}
return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)
matched.push(cur);cur=cur[dir];}
return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])
if(cur.nodeType==1&&++num==result)
break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)
r.push(n);}
return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)
return;if(jQuery.browser.msie&&elem.setInterval)
elem=window;if(!handler.guid)
handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}
var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)
return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)
elem.addEventListener(type,handle,false);else if(elem.attachEvent)
elem.attachEvent("on"+type,handle);}}
handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)
return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))
for(var type in events)
this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}
jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)
delete events[type][handler.guid];else
for(handler in events[type])
if(!parts[1]||events[type][handler].type==parts[1])
delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)
elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)
elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}
ret=null;delete events[type];}}});}
for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}
if(!elem){if(this.global[type])
jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)
return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}
data[0].type=type;if(exclusive)
data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)
val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)
val=false;if(event)
data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)
val=ret;}
if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}
this.triggered=false;}
return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)
val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}
return val;},fix:function(event){if(event[expando]==true)
return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)
event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)
originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)
originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)
event.target=event.srcElement||document;if(event.target.nodeType==3)
event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)
event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}
if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))
event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)
event.metaKey=event.ctrlKey;if(!event.which&&event.button)
event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)
jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)
fn.call(document,jQuery);else
jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}
jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)
document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}
jQuery.ready();})();if(jQuery.browser.opera)
document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)
if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}
jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}
if(numStyles===undefined)
numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}
jQuery.ready();})();}
jQuery.event.add(window,"load",jQuery.ready);}
jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}
return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')
return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}
callback=callback||function(){};var type="GET";if(params)
if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}
var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")
self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}
return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}
return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")
s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))
s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))
s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}
if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)
s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}
if(head)
head.removeChild(script);};}
if(s.dataType=="script"&&s.cache==null)
s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}
if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}
if(s.global&&!jQuery.active++)
jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)
script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}
head.appendChild(script);return undefined;}
var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)
xhr.open(type,s.url,s.async,s.username,s.password);else
xhr.open(type,s.url,s.async);try{if(s.data)
xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)
xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}
if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}
if(s.global)
jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}
status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}
if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}
if(s.ifModified&&modRes)
jQuery.lastModified[s.url]=modRes;if(!jsonp)
success();}else
jQuery.handleError(s,xhr,status);complete();if(s.async)
xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)
setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)
onreadystatechange("timeout");}},s.timeout);}
try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}
if(!s.async)
onreadystatechange();function success(){if(s.success)
s.success(data,status);if(s.global)
jQuery.event.trigger("ajaxSuccess",[xhr,s]);}
function complete(){if(s.complete)
s.complete(xhr,status);if(s.global)
jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)
jQuery.event.trigger("ajaxStop");}
return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)
jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}
return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}
return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")
throw"parsererror";if(filter)
data=filter(data,type);if(type=="script")
jQuery.globalEval(data);if(type=="json")
data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)
jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
for(var j in a)
if(a[j]&&a[j].constructor==Array)
jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")
this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)
return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)
return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}
if(opt.overflow!=null)
this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))
e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}
if(parts[1])
end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}
if(!type||(typeof type=="string"&&!fn))
return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)
queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)
fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)
this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)
if(timers[i].elem==this){if(gotoEnd)
timers[i](true);timers.splice(i,1);}});if(!gotoEnd)
this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)
q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}
return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)
q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)
jQuery(this).dequeue();if(jQuery.isFunction(opt.old))
opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)
options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)
this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")
this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)
return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}
t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)
if(!timers[i]())
timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")
this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)
if(this.options.curAnim[i]!==true)
done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")
this.elem.style.display="block";}
if(this.options.hide)
this.elem.style.display="none";if(this.options.hide||this.options.show)
for(var p in this.options.curAnim)
jQuery.attr(this.elem.style,p,this.options.orig[p]);}
if(done)
this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}
return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)
border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")
fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}
while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))
add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")
border(parent);parent=parent.parentNode;}
if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))
add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)
add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}
results={top:top,left:left};}
function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}
function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}
return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}
return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))
offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+
num(this,"padding"+tl)+
num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+
num(this,"border"+tl+"Width")+
num(this,"border"+br+"Width")+
(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();var $ektron=window.$ektron=window.jQuery;window.jQuery.noConflict(true);if("undefined"==typeof(window.$))
{window.$=window.$ektron;}
if("undefined"==typeof(window.jQuery))
{window.jQuery=window.$ektron;}
var Ektron=window.Ektron={};Ektron.RegExp={};Ektron.RegExp.escape=function(s)
{return(s+"").replace(Ektron.RegExp.escape.re,"\\$&");};Ektron.RegExp.escape.re=/[^\w\s]/g;Ektron.RegExp.Char={};Ektron.RegExp.Char.amp=/\&/g;Ektron.RegExp.Char.lt=/</g;Ektron.RegExp.Char.gt=/>/g;Ektron.RegExp.Char.apos=/\'/g;Ektron.RegExp.Char.quot=/\"/g;Ektron.RegExp.Char.lf=/\n/g;Ektron.RegExp.Char.cr=/\r/g;Ektron.RegExp.Char.backslash=/\\/g;Ektron.RegExp.Entity={};Ektron.RegExp.Entity.amp=/\&amp;/g;Ektron.RegExp.Entity.lt=/\&lt;/g;Ektron.RegExp.Entity.gt=/\&gt;/g;Ektron.RegExp.Entity.apos=/\&apos;/g;Ektron.RegExp.Entity.quot=/\&quot;/g;Ektron.RegExp.CharacterClass={};Ektron.RegExp.CharacterClass.s="[\t\x0b\f \xa0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\n\r\u2028\u2029]";Ektron.OnException=function(me,onexception,ex,args)
{var returnValue;var onexceptionList=[Ektron.onexception,me.constructor.onexception,me.onexception,args.callee.onexception,onexception];for(var i=0;i<onexceptionList.length;i++)
{var onexception=onexceptionList[i];if("function"==typeof onexception&&(0==i||onexception!=onexceptionList[i-1]))
{var result=onexception.call(me,ex,args);if(typeof result!="undefined")returnValue=result;}}
if("undefined"==typeof returnValue)
{throw ex;}
return returnValue;};Ektron.OnException.exceptionMessage=function(ex)
{var file="";try
{file=ex.filename||ex.fileName||ex.sourceURL||"";if(file)file="\nFile: "+file;}
catch(exIgnore){};var line="";try
{line=ex.lineNumber||ex.line||"";if(line)line="\nLine: "+line;}
catch(exIgnore){};var msg="";try
{msg=ex.message||ex||"";}
catch(exIgnore){};return msg+file+line;};Ektron.OnException.ignoreException=function(ex,args){return null;};Ektron.OnException.throwException=function(ex,args){throw ex;};Ektron.OnException.returnException=function(ex,args){return Ektron.OnException.exceptionMessage(ex);};Ektron.OnException.returnValue=function(v)
{return function(ex,args){return v;};};Ektron.OnException.returnArgument=function(n)
{return function(ex,args){if(args&&args.length>n)return args[n];};};Ektron.OnException.alertException=function(ex,args){alert(Ektron.OnException.exceptionMessage(ex));};Ektron.OnException.consoleException=function(ex,args){if(console)console.error(Ektron.OnException.exceptionMessage(ex));};Ektron.OnException.diagException=function(ex,args)
{if(document.cookie&&document.cookie.indexOf("Ektron.diagException=")>-1)
{var msg=Ektron.OnException.exceptionMessage(ex);if(args&&args.callee)
{msg+="\nFunction:\n"+args.callee+"\n";if(args.length>0)
{msg+="\nArguments:\n";}}
if(args&&args.length)
{for(var i=0;i<args.length;i++)
{msg+="\n"+args[i]+"\n";}}
alert(msg);}}
Ektron.Class={functionName:function(fn)
{if(typeof fn!="function")throw new TypeError("fn must be of type Function");var a=fn.toString().match(/function (\w+)\(/);return(a!=null?a[1]:"anonymous");},nonEnumerables:["toLocaleString","toString","valueOf"],inherits:function(thisObject,objBase,baseClassName)
{if(typeof thisObject!="object")throw new TypeError("thisObject must be of type Object");if(null===thisObject)throw new RangeError("thisObject is null");if(typeof objBase!="object")throw new TypeError("objBase must be of type Object");if(null===objBase)throw new RangeError("objBase is null");if(typeof objBase.constructor!="function")throw new TypeError("objBase.constructor must be of type Function");if(typeof baseClassName!="string"&&typeof baseClassName!="undefined")throw new TypeError("baseClassName must be of type String or undefined");if("undefined"==typeof baseClassName)
{for(var p in objBase.constructor.prototype)
{throw new TypeError("baseClassName must be specified when objBase is derived using prototype");}}
if(typeof baseClassName!="string")
{baseClassName=Ektron.Class.functionName(objBase.constructor);}
if("anonymous"==baseClassName)throw new TypeError("baseClassName must be specified when objBase constructor is anonymous");for(var p in objBase)
{if(p!="constructor")
{thisObject[p]=objBase[p];if("function"==typeof objBase[p])
{thisObject[baseClassName+"_"+p]=objBase[p];}}}
for(var i in Ektron.Class.nonEnumerables)
{thisObject[baseClassName+"_"+Ektron.Class.nonEnumerables[i]]=objBase[Ektron.Class.nonEnumerables[i]];}
return thisObject;},overrides:function(baseClassName,methods)
{if(typeof baseClassName!="string"&&typeof baseClassName!="undefined")throw new TypeError("baseClassName must be of type String or undefined");if(typeof baseClassName!="string")baseClassName=Ektron.Class.functionName(objBase.constructor);if(typeof methods!="undefined"&&methods!=null&&methods.constructor!=Array)throw new TypeError("methods must be of type Array or undefined");return function(objBase,args)
{if(typeof objBase!="object")throw new TypeError("objBase must be of type Object");if(null===objBase)throw new RangeError("objBase is null");if(typeof objBase.constructor!="function")throw new TypeError("objBase.constructor must be of type Function");if(typeof args!="object"&&typeof args!="undefined")throw new TypeError("args must be of type Array or undefined");if("undefined"==typeof args)args=[];objBase.constructor=this;var name="";if("object"==typeof methods&&methods.constructor==Array)
{for(var i=0;i<methods.length;i++)
{name=baseClassName+"_"+methods[i];if("undefined"==typeof objBase[name])
{objBase[name]=objBase[methods[i]];}}}
else
{var aryBaseMethods=[];for(var p in objBase)
{if(("function"==typeof objBase[p])&&(p!="constructor"))
{aryBaseMethods[p]=objBase[p];}}
for(var p in aryBaseMethods)
{name=baseClassName+"_"+p;if("undefined"==typeof objBase[name])
{objBase[name]=aryBaseMethods[p];}}
for(var i in Ektron.Class.nonEnumerables)
{name=baseClassName+"_"+Ektron.Class.nonEnumerables[i];if("undefined"==typeof objBase[name])
{objBase[name]=objBase[Ektron.Class.nonEnumerables[i]];}}}
this.apply(objBase,args);return objBase;};}};Ektron.ready=function(fn)
{$ektron().one('EktronReady',function()
{try
{fn.apply(this,arguments);}
catch(ex)
{Ektron.OnException.diagException(ex,[fn]);}});};Ektron.ready.endRequestHandler=function(sender,args)
{var objError=args.get_error();if(objError)
{args.set_errorHandled(true);Ektron.OnException.diagException(new Error("Error during Ajax request:\n"+objError.message),arguments);}
else
{$ektron().trigger("EktronReady",["endRequest",sender,args]);}};if(typeof Sys!="undefined"&&Sys.WebForms&&Sys.WebForms.PageRequestManager&&Sys.WebForms.PageRequestManager.getInstance()!=null)
{Sys.WebForms.PageRequestManager.getInstance().add_endRequest(Ektron.ready.endRequestHandler);$ektron().ready(function()
{$ektron().trigger("EktronReady",["ready"]);});}
else
{$ektron().ready(function()
{if(typeof Telerik!="undefined"&&Telerik.Web&&Telerik.Web.UI&&Telerik.Web.UI.RadAjaxControl)
{Ektron.Class.overrides("RadAjaxControl",["_endRequest"]).call(function()
{this._endRequest=function()
{Telerik.Web.UI.RadAjaxControl.prototype.RadAjaxControl__endRequest.apply(this,arguments);$ektron().trigger("EktronReady",["RadAjaxControl.ResponseEnd"]);};},Telerik.Web.UI.RadAjaxControl.prototype);}
else if(typeof Sys!="undefined"&&Sys.WebForms&&Sys.WebForms.PageRequestManager&&Sys.WebForms.PageRequestManager.getInstance()!=null)
{Sys.WebForms.PageRequestManager.getInstance().add_endRequest(Ektron.ready.endRequestHandler);}
$ektron().trigger("EktronReady",["ready"]);});}
Ektron.RegExp.ltrim=new RegExp("^"+Ektron.RegExp.CharacterClass.s+"+");Ektron.RegExp.rtrim=new RegExp(Ektron.RegExp.CharacterClass.s+"+$");$ektron.trim=function(text)
{return(text+"").replace(Ektron.RegExp.ltrim,"").replace(Ektron.RegExp.rtrim,"");};$ektron.extend({ltrim:function(text){return(text+"").replace(Ektron.RegExp.ltrim,"");},rtrim:function(text){return(text+"").replace(Ektron.RegExp.rtrim,"");},addLoadEvent:function(fn)
{var oldOnLoad=window.onload;if(typeof window.onload!='function')
{window.onload=fn;}
else
{window.onload=function()
{oldOnLoad();fn();}}},ajaxCallback:function(uniqueId,data,callback)
{var options=("object"==typeof uniqueId?uniqueId:{uniqueId:uniqueId,data:data,success:callback});var ajaxSettings=$ektron.extend({uniqueId:"__Page",type:"POST",dataType:"html",data:"",success:function(){}},options);var uniqueId=ajaxSettings.uniqueId;var data=ajaxSettings.data;if("object"==typeof data&&data!=null)
{data=$ektron.param(data);}
var successCallback=ajaxSettings.success;var aryClientManager=[];$ektron(":hidden[id*='EktronClientManager']").each(function()
{if(this.value)
{var values=this.value.split(",");for(var i in values)
{var name=values[i];if(!aryClientManager[name])
{aryClientManager.push(name);aryClientManager[name]=true;}}}});return $ektron.ajax($ektron.extend(ajaxSettings,{data:{__CALLBACKID:uniqueId,__CALLBACKPARAM:data,__VIEWSTATE:"",EktronClientManager:aryClientManager.join(",")},success:function(data)
{if("string"==typeof data)
{aryMatch=data.match(/^([0-9]+)\|/);if(aryMatch&&2==aryMatch.length)
{var nCount=parseInt(aryMatch[1],10);data=data.substring(aryMatch[0].length+nCount);}
else
{data=data.replace(/^[se]/,"");}}
successCallback.apply(this,arguments);$ektron().trigger("EktronReady",["callback"]);}}));},isEditableElement:function(elem)
{if(!elem)return false;return(true==elem.isContentEditable||(elem.ownerDocument&&"on"==elem.ownerDocument.designMode));}});$ektron.fn.extend({ajaxCallback:function(uniqueId,data,callback)
{var me=this;var options=("object"==typeof uniqueId?uniqueId:{uniqueId:uniqueId,data:data,complete:callback});var ajaxSettings=$ektron.extend({success:function(){},complete:function(){}},options);var successCallback=ajaxSettings.success;var completeCallback=ajaxSettings.complete;$ektron.ajaxCallback($ektron.extend(ajaxSettings,{success:function(data)
{$ektron.each(me,function()
{$ektron(this).html(data);});successCallback.apply(me,arguments);},complete:function()
{completeCallback.apply(me,arguments);}}));return this;},makeIdentifiersUnique:function(makeUnique)
{var descendantOrSelf=this.find("*").andSelf();var strUniqueSuffix=Math.floor(Math.random()*1679616).toString(36);makeUnique=("function"==typeof makeUnique?makeUnique:function(id)
{return id.replace(/_[0-9a-z]{4}$/,"")+"_"+strUniqueSuffix;});descendantOrSelf.filter("[id]").each(function()
{this.id=makeUnique(this.id);});descendantOrSelf.filter("label").each(function()
{this.htmlFor=makeUnique(this.htmlFor);});descendantOrSelf.filter("[name]").each(function()
{try
{if($ektron.browser.msie)
{var strHTML=this.outerHTML+"";strHTML=strHTML.replace(new RegExp("name="+this.name,"g"),"name="+makeUnique(this.name));$ektron(this).replaceWith(strHTML);}
else
{this.name=makeUnique(this.name);}}
catch(ex)
{};});return this;}});Ektron.Class.overrides("jquery",["clone"]).call(function()
{this.clone=function(events)
{var ret=this.jquery_clone.apply(this,arguments);var dstFormElements=ret.find("*").andSelf().filter(":input");if(dstFormElements.length>0)
{var srcFormElements=this.find("*").andSelf().filter(":input");dstFormElements.each(function(i)
{$ektron(this).val(srcFormElements.eq(i).val());if("checkbox"==this.type||"radio"==this.type)
{this.checked=srcFormElements.get(i).checked;}});}
return ret;};},$ektron.fn);Ektron.Class.overrides("jquery",["handle"]).call(function()
{this.handle=function(event)
{try
{return $ektron.event.jquery_handle.apply(this,arguments);}
catch(ex)
{Ektron.OnException.diagException(ex,arguments);return false;}};},$ektron.event);}






var m_EkTbTimeout_AjaxToolBar = null;
var m_EkTbAutomaticOutsideBorder_AjaxToolBar = true;
var m_EkTbOutsideBorder_AjaxToolBar = true;
var m_EkTbMenuOffDelay_AjaxToolBar = 500;
var m_EkTbMenuBorderWidth_AjaxToolBar = 3;

var m_EkTbStopAtRoot = 0;
var m_EkTbStopAtCss = 1;
var m_EkTbStopAtOffset = 2;
var m_EkTbLastObj;
var m_bEkTbReady;

if (m_bEkTbReady !== true)
{
    m_bEkTbReady = false;
}

function GetPreviewURL() {

    var url = self.location.href;
    var arString = url.split('?');
    if (arString.length > 1) { url = url + "&cmsMode=Preview"}
    else { url = url + "?cmsMode=Preview"}
    return url;
}
function addEkTbLoadEvent()
{
    var oldonload = window.onload;
    window.onload = function()
        {
            if (typeof oldonload == 'function')
            {
                oldonload();
            }
            setTimeout("m_bEkTbReady = true;", 500);
        }
}

if (typeof $ektron !== 'undefined')
{
    $ektron().ready( function() {
	    m_bEkTbReady = true;
    });
}

addEkTbLoadEvent();

function EkTbWebMenuPopUpWindow (url, hWind, nWidth, nHeight, nScroll, nResize) {
    url = url.replace(/&amp;amp;/g,"&").replace(/&amp;/g,"&");
	if (!m_bEkTbReady) return false;
	if (nWidth > screen.width) {
		nWidth = screen.width;
	}
	if (nHeight > screen.height) {
		nHeight = screen.height;
	}
	var cToolBar = 'toolbar=0,location=0,directories=0,status=' + nResize + ',menubar=0,scrollbars=' + nScroll + ',resizable=' + nResize + ',width=' + nWidth + ',height=' + nHeight;
	var popupwin = window.open(url, hWind, cToolBar);
	return popupwin;
}

function EkTbFade(opacity, speed, change, holdTime, startDelay, fadeType, name) {
	if (!m_bEkTbReady) return false;
	var MyObj = document.getElementById(name);
	if (startDelay == 0) {
		if (!document.all) {
			MyObj.style.MozOpacity = (opacity / 100);
		}
		else {
			MyObj.filters.alpha.opacity = (opacity);
		}
		if (((opacity >= 0) && (change < 0)) || ((opacity < 99) && (change > 0))) {
			opacity += change;
			if (opacity > 99) {
				opacity = 99;
			}
			setTimeout("EkTbFade(" + opacity + "," + speed + "," + change + "," + holdTime + "," + startDelay + ",'" + fadeType + "','" + name + "')", speed);
		}
		else {
			change = (0 - change);
			opacity += change;
			if (fadeType.toLowerCase() == "cycle") {
				setTimeout("EkTbFade(" + opacity + "," + speed + "," + change + "," + holdTime + "," + startDelay + ",'" + fadeType + "','" + name + "')", holdTime);
			}
		}
	}
	else {
		var tmp = startDelay;
		startDelay = 0;
		setTimeout("EkTbFade(" + opacity + "," + speed + "," + change + "," + holdTime + "," + startDelay + ",'" + fadeType + "','" + name + "')", tmp);
	}
}

var m_isMac = false;
var m_isMacInit = false;
function IsPlatformMac() {
	if (m_isMacInit) {
		return (m_isMac);
	} else {
		var posn;
		var sUsrAgent = new String(navigator.userAgent);
		sUsrAgent = sUsrAgent.toLowerCase();
		posn = parseInt(sUsrAgent.indexOf('mac'));
		m_isMac = (0 <= posn);
		m_isMacInit = true;
		return (m_isMac);
	}
}

var m_isSafari = false;
var m_isSafariInit = false;
function IsBrowserSafari() {
	if (m_isSafariInit) {
		return (m_isSafari);
	} else {
		var posn;
		var sUsrAgent = new String(navigator.userAgent);
		sUsrAgent = sUsrAgent.toLowerCase();
		posn = parseInt(sUsrAgent.indexOf('safari'));
		m_isSafari = (0 <= posn);
		m_isSafariInit = true;
		return (m_isSafari);
	}
}

function EkTbRollOver(e, MyObj) {
	if (!m_bEkTbReady) return false;
	var top = 0;
	var tmpTop = 0;
	var left = 0;
	var tmpLeft = 0;
	var width = 0;
	var height = 0;
	var toolbarNumArray = (MyObj.id).split("_");
	var automaticBorder = true;
	var outsideBorder = true;
	var menuBorderWidth = 3;
	var localTimeout = null;
	var ekTbOuterElement = null;
	// ensure previous object is deactivated (fixes Safari ghosting problem):
	if (m_EkTbLastObj && (m_EkTbLastObj != MyObj)) {
		EkTbOffNow(m_EkTbLastObj.id)
	}
	m_EkTbLastObj = MyObj;
	eval("localTimeout = m_EkTbTimeout_" + toolbarNumArray[1] + ";");
	if (localTimeout != null) {
		localTimeout = clearTimeout(localTimeout);
		eval("m_EkTbTimeout_" + toolbarNumArray[1] + " = localTimeout;");
	}

	// Mac-Safari returns invalid offsetHeight values for DIV elements,
	// which are used for the new EkWebToolbar (to bracket the content),
	// workaround - when needed, use the outer table cell instead of the DIV:
	if (IsPlatformMac()){
	    ekTbOuterElement = xBrowserReturnObjById("EkTbOuterElmt_" + toolbarNumArray[1]);
		if (ekTbOuterElement != null) {
			height = ekTbOuterElement.offsetHeight;
		} else {
			height = MyObj.offsetHeight;
		}
	} else {
		height = MyObj.offsetHeight;
	}

	tmpLeft = EkTbFindParentPositionLeft(MyObj, (m_EkTbStopAtRoot), true);
	width = MyObj.offsetWidth;
	tmpTop = EkTbFindParentPositionTop(MyObj, (m_EkTbStopAtRoot), true);
	eval("automaticBorder = m_EkTbAutomaticOutsideBorder_" + toolbarNumArray[1] + ";");
	eval("outsideBorder = m_EkTbOutsideBorder_" + toolbarNumArray[1] + ";");
	eval("menuBorderWidth = m_EkTbMenuBorderWidth_" + toolbarNumArray[1] + ";");
	if (outsideBorder == true) {
		if (((tmpLeft - menuBorderWidth) < 0) && (automaticBorder)) {
			left = 0;
		}
		else {
			left = tmpLeft - menuBorderWidth;
		}
		if (((tmpTop - menuBorderWidth) < 0) && (automaticBorder)) {
			top = 0;
		}
		else {
			top = tmpTop - menuBorderWidth;
		}
		if ( ((((left + width) == document.body.clientWidth) && ((tmpLeft - menuBorderWidth) < 0))
			|| (((left + width + menuBorderWidth) == document.body.clientWidth) && ((tmpLeft - menuBorderWidth) >= 0)))
			&& (automaticBorder)
			) {
			width = (document.body.clientWidth - left);
		}
		else {
			width += (menuBorderWidth * 2);
		}
		if ( ((((top + height) == document.body.clientHeight) && ((tmpTop - menuBorderWidth) < 0))
			|| (((top + height + menuBorderWidth) == document.body.clientHeight) && ((tmpTop - menuBorderWidth) >= 0)))
			&& (automaticBorder)
			) {
			height = (document.body.clientHeight - top);
		}
		else {
			height += (menuBorderWidth * 2);
		}
	}
	else {
		left = tmpLeft;
		top = tmpTop;
	}

	// Mac needs positioning to be adjusted:
	if (IsPlatformMac()){
		if (IsBrowserSafari) {
			left +=4;
			top +=6;
		} else {
			left +=4;
			top +=14;
		}
	}

	if (toolbarNumArray[1]!="AjaxToolBar" && document.getElementById("EkTbLeftBar_" + toolbarNumArray[1]).parentNode != document.body) {
		var BodyObj = document.body;
		var toolObj1 = document.getElementById("EkTbLeftBar_" + toolbarNumArray[1]);
		toolObj1.parentNode.removeChild(toolObj1);
		var tmpObj1 = BodyObj.appendChild(toolObj1);
		var toolObj2 = document.getElementById("EkTbRightBar_" + toolbarNumArray[1]);
		toolObj2.parentNode.removeChild(toolObj2);
		var tmpObj2 = BodyObj.appendChild(toolObj2);
		var toolObj3 = document.getElementById("EkTbTopBar_" + toolbarNumArray[1]);
		toolObj3.parentNode.removeChild(toolObj3);
		var tmpObj3 = BodyObj.appendChild(toolObj3);
		var toolObj4 = document.getElementById("EkTbBottomBar_" + toolbarNumArray[1]);
		toolObj4.parentNode.removeChild(toolObj4);
		var tmpObj4 = BodyObj.appendChild(toolObj4);
		var toolObj5 = document.getElementById("EkTbToolbar_" + toolbarNumArray[1]);
		toolObj5.parentNode.removeChild(toolObj5);
		var tmpObj5 = BodyObj.appendChild(toolObj5);
	}
	document.getElementById("EkTbLeftBar_" + toolbarNumArray[1]).style.top = top + "px";
	document.getElementById("EkTbLeftBar_" + toolbarNumArray[1]).style.left = left + "px";
	document.getElementById("EkTbLeftBar_" + toolbarNumArray[1]).style.width = menuBorderWidth + "px";
	document.getElementById("EkTbLeftBar_" + toolbarNumArray[1]).style.height = height + "px";

	document.getElementById("EkTbRightBar_" + toolbarNumArray[1]).style.top = top + "px";
	document.getElementById("EkTbRightBar_" + toolbarNumArray[1]).style.left = ((left + width) - menuBorderWidth) + "px";
	document.getElementById("EkTbRightBar_" + toolbarNumArray[1]).style.width = menuBorderWidth + "px";
	document.getElementById("EkTbRightBar_" + toolbarNumArray[1]).style.height = height + "px";;

	document.getElementById("EkTbTopBar_" + toolbarNumArray[1]).style.top = top + "px";
	document.getElementById("EkTbTopBar_" + toolbarNumArray[1]).style.left = left + "px";
	document.getElementById("EkTbTopBar_" + toolbarNumArray[1]).style.width = width + "px";;
	document.getElementById("EkTbTopBar_" + toolbarNumArray[1]).style.height = menuBorderWidth + "px";

	document.getElementById("EkTbBottomBar_" + toolbarNumArray[1]).style.top = ((top + height) - menuBorderWidth) + "px";
	document.getElementById("EkTbBottomBar_" + toolbarNumArray[1]).style.left = left + "px";
	document.getElementById("EkTbBottomBar_" + toolbarNumArray[1]).style.width = width + "px";;
	document.getElementById("EkTbBottomBar_" + toolbarNumArray[1]).style.height = menuBorderWidth + "px";

	document.getElementById("EkTbLeftBar_" + toolbarNumArray[1]).style.display = "";
	document.getElementById("EkTbRightBar_" + toolbarNumArray[1]).style.display = "";
	document.getElementById("EkTbTopBar_" + toolbarNumArray[1]).style.display = "";
	document.getElementById("EkTbBottomBar_" + toolbarNumArray[1]).style.display = "";
}

function EkTbRollOut(e, MyObj) {
	if (!m_bEkTbReady) return false;
	var toElement = "";
	var srcElement = "";

	if (document.all) {
		toElement = e.toElement;
		srcElement = e.srcElement;
	}
	else {
		toElement = e.relatedTarget;
		srcElement = e.target;
	}
	if ((srcElement.id != MyObj.id)
		&& (!EkTbIsChild(srcElement, MyObj))) {
		//alert("No: " + srcElement.id);
		return;
	}
	if ((toElement == null) || (!((EkTbIsChild(toElement, MyObj)) || (MyObj.id == toElement.id)))) {
		var tmpArray = MyObj.id.split("_");
		eval("m_EkTbTimeout_" + tmpArray[1] + " = setTimeout(\"EkTbOff('" + MyObj.id + "')\", m_EkTbMenuOffDelay_" + tmpArray[1] + ")");
	}
}

function EkTbOff(MyObjId) {
	if (!m_bEkTbReady) return false;
	try
	{
	    var tmpArray = MyObjId.split("_");
	    if (eval("m_EkTbTimeout_" + tmpArray[1] + " != null")) {
		    eval("m_EkTbTimeout_" + tmpArray[1] + " = null");
		    document.getElementById("EkTbLeftBar_" + tmpArray[1]).style.display = "none";
		    document.getElementById("EkTbRightBar_" + tmpArray[1]).style.display = "none";
		    document.getElementById("EkTbTopBar_" + tmpArray[1]).style.display = "none";
		    document.getElementById("EkTbBottomBar_" + tmpArray[1]).style.display = "none";
		    document.getElementById("EkTbToolbar_" + tmpArray[1]).style.display = "none";
	    }
	}
	catch(e) {}
}

function EkTbOffNow(MyObjId) {
	if (!m_bEkTbReady) return false;
	try
	{
	    var tmpArray = MyObjId.split("_");
	    if (eval("m_EkTbTimeout_" + tmpArray[1] + " != null")) {
		    eval("m_EkTbTimeout_" + tmpArray[1] + " = null");
	    }
	    document.getElementById("EkTbLeftBar_" + tmpArray[1]).style.display = "none";
	    document.getElementById("EkTbRightBar_" + tmpArray[1]).style.display = "none";
	    document.getElementById("EkTbTopBar_" + tmpArray[1]).style.display = "none";
	    document.getElementById("EkTbBottomBar_" + tmpArray[1]).style.display = "none";
	    document.getElementById("EkTbToolbar_" + tmpArray[1]).style.display = "none";
	} catch (e) {}
}

function EkTbCancelOff(MyObj) {
	if (!m_bEkTbReady) return false;
	var tmpArray = MyObj.id.split("_");
	var tmpTimeout = eval("m_EkTbTimeout_" + tmpArray[1]);
	if (tmpTimeout != null) {
		clearTimeout(tmpTimeout);
		eval("m_EkTbTimeout_" + tmpArray[1] + " = null;");
	}
}

function EkTbFindParentPositionLeft(Obj, StopAt, includePositioningContainers) {
	if (!m_bEkTbReady) return false;
	var curLeft = 0;

	if (Obj.offsetParent) {
		while (Obj && (null != Obj.offsetLeft)) {
			if ((StopAt != m_EkTbStopAtRoot)
				&& (EkTbIsStopTag(Obj, StopAt)) )
			{
				break;
			}

			if (includePositioningContainers
				|| (Obj.style
				&& Obj.style.position
				&& Obj.style.position
				&& ('relative' != Obj.style.position.toLowerCase())
				&& ('absolute' != Obj.style.position.toLowerCase())))
			{
				curLeft += Obj.offsetLeft;
			}
			Obj = Obj.offsetParent;
		}
	}
	else if (Obj.x)	{
		curLeft += Obj.x;
	}
	return (curLeft);
}

function EkTbFindParentPositionTop(Obj, StopAt, includePositioningContainers) {
	if (!m_bEkTbReady) return false;
	var curTop = 0;

	if (Obj.offsetParent) {
		while (Obj && (null != Obj.offsetTop)) {
			if ((StopAt != m_EkTbStopAtRoot)
				&& (EkTbIsStopTag(Obj, StopAt)) )
			{
				break;
			}

			if (includePositioningContainers
				|| (Obj.style
				&& Obj.style.position
				&& Obj.style.position
				&& ('relative' != Obj.style.position.toLowerCase())
				&& ('absolute' != Obj.style.position.toLowerCase())))
			{
				curTop += Obj.offsetTop;
			}
			Obj = Obj.offsetParent;
		}
	}
	else if (Obj.x) {
		curleft += Obj.x;
	}
	return (curTop);
}

function EkTbGetScrollTop()
{
	if (EkTbIsInQuirksMode())
	{
		return (document.body.scrollTop);
	}
	else
	{
		return (document.documentElement.scrollTop);
	}
}

function EkTbGetScrollLeft()
{
	if (EkTbIsInQuirksMode())
	{
		return (document.body.scrollLeft);
	}
	else
	{
		return (document.documentElement.scrollLeft);
	}
}

function EkTbIsInQuirksMode()
{
	// document.compatMode "BackCompat" : No DocType
	// document.compatMode "CSS1Compat" : DocType specified
	// Also
	// document.documentElement.clientHeight == 0 : No DocType
	// document.documentElement.clientHeight != 0 : DocType specified
	return (0 == document.documentElement.clientHeight);
}

// Not currently used
function EkTbFindTopDifference(ChildObj, ParentObj) {
	if (!m_bEkTbReady) return false;
	var curTop = 0;

	if (ChildObj != ParentObj) {
		curTop += ChildObj.offsetTop;
		if (ChildObj.offsetParent) {
			while ((ChildObj.offsetParent) && (ChildObj != ParentObj)) {
				curTop += ChildObj.offsetTop;
				ChildObj = ChildObj.offsetParent;
			}
		}
	}
	return (curTop);
}

// Not currently used
function EkTbFindLeftDifference(ChildObj, ParentObj) {
	if (!m_bEkTbReady) return false;
	var curLeft = 0;

	if (ChildObj != ParentObj) {
		curLeft += ChildObj.offsetLeft;
		if (ChildObj.offsetParent) {
			while ((ChildObj.offsetParent) && (ChildObj != ParentObj)) {
				curLeft += ChildObj.offsetLeft;
				ChildObj = ChildObj.offsetParent;
			}
		}
	}
	return (curLeft);
}

function EkTbIsChild(obj, ParentObj) {
	if (!m_bEkTbReady) return false;
	var retVal = false;
	var tmpArray = "";
	if (obj) {
		if ((typeof obj.id == 'string') && (((obj.id).indexOf("EkTbToolbar_") > -1)
			|| ((obj.id).indexOf("EkTbLeftBar_") > -1)
			|| ((obj.id).indexOf("EkTbRightBar_") > -1)
			|| ((obj.id).indexOf("EkTbTopBar_") > -1)
			|| ((obj.id).indexOf("EkTbBottomBar_") > -1))) {
			retVal = true;
		}
		else {
			if (obj.parentNode) {
				while (obj.parentNode) {
					obj = obj.parentNode;
					if ((ParentObj.id).indexOf("EkTb") > -1) {
						tmpArray = (ParentObj.id).split("_");
					}
					else {
						tmpArray = new Array;
						tmpArray[0] = "";
						tmpArray[1] = "";
					}
					if ((obj == ParentObj)
						|| (obj == document.getElementById("EkTbToolbar_"+ tmpArray[1]))
						|| (obj == document.getElementById("EkTbLeftBar_"+ tmpArray[1]))
						|| (obj == document.getElementById("EkTbRightBar_"+ tmpArray[1]))
						|| (obj == document.getElementById("EkTbTopBar_"+ tmpArray[1]))
						|| (obj == document.getElementById("EkTbBottomBar_"+ tmpArray[1])) ) {
						retVal = true;
						break;
					}
				}
			}
		}
	}
	return (retVal);
}

function EkTbIsStopTag(Obj, StopAt) {
	if (!m_bEkTbReady) return false;
	var retVal = false;

	if ( (((Obj.style.position).toLowerCase() == "relative") && (StopAt & m_EkTbStopAtCss))
		 || (((Obj.style.position).toLowerCase() == "absolute") && (StopAt & m_EkTbStopAtOffset)) ) {
		if (!document.all) {
			if ((Obj.tagName).toLowerCase() != "table") {
				retVal = true;
			}
		}
		else {
			retVal = true;
		}
	}
	return (retVal);
}

function EkTbMacShowToolbar(e, MyObj) {
	if (!m_bEkTbReady) return false;
	var retVal = true;

	if (navigator.userAgent.indexOf("Mac") > -1) {
		if (e.shiftKey) {
			retVal = EkTbShowToolbar(e, MyObj);
		}
	}
	return(retVal);
}

function EkTbShowToolbar(e, MyObj) {
	if (!m_bEkTbReady) return false;
	var retVal = true;
	var toElement = "";
	var srcElement = "";
	var locationX = 0;
	var locationY = 0;
	if (document.all) {
		toElement = e.toElement;
		srcElement = e.srcElement;
		if (e.y == event.clientY)
		{
		    // operate normally
		    locationY = (e.y + (EkTbFindParentPositionTop(srcElement, m_EkTbStopAtRoot, false) - EkTbFindParentPositionTop(srcElement, m_EkTbStopAtCss, false) + EkTbGetScrollTop()) );
		    locationX = (e.x + (EkTbFindParentPositionLeft(srcElement, m_EkTbStopAtRoot, false)  - EkTbFindParentPositionLeft(srcElement, m_EkTbStopAtCss, false) + EkTbGetScrollLeft()) );
		}
		else
		{
		    //special case for a div in a div (blogs)
		    //alert('Y= ' + e.y + " - " + event.clientY + " - " + event.screenY + " - " + ((EkTbFindParentPositionTop(srcElement, m_EkTbStopAtRoot) - EkTbFindParentPositionTop(srcElement, m_EkTbStopAtCss) + EkTbGetScrollTop()) ));
		    locationY = (event.clientY + EkTbFindParentPositionTop(srcElement, m_EkTbStopAtRoot) - EkTbFindParentPositionTop(srcElement, m_EkTbStopAtCss) + EkTbGetScrollTop() );
		    if (event.screenX != e.clientX)
		    {
		        locationX = (event.clientX + (e.x + (EkTbFindParentPositionLeft(srcElement, m_EkTbStopAtRoot, false)  - EkTbFindParentPositionLeft(srcElement, m_EkTbStopAtCss, false) + EkTbGetScrollLeft()) )) - e.x;
		    }
		    else
		    {
		        locationX = (event.screenX); // e.x + (EkTbFindParentPositionLeft(srcElement, m_EkTbStopAtRoot, false)  - EkTbFindParentPositionLeft(srcElement, m_EkTbStopAtCss, false) + EkTbGetScrollLeft()) );
		    }
		}
	}
	else {
		toElement = e.relatedTarget;
		srcElement = e.target;
		locationY = e.pageY;
		locationX = e.pageX;
	}
	if (!e.ctrlKey) {
		var tmpArray = MyObj.id.split("_");
		var rightEdge = (EkTbFindParentPositionLeft(document.getElementById("EkTbBase_" + tmpArray[1]), (m_EkTbStopAtRoot), true) + document.getElementById("EkTbBase_" + tmpArray[1]).offsetWidth);
		if (locationX > rightEdge) {
			locationX = rightEdge;
		}
		document.getElementById("EkTbToolbar_" + tmpArray[1]).style.top = ((locationY)) + "px";
		document.getElementById("EkTbToolbar_" + tmpArray[1]).style.left = ((locationX)) + "px";
		document.getElementById("EkTbToolbar_" + tmpArray[1]).style.display = "";
		retVal = false;
	}
	return (retVal);
}

function EkTbStopBubble(e, MyObj) {
	e.cancelBubble = true;
}


function xBrowserReturnObjById(id)
{
    if (document.getElementById)
    {
        var returnVar = document.getElementById(id);
    }
    else if (document.all)
    {
        var returnVar = document.all[id];
    }
    else if (document.layers)
    {
        var returnVar = document.layers[id];
    }
    return returnVar;
}

/*********************************************************/
/************** Begin Ektron Editor's Menu ***************/
/*********************************************************/
if (typeof $ektron !== 'undefined')
{
    Ektron.EditorsMenu = {
        bindEvents: function(){

            //show menu when mouseover marker
            $ektron().listen("mouseover", "a.EktronEditorsMenuMarker", function(e) {
                Ektron.EditorsMenu.show(this, e, true);
            });
            $ektron().listen("keypress", "a.EktronEditorsMenuMarker", function(e) {
                if (e.keyCode === 13)  //show only if pressed key is 'enter'
                    Ektron.EditorsMenu.show(this, e, false);
            });

            //hide menu on timeout when mouseleave menu
            $ektron().listen("mouseout", "a", function(e) {
                var menu = $ektron(this).parent().parent();
                if (menu.hasClass("EktronEditorsMenu")) {
                    var timeoutId = setTimeout(function() {
                        Ektron.EditorsMenu.hide(menu);
                    }, Ektron.EditorsMenu.timeoutDuration);
                    menu.attr("timeoutId", timeoutId);
                }
            });

            //clear timeout when mouseenter menu item
            $ektron().listen("mouseover", "a", function(e) {
                var menu = $ektron(this).parent().parent();
                if (menu.hasClass("EktronEditorsMenu")) {
                    clearTimeout(menu.attr("timeoutId"));
                    menu.removeAttr("timeoutId");
                }
            });

            //hide menu on timeout when menu item link loses focus
            $ektron().listen("blur", "a", function(e) {
                var menu = $ektron(this).parent().parent();
                if (menu.hasClass("EktronEditorsMenu")) {
                    var timeoutId = setTimeout(function() {
                            Ektron.EditorsMenu.hide(menu);
                        }, Ektron.EditorsMenu.timeoutDuration);
                    menu.attr("timeoutId", timeoutId);
                }
            });

            //clear timeout when menu item link gains focus
            $ektron().listen("focus", "a", function(e) {
                var menu = $ektron(this).parent().parent();
                if (menu.hasClass("EktronEditorsMenu")) {
                    clearTimeout(menu.attr("timeoutId"));
                    menu.removeAttr("timeoutId");
                }
            });
        },

        show: function(marker, e, autoHide) {
            //get menu ul (sibling of img marker
            var menu = $ektron(marker).next();

            //skip if menu is visibile
            if (menu.css("display") === "none" && menu.hasClass("cloned") === false) {



                //don't layer if menu preceeds an iframe, object, or embed
                var layerMenu = true;
                if (menu.parent().find('iframe').length > 0)
                    layerMenu = false;
                if (menu.parent().find('object').length > 0)
                    layerMenu = false;
                if (menu.parent().find('embed').length > 0)
                    layerMenu = false;

                if (layerMenu === false) {
                    //push following content down
                    menu.attr("class", "EktronEditorsMenu EktronEditorsMenuNotLayered");
                    menu.css("display", "block");
                } else {

                    //clone menu & position at marker position
                    menu.addClass("cloned");
                    menu = menu.clone(true);
                    menu.attr("cloneid", menu.attr("id"));
                    menu.removeAttr("id");
                    menu.prependTo("body");

                    var zIndex = 99998;

                    menu.siblings("ul.EktronEditorsMenu").each(function() {
                        menu.siblings("ul.EktronEditorsMenu").length;
                        if (zIndex <= parseInt($ektron(this).css("z-index"))) {
                            zIndex = parseInt($ektron(this).css("z-index")) + 1;
                        }
                    });
                    menu.css("z-index", String(zIndex));

                    Ektron.EditorsMenu.setPosition(menu);
                    menu.slideDown(function(){
                        if (autoHide === false) {
                            //trigger: keyboard - don't autohide & set focus on first menu item link
                            menu.find("li:first a:first").focus();
                        }
                    });
                }

                //set an attribute that contains the timeout id
                menu.attr("timeoutId", timeoutId);

                if (autoHide === true) {
                    //trigger: mouseover - hide menu if no menu item mouseover
                    var timeoutId = setTimeout(function() {
                        Ektron.EditorsMenu.hide(menu);
                    }, Ektron.EditorsMenu.timeoutDuration);
                    menu.attr("timeoutId", timeoutId);
                }
            }
        },

        hide: function(menu) {
            menu.slideUp("fast", function() {
                if (menu.hasClass("cloned") === true) {
                    //menu is cloned and layered on top of content
                    var clonedMenu = $ektron("#" + menu.attr("cloneid"));
                    clonedMenu.removeClass("cloned");
                    clonedMenu.removeAttr("timeoutId");
                    menu.remove();
                } else {
                    //menu is not cloned and layered; simply hide and remove not layered class
                    menu.removeClass("EktronEditorsMenuNotLayered");
                }
            });
        },

        setPosition: function(menu) {

            //get marker
            var marker = $ektron("#" + menu.attr("cloneid")).prev();
            var markerOffset = marker.offset();

            //get marker dimensions
            var markerTop = markerOffset.top;
            var markerRight = markerOffset.left + marker.width();
            var markerBottom = markerOffset.top + marker.height();
            var markerLeft = markerOffset.left;

    	    //set menu position defaults
            var menuTop = markerTop;
            var menuLeft = markerLeft;

    	    //determine menu height
    	    var tempMenu = menu.clone().prependTo("body");
    	    tempMenu.css("left", "-1000px");
    	    tempMenu.css("display", "block");

    	    //get menu height & width
    	    var menuHeight =  tempMenu.height();
	        var menuWidth =  tempMenu.width();

	        //remove temp menu
    	    tempMenu.remove();

	        //get height & widths for body
	        var body = $ektron("body");
	        var bodyHeight =  body.height();
	        var bodyWidth =  body.width();

	        //determine menu location - above or below
	        if ((menuHeight > bodyHeight) || (menuHeight < (bodyHeight - markerBottom))) {
	            //place the menu below the marker

	            //menuHeight > bodyHeight = the height of the menu is greater than the height of the body
	            //menuHeight < (bodyHeight - markerBottom) = the height of the menu is less than the distance between
	            //the bottom of the menu marker, and the bottom of the body.  This means the menu can fit below the marker
	            //without causing scroll bars

	            menuTop = markerBottom;
	        } else {
	            if ((menuHeight > markerTop) && (menuHeight > (bodyHeight - markerBottom))) {
	                //place the menu below the marker

	                //the height of the menu cannot be placed neither above, nor below the marker without causing scroll bars

	                menuTop = markerBottom;
	            } else {
	                //place the menu above the marker

	                //the height of the menu is less than the height of the body AND the height of the menu is less than
	                //the top of the marker - this means the menu can fit above the marker

	                menuTop = markerTop - menuHeight;
	            }
	        }

	        //determine menu location - right or left
	        if ((menuWidth > bodyWidth) || (menuWidth < (bodyWidth - markerRight))) {
	            //place the menu to the right of the marker

	            //menuWidth > bodyWidth = the width of the menu is greater than the width of the body
	            //menuWidth > markerLeft = the width of the menu is greater than the distance between
	            //the right of the menu marker, and the right of the body.  This means the menu can fit to the right of the marker

		        menuLeft = markerRight; //right
	        } else {
	            if ((menuWidth < bodyWidth) && (menuWidth > markerLeft)) {
	                //place the menu to the right of the marker

	                //the width of the menu cannot be placed neither to the right, nor the left of the marker without causing scroll bars

	                menuLeft = markerRight;
	            } else {
	                //place the menu to the left of the marker

	                //the width of the menu is less than the width of the body AND the width of the menu is less than
	                //the distance between the left of the body and the left of the marker - this means the menu can fit
	                //to the left of the marker

		            menuLeft = markerLeft;
		        }
	        }

    	    //set menu location
	        menu.css("top", menuTop);
	        menu.css("left", menuLeft);

	        if ($ektron.browser.msie) {
	            if ($ektron.browser.version < 7) {
	                menu.find("li").css("position", "relative");
	            }
	            menu.find("a").css("word-wrap", "normal");  //ensures menu item text does not wrapdefault.ap
	        }
        },

        timeoutDuration: 1500
    }

    /**
     * jQuery.Listen
     * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
     * Dual licensed under MIT and GPL.
     * Date: 3/7/2008
     *
     * @projectDescription Light and fast event handling, using event delegation.
     * Homepage: http://flesler.blogspot.com/2007/10/jquerylisten.html
     * Requires jQuery 1.2.3 or higher. Tested on FF 2|IE 6/7|Safari 3|Opera 9, Windows XP.
     *
     * @author Ariel Flesler
     * @version 1.0.3
     *
     * @id jQuery.listen
     * @param {String} name Name of the event to listen (f.e: click, mouseover, etc).
     * @param {DOM Element} listener optional: The DOM element to listen from, the document element by default.
     * @param {String|Boolean} selector A simple selector in one of this formats: "#id", "tagname", ".class", or "tagname.class".
     * @param {Function} handler The event handler to register.
     *
     * Notes:
     *	-The selectors support is low in order to mantain scalability. You can use comma-separated selectors.
     *	  I consider these 4 options, the most useful and I believe they are enough for many cases.
     *	-This plugin can't handle non-bubbling events. It handles focus & blur thanks to the focusin/focusout approach.
     */
    ;(function( $ ){

	    $.fn.indexer = function( name ){//allow public access to the indexers
		    return this[0] && indexer( this[0], name ) || null;
	    };
	    $.indexer = function( name ){
		    return indexer( document, name );
	    };

	    var $event = $.event,
		    $special = $event.special,
		    $listen = $.listen = function( name, listener, selector, handler ){
			    if( typeof listener != 'object' ){ //document is the default listener
				    handler = selector;
				    selector = listener;
				    listener = document;
			    }
			    each( name.split(/\s+/), function( ev ){
				    ev = $listen.fixes[ev] || ev;//try to use a fixed event.
				    var idxer = indexer( listener, ev ) || indexer( listener, ev, new Indexer(ev,listener) );

				    idxer.append( selector, handler );// register the handler.
				    idxer.start();
			    });
		    },
		    indexer = function( elem, name, val ){
			    return $.data( elem, name+'.indexer', val );
		    };

	    $.extend( $listen, {
		    regex: /^((?:\w*?|\*))(?:([#.])([\w-]+))?$/, //matches "#id", "tag", ".class" or "tag.class", also "tag#id" but the tag is ignored.
		    fixes: { //registry of replacement for non-bubbling events, you can add more ( please fix change for IE :) )
			    focus:'focusin',
			    blur:'focusout'
		    },
		    cache:function( on ){
			    this.caching = on;
		    }
	    });

	    //taken and adapted from http://dev.jquery.com/browser/trunk/plugins/validate/lib/jquery.delegate.js?rev=4374
	    $.each( $listen.fixes, function( original, fix ){
		    $special[fix] = {
			    setup:function() {
                    if ( $.browser.msie ) return false;
                    this.addEventListener( original, $special[fix].handler, true );
                },
                teardown:function() {
                    if ( $.browser.msie ) return false;
                    this.removeEventListener( original, $special[fix].handler, true );
                },
                handler: function(e) {
                    arguments[0] = e = $event.fix(e);
                    e.type = fix;
                    return $event.handle.apply(this, arguments);
                }
		    };
	    });

	    $.fn.listen = function( name, selector, handler ){//listen using the prototype
		    return this.each(function(){
			    $listen( name, this, selector, handler );
		    });
	    };

	    function Indexer( name, listener ){
		    $.extend( this, {
			    ids: {},
			    tags: {},
			    listener: listener,
			    event: name
		    });
		    this.id = Indexer.instances.push( this );//for cleaning up later
	    };
	    Indexer.instances = [ ];

	    Indexer.prototype = {
		    constructor: Indexer,
		    handle:function( e ){
			    var sp = e.stopPropagation;//intercept any call to stopPropagation
			    e.stopPropagation = function(){
				    e.stopped = true;
				    sp.apply(this,arguments);
			    };
			    indexer(this,e.type).parse( e );
			    e.stopPropagation = sp;//revert
			    sp = e.data = null;//cleanup
		    },
		    on:false,
		    bubbles:false,
		    start:function(){//start listening (bind)
			    if( !this.on ){ //avoid duplicates
				    $event.add( this.listener, this.event, this.handle );
				    this.on = true;
			    }
		    },
		    stop:function(){//stop listening (unbind)
			    if( this.on ){
				    $event.remove( this.listener, this.event, this.handle );
				    this.on = false;
			    }
		    },
		    cache:function( node, handlers ){
			    return $.data( node, 'listenCache_' + this.id, handlers );
		    },
		    parse:function( e ){
			    var node = e.data || e.target,
				    args = arguments, handlers;

			    if( !$listen.caching || !( handlers = this.cache(node) ) ){//try to retrieve cached handlers
				    handlers = [ ];

				    if( node.id && this.ids[node.id] )//if this node has an id and there are handlers registered to it..
					    push( handlers, this.ids[node.id] );

				    each([ node.nodeName, '*' ], function( tag ){//look for handlers registered by name.class.
					    var klasses = this.tags[tag];
					    if( klasses )
						    each( (node.className + ' *').split(' '), function( klass ){
							    if( klass && klasses[klass] )
								    push( handlers, klasses[klass] );//append the handlers to the list.
						    });
				    }, this);

				    if( $listen.caching )
					    this.cache( node, handlers );
			    }

			    if( handlers[0] ){
				    each( handlers, function( handler ){
					    if( handler.apply(node, args) === false ){
						    e.preventDefault();
						    e.stopPropagation();
					    }
				    });
			    }

			    if( !e.stopped && (node = node.parentNode) && (node.nodeName == 'A' || this.bubbles && node != this.listener) ){//go up ?
				    e.data = node;//I rather not alter e.target, it might be used.
				    this.parse( e );
			    }
			    handlers = args = node = null;//cleanup
		    },
		    append:function( selector, handler ){
			    each( selector.split(/\s*,\s*/), function(selector){//support comma separated selectors
				    var match = $listen.regex.exec( selector );
				    if( !match )
					    throw '$.listen > "' + selector + '" is not a supported selector.';
				    var
					    id = match[2] == '#' && match[3],
					    tag = match[1].toUpperCase() || '*',
					    klass =	match[3] || '*';
				    if( id )//we have an id, register the handler to it.
					    (this.ids[id] || (this.ids[id] = [ ])).push( handler );
				    else if( tag ){//we have an name and/or class
					    tag = this.tags[tag] = this.tags[tag] || { };
					    (tag[klass] || (tag[klass] = [ ])).push( handler );
				    }
			    }, this );
		    }
	    };

	    function each( arr, fn, scope ){
		    for(var i=0, l=arr.length; i < l; i++ )
			    fn.call( scope, arr[i], i );
	    };
	    function push( arr, elems ){
		    arr.push.apply( arr, elems );
		    return arr;
	    };

	    $(window).unload(function(){// cleanup
		    if( typeof Indexer == 'function' )
			    each( Indexer.instances, function(idxer){
				    idxer.stop();
				    $.removeData( idxer.listener, idxer.event + '.indexer' );
				    idxer.ids = idxer.names = idxer.listener = null;
			    });
	    });

    })($ektron);

    //Initialize Ektron Editors Menu Object
    $ektron().ready(function() {
        Ektron.EditorsMenu.bindEvents();
    });
}
/*********************************************************/
/**************** End Ektron Editor's Menu ***************/
/*********************************************************/


///////////////////////////////////////////////////////////
// ekFlexMenu Javascript file (ek_flexmenu.js):
// Client side support for the Ektron SmartMenu server control.


///////////////////////////////////////////////////////////
// CSS Style Class Name Enumertion:
function ekFlexMenu_classNames() {}
ekFlexMenu_classNames.button = "ekflexmenu_button";
ekFlexMenu_classNames.buttonHover = "ekflexmenu_button_hover";
ekFlexMenu_classNames.buttonSelected = "ekflexmenu_button_selected";
ekFlexMenu_classNames.buttonSelectedHover = "ekflexmenu_button_selected_hover";
ekFlexMenu_classNames.submenuItems = "ekflexmenu_submenu_items";
ekFlexMenu_classNames.submenuItemsHidden = "ekflexmenu_submenu_items_hidden";
ekFlexMenu_classNames.submenu = "ekflexmenu_submenu";
ekFlexMenu_classNames.submenuHover = "ekflexmenu_submenu_hover";
ekFlexMenu_classNames.submenuParent = "ekflexmenu_submenu_parent";
ekFlexMenu_classNames.submenuParentHover = "ekflexmenu_submenu_parent_hover";
ekFlexMenu_classNames.btnLink = "ekflexmenu_accessible_submenu_btnlink";
ekFlexMenu_classNames.link = "ekflexmenu_link";
ekFlexMenu_classNames.linkSelected = "ekflexmenu_link_selected";
ekFlexMenu_classNames.slaveBranchSelected = "ekflexmenu_slave_branch_sel";
ekFlexMenu_classNames.slaveContainer = "ekflexmenu_slavecontainer";

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Class ekFlexMenu:
var ekFlexMenu = function (menuObjectIdString) {

	/////////////////////////
	// public members:

		this.menuId = __ekFlexMenu_returnMenuId;
			// Returns the root menu id for this object.
			// Parameters: 
			//	None.
			
		this.hashCode = __ekFlexMenu_returnHashCode;
			// Returns the hash-code of the server control.
			// Parameters: 
			//	None.

		this.isSubmenuSelected = __ekFlexMenu_isSubmenuSelected;
			// Returns selected-status (and thereby the visibility of the 
			// associated submenu contents) of the identified submenu.
			// Parameters: 
			//	1 - The standard menu-submenu-id string (extra characters discarded).
			
		this.selectSubmenu = __ekFlexMenu_selectSubmenu;
			// Selects the designated submenu, setting the menu-button to a 'selected' 
			// state, and making any associated submenu content items visible.
			// Parameters: 
			//	1 - The standard menu-submenu-id string (extra characters discarded).

		this.unSelectSubmenu = __ekFlexMenu_unSelectSubmenu;
			// De-Selects the designated submenu, setting the menu-button to a non-selected
			// state, and making any associated submenu content items invisible.
			// Parameters: 
			//	1 - The standard menu-submenu-id string (extra characters discarded).
		
		this.hoverButton = __ekFlexMenu_hoverButton;
			// Sets the designated submenu-button to a hovered or non-hovered state.
			// Parameters: 
			//	1 - The standard menu-submenu-id string (extra characters discarded).
			//	2 - Hover flag (boolean; true to set state to hovered).

		this.selectMenuItem = __ekFlexMenu_ekFlexMenu_selectMenuItem;
			// Called when a menu-item (such as a link) is clicked, before
			// the page is submitted to the server.
			// Parameters: 
			//	1 - The element-object that is being selected.
		
		this.initializeWithServerVariables = __ekFlexMenu_initializeWithServerVariables;
			// Called by page-load initialization code, to initialize this object
			// with values passed from the server.
			// Parameters: 
			//	None.
		
		this.showRootMenu = __ekFlexMenu_showRootMenu;
			// Makes the contents of the root-menu visible, selects it's button if it exists.
			// Parameters: 
			//	None.


	/////////////////////////
	// private member functions:
	
		this.buildMenuSubmenuId = __ekFlexMenu_buildMenuSubmenuId;
			// Returns the standard menu-submenu-id string.
			// Parameters: 
			//	1 - The targetted submenu-id number (or string containing only numbers).
			
		this.getFolderButtonObject = __ekFlexMenu_getFolderButtonObject;
			// Returns the folder-button-object for the specified submenu.
			// Parameters: 
			//	1 - The targetted submenu-id (standard menu-submenu-id string).
			
		this.getSubmenuItemsObject = __ekFlexMenu_getSubmenuItemsObject;
			// Returns the folder-item-object for the specified submenu.
			// This may contain menu items such as links and nested submenus.
			// Parameters: 
			//	1 - The targetted submenu-id (standard menu-submenu-id string).

		this.getSubmenuObject = __ekFlexMenu_getSubmenuObject;
			// Returns the corresponding submenu object, 
			// for a given Submenu-Id (or Menu-Submenu-Id):
			// Parameters: 
			//	1 - The targetted submenu-id (standard menu-submenu-id string).
			
		this.getParentLevelSubmenuId = __ekFlexMenu_getParentLevelSubmenuId;
			// Returns the parent-levels menu-submenu-id for the given Submenu,
			// returns zero if the parent (or thismenu) is the root menu.
			// Parameters: 
			//	1 - The targetted submenu-id (standard menu-submenu-id string).
			
		this.getMenuLevel = __ekFlexMenu_getMenuLevel;
			// Returns the integer value of the menu level for
			// the menu identified by the given submenu-id string.
			// Parameters: 
			//	1 - The submenu-id (standard menu-submenu-id string).
			
		this.getEkFlexMenuContainerElement = __ekFlexMenu_getEkFlexMenuContainerElement;
			// Returns the outermost container element (DIV) that 
			// holds this entire ekFlexMenu object.
			// Parameters: 
			//	None.
		
		this.selectSubmenuHelper = __ekFlexMenu_selectSubmenuHelper;
			// Helper funtion for __ekFlexMenu_selectSubmenu, uses 
			// recursionSelects to ensure selected submenus are visible
			// even if they are buried with muliple nesting levels.
			// Parameters: 
			//	1 - The targetted submenu-id (standard menu-submenu-id string).
		
		this.collapseSiblingSubmenus = __ekFlexMenu_collapseSiblingSubmenus;
			// Hide sibling submenus of the designated submenu.
			// Parameters: 
			//	1 - The targetted submenu-id (standard menu-submenu-id string).
		
		this.collapseAllOpenSubmenus = __ekFlexMenu_collapseAllOpenSubmenus;
			// Closes all currently open submenus, to prevent overlap & visual clutter.
			// Parameters: 
			//	1 - Show root flag (boolean; true to make the root menu contents visible).
			
	    this.collapseUnselectedStartLevelSubmenus = __ekFlexMenu_collapseUnselectedStartLevelSubmenus;
	        // Used for slave menu; Closes all unselected submenus:
			// Parameters: 
			//	None.

		this.markParentSubmenu = __ekFlexMenu_markParentSubmenu;
			// Sets the parent folders' style to be a parent (optionally 
			// used in CSS to style parents & children differently):
			// Parameters: 
			//	1 - The submenu-id whose parent to mark (standard menu-submenu-id string).

		this.unMarkParentSubmenu = __ekFlexMenu_unMarkParentSubmenu;
			// Sets the parent folders' style to be a normal non-parent (optionally 
			// used in CSS to style parents & children differently):
			// Parameters: 
			//	1 - The submenu-id whose parent to unmark (standard menu-submenu-id string).
			
		this.hoverSubmenu = __ekFlexMenu_hoverSubmenu;
			// Sets the menus' container style to be hovered,
			// (optionally used in CSS to style contents & children differently):
			// Parameters: 
			//	1 - The submenu-id whose parent to hover (standard menu-submenu-id string).
			
		this.unHoverSubmenu = __ekFlexMenu_unHoverSubmenu;
			// Sets the menus' container style to be unhovered,
			// (optionally used in CSS to style contents & children differently):
			// Parameters: 
			//	1 - The submenu-id whose parent to unhover (standard menu-submenu-id string).
			
			
		this.getEkFlexMenuElementsByTagName = __ekFlexMenu_getEkFlexMenuElementsByTagName;
			// Returns an array of the ekflexmenu-elements with the specified tag-name.
			// Parameters: 
			//	1 - the element tag-name to search for.
			
		this.getElementsByClassName = __ekFlexMenu_getElementsByClassName;
			// Returns an array of the menu-elements, whose className 
			// attributes match the supplied name.
			// Parameters: 
			//	1 - the className to search for.
			
		this.getElementsByClassNameAndTagName = __ekFlexMenu_getElementsByClassNameAndTagName;
			// Returns an array of the menu-elements, whose className 
			// attributes match the supplied name.
			// Parameters: 
			//	1 - the className to search for.
			//  2 - the tag-name of the elements to include in the search.
			
		this.getEkFlexMenuElementsByName =  __ekFlexMenu_getEkFlexMenuElementsByName;
			// Returns an array of the menu-elements, whose name attribute
			// match the supplied name.
			// Parameters: 
			//	1 - the name to search for.

		this.getDirectChildIds = __ekFlexMenu_getDirectChildIds;
			// Returns an array of all direct child-submenu-ids (length = 0 if none).
			// Parameters: 
			//	1 - The targetted submenu-id (standard menu-submenu-id string).
			
		this.mouseIn = __ekFlexMenu_mouseIn;
			// Called by external (non-object-instance) code, to prepare for 
			// delayed opening of identified submenu.
			// Parameters: 
			//	1 - the event object.
			//	2 - the element-object that triggered the event.
		
		this.mouseInHelper = __ekFlexMenu_mouseInHelper;
			// Shows/selects the appropriate submenu.
			// Parameters: 
			//	None.

		this.mouseOut = __ekFlexMenu_mouseOut;
			// Called by external (non-object-instance) code, to prepare for 
			// delayed opening of identified submenu.
			// Parameters: 
			//	1 - the event object.
			//	2 - the element-object that triggered the event.

		this.mouseOutHelper = __ekFlexMenu_mouseOutHelper;
			// Hides/unselects the appropriate submenu (possibly all but root).
			// Parameters: 
			//	None.

		this.disableAllEventHandlers =  __ekFlexMenu_disableAllEventHandlers;
			// Disables all event handlers for elements of this menu object:
			// Parameters: 
			//	None.

		this.disableElementEventHandlers = __ekFlexMenu_disableElementEventHandlers;
			// Disables all event handlers for the given element:
			// Parameters: 
			//	1 - the element to disable events on.

		this.updateNoScriptLinks = __ekFlexMenu_updateNoScriptLinks;
			// When server (XSLT) builds HTML to create the menu,
			// it sets the hrefs of the menu-buttons to signal
			// the server that Javascript is disabled, and the page
			// needs to display a submenu. This way the menu will 
			// still funtion if Javascript is disabled/not supported
			// (required for 508 compliance), this also simplifies Ajax
			// related issues. This function modifies all these to eliminate 
			// page refreshes (not needed if Javascript is enabled).
			// Parameters: 
			//	None.
			
		this.initializeMouseOverPopUp = __ekFlexMenu_initializeMouseOverPopUp;
		    // Determine if MouseOverPopUp is enabled, and 
            // perform related initialization if it is.
			// Parameters: 
			//	None.

		
		///////////////////////////////////////////////////////
		// Master/Slave related functions:
		this.getSlaveControlObject = __ekFlexMenu_getSlaveControlObject;
		this.convertIdToSlaveControlId = __ekFlexMenu_convertIdToSlaveControlId;
		this.callSlave__showSubmenuBranch = __ekFlexMenu_callSlave__showSubmenuBranch;
		this.showSubmenuBranch = __ekFlexMenu_showSubmenuBranch;
		this.unSelectSubmenuList = __ekFlexMenu_unSelectSubmenuList;
		this.initializeSlaveMenu = __ekFlexMenu_initializeSlaveMenu;
		this.initializeMasterMenu = __ekFlexMenu_initializeMasterMenu;
		this.isTopLevelUI = __ekFlexMenu_isTopLevelUI;
		this.recordLastSlaveStartLevelMenu = __ekFlexMenu_recordLastSlaveStartLevelMenu;
		this.getLastSlaveStartLevelMenu = __ekFlexMenu_getLastSlaveStartLevelMenu;
		this.unHideSlaveMenu = __ekFlexMenu_unHideSlaveMenu;
		// Master/Slave related variables:
		this.topLevelUI = null;
		this.lastSelectedStartLevelSlaveMenuId = null;
		this.ekFlexMenu_defaultMenuIdString = false; // Slave menu default submenu-id.
		this.ekFlexMenu_slaveStartLevelIds = null; // slave menu start level ids.
		this.ekFlexMenu_slaveStartLevel = null; // slave menu start level.


		///////////////////////////////////////////////////////
		// Member Ajax releated members:
		this.loadXMLDoc = __ekFlexMenu_ajax_loadXMLDoc;
		this.DecodeHTML = __ekFlexMenu_ajax_DecodeHTML;
		this.getPayload = __ekFlexMenu_ajax_getPayload;
		this.appendText = __ekFlexMenu_ajax_appendText;
		this.appendXml = __ekFlexMenu_ajax_appendXml;
		this.removeMenuFragmentContainer = __ekFlexMenu_ajax_removeMenuFragmentContainer;
		this.callService = __ekFlexMenu_ajax_callService;
		this.callAjaxForUserClick = __ekFlexMenu_ajax_callAjaxForUserClick;
		// Ajax related variables:
		//this.userAjaxXmlHttp1 = null;
		this.userAjaxParentId1 = ""


	/////////////////////////
	// private variables:
	
		this.private_menuIdString = __ekFlexMenu_parseMenuId(menuObjectIdString);
			// holds the root menu id.

		this.private_serverControlHash = __ekFlexMenu_static_parseServerControlHash(menuObjectIdString);
			// holds the server controls' hash-code.

		this.private_autoCollapseSubmenus = true;
			// Controls action on select-submenu; will 
			// collapse all other submenus - if this is true.

		this.private_startWithRootFolderCollapsed = false;
			// If set, will hide the root menu contents when all submenus 
			// are collapsed, otherwise will always leave root contents visible.

		this.private_startCollapsed = true;
			// If set, menu is initially rendered with all submenus closed.
			
		this.private_ajaxEnabled = true;
			// If set, will attempt to make Ajax calls to load submenus.
		
		this.ekFlexMenu_ajaxWSPath = "";
			// The Ajax-WebService base path.
			
		this.ekFlexMenu_displayXslt = "";
			// value to call web-service with for Ajax, to select server-side XSLT to process XML.
			
		this.ekFlexMenu_cacheInterval = "";
			// value to call web-service with for Ajax, to select period to hold server-side to cache data.
			
		this.private_masterControlIdHash = "";
			// If this is a slave control, then this variable holds the 
			// hash-code of the master source controls id.
			
		this.private_subscriberList = "";
			// If this a master control, then this comma delited list (string)
			// holds the hash-codes of each subscribing control.
			
		this.private_slaveControl = "";
			// If this a master control, then this variable
			// holds the hash-code of the slave control.
		
		this.private_isMasterControl = false;
			// True if this control is synchronized to another (slave) control.

		this.private_isSlaveControl = false;
			// True if this control is synchronized to another (master) control.
			
		this.private_lastSelectedMenuItemObj = null;
			// Holds previously selected menu-item-link, used to set old 
			// selection to a non-selected state when a new one is selected.
			
		this.private_selectionChanged = false;
			// Flag to indicate that user activity has changed state from
			// that which was rendered from the server.
			
		this.private_selectedMenuList = "";
			// Holds previously selected menu, used to set the old button
			// selection to a non-selected state when a new one is selected.
		
		this.private_swRevision = "0";
			// The software revision of the server control.
			
		this.enableMouseOverPopUp = false;
		    // True to indicate that a submenu should open when moused over,
		    // False inidcates that a click is required to oen submenus.
			
		// Mouse related variables; only used for pop-up menus (via mouse over):
			this.private_enableMouseOverSubmenuActivation = false;
				// If true, then mouseIn and mouseOut events will be used to 
				// open and close submenus (must be wired by server code).
				
			this.private_mouseEventTimer = null;
				// Used to hold the count-down timer object, to delay show/hide action.
				
			this.private_mouseEventEnteringElementId = null;
				// Holds the ID of the element-id that triggered the mouseIn event.
				
			this.private_mouseEventExitingElementId = null;
				// Holds the ID of the element-id that triggered the mouseOut event.

}
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// Initialize Public Static Members:

	ekFlexMenu.getMenuObj = __ekFlexMenu_static_getMenuObj;
		// Returns the Menu-Object for a given ekflexmenu element ID,
		// creates a new ekFlexMenu object if needed (stores these in
		// an array as a property to the indow object - making it 
		// available/shared with all SmartMenus (this was multple menus 
		// can exist on a page, and have different objects that 
		// are avaiable anywhere - given given an ekflexmenu element ID).
		// Parameters: 
		//	1 - The standard menu-submenu-id string (extra characters discarded).


	ekFlexMenu.parseMenuSubmenuIdString = __ekFlexMenu_static_parseMenuSubmenuIdString;
		// Returns the MenuSubmenuID string, for a given ekflexmenu element-ID
		// (ex. given "e1234567_1_submenu_2_button" returns
		// "e1234567_1_submenu_2" for root-menu 1, submenu 2):
		// Parameters: 
		//	1 - The standard menu-submenu-id string (extra characters discarded).

	ekFlexMenu.parseServerControlHash = __ekFlexMenu_static_parseServerControlHash;
		// Returns the server controls' hash-code of the supplied string (or
		// whatever was supplied if not a valid menu-submenu id string):
		// Parameters: 
		//	1 - The standard menu-submenu-id string (extra characters discarded).

	// Menu Folder-Button event handlers:
		ekFlexMenu.menuBtnClickHdlr = __ekFlexMenu_static_menuButtonClickEventHandler;
			// Handler for Menu-Button-Click events
			// Parameters: 
			//	1 - the event-object.
			
		ekFlexMenu.menuBtnKeyHdlr = __ekFlexMenu_static_menuButtonKeyDownEventHandler;
			// Handler for Menu-Button-Keydown events.
			// Parameters: 
			//	1 - the event-object.

		ekFlexMenu.menuBtnMouseOverHdlr = __ekFlexMenu_static_menuButtonMouseOverEventHandler;
			// Handler for Menu-Button-MouseOver events.
			// Parameters: 
			//	1 - the event-object.

		ekFlexMenu.menuBtnMouseOutHdlr = __ekFlexMenu_static_menuButtonMouseOutEventHandler;
			// Handler for Menu-Button-MouseOut events.
			// Parameters: 
			//	1 - the event-object.

		ekFlexMenu.menuBtnFocusHdlr = __ekFlexMenu_static_menuButtonFocusEventHandler;
			// Handler for Menu-Button-Focus events.
			// Parameters: 
			//	1 - the event-object.

		ekFlexMenu.menuBtnBlurHdlr = __ekFlexMenu_static_menuButtonBlurEventHandler;
			// Handler for Menu-Button-Blur events.
			// Parameters: 
			//	1 - the event-object.

		ekFlexMenu.menuBtnLinkFocusHdlr = __ekFlexMenu_static_menuButtonLinkFocusEventHandler;
			// Handler for Menu-Button-Link-onFocus events.
			// Parameters: 
			//	1 - the event-object.

		ekFlexMenu.menuBtnLinkBlurHdlr = __ekFlexMenu_static_menuButtonLinkBlurEventHandler;
			// Handler for Menu-Button-Link-onBlur events.
			// Parameters: 
			//	1 - the event-object.


	// Menu Item-Link event handlers:
		ekFlexMenu.itemLinkClickHdlr = __ekFlexMenu_static_menuItemLinkClickEventHandler;
			// Handler for Menu-Item-Link-Click events.
			// Parameters: 
			//	1 - the event-object.
		
		// Not Needed (key translated by browser, others handled by link pseudo classes):
			//ekFlexMenu.itemLinkKeyHdlr = __ekFlexMenu_static_menuItemLinkKeyDownEventHandler;
			//ekFlexMenu.itemLinkMouseOverHdlr = __ekFlexMenu_static_menuItemLinkMouseOverEventHandler;
			//ekFlexMenu.itemLinkMouseOutHdlr = __ekFlexMenu_static_menuItemLinkMouseOutEventHandler;
			//ekFlexMenu.itemLinkFocusHdlr = __ekFlexMenu_static_menuItemLinkFocusEventHandler;
			//ekFlexMenu.itemLinkBlurHdlr = __ekFlexMenu_static_menuItemLinkBlurEventHandler;


	// mouseIn and mouseOut event handlers:
		ekFlexMenu.mouseIn = __ekFlexMenu_static_mouseIn;
			// Prepare for delayed opening of the submenu related to the event-triggering element.
			// Parameters: 
			//	1 - the event-object.
		
		ekFlexMenu.mouseOut = __ekFlexMenu_static_mouseOut;
			// Prepare for delayed closing of the submenu related to the event-triggering element.
			// Parameters: 
			//	1 - the event-object.

		ekFlexMenu.mouseIn_empty = function (event) {return (true);} // bubble event...

///////////////////////////////////////////////////////////////////////////////
// Initialize Private Static Members:
	ekFlexMenu.private_isValidMenuSubmenuIdString = __ekFlexMenu_static_isValidMenuSubmenuIdString
		// Verifies that the supplied element-ID string is a valid 
		// MenuSubmenuID string (ex. "e1234567_1_submenu_2_button...")
		// Note: it may be more than this, but as long as the submitted string
		// begins with a valid and usable standard menu-submenu-id string, then
		// the results are positive (any extra appended characters are ignored).
		// Parameters: 
		//	1 - the id-string to test (may be an element-objects' Id).

	ekFlexMenu.private_serverHelper_initialize = __ekFlexMenu_static_serverHelper_initialize;
		// Calls initialization code, to configure and pre-open select menus.
		// Attempts to obtain a ekFlexMenu object, and then calls its' 
		// initializeWithServerVariables() method...
		// Parameters: 
		//	1 - The standard menu-submenu-id string (submenu-id and extra characters discarded).
	
	ekFlexMenu.private_startupAllSmartMenus = __ekFlexMenu_static_serverHelper_startupAllSmartMenus;
		// Ensures that all ekFlexMenu objects have been initialized.
		// Parameters: 
		//	None.
		
	ekFlexMenu.private_shutdownAllSmartMenus = __ekFlexMenu_static_serverHelper_shutdownAllSmartMenus;
		// Ensures that all ekFlexMenu objects have been un-initialized (allows clean-up, if needed).
		// Parameters: 
		//	None.
		
	ekFlexMenu.private_getMenuId = __ekFlexMenu_static_getMenuId;
		// Returns the base (root) Menu-ID number, for a given ekflexmenu element ID.
		// Parameters: 
		//	1 - the elements' full Id (shuold contain the standard menu-submenu-id string).
	
	ekFlexMenu.private_getMenuIdString = __ekFlexMenu_static_getMenuIdString;
		// Returns the base (root) Menu-ID String, for a given ekflexmenu element ID.
		// Parameters: 
		//	1 - the elements' full Id (shuold contain the standard menu-submenu-id string).
		
	ekFlexMenu.private_getSubmenuId = __ekFlexMenu_static_getSubmenuId;
		// Returns the Submenu-ID number, for a given ekflexmenu element ID.
		// Parameters: 
		//	1 - the elements' full Id (shuold contain the standard menu-submenu-id string).
		
	ekFlexMenu.private_getSubmenuIdString = __ekFlexMenu_static_getSubmenuIdString;
		// Returns the Submenu-ID String, for a given ekflexmenu element ID.
		// Parameters: 
		//	1 - the elements' full Id (shuold contain the standard menu-submenu-id string).
		
	ekFlexMenu.private_getEvent = __ekFlexMenu_static_getEvent;
		// Returns the event object.
		// Parameters: 
		
	ekFlexMenu.private_getEventElement = __ekFlexMenu_static_getEventElement;
		// Returns the element object that triggered the event.
		// Parameters: 
		//	1 - the event (may be null if browser is IE).
		
	ekFlexMenu.private_getIntNumber = __ekFlexMenu_static_getIntNumber;
		// Returns the decimal equivelent of the given string value, 
		// or zero (0) if supplied string value is not a number.
		// Parameters: 
		//	1 - the string to convert to a number.

	ekFlexMenu.private_isValidSubmenuObj = __ekFlexMenu_static_isValidSubmenuObj;
		// Verifies that element is a valid submenu object.
		// Parameters: 
		//	1 - the submenu object to test.
		//	2 - the class-name to compare (may be a fragment, which 
		//	    is useful if the class name can vary - such as 
		//	    "ekflexmenu_button" and "ekflexmenu_button_selected").
		
	ekFlexMenu.private_isValidSubmenuButton = __ekFlexMenu_static_isValidSubmenuButton;
		// Verifies that element object is a valid submenu button.
		// Parameters: 
		//	1 - the button object to test.
		
	ekFlexMenu.private_isValidSubmenuItems = __ekFlexMenu_static_isValidSubmenuItems;
		// Verifies that element object is a valid submenu submenu_items.
		// Parameters: 
		//	1 - the submenu-items object to test.
		
	ekFlexMenu.private_isValidSubmenu = __ekFlexMenu_static_isValidSubmenu;
		// Verifies that element object is a valid submenu submenu.
		// Parameters: 
		//	1 - the submenu object to test.
		
	ekFlexMenu.private_isValidSubmenuLink = __ekFlexMenu_static_isValidSubmenuLink;
		// Verifies that element object is a valid submenu link.
		// Parameters: 
		//	1 - the submenu-link object to test.
		
	ekFlexMenu.private_isValidEKMenu = __ekFlexMenu_static_isValidEKMenu;
		// Verifies that element object is a valid main ekflexmenu object.
		// Parameters: 
		//	1 - the main-ekflexmenu-object to test.

	ekFlexMenu.private_isDefined = __ekFlexMenu_static_isDefined;
		// Verifies that the passed in object is not undefined.
		// Parameters: 
		//	1 - the object to test.

	ekFlexMenu.isDefinedNotNull = __ekFlexMenu_static_isDefinedNotNull;
		// Verifies that the passed in object is not undefined, and is not null.
		// Parameters: 
		//	1 - the main-ekflexmenu-object to test.

	ekFlexMenu.hasClassName = __ekFlexMenu_static_hasClassName;
		// Tests for the presence of a specified classname in the supplied object.
		// Parameters: 
		//	1 - the object to test.
		//  2 - the classname to search for.
		
	ekFlexMenu.addClassName = __ekFlexMenu_static_addClassName;
		// Ensures that the given object has the specified classname.
		// Parameters: 
		//	1 - the object to update.
		//  2 - the classname to add.
		
	ekFlexMenu.removeClassName = __ekFlexMenu_static_removeClassName;
		// Ensures that the given object does not have the specified classname.
		// Parameters: 
		//	1 - the object to update.
		//  2 - the classname to remove.

	ekFlexMenu.submenuIsTopLevel = __ekFlexMenu_static_submenuIsTopLevel;
		// Returns true if the string points to the top level.
		// Parameters: 
		//	1 - A standard menu-submenu-id string (extra characters are discarded).
		
	ekFlexMenu.clearSiblingButtons = __ekFlexMenu_clearSiblingButtons;
        // Called when mouseover menu-links to unselect sibling-submenus.
        // ...Only wired-up when enableMouseOverPopUp is true:
		// Parameters: 
		//	1 - the calling element.

	// Ajax static functions:
	ekFlexMenu.ajaxCallBack_stateChange = __ekFlexMenu_ajaxCallBack_stateChange;
	ekFlexMenu.ajaxGetMenuObj = __ekFlexMenu_ajaxGetMenuObj
	ekFlexMenu.ajaxCancelServerCall  = __ekFlexMenu_static_ajaxCancelServerCall;


	// Static variables:
	ekFlexMenu.static_userAjaxXmlHttp1 = null;
		
	// Constants:
		ekFlexMenu.private_menuPrefix = "e"; // ekFlexMenu.private_menuPrefix = "ekfxmensel_";
		ekFlexMenu.private_hashLength = 9; /* Eight character hexadecimal hash code, prefixed with "e" */
		ekFlexMenu.private_namePrefix = "ekmengrp_";
		//Update: no longer used: ekFlexMenu.private_submenuDelimiter = "_submenu_";
		ekFlexMenu.private_buttonElementIdPostFix = "_button";
		ekFlexMenu.private_submenuItemsElementIdPostFix = "_submenu_items";
		ekFlexMenu.private_parentIdElementIdPostFix = "_parentid";
		ekFlexMenu.private_ekflexmenuContainerElementIdPostFix = "_ekflexmenu"


//*********************************************************
// ekFlexMenu Static Member Definitions Begin:
//*********************************************************

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function
// Returns the Menu-Object for a given ekflexmenu element ID,
// creates a new ekFlexMenu object if needed (stores these in
// an array as a property to the window object - making it 
// available/shared with all SmartMenus (this way multiple menus 
// can exist on a page, and have different objects that 
// are available anywhere - given an ekflexmenu element ID).
function __ekFlexMenu_static_getMenuObj(elementId) {
	var menuObj = null;
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(elementId);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		//var menuIdString = ekFlexMenu.private_getMenuIdString(menuSubmenuId);
		var menuHashCode = ekFlexMenu.parseServerControlHash(menuSubmenuId);
		
		if (("undefined" == typeof window.ekFlexMenu_MenuObjArray)
			|| (null == window.ekFlexMenu_MenuObjArray)) {
			var MenuObjArray = new Array;
			menuObj = new ekFlexMenu(menuSubmenuId);
			MenuObjArray[menuHashCode] = menuObj;
			window.ekFlexMenu_MenuObjArray = MenuObjArray;
		} 
		else if (null == window.ekFlexMenu_MenuObjArray[menuHashCode]) {
			window.ekFlexMenu_MenuObjArray[menuHashCode] = menuObj = new ekFlexMenu(menuSubmenuId);
		}
		else {
			menuObj = window.ekFlexMenu_MenuObjArray[menuHashCode];
		}
	}
	return (menuObj);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the MenuSubmenuID string, for a given ekflexmenu element-ID
// (ex. given "e1234567_1_submenu_2_button" returns
// "e1234567_1_submenu_2" for root-menu 1, submenu 2):
//
// Update:
// Now prefixed with server-control IDs' hexidecimal hash-code:
// (ex. given "c580fa7b_1_2_button" returns
// "c580fa7b_1_2" for root-menu 1, submenu 2):
function __ekFlexMenu_static_parseMenuSubmenuIdString(elementId) {
	var result = "";
	if (elementId 
		&& ("undefined" != typeof elementId)
		&& ("undefined" != typeof elementId.length)
		&& (elementId.length > 0)
		&& ("undefined" != typeof elementId.indexOf)) {

		var frag = elementId.split("_");
		if (frag[0] && (ekFlexMenu.private_hashLength == frag[0].length) && frag[1] && frag[2]) {
			result = frag[0] + "_" + frag[1] + "_" + frag[2];
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the server controls' hash-code of the supplied string (or
// whatever was supplied if not a valid menu-submenu id string):
function __ekFlexMenu_static_parseServerControlHash(id) {
	var result = "";
	if (id && id.split) {
		var frag = id.split("_");
		if (frag[0] && (ekFlexMenu.private_hashLength == frag[0].length)) {
			result = frag[0];
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the event object:
function __ekFlexMenu_static_getEvent(e) {
	if (e) return (e);
	else return (window.event);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the element object that triggered the event:
function __ekFlexMenu_static_getEventElement(e) {
	if (e) return ((e.srcElement) ? e.srcElement : e.target);
	else return (null);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-Click events:
function __ekFlexMenu_static_menuButtonClickEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	var result = true;
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				var prevState = menuObj.isSubmenuSelected(el.id);
				if (prevState) {
					menuObj.unSelectSubmenu(el.id);
					result = false; // event consumed.
				}
				else {
					menuObj.selectSubmenu(el.id);
					result = false; // event consumed.
					
					// Attempt to call ajax if enabled, refresh the page 
					// the with desired submenu open, if the call fails:
					if (menuObj.private_ajaxEnabled) {
						if (menuObj.callAjaxForUserClick(el.id)) {
							// Prevent the "noscript" link from refreshing the page:
							ev.returnValue = false;
							//ev.cancelBubble = true;
							result = false; // event consumed.
						}
						else {
							result = true; // event not consumed; fire href link.
						}
					}
				}
			}
		}
		// Test to see if browser should follow link:
		if (ekFlexMenu.isDefinedNotNull(el)) {
			if (ekFlexMenu.isDefinedNotNull(el.href)) {
				if (ekFlexMenu.isDefinedNotNull(el.href.indexOf)) {
					if (0 > el.href.indexOf("ekfxmen_noscript=1")) {
						// This is a valid user link: 
						//   signal event not consumed, and fire href link.
						result = true;
					}
				}
			}
		}
	}
	return (result);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-Keydown events:
// Note: Typically called by a submenu-folder-button when 
//   a key is pressed, and 508-Compliance is disabled. 
function __ekFlexMenu_static_menuButtonKeyDownEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {

			var key = ev.keyCode;
			if (key && ((key == 32))) { // select submenu on space-bar press...

				// Prevent screen from scrolling, due to internal 
				// link-click (anchor-tag, with href="#"):
				if (ev.preventDefault && ev.stopPropagation) {
					ev.preventDefault();
					ev.stopPropagation();
				}
				else {
					ev.returnValue = false;
				}
				
				// Now toggle the state of the menu:
				ekFlexMenu.menuBtnClickHdlr(ev);
				
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-MouseOver events:
function __ekFlexMenu_static_menuButtonMouseOverEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				menuObj.hoverButton(el.id, true);
				menuObj.hoverSubmenu(el.id);
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-MouseOut events:
function __ekFlexMenu_static_menuButtonMouseOutEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				menuObj.hoverButton(el.id, false);
				menuObj.unHoverSubmenu(el.id);
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-Focus events:
function __ekFlexMenu_static_menuButtonFocusEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				menuObj.hoverButton(el.id, true);
				menuObj.hoverSubmenu(el.id);
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-Blur events:
function __ekFlexMenu_static_menuButtonBlurEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				menuObj.hoverButton(el.id, false);
				menuObj.unHoverSubmenu(el.id);
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-Link-onFocus events:
function __ekFlexMenu_static_menuButtonLinkFocusEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				menuObj.hoverButton(el.id, true);
				menuObj.hoverSubmenu(el.id);
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Button-Link-onBlur events:
function __ekFlexMenu_static_menuButtonLinkBlurEventHandler(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				menuObj.hoverButton(el.id, false);
				menuObj.unHoverSubmenu(el.id);
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
function __ekFlexMenu_static_getValidParentId(el) {
	var topContainer = "_ekflexmenu";
	var len = topContainer.length;
	
	while(el 
		&& (el.parentNode)) {
		
		if (el.id && (el.id.length)) {
			if (ekFlexMenu.private_isValidMenuSubmenuIdString(el.id)) {
				return (el.id);
			}
		}
		el = el.parentNode;
	}

	return ("");
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// mouseIn event handler; prepares for delayed opening of 
// the submenu related to the event-triggering element.
// Parameters: 
//	1 - the event-object.
function __ekFlexMenu_static_mouseIn(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
		    var elmtId = el.id;
			if (0 == elmtId.length) {
				elmtId = __ekFlexMenu_static_getValidParentId(el);
			}
			var menuObj = ekFlexMenu.getMenuObj(elmtId);
			if (menuObj) {
				menuObj.mouseIn(e, el);
				return (true); // event not-consumed (allow bubbling).
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// mouseOut event handler; prepares for delayed closing of 
// the submenu related to the event-triggering element.
// Parameters: 
//	1 - the event-object.
function __ekFlexMenu_static_mouseOut(e) {
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {
		    var elmtId = el.id;
			if (0 == elmtId.length) {
				elmtId = __ekFlexMenu_static_getValidParentId(el);
			}
			var menuObj = ekFlexMenu.getMenuObj(elmtId);
			if (menuObj) {
				menuObj.mouseOut(e, el);
				return (true); // event not-consumed (allow bubbling).
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handler for Menu-Item-Link-Click events:
function __ekFlexMenu_static_menuItemLinkClickEventHandler(e) {
	var linkIsAButton = false;
	var ev = ekFlexMenu.private_getEvent(e);
	if (ev) {
		var el = ekFlexMenu.private_getEventElement(ev);
		if (el && ("undefined" != el.id)) {

			if (ekFlexMenu.isDefinedNotNull(el)
				&& ekFlexMenu.isDefinedNotNull(el.tagName)
				&& ("IMG" == el.tagName)) 
			{
				// The element is an image, attempt to pass
				// -off the event to the wrapping element: 
				if (ekFlexMenu.isDefinedNotNull(el.parentNode) 
					&& ekFlexMenu.private_isValidSubmenuButton(el.parentNode))
				{
					el = el.parentNode;
					if (ekFlexMenu.isDefinedNotNull(el.click)) {
						el.click(ev);
						return (false);
					}
					linkIsAButton = true;
				}
				else {
					return (true); 
				}
			}
			else if (ekFlexMenu.private_isValidSubmenuButton(el)) {
				linkIsAButton = true;
			}

			var menuObj = ekFlexMenu.getMenuObj(el.id);
			if (menuObj) {
				// may need to toggle menu state if the link is a menu button:				
				if (linkIsAButton) {
					var prevState = menuObj.isSubmenuSelected(el.id);
					if (prevState) {
						menuObj.unSelectSubmenu(el.id);
					}
					else {
						menuObj.selectSubmenu(el.id);
					}
				}
				menuObj.selectMenuItem(el);
				return (false); // event consumed.
			}
		}
	}
	return (true);	
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the decimal equivelent of the given string value, 
// or zero (0) if supplied string value is not a number:
function __ekFlexMenu_static_getIntNumber(val) {
	var result = 0;
	var tempResult = parseInt(val, 10);
	if (NaN != tempResult) {
		result = tempResult;
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the Menu-ID number, for a given ekflexmenu element ID:
function __ekFlexMenu_static_getMenuId(elementId) {
	var result = 0;
	var idString = ekFlexMenu.private_getMenuIdString(elementId);
	if (idString.length) {
		result = ekFlexMenu.private_getIntNumber(idString);
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the Menu-ID String, for a given ekflexmenu element ID:
function __ekFlexMenu_static_getMenuIdString(elementId) {
	var result = "";
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(elementId);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var frag = elementId.split("_");
		if (frag[0] && (ekFlexMenu.private_hashLength == frag[0].length) && frag[1] && frag[2]) {
			result = frag[1];
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the Submenu-ID number, for a given ekflexmenu element ID:
function __ekFlexMenu_static_getSubmenuId(elementId) {
	var result = 0;
	var idString = ekFlexMenu.private_getSubmenuIdString(elementId);
	if (idString.length) {
		result = ekFlexMenu.private_getIntNumber(idString);
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns the Submenu-ID String, for a given ekflexmenu element ID:
function __ekFlexMenu_static_getSubmenuIdString(elementId) {
	var result = "";
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(elementId)) {
		var frag = elementId.split("_");
		if (frag[0] && (ekFlexMenu.private_hashLength == frag[0].length) && frag[1] && frag[2]) {
			result = frag[2];
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Verifies that the supplied element-ID string is a valid 
// MenuSubmenuID string (ex. "e1234567_1_submenu_2_button")
function __ekFlexMenu_static_isValidMenuSubmenuIdString(elementId) {
	var result = false;
	if (elementId 
		&& ("undefined" != typeof elementId)
		&& ("undefined" != typeof elementId.length)
		&& (elementId.length > 0)
		&& ("undefined" != typeof elementId.indexOf)) {
		var frag = elementId.split("_");
		if (frag[0] && (ekFlexMenu.private_hashLength == frag[0].length) && frag[1] && frag[2]) {
					result = true;
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Verifies that element is a valid submenu object:
function __ekFlexMenu_static_isValidSubmenuObj(obj, classNameFrag) {
	var result = false;
	if (obj 
		&& ("undefined" != typeof obj.id)
		&& ("undefined" != typeof obj.className)
		&& ("undefined" != typeof obj.className.indexOf)
		&& (0 <= obj.className.indexOf(classNameFrag))) {
		result = true;
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Verifies that element object is a valid submenu button:
function __ekFlexMenu_static_isValidSubmenuButton(obj) {
	return (ekFlexMenu.private_isValidSubmenuObj(obj, ekFlexMenu_classNames.button));
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Verifies that element object is a valid submenu submenu_items:
function __ekFlexMenu_static_isValidSubmenuItems(obj) {
	return (ekFlexMenu.private_isValidSubmenuObj(obj, "submenu_items"));
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Verifies that element object is a valid submenu submenu:
function __ekFlexMenu_static_isValidSubmenu(obj) {
	return (ekFlexMenu.private_isValidSubmenuObj(obj, "submenu"));
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Verifies that element object is a valid submenu link:
function __ekFlexMenu_static_isValidSubmenuLink(obj) {
	return (ekFlexMenu.private_isValidSubmenuObj(obj, "link"));
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Verifies that element object is a valid main ekflexmenu object:
function __ekFlexMenu_static_isValidEKMenu(obj) {
	return (ekFlexMenu.private_isValidSubmenuObj(obj, "ekflexmenu"));
}

///////////////////////////////////////////////////////////
// Verifies that the passed in object is not undefined.
// Parameters: 
//	1 - the main-ekflexmenu-object to test.
function __ekFlexMenu_static_isDefined(obj) {
	return ("undefined" != typeof obj);
}

///////////////////////////////////////////////////////////
// Verifies that the passed in object is not 
// undefined, and is not null.
// Parameters: 
//	1 - the main-ekflexmenu-object to test.
function __ekFlexMenu_static_isDefinedNotNull(obj) {
	return (ekFlexMenu.private_isDefined(obj) && (null != obj));
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Calls initialization code, to configure and pre-open select menus:
function __ekFlexMenu_static_serverHelper_initialize(id) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(id);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		//var menuHashCode = ekFlexMenu.parseServerControlHash(menuSubmenuId);
		var menuObj = ekFlexMenu.getMenuObj(menuSubmenuId);
		if (menuObj) {
			menuObj.initializeWithServerVariables();
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Ensures that all ekFlexMenu objects have been initialized:
function __ekFlexMenu_static_serverHelper_startupAllSmartMenus() {
	if (("undefined" != typeof window.ekFlexMenu_ekflexmenuArray)
		&& (null != window.ekFlexMenu_ekflexmenuArray)
		&& ("undefined" != typeof window.ekFlexMenu_ekflexmenuArray.length)
		&& (null != window.ekFlexMenu_ekflexmenuArray.length)) {
		
		for (var idx = 0; idx < window.ekFlexMenu_ekflexmenuArray.length; idx++) {
			var startMenu = window.ekFlexMenu_ekflexmenuArray[idx];
			if (startMenu.length) 
				ekFlexMenu.private_serverHelper_initialize(startMenu);
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Ensures that all ekFlexMenu objects have been initialized:
function __ekFlexMenu_static_serverHelper_shutdownAllSmartMenus() {
	ekFlexMenu.ajaxCancelServerCall();
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Terminates any outstanding Ajax calls:
function __ekFlexMenu_static_ajaxCancelServerCall()
{
	if (ekFlexMenu.static_userAjaxXmlHttp1 != null) {
		ekFlexMenu.static_userAjaxXmlHttp1.abort();
		ekFlexMenu.static_userAjaxXmlHttp1 = null;
	}
}



///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Tests for the presence of a specified classname in the supplied object.
function __ekFlexMenu_static_hasClassName(obj, className) {
	var idx, names;
	if (obj && ("undefined" != typeof obj.className)
		&& ("undefined" != typeof obj.className.split)) {
		names = obj.className.split(" ");
		for (idx = 0; idx < names.length; idx++) {
			if (names[idx] == className)
				return true;
		}
	} 
	return false;
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Ensures that the given object has the specified classname.
function __ekFlexMenu_static_addClassName(obj, className) {
	if (ekFlexMenu.hasClassName(obj, className))
		return;
	
	if (obj && ("undefined" != typeof obj.className)
		&& ("undefined" != typeof obj.className.length)) {
		if (0 == obj.className.length) {
			obj.className = className;
		}
		else {
			obj.className += " " + className;
		}
	} 
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Ensures that the given object does not have the specified classname.
function __ekFlexMenu_static_removeClassName(obj, className) {
	var idx, matchId, names, result;
	if (obj && ("undefined" != typeof obj.className)
		&& ("undefined" != typeof obj.className.split)) {
		names = obj.className.split(" ");
		obj.className = "";
		for (idx = 0; idx < names.length; idx++) {
			if (names[idx] != className) {
				if (idx > 0)
					obj.className += " " + names[idx];
				else
					obj.className += names[idx];
			}
		}
	} 
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Returns true if the string points to the top level.
function __ekFlexMenu_static_submenuIsTopLevel(elementId) {
	var result = false;
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(elementId)) {
		var sub = ekFlexMenu.private_getSubmenuIdString(elementId);
		var ancestorId = ekFlexMenu.private_getMenuIdString(elementId);
		result = ((0 == sub) || (ancestorId == sub));
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Handle Ajax callback:
function __ekFlexMenu_ajaxCallBack_stateChange()
{
	if (ekFlexMenu.static_userAjaxXmlHttp1.readyState == 4) {
		if (ekFlexMenu.isDefinedNotNull(ekFlexMenu.static_userAjaxXmlHttp1.status)) {
			if (200 <= ekFlexMenu.static_userAjaxXmlHttp1.status < 300) {
				var menuObj = ekFlexMenu.ajaxGetMenuObj(ekFlexMenu.static_userAjaxXmlHttp1.responseText);
				if (menuObj) {
					var resType = ekFlexMenu.static_userAjaxXmlHttp1.getResponseHeader('Content-Type');
					if (0 > resType.indexOf("text/xml")) {
						menuObj.appendText(menuObj.userAjaxParentId1);
					}
					else {
						menuObj.appendXml(menuObj.userAjaxParentId1);
					}
				}
			}
			else {
				// TODO: flag failure, and use links' href paramter as fallback...
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// Ajax helper function:
function __ekFlexMenu_ajaxGetMenuObj(reqStr)
{
	var result = null;
	var idx = reqStr.indexOf("ekflexmenu");
	if (idx >= 0) {
		var tempStr = reqStr.substr(idx);
		var matchStr = " id=";
		idx = tempStr.indexOf(matchStr);
		if (idx >= 0) {
			tempStr = tempStr.substr(idx + matchStr.length);
			idx = tempStr.indexOf(ekFlexMenu.private_menuPrefix);
			if (idx >= 0) {
				tempStr = tempStr.substr(idx);
				tempStr = ekFlexMenu.parseMenuSubmenuIdString(tempStr);
				result = ekFlexMenu.getMenuObj(tempStr);
			}
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Static Member Helper Function.
// clearSiblingButtons:
// Called when mouseover menu-links to unselect sibling-submenus.
// ...Only wired-up when enableMouseOverPopUp is true:
function __ekFlexMenu_clearSiblingButtons(obj) {
    // find sibling-submenus, set them to unselected and hide their children:
    if (obj && obj.parentNode && obj.parentNode.parentNode && obj.parentNode.parentNode.id)
        $ektron("#" + obj.parentNode.parentNode.id + " > li.ekflexmenu_submenu").find(" > ul").removeClass("ekflexmenu_submenu_items").addClass("ekflexmenu_submenu_items_hidden").end().find(" > a.ekflexmenu_button_selected").removeClass("ekflexmenu_button_selected").addClass("ekflexmenu_button")
    return (true);
}


//*********************************************************
// ekFlexMenu Instance Member Definitions Begin:
//*********************************************************

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the root-menu id string.
function __ekFlexMenu_returnMenuId() {
	return (this.private_menuIdString);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the hash-code of the server control.
function __ekFlexMenu_returnHashCode() {
	return (this.private_serverControlHash);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the root-menu id string of the supplied string (or
// whatever was supplied if not a valid menu-submenu id string):
function __ekFlexMenu_parseMenuId(id) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(id);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		return (ekFlexMenu.private_getMenuIdString(menuSubmenuId));
	}
	else {
		return (id);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns boolean, indicating if identified button is 
// currently selected (and therefore, then the associated
// visibility state of the identified submenu items):
function __ekFlexMenu_isSubmenuSelected(idString) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var btnObj = this.getFolderButtonObject(menuSubmenuId);
		if (ekFlexMenu.private_isValidSubmenuButton(btnObj)) {
			return (ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonSelected)
				|| ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonSelectedHover));
		}
	}
	return (false);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Selects the identified menu; if there is a folder-button, 
// then the class is updated to selected state. Then shows 
// the associated submenu items:
function __ekFlexMenu_selectSubmenu(idString, optional_fromMouseIn) {
	var defaultFromMouseIn = false;
	if (ekFlexMenu.isDefinedNotNull(optional_fromMouseIn)) {
		defaultFromMouseIn = optional_fromMouseIn;
	}

	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		if (this.private_autoCollapseSubmenus) {
		    if (this.private_isSlaveControl && defaultFromMouseIn){
		        this.collapseUnselectedStartLevelSubmenus();
		    }
		    else{
			    this.collapseAllOpenSubmenus(false);
			}
		}
		this.private_selectedMenuList = menuSubmenuId;
		this.selectSubmenuHelper(menuSubmenuId);
	
		if (!defaultFromMouseIn){
			this.callSlave__showSubmenuBranch(idString);
		}
		
		this.private_selectionChanged = true;
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_getSlaveControlObject() {
	var result = null;
	if (this.private_isMasterControl
		&& ekFlexMenu.isDefinedNotNull(this.private_slaveControl) 
		&& ekFlexMenu.isDefinedNotNull(this.private_slaveControl.length)
		&& (this.private_slaveControl.length > 0)) {
		var slaveId = this.private_slaveControl + "_" + this.menuId() + "_0";
		var slaveObj = ekFlexMenu.getMenuObj(slaveId);
		if (slaveObj) {
			result = slaveObj;
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_callSlave__showSubmenuBranch(idString) {
	var slaveObj = this.getSlaveControlObject();
	var btnContainer;
	if (slaveObj) {
		if (slaveObj.showSubmenuBranch(this.convertIdToSlaveControlId(slaveObj, idString))) {
			// slave menu succesfully activated, mark top button properly,
			// after ensuring all other top-level-buttons are un-marked:
			for (var ui in this.topLevelUI) {
				//btnContainer = document.getElementById(ui);
				btnContainer = document.getElementById(ui);
				if (btnContainer) {
					if (ekFlexMenu.hasClassName(btnContainer, ekFlexMenu_classNames.slaveBranchSelected)) {
						ekFlexMenu.removeClassName(btnContainer, ekFlexMenu_classNames.slaveBranchSelected);
					}
				}
			}

			var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
			var parentId = this.getParentLevelSubmenuId(menuSubmenuId);
			while ((parentId != menuSubmenuId) && (0 != ekFlexMenu.private_getSubmenuId(parentId))) {
				if (this.isTopLevelUI(parentId)) {
					btnContainer = document.getElementById(parentId);
					if (btnContainer) {
						if (!ekFlexMenu.hasClassName(btnContainer, ekFlexMenu_classNames.slaveBranchSelected)) {
							ekFlexMenu.addClassName(btnContainer, ekFlexMenu_classNames.slaveBranchSelected);
						}
					}
					break;
				}
				parentId = this.getParentLevelSubmenuId(parentId);
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_initializeSlaveMenu() {
	var isVisible = false;
	var firstObj = null;
	var menuSubmenuId;
	var inAr = this.getEkFlexMenuElementsByTagName("INPUT");
	for (var idx=0; idx < inAr.length; idx++) {
		if (inAr[idx].value.indexOf(this.private_masterControlIdHash) == 0) {
			var localId = inAr[idx].id;
			var obj;
			if (localId.length >= ekFlexMenu.private_hashLength) {
				localId = this.buildMenuSubmenuId(ekFlexMenu.private_getSubmenuIdString(localId)) + ekFlexMenu.private_submenuItemsElementIdPostFix;
				obj = document.getElementById(localId);
				if (obj) {
					if (null == firstObj) {
						firstObj = obj;
					}

					if (ekFlexMenu.hasClassName(obj, ekFlexMenu_classNames.submenuItems)) {
						isVisible = true;
					}
					
					if (null == this.topLevelUI) {
						this.topLevelUI = new Array;
					}
					menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(localId);
					if (!this.topLevelUI[menuSubmenuId]) {
						this.topLevelUI[menuSubmenuId] = true;
					}
				}
			}
		}
	}

	if ((!isVisible) && firstObj) {
		ekFlexMenu.removeClassName(firstObj, ekFlexMenu_classNames.submenuItemsHidden);
		ekFlexMenu.addClassName(firstObj, ekFlexMenu_classNames.submenuItems);
		//this.selectSubmenu(firstSubmenu);
	}
	
	if (this.ekFlexMenu_defaultMenuIdString){
	    this.ekFlexMenu_slaveStartLevel = this.getMenuLevel(this.ekFlexMenu_defaultMenuIdString);
	}
	else if (this.ekFlexMenu_slaveStartLevelIds && this.ekFlexMenu_slaveStartLevelIds.length > 0){
	    this.ekFlexMenu_slaveStartLevel = this.getMenuLevel(this.ekFlexMenu_slaveStartLevelIds[0]);
	}
	else if (this.topLevelUI){
	    this.ekFlexMenu_slaveStartLevel = this.getMenuLevel(this.topLevelUI[0]);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_initializeMasterMenu() {
	var menuSubmenuId = this.buildMenuSubmenuId(0) + ekFlexMenu.private_submenuItemsElementIdPostFix;
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var node = document.getElementById(menuSubmenuId);
		if (node) {
			var nodes = node.childNodes;
			for (var idx = 0; idx < nodes.length; idx++) {
				if (null == this.topLevelUI) {
					this.topLevelUI = new Array;
				}
				menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(nodes[idx].id);
				if (!this.topLevelUI[menuSubmenuId]) {
					this.topLevelUI[menuSubmenuId] = true;
				}
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Called from master to select slave submenu.
function __ekFlexMenu_showSubmenuBranch(idString) {
	var result = false;
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var id = menuSubmenuId;
		var obj = document.getElementById(id);
		if (obj) {
			//if (this.private_autoCollapseSubmenus) {
			//	this.collapseAllOpenSubmenus(false);
			//}

			for (var ui in this.topLevelUI) {
				this.unSelectSubmenu(ui, true);
			}
			
			var lastId = this.getLastSlaveStartLevelMenu();
			if (lastId && lastId.length > 0){
				this.unSelectSubmenu(lastId, true);
			}
			else if (this.private_isSlaveControl && this.ekFlexMenu_defaultMenuIdString) {
				this.unSelectSubmenu(this.ekFlexMenu_defaultMenuIdString);
			}
			else if (this.private_isSlaveControl) {
				// unknown current submenu; hide all at start level:
				this.collapseAllOpenSubmenus();
			}
			
			this.selectSubmenuHelper(menuSubmenuId);
			this.recordLastSlaveStartLevelMenu(menuSubmenuId);
			result = true;
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_unHideSlaveMenu() {
return; // DO NOT DO USE THIS METHOD!!!
	var targId = this.getLastSlaveStartLevelMenu();
	if (targId && (targId.length > 0)) {
		this.selectSubmenuHelper(targId);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_recordLastSlaveStartLevelMenu(id) {
	if (id && this.ekFlexMenu_slaveStartLevelIds[id]) {
		this.lastSelectedStartLevelSlaveMenuId = id;
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_getLastSlaveStartLevelMenu() {
    if (this.lastSelectedStartLevelSlaveMenuId && (this.lastSelectedStartLevelSlaveMenuId.length > 0)){
        return (this.lastSelectedStartLevelSlaveMenuId);
    }
    else if (this.ekFlexMenu_defaultMenuIdString && this.ekFlexMenu_defaultMenuIdString.length > 0){
        return (this.ekFlexMenu_defaultMenuIdString);
    }
    else{
        return ("");
    }
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_unSelectSubmenuList(menuList) {
	var listAr = menuList.split(",");
	var idx;
	for (idx=0; idx < listAr.length; idx++) {
		this.unSelectSubmenu(listAr[idx]);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_convertIdToSlaveControlId(slaveObj, idString) {
	var result = idString;
	if (slaveObj && idString && idString.length && (idString.length >= ekFlexMenu.private_hashLength)) {
		result = slaveObj.hashCode() + idString.substr(ekFlexMenu.private_hashLength);
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_isTopLevelUI(idString) {
	return (this.topLevelUI && this.topLevelUI[ekFlexMenu.parseMenuSubmenuIdString(idString)]);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Helper funtion for __ekFlexMenu_selectSubmenu, uses 
// recursionSelects to ensure selected submenus are visible
// even if they are buried with muliple nesting levels:
function __ekFlexMenu_selectSubmenuHelper(idString) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		if (this.private_selectedMenuList.length) {
			this.private_selectedMenuList += "," + menuSubmenuId;
		}
		else {
			this.private_selectedMenuList = menuSubmenuId;
		}
		
		var btnObj = this.getFolderButtonObject(menuSubmenuId);
		if (ekFlexMenu.private_isValidSubmenuButton(btnObj)) {
			var wasHovering = (ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonHover)
				|| ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonSelectedHover));
			if (wasHovering) {
				ekFlexMenu.removeClassName(btnObj, ekFlexMenu_classNames.buttonHover);
				ekFlexMenu.addClassName(btnObj, ekFlexMenu_classNames.buttonSelectedHover);
			}
			else {
				ekFlexMenu.removeClassName(btnObj, ekFlexMenu_classNames.button);
				ekFlexMenu.addClassName(btnObj, ekFlexMenu_classNames.buttonSelected);
			}
		}
		
		var itmObj = this.getSubmenuItemsObject(menuSubmenuId);
		if (ekFlexMenu.private_isValidSubmenuItems(itmObj)) {
			ekFlexMenu.removeClassName(itmObj, ekFlexMenu_classNames.submenuItemsHidden);
			ekFlexMenu.addClassName(itmObj, ekFlexMenu_classNames.submenuItems);
		}

		// Ensure parent folders are visible as well, in case
		// we got here from something else than a user click:
		if (!(this.private_isSlaveControl && this.isTopLevelUI(menuSubmenuId))) {
			var parentId = this.getParentLevelSubmenuId(menuSubmenuId);
			if (parentId != menuSubmenuId) {
				this.selectSubmenuHelper(parentId); // recursively call this function until all parents are open.
			}
		
			this.markParentSubmenu(menuSubmenuId);
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Unselects the identified menu; if there is a folder-button, 
// then the class is updated to an unselected state. Then 
// hides the associated submenu items:
function __ekFlexMenu_unSelectSubmenu(idString, topLevelUIOverride) {
	if (idString && idString.length) {
		var overrideTopLevelUI = false;
		if (ekFlexMenu.isDefinedNotNull(topLevelUIOverride)) {
			overrideTopLevelUI = topLevelUIOverride;
		}
	    var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	    if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
			if ((ekFlexMenu.private_getSubmenuId(menuSubmenuId) == 0) 
				|| ((ekFlexMenu.private_getSubmenuId(menuSubmenuId) > 0) 
				&& (overrideTopLevelUI || !this.private_isSlaveControl || !this.isTopLevelUI(menuSubmenuId)))) {
				var btnObj = this.getFolderButtonObject(menuSubmenuId);
				if (ekFlexMenu.private_isValidSubmenuButton(btnObj)) {
					var wasHovering = (ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonHover)
						|| ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonSelectedHover));
					if (wasHovering) {
						ekFlexMenu.removeClassName(btnObj, ekFlexMenu_classNames.buttonSelectedHover);
						ekFlexMenu.addClassName(btnObj, ekFlexMenu_classNames.buttonHover);
					}
					else {
						ekFlexMenu.removeClassName(btnObj, ekFlexMenu_classNames.buttonSelected);
						ekFlexMenu.addClassName(btnObj, ekFlexMenu_classNames.button);
					}
				}
				
				var itmObj = this.getSubmenuItemsObject(menuSubmenuId);
				// Don't hide slave containers:
				if (!(this.private_isSlaveControl 
					&& (ekFlexMenu.submenuIsTopLevel(menuSubmenuId) 
						|| ekFlexMenu.hasClassName(itmObj, ekFlexMenu_classNames.slaveContainer)))) {
					if (ekFlexMenu.private_isValidSubmenuItems(itmObj)) {
						ekFlexMenu.removeClassName(itmObj, ekFlexMenu_classNames.submenuItems);
						ekFlexMenu.addClassName(itmObj, ekFlexMenu_classNames.submenuItemsHidden);
					}
				}

				this.unMarkParentSubmenu(menuSubmenuId);
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Closes all currently open submenus, to prevent overlap & visual clutter:
function __ekFlexMenu_collapseAllOpenSubmenus(showRootFlag) {
	if (this.private_selectionChanged) {
		this.unSelectSubmenuList(this.private_selectedMenuList);
		this.private_selectedMenuList = ""
	}
	else {
		var openMenusArray = this.getElementsByClassNameAndTagName(ekFlexMenu_classNames.submenuItems, "UL");

		// hide all visible submenus:
	for (var idx=0; idx < openMenusArray.length; idx++) {
		this.unSelectSubmenu(openMenusArray[idx].id);
	}
	
		// TODO: FIX: ensure all buttons are disabled (should be done 
		// by previous step, but this fails for master/slave menus):
		var activeButtons = this.getElementsByClassNameAndTagName(ekFlexMenu_classNames.buttonSelected, "SPAN");
		for (idx=0; idx < activeButtons.length; idx++) {
			this.unSelectSubmenu(activeButtons[idx].id);
		}
	}
	
	// Now that all menus have been hdden, determine 
	// if the the root-menu should be made visible:
	if ("undefined" != typeof showRootFlag) {
		// parameter was passed, use it to control/override defalt behaviour:
		if (showRootFlag)
			this.showRootMenu();
	} 
	else {
		// use default behaviour:
		if (!this.private_startWithRootFolderCollapsed)
			this.showRootMenu();
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Used for slave menu; Closes all unselected submenus:
function __ekFlexMenu_collapseUnselectedStartLevelSubmenus() {
    var lastMenuId = this.getLastSlaveStartLevelMenu();
	var openMenusArray = this.getElementsByClassNameAndTagName(ekFlexMenu_classNames.submenuItems, "UL");

	// hide all visible submenus:
    for (var idx=0; idx < openMenusArray.length; idx++) {
        if (lastMenuId != ekFlexMenu.parseMenuSubmenuIdString(openMenusArray[idx].id)){
	        this.unSelectSubmenu(openMenusArray[idx].id);
	    }
	}

	// TODO: FIX: ensure all buttons are disabled (should be done 
	// by previous step, but this fails for master/slave menus):
	var activeButtons = this.getElementsByClassNameAndTagName(ekFlexMenu_classNames.buttonSelected, "SPAN");
	for (idx=0; idx < activeButtons.length; idx++) {
		this.unSelectSubmenu(activeButtons[idx].id);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Hide sibling submenus of the designated submenu:
function __ekFlexMenu_collapseSiblingSubmenus(idString) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var parentLevelId = this.getParentLevelSubmenuId(menuSubmenuId);
		if (ekFlexMenu.private_isValidMenuSubmenuIdString(parentLevelId)
			&& (parentLevelId != menuSubmenuId)) {
			var idArray = this.getDirectChildIds(parentLevelId)
			for (var idx=0; idx < idArray.length; idx++) {
				if (idArray[idx] != menuSubmenuId) {
					this.unSelectSubmenu(idArray[idx]);
				}
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Sets the parent folders' style to be a parent (optionally 
// used in CSS to style parents differently):
function __ekFlexMenu_markParentSubmenu(idString) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var parentLevelId = this.getParentLevelSubmenuId(menuSubmenuId);
		if (ekFlexMenu.private_isValidMenuSubmenuIdString(parentLevelId)
			&& (parentLevelId != menuSubmenuId)) 
		{
			var parentObj = this.getSubmenuObject(parentLevelId);
			if ((ekFlexMenu.isDefinedNotNull(parentObj)) 
				&& (ekFlexMenu.private_isDefined(parentObj.className)))
			{
				if (ekFlexMenu.hasClassName(parentObj, ekFlexMenu_classNames.submenu)) {
					ekFlexMenu.removeClassName(parentObj, ekFlexMenu_classNames.submenu);
					ekFlexMenu.addClassName(parentObj, ekFlexMenu_classNames.submenuParent);
				}
				else if (ekFlexMenu.hasClassName(parentObj, ekFlexMenu_classNames.submenuHover)) {
					ekFlexMenu.removeClassName(parentObj, ekFlexMenu_classNames.submenuHover);
					ekFlexMenu.addClassName(parentObj, ekFlexMenu_classNames.submenuParentHover);
				}
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Sets the parent folders' style to be a normal non-parent 
// (optionally used in CSS to style parents & children differently):
function __ekFlexMenu_unMarkParentSubmenu(idString) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var parentLevelId = this.getParentLevelSubmenuId(menuSubmenuId);
		if (ekFlexMenu.private_isValidMenuSubmenuIdString(parentLevelId)
			&& (parentLevelId != menuSubmenuId)) 
		{
			var parentObj = this.getSubmenuObject(parentLevelId);
			if ((ekFlexMenu.isDefinedNotNull(parentObj)) 
				&& (ekFlexMenu.private_isDefined(parentObj.className))) 
			{
				if (ekFlexMenu.hasClassName(parentObj, ekFlexMenu_classNames.submenuParent)) {
					ekFlexMenu.removeClassName(parentObj, ekFlexMenu_classNames.submenuParent);
					ekFlexMenu.addClassName(parentObj, ekFlexMenu_classNames.submenu);
				}
				else if (ekFlexMenu.hasClassName(parentObj, ekFlexMenu_classNames.submenuParentHover)) {
					ekFlexMenu.removeClassName(parentObj, ekFlexMenu_classNames.submenuParentHover);
					ekFlexMenu.addClassName(parentObj, ekFlexMenu_classNames.submenuHover);
				}
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Sets the menus' container style to be hovered,
// (optionally used in CSS to style contents & children differently):
function __ekFlexMenu_hoverSubmenu(idString) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var menuObj = this.getSubmenuObject(menuSubmenuId);
		if ((ekFlexMenu.isDefinedNotNull(menuObj)) 
			&& (ekFlexMenu.private_isDefined(menuObj.className)))
		{
			if (ekFlexMenu.hasClassName(menuObj, ekFlexMenu_classNames.submenu)) {
				ekFlexMenu.removeClassName(menuObj, ekFlexMenu_classNames.submenu);
				ekFlexMenu.addClassName(menuObj, ekFlexMenu_classNames.submenuHover);
			}
			else if (ekFlexMenu.hasClassName(menuObj, ekFlexMenu_classNames.submenuParent)) {
				ekFlexMenu.removeClassName(menuObj, ekFlexMenu_classNames.submenuParent);
				ekFlexMenu.addClassName(menuObj, ekFlexMenu_classNames.submenuParentHover);
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Sets the menus' container style to be hovered,
// (optionally used in CSS to style contents & children differently):
function __ekFlexMenu_unHoverSubmenu(idString) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var menuObj = this.getSubmenuObject(menuSubmenuId);
		if ((ekFlexMenu.isDefinedNotNull(menuObj)) 
			&& (ekFlexMenu.private_isDefined(menuObj.className))) 
		{
			if (ekFlexMenu.hasClassName(menuObj, ekFlexMenu_classNames.submenuHover)) {
				ekFlexMenu.removeClassName(menuObj, ekFlexMenu_classNames.submenuHover);
				ekFlexMenu.addClassName(menuObj, ekFlexMenu_classNames.submenu);
			}
			else if (ekFlexMenu.hasClassName(menuObj, ekFlexMenu_classNames.submenuParentHover)) {
				ekFlexMenu.removeClassName(menuObj, ekFlexMenu_classNames.submenuParentHover);
				ekFlexMenu.addClassName(menuObj, ekFlexMenu_classNames.submenuParent);
			}
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns an array of all direct child-submenu-ids (length = 0 if none):
function __ekFlexMenu_getDirectChildIds(idString) {
	var result = new Array;
	var elementName = ekFlexMenu.private_namePrefix + "submenu_items";
	var cmpId, elementArray;
	var parentMenuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(parentMenuSubmenuId)) {
		elementArray = this.getEkFlexMenuElementsByName(elementName);
		if (("undefined" != typeof elementArray)
			&& (null != elementArray)
			&& ("undefined" != typeof elementArray.length)
			&& (null != elementArray.length))
			{
				for (var idx=0; idx < elementArray.length; idx++) {
					cmpId = ekFlexMenu.parseMenuSubmenuIdString(elementArray[idx].id);
					if (ekFlexMenu.private_isValidMenuSubmenuIdString(cmpId)) {
						if ((parentMenuSubmenuId == this.getParentLevelSubmenuId(cmpId)
							&& (parentMenuSubmenuId != cmpId))) {  //ekFlexMenu.private_getSubmenuIdString
							result[result.length] = cmpId;
						}
					}
				}
			}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// returns an array of the menu-elements whose name 
// attribute matches the supplied name:
function __ekFlexMenu_getEkFlexMenuElementsByName(elementName) {
	var result = new Array;
	var divArray = this.getEkFlexMenuElementsByTagName("div");
	for (var idx=0; idx < divArray.length; idx++) {
		if (elementName == divArray[idx].name) {
			result[result.length] = divArray[idx];
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// returns an array of the ekflexmenu-elements with the 
// specified tag-name: 
function __ekFlexMenu_getEkFlexMenuElementsByTagName(tagName) {
	var result = new Array;
	var ekflexmenuContainer = this.getEkFlexMenuContainerElement();
	if (ekflexmenuContainer && ("undefined" != typeof ekflexmenuContainer.getElementsByTagName)) {
		var divArray = ekflexmenuContainer.getElementsByTagName(tagName);
		if (("undefined" != typeof divArray) && (null != divArray)) {
			result = divArray;
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// returns an array of the menu-elements whose className 
// attribute matches the supplied name:
function __ekFlexMenu_getElementsByClassName(className) {
	var result = new Array;
	var divArray = this.getEkFlexMenuElementsByTagName("*");
	for (var idx=0; idx < divArray.length; idx++) {
		if (("undefined" != divArray[idx].className)
			&& (ekFlexMenu.hasClassName(divArray[idx], className))) {
			result[result.length] = divArray[idx];
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// returns an array of the menu-elements whose className 
// attribute matches the supplied name:
function __ekFlexMenu_getElementsByClassNameAndTagName(className, tagName) {
	var result = new Array;
	var divArray = this.getEkFlexMenuElementsByTagName(tagName);
	for (var idx=0; idx < divArray.length; idx++) {
		if (("undefined" != divArray[idx].className)
			&& (ekFlexMenu.hasClassName(divArray[idx], className))) {
			result[result.length] = divArray[idx];
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Unselects the identified menu; if there is a folder-button, 
// then the class is updated to an unselected state. Then 
// hides the associated submenu items:
function __ekFlexMenu_hoverButton(idString, hoverFlag) {
	var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(idString);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
		var btnObj = this.getFolderButtonObject(menuSubmenuId);
		if (ekFlexMenu.private_isValidSubmenuButton(btnObj)) {
			var wasHovering = (ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonHover)
				|| ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonSelectedHover));
			if (hoverFlag == wasHovering) {
				return;
			}
			var isSelected = (ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonSelected) 
				|| ekFlexMenu.hasClassName(btnObj, ekFlexMenu_classNames.buttonSelectedHover));
			if (hoverFlag) {
				ekFlexMenu.removeClassName(btnObj, ((isSelected) ? ekFlexMenu_classNames.buttonSelected : ekFlexMenu_classNames.button));
				ekFlexMenu.addClassName(btnObj, ((isSelected) ? ekFlexMenu_classNames.buttonSelectedHover : ekFlexMenu_classNames.buttonHover));
			}
			else {
				ekFlexMenu.removeClassName(btnObj, ((isSelected) ? ekFlexMenu_classNames.buttonSelectedHover : ekFlexMenu_classNames.buttonHover));
				ekFlexMenu.addClassName(btnObj, ((isSelected) ? ekFlexMenu_classNames.buttonSelected : ekFlexMenu_classNames.button));
			}
		}
	}
}

///////////////////////////////////////////////////////////
// Annonymous Helper Function.
// Called by __ekFlexMenu_mouseIn to prepare for the
// delayed opening of identified submenu.
// Parameters: 
//	1 - the ID of the element that triggered the event.
function __ekFlexMenu_mouseInHelperCaller(id) {
	if (id) {
		var menuObj = ekFlexMenu.getMenuObj(id);
		if (menuObj) {
			menuObj.mouseInHelper();
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Called by external (non-object-instance) code, to prepare for 
// delayed opening of identified submenu.
// Parameters: 
//	1 - the event object.
//	2 - the element-object that triggered the event.
function __ekFlexMenu_mouseIn(e, el) {
	if (this.private_mouseEventTimer) {
		window.clearTimeout(this.private_mouseEventTimer);
		this.private_mouseEventTimer = null;
	}
	this.private_mouseEventEnteringElementId = el.id;
	this.private_mouseEventTimer = window.setTimeout(function () {__ekFlexMenu_mouseInHelperCaller(el.id)}, 50);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Shows/selects the appropriate submenu.
function __ekFlexMenu_mouseInHelper() {
	if (this.private_mouseEventEnteringElementId) {
		var menuSubmenuId = ekFlexMenu.parseMenuSubmenuIdString(this.private_mouseEventEnteringElementId);
		if (ekFlexMenu.private_isValidMenuSubmenuIdString(menuSubmenuId)) {
			if (this.private_isMasterControl) {
				// Dont select bottom level menus for master-control 
				// via mouse-over; force user to click to select these:
				itemsObj = this.getSubmenuItemsObject(menuSubmenuId);
				if (!ekFlexMenu.isDefinedNotNull(itemsObj)) {
					return;
				}
			}
			this.selectSubmenu(menuSubmenuId, true);
		}
	}
}

///////////////////////////////////////////////////////////
// Annonymous Helper Function.
// Called by __ekFlexMenu_mouseOut to prepare for the
// delayed opening of identified submenu.
// Parameters: 
//	1 - the ID of the element that triggered the event.
function __ekFlexMenu_mouseOutHelperCaller(id) {
	if (id) {
		var menuObj = ekFlexMenu.getMenuObj(id);
		if (menuObj) {
			menuObj.mouseOutHelper();
		}
	}
}


///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Called by external (non-object-instance) code, to prepare for 
// delayed opening of identified submenu.
// Parameters: 
//	1 - the event object.
//	2 - the element-object that triggered the event.
function __ekFlexMenu_mouseOut(e, el) {
	if (this.private_mouseEventTimer) {
		window.clearTimeout(this.private_mouseEventTimer);
		this.private_mouseEventTimer = null;
	}
	var id = __ekFlexMenu_static_getValidParentId(el);
	this.private_mouseEventExitingElementId = id;
	this.private_mouseEventTimer = window.setTimeout(function () {__ekFlexMenu_mouseOutHelperCaller(id)}, 500);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Hides/unselects the appropriate submenu (possibly all but root).
// Parameters: 
//	None.
function __ekFlexMenu_mouseOutHelper() {
	//if (this.private_mouseEventEnteringElementId) {
	//	this.unSelectSubmenu(this.private_mouseEventEnteringElementId);
	//}
	if (this.private_autoCollapseSubmenus) {
		// don't leave all submenus hidden for slave-menus, otherwise nothing to click:
		if (this.private_isSlaveControl) {
			this.collapseUnselectedStartLevelSubmenus();
		}
		else{
		    this.collapseAllOpenSubmenus();
		}
	}
	else if (this.private_mouseEventEnteringElementId) {
		this.unSelectSubmenu(this.private_mouseEventEnteringElementId);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the Menu-Submenu-Id string, for a given Submenu-Id:
function __ekFlexMenu_buildMenuSubmenuId(submenuId) {
	return (this.hashCode() + "_" + this.menuId() + "_" + submenuId);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the corresponding submenu-folder-button object, 
// for a given Submenu-Id (or Menu-Submenu-Id):
function __ekFlexMenu_getFolderButtonObject(submenuId) {
	var id = ekFlexMenu.parseMenuSubmenuIdString(submenuId);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(id)) {
		id = id + ekFlexMenu.private_buttonElementIdPostFix;
	}
	else {
		id = this.buildMenuSubmenuId(submenuId) + ekFlexMenu.private_buttonElementIdPostFix;
	}
	return (document.getElementById(id));
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the corresponding submenu-Items object, 
// for a given Submenu-Id (or Menu-Submenu-Id):
function __ekFlexMenu_getSubmenuItemsObject(submenuId) {
	var id = ekFlexMenu.parseMenuSubmenuIdString(submenuId);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(id)) {
		id = id + ekFlexMenu.private_submenuItemsElementIdPostFix;
	}
	else {
		id = this.buildMenuSubmenuId(submenuId) + ekFlexMenu.private_submenuItemsElementIdPostFix;
	}
	return (document.getElementById(id));
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the corresponding submenu object, 
// for a given Submenu-Id (or Menu-Submenu-Id):
function __ekFlexMenu_getSubmenuObject(submenuId) {
	var id = ekFlexMenu.parseMenuSubmenuIdString(submenuId);
	var result = null;
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(id)) {
		result = document.getElementById(id);
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the parent-submenu-id for the given Submenu-Id 
// (or the given Menu-Submenu-Id), returns zero if top (root):
function __ekFlexMenu_getParentLevelSubmenuId(submenuId) {
	var result = this.buildMenuSubmenuId("0"); // default to root.
	var id = ekFlexMenu.parseMenuSubmenuIdString(submenuId);
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(id)) {
		id = id + ekFlexMenu.private_parentIdElementIdPostFix;
	}
	else {
		id = this.buildMenuSubmenuId(submenuId) + ekFlexMenu.private_parentIdElementIdPostFix;
	}
	var hiddenObj = document.getElementById(id);
	if (hiddenObj 
		&& ("undefined" != typeof hiddenObj.value)
		&& ("undefined" != typeof hiddenObj.value.length)
		&& (hiddenObj.value.length > 0)) {
		result = hiddenObj.value;
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the integer value of the menu level for
// the menu identified by the given submenu-id string.
function __ekFlexMenu_getMenuLevel(submenuId) {
	var result = 0;
	if (ekFlexMenu.private_isValidMenuSubmenuIdString(submenuId)) {
		var obj = this.getSubmenuObject(submenuId);
		if (obj && obj.className && obj.className.length && (obj.className.length > 0)) {
			var levelPrefix = "ekflexmenu_menu_level_";
			var idx = obj.className.indexOf(levelPrefix);
			if (idx >= 0) {
				var val = obj.className.substr(idx + levelPrefix.length)
				if (val.length) {
					result = parseInt(val, 10);
				}
			}
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Returns the outermost container element (DIV) that
// holds this entire ekFlexMenu object:
function __ekFlexMenu_getEkFlexMenuContainerElement() {
	var containerId = this.hashCode() + "_"
		+ this.menuId() 
		+ "_"
		+ "0" 
		+ ekFlexMenu.private_ekflexmenuContainerElementIdPostFix;
	var containerObj = document.getElementById(containerId);
	if (containerObj
		&& ekFlexMenu.private_isValidEKMenu(containerObj)) {
		return (containerObj);
	}
	else {
		return (null);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Called when a menu-item (such as a link) is clicked, 
// modifies the items href parameter to pass the selected
// item info over the querystring:
function __ekFlexMenu_ekFlexMenu_selectMenuItem(el) {
	var elm = el;
	var isWrapper = false;
	
	if (ekFlexMenu.isDefinedNotNull(elm)
		&& ekFlexMenu.isDefinedNotNull(elm.parentNode)
		&& ekFlexMenu.isDefinedNotNull(elm.parentNode.tagName)
		&& ("A" == elm.parentNode.tagName)) 
	{
		// event is from a button, that's wrapped 
		// with an anchor. Use the anchor element:
		elm = elm.parentNode; 
		isWrapper = true;
	}
		
	if (elm && ("undefined" != typeof elm.id) && ("undefined" != typeof elm.href)) {
		//// Update: to correct a problem with FireFox (where events like mouse-out
		//// could call the handlers between the current page unloading and the next
		//// page loading) we must ensure that the event handlers are not called
		//// while we're navigating/submitting the page:
		//// TODO: Test for IE, skip if true (only needed for non-IE browsers, particuarly FireFox).
		// Further Update:
		//   Now testing validity of calling event handlers from menu HTML, so this 
		//   time consuming call to "disableAllEventHandlers" is not needed:
		//this.disableAllEventHandlers();
		
		if (elm.href.indexOf("?") < 0) {
			elm.href += "?";
		}
		else {
			elm.href += "&";
		}
	
		var modId = elm.id;
		var matchVal = "ekfxmensel_";
		if (modId.length > matchVal.length) {
			var idx = modId.indexOf(matchVal);
			if (idx >= 0) {
				modId = modId.substr(idx + matchVal.length);
			}
		}
		elm.href += matchVal.substr(0, matchVal.length - 1) + "=" + modId;

		if ((this.private_lastSelectedMenuItemObj != null) && (this.private_lastSelectedMenuItemObj != elm)) {
			ekFlexMenu.removeClassName(this.private_lastSelectedMenuItemObj, ekFlexMenu_classNames.linkSelected);
			ekFlexMenu.addClassName(this.private_lastSelectedMenuItemObj, ekFlexMenu_classNames.link);
		}
		this.private_lastSelectedMenuItemObj = elm;

		if (!isWrapper) {
			ekFlexMenu.removeClassName(elm.className, ekFlexMenu_classNames.link);
			ekFlexMenu.addClassName(elm.className, ekFlexMenu_classNames.linkSelected);
		}
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Disables all event handlers for elements of this menu object:
function __ekFlexMenu_disableAllEventHandlers() {
	var elArray = this.getEkFlexMenuElementsByTagName("*");
	for (var idx=0; idx < elArray.length; idx++) {
		this.disableElementEventHandlers(elArray[idx]);
	}
	var el = this.getEkFlexMenuContainerElement();
	if (el)
	{
		this.disableElementEventHandlers(el);
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Disables all event handlers for elements of this menu object:
function __ekFlexMenu_disableElementEventHandlers(el) {
	if (el) {
		if (ekFlexMenu.isDefinedNotNull(el.onmouseout))
			el.onmouseout = null;

		if (ekFlexMenu.isDefinedNotNull(el.onmouseover))
			el.onmouseover = null;

		if (ekFlexMenu.isDefinedNotNull(el.onfocus))
			el.onfocus = null;

		if (ekFlexMenu.isDefinedNotNull(el.onblur))
			el.onblur = null;

		if (ekFlexMenu.isDefinedNotNull(el.onclick))
			el.onclick = null;

		if (ekFlexMenu.isDefinedNotNull(el.ondblclick))
			el.ondblclick = null;

		if (ekFlexMenu.isDefinedNotNull(el.onkeydown))
			el.onkeydown = null;

		if (ekFlexMenu.isDefinedNotNull(el.onkeypress))
			el.onkeypress = null;

		if (ekFlexMenu.isDefinedNotNull(el.onkeyup))
			el.onkeyup = null;
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// This function modifies all these to eliminate page 
// refreshes (not needed if Javascript is enabled).
// Parameters: 
//	None.
function __ekFlexMenu_updateNoScriptLinks() {
return;
// UPDATE:
//	This function no longer runs, instead the "noscript" links 
//  are removed when the user clicks a menu button. This was
// done becuase IE had a problem with background image flicker
// whenever a page was loaded (images were refreshed after
// the page was rendered - causing a moment with the background
// being displayed on some elements...
//
//	var links = this.getEkFlexMenuElementsByTagName("A");
//	for (var idx=0; idx < links.length; idx++) {
//		if (("undefined" != typeof links[idx].href) && (0 <= links[idx].href.indexOf("ekfxmen_noscript=1"))) {
//			links[idx].href = "#NoScroll";
//		}
//	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Called by page-load initialization code, to determine if MouseOverPopUp 
// is enabled, and perform related initialization if it is:
function __ekFlexMenu_initializeMouseOverPopUp() {
    var containerId = "#" + this.buildMenuSubmenuId(0) + "_ekflexmenu";
    this.enableMouseOverPopUp = (null != $ektron(containerId).attr("onmouseover"));
    if (this.enableMouseOverPopUp) {
        $ektron(containerId + " a.ekflexmenu_link").mouseover(function () { if (ekFlexMenu_IsValid(ekFlexMenu) && ekFlexMenu_IsValid(ekFlexMenu.clearSiblingButtons)) { return (ekFlexMenu.clearSiblingButtons(this)); } return (true); });
        
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
// Called by page-load initialization code, to initialize this object
// with values passed from the server.
// Parameters: 
//	None.
function __ekFlexMenu_initializeWithServerVariables() {
	var baseId = this.hashCode();
	if (baseId && baseId.length) {
		// Obtain the server control property, autoCollapseBranches:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_autoCollapseBranches))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_autoCollapseBranches[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_autoCollapseBranches[baseId].length))
			&& (0 < window.ekFlexMenu_autoCollapseBranches[baseId].length)) {
			
			this.private_autoCollapseSubmenus = ("true" == window.ekFlexMenu_autoCollapseBranches[baseId]);
		}

		// Obtain the server control property, swRev:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_swRev))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_swRev[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_swRev[baseId].length))
			&& (0 < window.ekFlexMenu_swRev[baseId].length)) {
			
			this.private_swRevision = window.ekFlexMenu_swRev[baseId];
		}

		// Obtain the server control property, startCollapsed:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startCollapsed))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startCollapsed[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startCollapsed[baseId].length))
			&& (0 < window.ekFlexMenu_startCollapsed[baseId].length)) {
			
			this.private_startCollapsed = ("true" == window.ekFlexMenu_startCollapsed[baseId]);
		}

		// Obtain the server control property, startWithRootFolderCollapsed:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startWithRootFolderCollapsed))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startWithRootFolderCollapsed[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startWithRootFolderCollapsed[baseId].length))
			&& (0 < window.ekFlexMenu_startWithRootFolderCollapsed[baseId].length)) {
			
			this.private_startWithRootFolderCollapsed = ("true" == window.ekFlexMenu_startWithRootFolderCollapsed[baseId]);
		}

		// Obtain the hash-code of the server control property, MasterControlId:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_masterControlIdHash))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_masterControlIdHash[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_masterControlIdHash[baseId].length))
			&& (0 < window.ekFlexMenu_masterControlIdHash[baseId].length)) {
			
			this.private_masterControlIdHash = window.ekFlexMenu_masterControlIdHash[baseId];
		}

		// Obtain the server control property, ajaxEnabled:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_ajaxEnabled))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_ajaxEnabled[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_ajaxEnabled[baseId].length))
			&& (0 < window.ekFlexMenu_ajaxEnabled[baseId].length)) {
			
			this.private_ajaxEnabled = ("true" == window.ekFlexMenu_ajaxEnabled[baseId]);
		}
		
		// Obtain the Ajax-WebService base path:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_ajaxWSPath))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_ajaxWSPath[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_ajaxWSPath[baseId].length))
			&& (0 < window.ekFlexMenu_ajaxWSPath[baseId].length)) {
			//			
			this.ekFlexMenu_ajaxWSPath = window.ekFlexMenu_ajaxWSPath[baseId];
			if (this.ekFlexMenu_ajaxWSPath.length && this.ekFlexMenu_ajaxWSPath.lastIndexOf("/") != (this.ekFlexMenu_ajaxWSPath.length - 1)) {
				this.ekFlexMenu_ajaxWSPath += "/";
			}
		}
		
		// Set displayXslt:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_displayXslt))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_displayXslt[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_displayXslt[baseId].length))
			&& (0 < window.ekFlexMenu_displayXslt[baseId].length)) {
			//			
			this.ekFlexMenu_displayXslt = window.ekFlexMenu_displayXslt[baseId];
		}
		
		// Set cacheInterval:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_cacheInterval))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_cacheInterval[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_cacheInterval[baseId].length))
			&& (0 < window.ekFlexMenu_cacheInterval[baseId].length)) {
			//			
			this.ekFlexMenu_cacheInterval = window.ekFlexMenu_cacheInterval[baseId];
		}

		// Obtain the slave/subscriber list:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_subscriberList))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_subscriberList[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_subscriberList[baseId].length))
			&& (0 < window.ekFlexMenu_subscriberList[baseId].length)) {
			
			this.private_subscriberList = window.ekFlexMenu_subscriberList[baseId];
			
			if (this.private_subscriberList.length > 0) {
				var subList = this.private_subscriberList.split(",");
				if (subList && subList[0]) {
					this.private_slaveControl = subList[0];
					this.private_isMasterControl = true;
				}
			}
		}
		
		// Default slave-menu:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_defaultMenuIdString))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_defaultMenuIdString[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_defaultMenuIdString[baseId].length))
			&& (0 < window.ekFlexMenu_defaultMenuIdString[baseId].length)) {
			//			
			this.ekFlexMenu_defaultMenuIdString = window.ekFlexMenu_defaultMenuIdString[baseId];
		}
		
		// Slave menu start-level ids:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_slaveStartLevelIds))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_slaveStartLevelIds[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_slaveStartLevelIds[baseId].length))
			&& (0 < window.ekFlexMenu_slaveStartLevelIds[baseId].length)) {
			//			
			var startLevelIds = window.ekFlexMenu_slaveStartLevelIds[baseId].split(",");
			if (null == this.ekFlexMenu_slaveStartLevelIds) {
				this.ekFlexMenu_slaveStartLevelIds = new Array;
			}
			for (var idx = 0; idx < startLevelIds.length; idx++) {
				if (!this.ekFlexMenu_slaveStartLevelIds[startLevelIds[idx]]) {
					this.ekFlexMenu_slaveStartLevelIds[startLevelIds[idx]] = true;
				}
			}
		}

		// The server may have passed a submenu id, indicating which one to open initially:
		if ((ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startupSubmenuBranchId))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startupSubmenuBranchId[baseId]))
			&& (ekFlexMenu.isDefinedNotNull(window.ekFlexMenu_startupSubmenuBranchId[baseId].length))
			&& (0 < window.ekFlexMenu_startupSubmenuBranchId[baseId].length)) {
			
			var id = ekFlexMenu.parseMenuSubmenuIdString(window.ekFlexMenu_startupSubmenuBranchId[baseId]);
			if (ekFlexMenu.private_isValidMenuSubmenuIdString(id)) {
				this.selectSubmenu(id);
			}
		}
	
		if (this.private_masterControlIdHash.length) {
			this.private_isSlaveControl = true;
			this.initializeSlaveMenu();
		}
		
		if (this.private_isMasterControl) {
			this.initializeMasterMenu();
		}
		
		this.updateNoScriptLinks();
		this.initializeMouseOverPopUp();
	}
}

///////////////////////////////////////////////////////////
// Makes the contents of the root-menu visible, selects it's button if it exists.
// Parameters: 
//	None.
function __ekFlexMenu_showRootMenu() {
	var rootMenuId = this.buildMenuSubmenuId(0);
	this.selectSubmenu(rootMenuId);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_loadXMLDoc(url)
{
	var result = false;

	ekFlexMenu.ajaxCancelServerCall();
	if (window.XMLHttpRequest) {
		ekFlexMenu.static_userAjaxXmlHttp1 = new XMLHttpRequest()
	}
	else if (window.ActiveXObject) {
		ekFlexMenu.static_userAjaxXmlHttp1 = new ActiveXObject("Msxml2.XMLHTTP");
		if (null == ekFlexMenu.static_userAjaxXmlHttp1) {
			ekFlexMenu.static_userAjaxXmlHttp1 = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}

	if (ekFlexMenu.static_userAjaxXmlHttp1 != null) {
		ekFlexMenu.static_userAjaxXmlHttp1.onreadystatechange = ekFlexMenu.ajaxCallBack_stateChange;
		ekFlexMenu.static_userAjaxXmlHttp1.open("POST", url, true);
		ekFlexMenu.static_userAjaxXmlHttp1.send('');
		result = true;
	}

	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_DecodeHTML(str)
{
	var result = "";
	if (str){
		result = new String(str);
		result = result.replace(/\&amp;/gi, "&");
		result = result.replace(/\&lt;/gi, "<");
		result = result.replace(/\&gt;/gi, ">");
		result = result.replace(/\&quot;/gi, "\"");
		result = result.replace(/\&#39;/gi, "'");
	}
    return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_getPayload(response)
{
	var result = null;
	if (response)
	{
		if (response.xml) {
			result = response.xml;
		}
		else if (response.childNodes && ("undefined" != typeof XMLSerializer)) {
			if (XMLSerializer) {
				result = new XMLSerializer().serializeToString(response);
			}
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_appendText(targId)
{
	var targ = document.getElementById(targId);
	if (targ && ("undefined" != typeof targ.innerHTML)) {
		targ.innerHTML = this.DecodeHTML(this.getPayload(ekFlexMenu.static_userAjaxXmlHttp1.responseXML));
	}
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_appendXml(targId)
{
	if (!ekFlexMenu.isDefinedNotNull(ekFlexMenu.static_userAjaxXmlHttp1)
		|| !ekFlexMenu.isDefinedNotNull(ekFlexMenu.static_userAjaxXmlHttp1.responseXML)){
		return;
	}

	var targ = document.getElementById(targId);
	if (targ && ("undefined" != typeof targ.innerHTML)) {
		if (ekFlexMenu.isDefinedNotNull(ekFlexMenu.static_userAjaxXmlHttp1.responseXML.text)) {
			//targ.innerHTML = ekFlexMenu.static_userAjaxXmlHttp1.responseXML.text;
			var menuFrag = this.removeMenuFragmentContainer(ekFlexMenu.static_userAjaxXmlHttp1.responseXML.text);
			if (menuFrag.length > 0) {
				targ.innerHTML = targ.innerHTML + menuFrag;
			}
		}
		else {
			// (FireFox, etc.)
			targ.innerHTML = "";
			if (ekFlexMenu.isDefinedNotNull(ekFlexMenu.static_userAjaxXmlHttp1.responseXML.firstChild)
				&& ekFlexMenu.isDefinedNotNull(ekFlexMenu.static_userAjaxXmlHttp1.responseXML.firstChild.textContent)) {
				targ.innerHTML = ekFlexMenu.static_userAjaxXmlHttp1.responseXML.firstChild.textContent;
			} else if ("undefined" != typeof XMLSerializer) {
				result = new XMLSerializer().serializeToString(ekFlexMenu.static_userAjaxXmlHttp1.responseXML);
				targ.innerHTML = this.DecodeHTML(result);
			}
			else if ("undefined" != typeof document.importNode) {
				var src = document.importNode(ekFlexMenu.static_userAjaxXmlHttp1.responseXML.documentElement, true);
				var tempEl = document.createElement("span");
				tempEl.appendChild(src);
				targ.innerHTML = this.DecodeHTML(tempEl.innerHTML);
				tempEl = null;
			}
		}
	}
	this.userAjaxParentId1 = "";
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_removeMenuFragmentContainer(menuStr)
{
	var result = "";
	var idx = menuStr.indexOf("<ul");
	if (idx >= 0) {
		result = menuStr.substr(idx);
		idx = result.lastIndexOf("</li>");
		if (idx > 0) {
			result = result.substr(0, idx-1);
		}
	}
	return (result);
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_callService(ctrlHash, menuId, submenuId, parentId, menuDepth)
{
	this.userAjaxParentId1 = "";
	if (parentId.length > 0) {
		this.userAjaxParentId1 = parentId;
		return (this.loadXMLDoc(this.ekFlexMenu_ajaxWSPath + "WebServiceAPI/Navigation/FlexMenu.asmx/GetMenuFragment?ctrl_hash=" + ctrlHash + "&menu_depth=" + menuDepth + "&menu_id=" + menuId + "&submenu_id=" + submenuId + "&menu_xslt=" + this.ekFlexMenu_displayXslt + "&cache_interval=" + this.ekFlexMenu_cacheInterval));
	}
	return false
}

///////////////////////////////////////////////////////////
// ekFlexMenu Instance Member Helper Function.
function __ekFlexMenu_ajax_callAjaxForUserClick(btnId)
{
	var result = false;
	
	// check if container's children already loaded:
	var containerId = ekFlexMenu.parseMenuSubmenuIdString(btnId);
	var si = this.getSubmenuItemsObject(containerId);
	if (si){
		result = true;
	}
	else {
		// false, initiate ajax-call:
		var ctrlHash = this.hashCode();
		var menuId = ekFlexMenu.private_getMenuIdString(btnId);
		var submenuId = ekFlexMenu.private_getSubmenuIdString(btnId);
		var parentId = this.getFolderButtonObject(btnId).parentNode.id;
		//var menuDepth = 1 + this.getMenuLevel(btnId);
		result = this.callService(ctrlHash, menuId, submenuId, parentId, 1);
	}
	
	return (result);
}

///////////////////////////////////////////////////////////
ekFlexMenu_loadEventConfigured = false; // global variable for ekFlexMenu_addLoadEvent(), to indicate if code has initialized.
///////////////////////////////////////////////////////////
// This funtion is caled by the in-line-code following
// this functions' definition, to ensure that the 
// windows' on-load event is hooked with the ekFlexMenu
// initialization code. 
function ekFlexMenu_addLoadEvent() 
{
	if (ekFlexMenu_loadEventConfigured)
		return;
		
	ekFlexMenu_loadEventConfigured = true;
    var oldOnload = window.onload;
    window.onload = function() {
        if ("function" == typeof oldOnload) 
            oldOnload();

        //setTimeout(ekFlexMenu.private_startupAllSmartMenus, 100);
        ekFlexMenu.private_startupAllSmartMenus();
	}
}
ekFlexMenu_addLoadEvent(); // Call the preceeding function to hook the ekFlexMenu initialization code.
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
ekFlexMenu_unloadEventConfigured = false; // global variable for ekFlexMenu_addUnLoadEvent(), to indicate if code has initialized.
///////////////////////////////////////////////////////////
// This funtion is caled by the in-line-code following
// this functions' definition, to ensure that the 
// windows' on-unload event is hooked with the ekFlexMenu
// cleanup code. 
function ekFlexMenu_addUnLoadEvent() 
{
	if (ekFlexMenu_unloadEventConfigured)
		return;
		
	ekFlexMenu_unloadEventConfigured = true;
    var oldOnunload = window.onunload;
    window.onunload = function() {
        if ("function" == typeof oldOnunload) 
            oldOnunload();

        //setTimeout(ekFlexMenu.private_startupAllSmartMenus, 100);
        ekFlexMenu.private_shutdownAllSmartMenus();
	}
}
ekFlexMenu_addUnLoadEvent(); // Call the preceeding function to hook the ekFlexMenu initialization code.
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//	Menu element names (prefixed by "ekmengrp_"):
//  Note: these are only rendered if the SmartMenu server controls' renderElementNames  is true (default=false, see Navigation.vb).
//
//		accessible_menu_startheading - H2: Wraps the skip-menu with a navigation-heading (only rendered when 508-Compliance is enabled).
//		accessible_menu_startlink - A: Wraps the skip-menu text with a navigation-link (only rendered when 508-Compliance is enabled).
//		btnlink - A: Wraps each menu button title with a navigation-anchor (only rendered when 508-Compliance is enabled).
//		button - SPAN: Holds the title, and acts as a button (or folder) for the associated submenu.
//		ekflexmenu - DIV: Wraps the entire menu (the outer-most non-user container element).
//		link - A: A Link for individual menu items (quicklinks, external links, etc.).
//		menu_end - DIV: Wraps the menu-end page-anchor (only rendered when 508-Compliance is enabled).
//		menu_start - DIV: Wraps the menu-start link (only rendered when 508-Compliance is enabled).
//		submenu - DIV: Holds submenu items, such as a submenu title and links.
//		submenu_items - DIV: Container for menu lists.
//		submenu_navheading - H3: Wraps each menu button title with a navigation-heading (only rendered when 508-Compliance is enabled).
//		unorderedlist - UL: A container for menu list items (useful for non-graphical browsers).
//		unorderedlist_item - LI: Container for menu items (typically either links or sub-menus).

///////////////////////////////////////////////////////////////////////////////

function EkTbWebMenuPopUpWindow (url, hWind, nWidth, nHeight, nScroll, nResize) {
    url = url.replace(/&amp;amp;/g,"&").replace(/&amp;/g,"&");
	if (nWidth > screen.width) {
		nWidth = screen.width;
	}
	if (nHeight > screen.height) {
		nHeight = screen.height;
	}
	var cToolBar = 'toolbar=0,location=0,directories=0,status=' + nResize + ',menubar=0,scrollbars=' + nScroll + ',resizable=' + nResize + ',width=' + nWidth + ',height=' + nHeight;
	var popupwin = window.open(url, hWind, cToolBar);
	return popupwin;
}

///////////////////////////////////
// 
function ekFlexMenu_LogMsg(msg){
    var dt = new Date();
    msg = Date() + " - "+ msg;
    if (window.console && window.console.log){
        window.console.log(msg);
    }
    else if (window.Debug && window.Debug.writeln){
        window.Debug.writeln(msg);
    }
    else{
        ekFlexMenu_DebugMsg(msg);
    }
}

var g_ekFlexMenu_DebugWindow=null;
function ekFlexMenu_DebugMsg(Msg) {
    Msg = '>>>' + Msg + ' <br> ';
    if ((g_ekFlexMenu_DebugWindow == null) || (g_ekFlexMenu_DebugWindow.closed)) {
        g_ekFlexMenu_DebugWindow = window.open('Debug Notes', 'myWin', 'toolbar=no, directories=no, location=no, status=yes, menubar=no, resizable=yes, scrollbars=yes, width=500, height=300');
    }
    g_ekFlexMenu_DebugWindow.document.writeln(Msg);
    g_ekFlexMenu_DebugWindow.scrollTo(0,10000000);
}


/* the following variables are included for backwards compatibility 
   with the current Ektron Library
*/
var ektjq = $ektron;
var ektj$ = $ektron;

/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
 * 
 * Ektron
 * To Avoid conflicts Ektron replaced 'tb_' to 'ektb_' and 'TB_' to 'EkTB_'
*/
		  
var ektb_pathToImage = "";
var ektb_refreshWindow = "false";

/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//on page load call ektb_init
try
{
ektj$(document).ready(function(){   
	ektb_init('a.ek_thickbox, area.ek_thickbox, input.ek_thickbox');//pass where to apply thickbox
	imgLoader = new Image();// preload image
	if (ektb_pathToImage && ektb_pathToImage.length)
	    imgLoader.src = ektb_pathToImage;
});
}
catch(e)
{
    ; // need this for Ektron Explorer pages
}

//add thickbox to href & area elements that have a class of .thickbox
function ektb_init(domChunk){
	ektj$(domChunk).unbind('click').click(function(){
	var t = this.title || this.name || null;
	var a = this.href || this.alt;
	var g = this.rel || false;
	ektb_show(t,a,g);
	this.blur();
	return false;
	});
}

function ektb_show(caption, url, imageGroup, closeText, hideCaptionBar) {//function called when the user clicks on a thickbox link
	try {
        var ct = ("undefined" != typeof closeText) ? closeText : "close";
	    ektj$("object").hide();
        ektj$("embed").hide();
        
		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			ektj$("body","html").css({height: "100%", width: "100%"});
			ektj$("html").css("overflow","hidden");
			if (document.getElementById("EkTB_HideSelect") === null) {//iframe to hide select elements in ie6
				ektj$("body").append("<iframe id='EkTB_HideSelect'></iframe><div id='EkTB_overlay'></div><div id='EkTB_window'></div>");
				ektj$("#EkTB_overlay").click(ektb_remove);
			}
		}else{//all others
			if(document.getElementById("EkTB_overlay") === null){
				ektj$("body").append("<div id='EkTB_overlay'></div><div id='EkTB_window'></div>");
				ektj$("#EkTB_overlay").click(ektb_remove);
			}
		}
		
		if(ektb_detectMacXFF()){
			ektj$("#EkTB_overlay").addClass("EkTB_overlayMacFFBGHack");//use png overlay so hide flash
		}else{
			ektj$("#EkTB_overlay").addClass("EkTB_overlayBG");//use background and opacity
		}
		
		if(caption===null){caption="";}
		// can't cache because of rotate image case where it would be a stale cached image if you do view/rotate/view/refresh/view
		if (imgLoader.src.indexOf('?') == -1)
		{
		    ektj$("body").append("<div id='EkTB_load'><img src='"+ imgLoader.src+"?n=" +Math.random()+"' /></div>");//add loader to the page
		}
		else
		{
		    ektj$("body").append("<div id='EkTB_load'><img src='"+ imgLoader.src+"&n=" +Math.random()+"' /></div>");//add loader to the page
		}
		ektj$('#EkTB_load').show();//show loader
		
		var baseURL;
        if(url.indexOf("?")!==-1){ //ff there is a query string involved
		    baseURL = url.substr(0, url.indexOf("?"));
        }else{ 
   		    baseURL = url;
        }

	    var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
	    var urlType = baseURL.toLowerCase().match(urlString);
		if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images
            //Ektron Customized
            if (typeof caption == 'object' && (caption.tagName == 'SPAN' || caption.tagName == 'DIV')) {
			    caption = caption.innerHTML;
            }
			else if (typeof caption != 'string') {
			    caption = caption.value;
			}

			EkTB_PrevCaption = "";
			EkTB_PrevURL = "";
			EkTB_PrevHTML = "";
			EkTB_NextCaption = "";
			EkTB_NextURL = "";
			EkTB_NextHTML = "";
			EkTB_imageCount = "";
			EkTB_FoundURL = false;
			if(imageGroup){
				EkTB_TempArray = ektj$("a[@rel="+imageGroup+"]").get();
				for (EkTB_Counter = 0; ((EkTB_Counter < EkTB_TempArray.length) && (EkTB_NextHTML === "")); EkTB_Counter++) {
					var urlTypeTemp = EkTB_TempArray[EkTB_Counter].href.toLowerCase().match(urlString);
						if (!(EkTB_TempArray[EkTB_Counter].href == url)) {						
							if (EkTB_FoundURL) {
							    //Ektron Customized
							    var objTeaserField = ektj$("#" + EkTB_TempArray[EkTB_Counter].id + "_Teaser")[0];
							    if (typeof objTeaserField == 'object' && (objTeaserField.tagName == 'SPAN' || objTeaserField.tagName == 'DIV')) {
							        EkTB_NextCaption = objTeaserField.innerHTML;
							    }
							    else if (objTeaserField != null && typeof objTeaserField == 'object') {
							        EkTB_NextCaption = objTeaserField.value;
							    } else {
								    EkTB_NextCaption = EkTB_TempArray[EkTB_Counter].title;
								}
								EkTB_NextURL = EkTB_TempArray[EkTB_Counter].href;
								EkTB_NextHTML = "<span id='EkTB_next'>&nbsp;&nbsp;<a href='javascript://'>Next &gt;</a></span>";
							} else {
							    var objTeaserField = ektj$("#" + EkTB_TempArray[EkTB_Counter].id + "_Teaser")[0];
							    //Ektron Customized
							    if (typeof objTeaserField == 'object' && (objTeaserField.tagName == 'SPAN' || objTeaserField.tagName == 'DIV')) {
							        EkTB_PrevCaption = objTeaserField.innerHTML;
							    }
							    else if (objTeaserField != null && typeof objTeaserField == 'object') {
							        EkTB_PrevCaption = objTeaserField.value;
							    } else {
								    EkTB_PrevCaption = EkTB_TempArray[EkTB_Counter].title;
								}
								EkTB_PrevURL = EkTB_TempArray[EkTB_Counter].href;
								EkTB_PrevHTML = "<span id='EkTB_prev'>&nbsp;&nbsp;<a href='javascript://'>&lt; Prev</a></span>";
							}
						} else {
							EkTB_FoundURL = true;
							EkTB_imageCount = "Image " + (EkTB_Counter + 1) +" of "+ (EkTB_TempArray.length);											
						}
				}
			}

			imgPreloader = new Image();
			imgPreloader.onload = function(){		
			imgPreloader.onload = null;
				
			// Resizing large images - orginal by Christian Montoya edited by me.
			var pagesize = ektb_getPageSize();
			var x = pagesize[0] - 150;
			var y = pagesize[1] - 150;
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (imageWidth > x) {
				imageHeight = imageHeight * (x / imageWidth); 
				imageWidth = x; 
				if (imageHeight > y) { 
					imageWidth = imageWidth * (y / imageHeight); 
					imageHeight = y; 
				}
			} else if (imageHeight > y) { 
				imageWidth = imageWidth * (y / imageHeight); 
				imageHeight = y; 
				if (imageWidth > x) { 
					imageHeight = imageHeight * (x / imageWidth); 
					imageWidth = x;
				}
			}
			// End Resizing
			
			EkTB_WIDTH = imageWidth + 30;
			EkTB_HEIGHT = imageHeight + 60;
			var divCaption = '';

			if (caption != '') 
			    divCaption="<div id=\"ekt_caption\" class=\"ekt_caption\"><div style=\"text-align:right\"><a style=\"cursor:pointer;\" onclick=\"ektj$('#ekt_caption').hide()\">X</a></div><div class=\"ekt_caption_text\">"+caption+"</div></div>";
			    ektj$("#EkTB_window").append("<div id=\"EkTB_container-page\"><div id=\"EkTB_container-image\" style=\"height:"+imageHeight+"px;width:"+imageWidth+"px;\"><img src=\"" + url + "?n="+Math.random()+ "\" width=\""+imageWidth+"\" height=\"" + imageHeight + "\"/><div class=\"ekt_captionWrapper\"><div class=\"ekt_captionInnerWrapper\">" + divCaption + "</div></div></div></div><div id='EkTB_caption'><div id='EkTB_secondLine'>" + EkTB_imageCount + EkTB_PrevHTML + EkTB_NextHTML + "</div></div><div id='EkTB_closeWindow'><a href='javascript://' id='EkTB_closeWindowButton' title='" + ct + "'>" + ct + "</a></div>"); 		
						
			ektj$("#EkTB_closeWindowButton").click(ektb_closeClick);
			
			if (!(EkTB_PrevHTML === "")) {
				function goPrev(){
					if(ektj$(document).unbind("click",goPrev)){ektj$(document).unbind("click",goPrev);}
					ektj$("#EkTB_window").remove();
					ektj$("body").append("<div id='EkTB_window'></div>");
					ektb_show(EkTB_PrevCaption, EkTB_PrevURL, imageGroup);
					return false;	
				}
				ektj$("#EkTB_prev").click(goPrev);
			}
			
			if (!(EkTB_NextHTML === "")) {		
				function goNext(){
					ektj$("#EkTB_window").remove();
					ektj$("body").append("<div id='EkTB_window'></div>");
					ektb_show(EkTB_NextCaption, EkTB_NextURL, imageGroup);				
					return false;	
				}
				ektj$("#EkTB_next").click(goNext);
				
			}

			document.onkeydown = function(e){ 	
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					ektb_remove();
				} else if(keycode == 190){ // display previous image
					if(!(EkTB_NextHTML == "")){
						document.onkeydown = "";
						goNext();
					}
				} else if(keycode == 188){ // display next image
					if(!(EkTB_PrevHTML == "")){
						document.onkeydown = "";
						goPrev();
					}
				}	
			};
			
			ektb_position();
			ektj$("#EkTB_load").remove();
			ektj$("#EkTB_ImageOff").click(ektb_remove);
			ektj$("#EkTB_window").css({display:"block"}); //for safari using css instead of show
			};
			
			imgPreloader.src = url + "?n=" + Math.random(); // can't cache because of rotate image case where it would be use the wrong height from stale cached image
		}else{//code to show html
			
			var queryString = url.replace(/^[^\?]+\??/,'');
			var params = ektb_parseQuery( queryString );
			
			if(params['refreshCaller'] && params['refreshCaller'] != 'undefined')
			    ektb_refreshWindow = params['refreshCaller'];

			EkTB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL
			EkTB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL
		    
		    var pgSize = ektb_getPageSize();
			if(EkTB_WIDTH >  pgSize[0] || EkTB_HEIGHT > pgSize[1]){
					EkTB_WIDTH =  pgSize[0]-100; 
			        EkTB_HEIGHT = pgSize[1]-150; 
			}
			if(url.indexOf('EkTB_iframe') != -1){// either iframe or ajax window
			        ajaxContentW = EkTB_WIDTH - 30;
			        ajaxContentH = EkTB_HEIGHT - 45;		
					urlNoQuery = url.split('EkTB_');
					ektj$("#EkTB_iframeContent").remove();
					ektj$("#EkTB_window").empty();
					var scrolling = "";
					if(params['scrolling'] == "false")
					    scrolling = "scrolling='no'";
					if(params['modal'] != "true"){//iframe no modal
						ektj$("#EkTB_window").append("<div id='EkTB_title'><div id='EkTB_ajaxWindowTitle'>"+caption+"</div><div id='EkTB_closeAjaxWindow'><a href='javascript://'  id='EkTB_closeWindowButton' title='" + ct + "'></a></div></div><iframe " + scrolling + " frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='EkTB_iframeContent' name='EkTB_iframeContent"+Math.round(Math.random()*1000)+"' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 67)+"px;' > </iframe>");
					}else{//iframe modal
					    ektj$("#EkTB_overlay").unbind();
						ektj$("#EkTB_window").append("<div id='EkTB_title'><div id='EkTB_ajaxWindowTitle'>"+caption+"</div><div id='EkTB_closeAjaxWindow'><a href='javascript://'  id='EkTB_closeWindowButton' onclick='ektb_remove();' title='" + ct + "'></a></div></div><iframe " + scrolling + " frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='EkTB_iframeContent' name='EkTB_iframeContent"+Math.round(Math.random()*1000)+"' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 67)+"px;'> </iframe>");
					}
			        ektb_showIframe();
			}else{// not an iframe, ajax
			        ajaxContentW = EkTB_WIDTH;
			        ajaxContentH = EkTB_HEIGHT;
					if(ektj$("#EkTB_window").css("display") != "block"){
						if(params['modal'] != "true"){//ajax no modal
						ektj$("#EkTB_window").append("<div id='EkTB_title'><div id='EkTB_ajaxWindowTitle'>"+caption+"</div><div id='EkTB_closeAjaxWindow'><a href='javascript://' id='EkTB_closeWindowButton'>" + ct + "</a></div></div><div id='EkTB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
						}else{//ajax modal
						    ektj$("#EkTB_overlay").unbind();
						    if ( (params['caption'] != null && params['caption'] == 'false') || (hideCaptionBar != null || hideCaptionBar == true) )
						    {
						        ektj$("#EkTB_window").append("<div id='EkTB_ajaxContent' class='EkTB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");	
						    } 
						    else
						    {
						        ektj$("#EkTB_window").append("<div id='EkTB_title'><div id='EkTB_ajaxWindowTitle'>"+caption+"</div><div id='EkTB_closeAjaxWindow'><a href='javascript://' id='EkTB_closeWindowButton'>" + ct + "</a></div></div><div id='EkTB_ajaxContent' class='EkTB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");	
						    }
						}
					}else{//this means the window is already up, we are just loading new content via ajax
						ektj$("#EkTB_ajaxContent")[0].style.width = ajaxContentW +"px";
						ektj$("#EkTB_ajaxContent")[0].style.height = ajaxContentH +"px";
						ektj$("#EkTB_ajaxContent")[0].scrollTop = 0;
						ektj$("#EkTB_ajaxWindowTitle").html(caption);
					}
			}
					
			ektj$("#EkTB_closeWindowButton").click(ektb_closeClick);
			
				if(url.indexOf('EkTB_inline') != -1){	
					ektj$("#EkTB_ajaxContent").append(ektj$('#' + params['inlineId']).children());
					ektj$("#EkTB_window").unload(function () {
						ektj$('#' + params['inlineId']).append( ektj$("#EkTB_ajaxContent").children() ); // move elements back when you're finished
					});
					ektb_position();
					ektj$("#EkTB_load").remove();
					ektj$("#EkTB_window").css({display:"block"}); 
				}else if(url.indexOf('EkTB_iframe') != -1){
					ektb_position();
					if(ektj$.browser.safari){//safari needs help because it will not fire iframe onload
						ektj$("#EkTB_load").remove();
						ektj$("#EkTB_window").css({display:"block"});
					}
				}else{
					ektj$("#EkTB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
						ektb_position();
						ektj$("#EkTB_load").remove();
						ektb_init("#EkTB_ajaxContent a.ek_thickbox");
						ektj$("#EkTB_window").css({display:"block"});
					});
				}
			
		}

		if(!params['modal']){
			document.onkeyup = function(e){ 	
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					ektb_remove();
				}	
			};
		}
		
	} catch(e) {
		//nothing here
	}
}
/*********************************************************
*
*   Added by k. gray for plain blocking overlay with no "window"
*   This is used in the workarea when uploading docs to block clicks
*   on different folders during upload.
*
**********************************************************/
function ektb_show_no_url() {

	try {
	    ektj$("object").hide();
        ektj$("embed").hide();
        
		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			ektj$("body","html").css({height: "100%", width: "100%"});
			ektj$("html").css("overflow","hidden");
			if (document.getElementById("EkTB_HideSelect") === null) {//iframe to hide select elements in ie6
				ektj$("body").append("<iframe id='EkTB_HideSelect'></iframe><div id='EkTB_overlay'></div><div id='EkTB_window'></div>");
			}
		}else{//all others
			if(document.getElementById("EkTB_overlay") === null){
				ektj$("body").append("<div id='EkTB_overlay'></div><div id='EkTB_window'></div>");
			}
		}
		
		if(ektb_detectMacXFF()){
			ektj$("#EkTB_overlay").addClass("EkTB_overlayMacFFBGHack");//use png overlay so hide flash
		}else{
			ektj$("#EkTB_overlay").addClass("EkTB_overlayBG");//use background and opacity
		}
		
	} catch(e) {
		alert(e.message);
	}
}

//helper functions below
function ektb_showIframe(){
	ektj$("#EkTB_load").remove();
	ektj$("#EkTB_window").css({display:"block"});
}

function ektb_remove() {
    ektj$("object").show();
    ektj$("embed").show();
    
 	ektj$("#EkTB_imageOff").unbind("click");
	ektj$("#EkTB_closeWindowButton").unbind("click");
	ektj$("#EkTB_window").fadeOut("fast",function(){ektj$('#EkTB_window,#EkTB_overlay,#EkTB_HideSelect').trigger("unload").unbind().remove();});
	ektj$("#EkTB_load").remove();
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		ektj$("body","html").css({height: "auto", width: "auto"});
		ektj$("html").css("overflow","");
	}
	document.onkeydown = "";
	document.onkeyup = "";
	try
	{
	    if(ektb_refreshWindow != "true")
	        return false;
	        
	    ektb_refreshWindow = "false";
	       
         if(top.frames["ek_main"] != null)
         {
            var buffer = '';
            try {
                buffer = new String( top.frames["ek_main"].location.href );
            }
            catch( ex ) {
            }
            if (buffer.indexOf("#") != -1)
            {
	            var sUrl = top.frames["ek_main"].location.pathname;
	            var taxonomyId = "";
	            if(document.getElementById('taxonomyselectedtree') != null)
		            taxonomyId = document.getElementById('taxonomyselectedtree').value;
	            if(taxonomyId != "")
		            sUrl = sUrl + "?__taxonomyid=" +taxonomyId;
    	        if (parent != null) {
                    parent.location.href = sUrl;
                } else {
                   top.location.href = sUrl; 
                }
            }
            else
                top.frames["ek_main"].location.href = top.frames["ek_main"].location.href;
         }
         else
         {
 	        var buffer = '';
            try {
                buffer = new String( top.opener.location );
            }
            catch( ex ) {
            }
            if (buffer.indexOf("#") != -1)
            {
	            var sUrl = parent.location.pathname;
	            var taxonomyId = "";
	            if(document.getElementById('taxonomyselectedtree') != null)
		            taxonomyId = document.getElementById('taxonomyselectedtree').value;
	            if(taxonomyId != "")
		            sUrl = sUrl + "?__taxonomyid=" +taxonomyId;
    	            //alert(window.location.pathname);
    	        if (parent != null) {
                    parent.location.href = sUrl;
                } else {
                   top.location.href = sUrl; 
                }
            }
            else
            {
    	        if (parent != null) {
	                parent.location.href=parent.location.pathname+parent.location.search;
	            } else {
                   top.location.href = top.location.href; 
	            }
	        }
	    }
	    
	    if(top.DisplayUploadingBox)
	    {
                top.DisplayUploadingBox(false);
        }
	 }
	 catch(e)
	 {
	    ;
	 }
	return false;
}

function ektb_position() {
ektj$("#EkTB_window").css({marginLeft: '-' + parseInt((EkTB_WIDTH / 2),10) + 'px', width: EkTB_WIDTH + 'px'});
	if ( !(ektjq.browser.msie && ektjq.browser.version < 7)) { // take away IE6
		ektj$("#EkTB_window").css({marginTop: '-' + parseInt((EkTB_HEIGHT / 2),10) + 'px'});
	}
}

function ektb_parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function ektb_getPageSize(){
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	arrayPageSize = [w,h];
	return arrayPageSize;
}

function ektb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}

function ektb_closeClick() {
    var obj = ektj$("#EkTB_closeWindowButton");
    if (obj != null) {
        obj.focus();
    }
    ektb_remove();
}


//


function Browseris () {

            var agt=navigator.userAgent.toLowerCase();

            this.osver=1.0;

            if (agt)

            {

                        var stOSVer=agt.substring(agt.indexOf("windows ")+11);

                        this.osver=parseFloat(stOSVer);

            }

            this.major=parseInt(navigator.appVersion);

            this.nav=((agt.indexOf('mozilla')!=-1)&&((agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible')==-1)));

            this.nav6=this.nav && (this.major==5);

            this.nav6up=this.nav && (this.major >=5);

            this.nav7up=false;

            if (this.nav6up)

            {

                        var navIdx=agt.indexOf("netscape/");

                        if (navIdx >=0 )

                                    this.nav7up=parseInt(agt.substring(navIdx+9)) >=7;

            }

            this.ie=(agt.indexOf("msie")!=-1);

            this.aol=this.ie && agt.indexOf(" aol ")!=-1;

            if (this.ie)

                        {

                        var stIEVer=agt.substring(agt.indexOf("msie ")+5);

                        this.iever=parseInt(stIEVer);

                        this.verIEFull=parseFloat(stIEVer);

                        }

            else

                        this.iever=0;

            this.ie4up=this.ie && (this.major >=4);

            this.ie5up=this.ie && (this.iever >=5);

            this.ie55up=this.ie && (this.verIEFull >=5.5);

            this.ie6up=this.ie && (this.iever >=6);

            this.winnt=((agt.indexOf("winnt")!=-1)||(agt.indexOf("windows nt")!=-1));

            this.win32=((this.major >=4) && (navigator.platform=="Win32")) ||

                        (agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1);

            this.mac=(agt.indexOf("mac")!=-1);

            this.w3c=this.nav6up;

            this.safari=(agt.indexOf("safari")!=-1);

            this.safari125up=false;

            if (this.safari && this.major >=5)

            {

                        var navIdx=agt.indexOf("safari/");

                        if (navIdx >=0)

                                    this.safari125up=parseInt(agt.substring(navIdx+7)) >=125;

            }

}

var browseris=new Browseris();

var bis=browseris;

 
function ShowMultipleUpload ()
{
    if (browseris.ie5up && !browseris.mac)
    {
        try
        {
            var MultipleDocumentTest1 = new ActiveXObject('SharePoint.OpenDocuments.1');
            return true;
        }
        catch(e)
        {}
        try
        {
            var MultipleDocumentTest2 = new ActiveXObject('SharePoint.OpenDocuments.2');
            return true;
        }
        catch(e)
        {}
        try
        {
            var MultipleDocumentTest3 = new ActiveXObject('SharePoint.OpenDocuments.3');
            return true;
        }
        catch(e)
        {}
        try
        {
            var UploadControl = new ActiveXObject('STSUpld.UploadCtl');
            return true;
        }
        catch(e)
        {}
    }
    return false;
}

function CheckSTSUpload()
{
    if (browseris.ie5up && !browseris.mac)
    {
        try
        {
            var UploadControl = new ActiveXObject('STSUpld.UploadCtl');
            return true;
        }
        catch(e)
        {}
    }
    return false;
}


var dmsMenuDisplayedId = -1;
var dmsMenuType = ''; // 'community', 'taxonomy', ''
var dmsDynamicContentBox = true;
var dmsEktControlID = '';
var dmsMenuAppPath = '';

/* This function is called by menu items that need to perform server-side */
/* logic, which the content page needs to refesh to see.  For example, */
/* "Check-in" executes an ajax request to check-in the content item, then */
/* needs to refresh the page to show the state of the content has changed from "O" to "I" */
function refreshPage()
{
	setTimeout(function()
		{
			self.location.href=self.location;
		}, 1000);
}

/* This fucntion is called by the onclick event of the folder item's paragraph element */
function dmsMenuShowMenu(id, languageId, menuGuid, dmsCommunityDocumentsMenu, menuSubtype)
{
    dmsMenuType = dmsCommunityDocumentsMenu;

	if ((dmsMenuDisplayedId === id && $ektron(dmsWrapper).length > 0) || (dmsMenuDisplayedId !== -1))
	{
		dmsMenuDestroyMenu(id, languageId, menuGuid, true);
		if (dmsMenuDisplayedId !== -1)
		{
			dmsMenuFetch(id, languageId, menuGuid, menuSubtype);
		}
		dmsMenuDisplayedId = -1;
	}
	else
	{
		dmsMenuFetch(id, languageId, menuGuid, menuSubtype);
		dmsMenuDisplayedId = String(id) + String(languageId) + String(menuGuid);
	}
}

/* This function fetches the menu from the CMS via Ajax */
function dmsMenuFetch(id, languageId, menuGuid, menuSubtype)
{
    /* Show the "LOADING" div while the menu is being fetched */
    var dmsWrapperId = "#dmsWrapper" + String(id) + String(languageId) + String(menuGuid);
    var dmsWrapper = $ektron(dmsWrapperId);
    $ektron(dmsWrapperId + " p.dmsItemWrapper").addClass("dmsItemWrapperLoading");

    //OLD STUFF
    /*var dmsLoadingMessage = $ektron("#dmsMenuLoading");
    if (dmsLoadingMessage) { $ektron("#dmsLoadingMessage").css("display","block"); }
    */

	/* Get the menu wrapper */
	var dmsWrapper = $ektron("#dmsWrapper" + String(id) + String(languageId) + String(menuGuid));

	/* If the browser is IE, then we can create a menu specific to IE (opens Office assets directly in Office */
	/* See functions "editMSOfficeFile()" and viewMSOfficeFile() below */
	var ieMenu = "false";
	if ($ektron.browser.msie)
	{
		/* Only set "ieMenu" to true if office is installed */
		/* ShowMultipleUpload() tests to see if Offic is installed and exists in Workarea/java/determineoffice.js */
		if (typeof ShowMultipleUpload != 'undefined' && ShowMultipleUpload())
		{ieMenu = "true";}
	}
	var taxonomyOverrideId = 0;
	if (dmsMenuType != '')
	{
	    if ($ektron("#taxonomyselectedtree").length > 0)
	    {
	        taxonomyOverrideId = $ektron("#taxonomyselectedtree").attr("value");
	    }
	}

	/* Use JQuery to fetch the menu via Ajax */
	// fix for bug #40489
    var dmsMenuClientId = dmsWrapper.find("input[type='hidden'][class='dmsItemClientId']");
    if (dmsMenuClientId.length > 0)
    {
        // this is a control using the DMS menu, and we need that control's ClientId for AJAX responses
        dmsMenuClientId = dmsMenuClientId.val().replace(/\$/g, "_");
    }
    else
    {
        // otherwise, use the default dmsEktControlID value
        dmsMenuClientId = dmsEktControlID;

    }
    $ektron.get(dmsMenuAppPath + "DmsMenu/DmsMenu.aspx", { contentId: id, createIeSpecificMenu: ieMenu,
            communityDocuments:dmsMenuType, dynamicContentBox:dmsDynamicContentBox,
            dmsEktControlID:dmsMenuClientId, dmsLanguageId:languageId,
            taxonomyOverrideId:taxonomyOverrideId, dmsMenuGuid: menuGuid, dmsMenuSubtype: menuSubtype},
        function(data){
            try
            {
                var notLoggedInCheck = data.indexOf("-1|");
                if (notLoggedInCheck != -1)
                {
                    //user's not logged-in, alert user to log in.
                    alert(String(data).replace("-1|",""));
                }
                else
                {
                    //user's logged-in - process data
			        //set the innerHTML of the paragraph element to the AJAX response
			        /* Insert the Ajax response into the dms wrapper */
			        var dmsWrapperId = "#dmsWrapper" + String(id) + String(languageId) + String(menuGuid);
                    $ektron(data).appendTo(dmsWrapperId);

	                var dmsMenuWrapper = $ektron("#dmsMenuWrapper" + String(id) + String(languageId) + String(menuGuid));
	                dmsMenuWrapper.css("visibility", "hidden");
			        dmsMenuWrapper.css("display", "block");

			        var dmsMenuWrapperWidth = document.getElementById("dmsMenuWrapper" + String(id) + String(languageId) + String(menuGuid)).offsetWidth;
			        var dmsItemWrapper = $ektron("#dmsItemWrapper" + String(id) + String(languageId) + String(menuGuid));
			        var dmsItemWrapperWidth = document.getElementById("dmsItemWrapper" + String(id) + String(languageId) + String(menuGuid)).offsetWidth;

                    var borderWidth=0;
                    var dmsItemWrapper = $ektron("#dmsItemWrapper" + String(id) + String(languageId) + String(menuGuid));
                    if ($ektron.browser.msie)
                    {
                        switch(dmsItemWrapper.css("border-width"))
                        {
                            case "0px":
                                borderWidth = 1;
                                break;
                            case "medium":
                                borderWidth = 2;
                                break;
                            default:
                                borderWidth = 0;
                                break
                        }
                    }
                    if ($ektron.browser.mozilla)
                    {
                        if (dmsItemWrapper.css("border-right-width") !== "0px")
                        { borderWidth = 0; }
                        else
                        { borderWidth = 2;}
                    }
                    if ($ektron.browser.safari)
                    {
                        if (dmsItemWrapper.css("border-right-width") !== "0px")
                        { borderWidth = 0; }
                        else
                        { borderWidth = 2;}
                        /* eliminate the 1px top margin to ensure menu renders flush with dmsItemWrapper */
                        dmsMenuWrapper.css("margin-top", "-2px !important");
                    }

			        if (dmsMenuWrapperWidth > dmsItemWrapperWidth)
			        { leftMargin = "20px"; }
			        else
			        { leftMargin = (dmsItemWrapperWidth - dmsMenuWrapperWidth + borderWidth) + "px"; }

                    //remove loading gif
                    $ektron(dmsWrapperId).removeClass("dmsItemWrapperLoading");

                    //set <p> to active
                    $ektron(dmsItemWrapper).attr("class", "dmsItemWrapperActive");
			        $ektron(dmsItemWrapper).attr("title", "Hide Menu");

			        //show the correctly positioned menu
			        $ektron(dmsMenuWrapper).css("margin-left", leftMargin);
			        $ektron(dmsMenuWrapper).css("display", "");
			        $ektron(dmsMenuWrapper).css("visibility", "visible");
			    }
			}
			finally
			{
			    /* Hide loading message */
                $ektron("#dmsLoadingMessage").css("display","none");
            }
        });
}

/* Begin IE6-specific handling */

var dmsMenuAddIE6HoverOnRefreshCounter = 0;
var dmsMenuAddIE6HoverOnRefreshIntervalId = 0;

setTimeout(function() {
	if ($ektron.browser.msie && $ektron.browser.version < 7) {
		$ektron("div.dmsWrapper").ready(function(){
			dmsMenuAddIE6HoverOnRefreshCounter = 1;
			dmsMenuAddIE6HoverOnRefreshIntervalId = setInterval("dmsMenuAddIE6HoverOnRefresh()", 500);
		});
	}
},1000);

function dmsMenuAddIE6HoverOnRefresh()
{
    if (dmsMenuAddIE6HoverOnRefreshCounter < 10)
    {
        $ektron("div.dmsWrapper").hover(
            function() {
                $ektron(this).attr("class", "dmsWrapperIE6Hover");
            },
            function() {
                $ektron(this).attr("class", "dmsWrapper");
            }
        );
        dmsMenuAddIE6HoverOnRefreshCounter++;
    }
    else
    {
        clearInterval(dmsMenuAddIE6HoverOnRefreshIntervalId);
    }
}

function dmsMenuAddIE6Hover(id)
{
    setTimeout(function()
    {
        var dmsWrapper = $ektron("#" + id);
        $ektron(dmsWrapper).hover(
            function() {
                $ektron(dmsWrapper).attr("class", "dmsWrapperIE6Hover");
            },
            function() {
                $ektron(dmsWrapper).attr("class", "dmsWrapper");
            }
        );
    },1000);
}

/* End IE-specific handling */

/* This function destroys the menu object the previously selected menu */
function dmsMenuDestroyMenu(id, languageId, menuGuid, forceMenuClose)
{
    if (dmsMenuDisplayedId != (String(id) + String(languageId) + String(menuGuid)) || forceMenuClose === true)
    {
        /* Use Jquery to remove any Dms Menus */
        var activeDmsMenus = $ektron('.dmsMenuWrapper');
        for (i=0; i < activeDmsMenus.length; i++)
        {
            $ektron(activeDmsMenus[i]).remove();
        }
        /* Use Jquery to reset any active Item Wrappers to inactive */
        var activeDmsItemWrappers = $ektron('.dmsItemWrapperActive');
        for (i=0; i < activeDmsItemWrappers.length; i++)
        {
           activeDmsItemWrappers[i].className = 'dmsItemWrapper';
           activeDmsItemWrappers[i].title = 'View Menu';
        }

        /* Since the menu's been destroyed, set the global var dmsMenuDisplayedId to -1 */
        dmsMenuDisplayedId = -1;
    }
}

/* This funtion opens Office documents in IE only */
function editMSOfficeFile(checkOutUrl, fileName)
{
    if($ektron.browser.msie)
    {
        /* Show the "LOADING" div while the menu is being fetched */
        var dmsLoadingMessage = document.getElementById("dmsMenuLoading");
        if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "block"; }

	    try
	    {
            /* Use Jquery to execute content-state action via ajax */
            $ektron.get(checkOutUrl,
                function(data, status)
                {
                    if (status === "success")
                    {
                        /* attempt to change content state */
                        try
                        {
		                    /* if ajax call was successful, open office with document */
		                    try
                            {
                                var obj = new ActiveXObject('SharePoint.OpenDocuments.2');
                                obj.EditDocument2(window,fileName, '');
                            }
                            catch(e)
                            {
                                try
                                {
                                    obj = new ActiveXObject('SharePoint.OpenDocuments.3');
                                    obj.EditDocument3(window,fileName, '');
                                }
                                catch(e)
                                {
                                    obj = new ActiveXObject('SharePoint.OpenDocuments.1');
                                    obj.EditDocument(window,fileName, '');
                                }
                            }

                            //31312 - edit in office does not work first time after install
                            refreshPage();
                            /* prevent href from firing - ajax attempt was ok */
		                }
		                catch(e)
		                {
		                    /* active X instantiation failed, attempt to peform the same action via href (non-ajax) */
		                    window.location = checkOutUrl + "&executeActiveX=true";
		                }
		                finally
		                {
		                    /* Hide loading message */
                            if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "none"; }
                        }
                    }
                    else
                    {
                        /* ajax request failed, attempt to peform the same action via href (non-ajax) */
		                window.location = checkOutUrl + "&executeActiveX=true";
                    }
            });

            //refreshPage();
            return false;
        }
        catch(e)
        {
            //alert(e.description);
            return true;
        }
    }
}

/* This funtion executes a number of menu actions - mainly for actions that require content state change. */
/* Specifically, this fucntion is called by the following menu items: */
/* Approve, CheckIn, Decline, Delete, Publish, Submit */
function dmsMenuAction(href)
{
     /* Show the "LOADING" div while the menu is being fetched */
    var dmsLoadingMessage = document.getElementById("dmsMenuLoading");
    if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "block"; }

    try
    {
        /* Use Jquery to execute content-state action via ajax */
        $ektron.get(href,
            function(data, status)
            {
                if (status === "success")
                {
                    /* content state change succeeded, refresh page to show change in state */
                    refreshPage();
                }
                else
                {
                    alert("failed!");
                    /* ajax request failed, attempt to peform the same action via href (non-ajax) */
	                window.location = href;
                }
				/* Hide loading message */
                if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "none"; }
        });
        return false;
    }
    catch(e)
    {
        //the ajax request failed, return true so that the browser attempts to perform the action via href.
        return true;
    }
    finally
    {
        /* Hide loading message */
        if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "none"; }
    }
}

/* This function does the same thing as dmsMenuAction, but it opens a success/failure */
/* window to show indicate to the user if the request was succesfully sent or not */
function dmsMenuRequestCheckIn(href)
{
     /* Show the "LOADING" div while the menu is being fetched */
    var dmsLoadingMessage = document.getElementById("dmsMenuLoading");
    if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "block"; }

    try
    {
        /* Use Jquery to execute content-state action via ajax */
        $ektron.get(href,
            function(data, status)
            {
                //show response - success/failure
                alert(data);
				/* Hide loading message */
                if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "none"; }
        });
        return false;
    }
    catch(e)
    {
        //the ajax request failed, return true so that the browser attempts to perform the action via href.
        return true;
    }
    finally
    {
        /* Hide loading message */
        if (dmsLoadingMessage) { dmsLoadingMessage.style.display = "none"; }
    }
}

function dmsForceCheckIn(href, message)
{
    var confirmation=confirm(message);
    if (confirmation)
    {
        dmsMenuAction(href);
    }
}

function viewMSOfficeFile(fileName)
{
    if($ektron.browser.msie)
    {
        var obj = new ActiveXObject('SharePoint.OpenDocuments.2');
        obj.ViewDocument2(window,fileName, '');
		return false;
    }
}

function dmsMenuConfirmDelete(str)
{
    var confirmation = confirm(str);
    if (confirmation === true)
    {
        return true;
    }
    else
    {
        return false;
    }
}

function dmsModifyImage(href, idThumb)
{
     /* show AJAX image busy icon */
    var imgtag = document.getElementById(idThumb);
    if (imgtag == null) {
        alert('error: missing ID for thumbnail image in ekml template');
        return false; // no thumbnail so ignore command
    }
    var oldimg = imgtag.src;
    imgtag.src = dmsMenuAppPath + '/images/application/DMSMenu/dmsMenuAjaxLoading.gif';

    try
    {
        /* Use Jquery to execute content-state action via ajax */
        $ektron.get(href,
            function(data, status)
            {
                if (status === "success")
                {
                    // anything special to do?
                }
                else
                {
                    /* ajax request failed, attempt to peform the same action via href (non-ajax) */
	                window.location = href;
                }
				/* refresh thumbnail */
                imgtag.src = oldimg + "?r=" + Math.random();
                // switch over view image as well
                var bigimgtag = document.getElementById(idThumb.replace(/GalleryThumb/,"PhotoGallery"));
		bigimgtag.href = bigimgtag.href + "?r=" + Math.random();	// replace preloaded image
        });
        return false;
    }
    catch(e)
    {
        imgtag.src = oldimg;
        //the ajax request failed, return true so that the browser attempts to perform the action via href.
        return true;
    }
}

// begin Sync modifications
if (Ektron.DMSMenu === undefined)
{
    Ektron.DMSMenu =
    {
        Sync: function(settings)
        {
            /*  possible settings parameters
                contentLanguage: indicates the content language for this content
                contentId: the id of the cotnent item
                contentAssetId: the content asset id number (if applicable)
                contentAssetVersion: the content asset version number (if applicable)
                folderId: the parent folder id  number
                dmsSyncPath: the full path to the dmsSync.aspx necessary when the modals are not present
            */
            var s = settings;
            // check for the presence of the necessary SyncConfigModal
            if ($ektron("#ShowSyncConfigModal").length > 0)
            {
                // the modal is present, so we can do the sync in this window
                Ektron.Sync.checkMultipleConfigs(s.contentLanguage, s.contentId, s.contentAssetId, s.contentAssetVersion, s.folderId, s.isMultisite);
            }
            else
            {
                // popup a new window to perform the sync
                dmsSyncWindow = window.open(s.dmsSyncPath + '?contentLanguage=' + s.contentLanguage + '&contentId=' + s.contentId + '&contentAssetId=' + s.contentAssetId + '&contentAssetVersion=' + s.contentAssetVersion + '&folderId=' + s.folderId + '&isMultiSite=' + s.isMultisite, 'dmsSync', 'resizable=no,scrollbars=no,toolbar=no,status=no,menubar=no,location=no,height=1,width=1');
                dmsSyncWindow.focus();
            }
            //return false to prevent click through
            return false;
        }
    };
}
