function NeoMenu(source,enabled,enableAjax,ajaxClientName,target,selectedMenuItem,mouseOutTimeOut,itemWrap,isVertical,staticDisplayLevel,dynamicBottomSeparatorImageUrl,dynamicBottomSeparatorImageIncludeLast,dynamicTopSeparatorImageUrl,dynamicTopSeparatorImageIncludeFirst,dynamicPopOutImageUrl,dynamicPopOutImageTextFormatString,dynamicHoverClass,dynamicSelectedClass,dynamicSelectedHyperLinkClass,dynamicSeparatorImageClass,dynamicMenuItemImageUrl,dynamicHoverMenuItemImageUrl,dynamicSelectedMenuItemImageUrl,dynamicMenuItemImageClass,staticBottomSeparatorImageUrl,staticBottomSeparatorImageIncludeLast,staticTopSeparatorImageUrl,staticTopSeparatorImageIncludeFirst,staticHoverClass,staticSelectedClass,staticSelectedHyperLinkClass,staticSeparatorImageClass,staticMenuItemImageUrl,staticHoverMenuItemImageUrl,staticSelectedMenuItemImageUrl,staticMenuItemImageClass)
{
	this.init=AnimationManager;
	this.initNeoMenu=NeoMenu_InitNeoMenu;
	
	this.init();
	this.initNeoMenu(source,enabled,enableAjax,ajaxClientName,target,selectedMenuItem,mouseOutTimeOut,itemWrap,isVertical,staticDisplayLevel,dynamicBottomSeparatorImageUrl,dynamicBottomSeparatorImageIncludeLast,dynamicTopSeparatorImageUrl,dynamicTopSeparatorImageIncludeFirst,dynamicPopOutImageUrl,dynamicPopOutImageTextFormatString,dynamicHoverClass,dynamicSelectedClass,dynamicSelectedHyperLinkClass,dynamicSeparatorImageClass,dynamicMenuItemImageUrl,dynamicHoverMenuItemImageUrl,dynamicSelectedMenuItemImageUrl,dynamicMenuItemImageClass,staticBottomSeparatorImageUrl,staticBottomSeparatorImageIncludeLast,staticTopSeparatorImageUrl,staticTopSeparatorImageIncludeFirst,staticHoverClass,staticSelectedClass,staticSelectedHyperLinkClass,staticSeparatorImageClass,staticMenuItemImageUrl,staticHoverMenuItemImageUrl,staticSelectedMenuItemImageUrl,staticMenuItemImageClass);
}

function NeoMenu_InitNeoMenu(source,enabled,enableAjax,ajaxClientName,target,selectedMenuItem,mouseOutTimeOut,itemWrap,isVertical,staticDisplayLevel,dynamicBottomSeparatorImageUrl,dynamicBottomSeparatorImageIncludeLast,dynamicTopSeparatorImageUrl,dynamicTopSeparatorImageIncludeFirst,dynamicPopOutImageUrl,dynamicPopOutImageTextFormatString,dynamicHoverClass,dynamicSelectedClass,dynamicSelectedHyperLinkClass,dynamicSeparatorImageClass,dynamicMenuItemImageUrl,dynamicHoverMenuItemImageUrl,dynamicSelectedMenuItemImageUrl,dynamicMenuItemImageClass,staticBottomSeparatorImageUrl,staticBottomSeparatorImageIncludeLast,staticTopSeparatorImageUrl,staticTopSeparatorImageIncludeFirst,staticHoverClass,staticSelectedClass,staticSelectedHyperLinkClass,staticSeparatorImageClass,staticMenuItemImageUrl,staticHoverMenuItemImageUrl,staticSelectedMenuItemImageUrl,staticMenuItemImageClass)
{
	this.source=source;
	this.enabled=enabled;
	this.enableAjax=enableAjax
	this.ajaxClientName=ajaxClientName;
	this.target=target;
	this.staticDisplayLevel=staticDisplayLevel;
	this.itemWrap=itemWrap;
	this.isVertical=isVertical;
	
	this.sourceElement=getElement(source);
	this.overMenuItem=null;
	this.selectedMenuItem=selectedMenuItem;
	this.mouseOutTimeOut=mouseOutTimeOut;
	this.setOverMenuItemTimeout=null;
	
	this.dynamicHoverClass=dynamicHoverClass;
	this.dynamicSelectedClass=dynamicSelectedClass;
	this.dynamicSelectedHyperLinkClass=dynamicSelectedHyperLinkClass;
	this.dynamicSeparatorImageClass=dynamicSeparatorImageClass;
	this.dynamicMenuItemImageUrl=dynamicMenuItemImageUrl;
	this.dynamicHoverMenuItemImageUrl=dynamicHoverMenuItemImageUrl;
	this.dynamicSelectedMenuItemImageUrl=dynamicSelectedMenuItemImageUrl;
	this.dynamicMenuItemImageClass=dynamicMenuItemImageClass;
	this.staticHoverClass=staticHoverClass;
	this.staticSelectedClass=staticSelectedClass;
	this.staticSelectedHyperLinkClass=staticSelectedHyperLinkClass;
	this.staticSeparatorImageClass=staticSeparatorImageClass;
	this.staticMenuItemImageUrl=staticMenuItemImageUrl;
	this.staticHoverMenuItemImageUrl=staticHoverMenuItemImageUrl;
	this.staticSelectedMenuItemImageUrl=staticSelectedMenuItemImageUrl;
	this.staticMenuItemImageClass=staticMenuItemImageClass;

	this.dynamicBottomSeparatorImageUrl=dynamicBottomSeparatorImageUrl;
	this.dynamicBottomSeparatorImageIncludeLast=dynamicBottomSeparatorImageIncludeLast;
	this.dynamicTopSeparatorImageUrl=dynamicTopSeparatorImageUrl;
	this.dynamicTopSeparatorImageIncludeFirst=dynamicTopSeparatorImageIncludeFirst;
	this.dynamicPopOutImageUrl=dynamicPopOutImageUrl;
	this.dynamicPopOutImageTextFormatString=dynamicPopOutImageTextFormatString;
	
	this.staticBottomSeparatorImageUrl=staticBottomSeparatorImageUrl;
	this.staticBottomSeparatorImageIncludeLast=staticBottomSeparatorImageIncludeLast;
	this.staticTopSeparatorImageUrl=staticTopSeparatorImageUrl;
	this.staticTopSeparatorImageIncludeFirst=staticTopSeparatorImageIncludeFirst;
	
	this.setOverMenuItem=NeoMenu_SetOverMenuItem;
	this.setSelectedMenuItem=NeoMenu_SetSelectedMenuItem;
	this.baseWindowLoad=this.windowLoad;
	this.windowLoad=NeoMenu_WindowLoad;
	this.baseWindowUnload=this.windowUnload;
	this.windowUnload=NeoMenu_WindowUnload;
}

function NeoMenu_WindowLoad()
{
	this.sourceElement=getElement(this.source);
	if (this.selectedMenuItem) this.selectedMenuItem=this.items[this.selectedMenuItem];
	this.baseWindowLoad();
}

function NeoMenu_WindowUnload()
{
	if (this.setOverMenuItemTimeout!=null) window.clearTimeout(this.setOverMenuItemTimeout);
	this.baseWindowUnload();
}

function NeoMenu_SetOverMenuItem(menuItem,timeout)
{
	if (menuItem!=null && this.setOverMenuItemTimeout!=null)
	{
		window.clearTimeout(this.setOverMenuItemTimeout);
		this.setOverMenuItemTimeout=null;
	}
	if (menuItem!=this.overMenuItem)
	{
		
		if (menuItem==null && timeout!=null) 
		{
			this.setOverMenuItemTimeout=window.setTimeout("document.animationManagers["+this._id+"].setOverMenuItem("+(menuItem!=null?"'"+menuItem.item+"'":"null")+");",timeout);
		}
		else
		{
			var oldOverMenuItem=this.overMenuItem;
			this.overMenuItem=menuItem;
			if (oldOverMenuItem!=null) oldOverMenuItem.menuItemOut();
			if (menuItem!=null) menuItem.menuItemOver();
		}
	}
}

function NeoMenu_SetSelectedMenuItem(menuItem)
{
	var oldSelectedMenuItem=this.selectedMenuItem;
	this.selectedMenuItem=menuItem;
	if (oldSelectedMenuItem!=null) oldSelectedMenuItem.menuItemUnselect();
	if (menuItem!=null) menuItem.menuItemSelect();
}

function NeoMenuItem(item,element,radioBehaviour,hideOnDocumentClick,enabled,canAjax,depth,text,toolTip,navigateUrl,target,selectable,visible,imageUrl,isFading,isSliding,animationSpeed,itemClass,linkClass,elementClass)
{
	this.initMenuItem=NeoMenuItem_InitMenuItem;
	this.initMenuItem(item,element,radioBehaviour,hideOnDocumentClick,enabled,canAjax,depth,text,toolTip,navigateUrl,target,selectable,visible,imageUrl,isFading,isSliding,animationSpeed,itemClass,linkClass,elementClass);
}

function NeoMenuItem_InitMenuItem(item,element,radioBehaviour,hideOnDocumentClick,enabled,canAjax,depth,text,toolTip,navigateUrl,target,selectable,visible,imageUrl,isFading,isSliding,animationSpeed,itemClass,linkClass,elementClass)
{
	 //itemId,element,source,radioBehaviour,hideOnDocumentClick
	this.init=AnimatedItem;
	this.init(item,element,item,radioBehaviour,hideOnDocumentClick);
	
	this.enabled=enabled;
	this.canAjax=canAjax;
	this.depth=depth;
	this.text=text;
	this.toolTip=toolTip;
	this.navigateUrl=navigateUrl;
	this.target=target;
	this.selectable=selectable;
	this.visible=visible;
	this.imageUrl=imageUrl;
	//this.isFading=isFading;
	//this.isSliding=isSliding;
	//this.animationSpeed=animationSpeed;
	this.itemClass=itemClass;
	this.linkClass=linkClass;
	this.elementClass=elementClass;
	
	this.dispose=NeoMenuItem_Dispose;
	this.getItemStyle=NeoMenuItem_GetItemStyle;
	this.getItemImageUrl=NeoMenuItem_GetItemImageUrl;
	this.getHyperLinkStyle=NeoMenuItem_GetHyperLinkStyle;
	this.initItemSource=NeoMenuItem_InitItemSource;
	this.isOver=NeoMenuItem_IsOver;
	this.isSelected=NeoMenuItem_IsSelected;
	this.isStatic=NeoMenuItem_IsStatic;
	this.areItemsStatic=NeoMenuItem_AreItemsStatic;
	this.isInOverPath=NeoMenuItem_IsInOverPath;
	this.updateItemSourceStyle=NeoMenuItem_UpdateItemSourceStyle;
	
	this.menuItemOut=NeoMenuItem_MenuItemOut;
	this.menuItemOver=NeoMenuItem_MenuItemOver;
	this.menuItemClick=NeoMenuItem_MenuItemClick;
	this.menuItemSelect=NeoMenuItem_MenuItemSelect;
	this.menuItemUnselect=NeoMenuItem_MenuItemUnselect;
	this.menuItemHyperLinkClick=NeoMenuItem_MenuItemHyperLinkClick;
	
	this.createItemSource=NeoMenuItem_CreateItemSource;
	this.createItemElement=NeoMenuItem_CreateItemElement;
	this.appendItemElement=NeoMenuItem_AppendItemElement;
	
	this.handleRadioBehaviour=NeoMenuItem_HandleRadioBehaviour;
	this.radioBehaviourHide=NeoMenuItem_RadioBehaviourHide;
}

function NeoMenuItem_GetItemStyle()
{
	var owner=this.getOwner();
	var flag1=this.isStatic();
	var flag2=this.isSelected();
	var flag3=this.isInOverPath();
	return flag3?flag1?owner.staticHoverClass:owner.dynamicHoverClass:flag2?flag1?owner.staticSelectedClass:owner.dynamicSelectedClass:this.itemClass;
}

function NeoMenuItem_GetHyperLinkStyle()
{
	var owner=this.getOwner();
	var flag1=this.isStatic();
	var flag2=this.isSelected();
	return this.linkClass+(flag2?" "+(flag1?owner.staticSelectedHyperLinkClass:owner.dynamicSelectedHyperLinkClass):"");
}

function NeoMenuItem_GetItemImageUrl()
{
	var owner=this.getOwner();
	var flag1=this.isStatic();
	var flag2=this.isSelected();
	var flag3=this.isInOverPath();
	var url=flag3?flag1?owner.staticHoverMenuItemImageUrl:owner.dynamicHoverMenuItemImageUrl:null;
	if (!url) url=flag2?flag1?owner.staticSelectedMenuItemImageUrl:owner.dynamicSelectedMenuItemImageUrl:null;
	if (!url) url=flag1?owner.staticMenuItemImageUrl:owner.dynamicMenuItemImageUrl;
	return url;
}

function NeoMenuItem_InitItemSource()
{
	this._itemSource=getElement(this._source);
	this._itemElement=getElement(this._element);
	if (this._itemSource==null) this._itemSource=this.createItemSource();

	this._itemSource.menuItem=this;
	this._mouseOverFunction=new Function("e","var menuItem=getElementProperty(new Evt(e).source,\"menuItem\"); if (menuItem) menuItem.getOwner().setOverMenuItem(menuItem);");
	this._mouseOutFunction=new Function("e","var menuItem=getElementProperty(new Evt(e).source,\"menuItem\"); if (menuItem) menuItem.getOwner().setOverMenuItem(null,"+this.getOwner().mouseOutTimeOut+");");
	this._mouseClickFunction=new Function("e","var menuItem=getElementProperty(new Evt(e).source,\"menuItem\"); if (menuItem) menuItem.menuItemClick(e);");
	addEvent(this._itemSource,"mouseover",this._mouseOverFunction,true);
	addEvent(this._itemSource,"mouseout",this._mouseOutFunction,true);
	addEvent(this._itemSource,"click",this._mouseClickFunction,true);
	
	var array1=this._itemSource.getElementsByTagName("A");
	if (array1.length>0)
	{
		this._itemSourceHyperLink=array1[0];
		this._clickFunction=new Function("e","var menuItem=getElementProperty(new Evt(e).source,\"menuItem\"); if (menuItem) menuItem.menuItemHyperLinkClick(e);")
		addEvent(this._itemSourceHyperLink,"click",this._clickFunction,true);
		var array2=this._itemSource.getElementsByTagName("IMG");
		if (array2.length>0) this._itemImage=array2[0];
	}
}

function NeoMenuItem_Dispose()
{
	if (this._mouseOverFunction) removeEvent(this._itemSource,"mouseover",this._mouseOverFunction,true);
	if (this._mouseOutFunction) removeEvent(this._itemSource,"mouseout",this._mouseOutFunction,true);
	if (this._mouseClickFunction) removeEvent(this._itemSource,"mouseout",this._mouseClickFunction,true);
	if (this._itemSourceHyperLink && this._clickFunction) removeEvent(this._itemSourceHyperLink,"click",this._clickFunction,true);
}

function NeoMenuItem_IsOver()
{
	var owner=this.getOwner();
	return owner.overMenuItem==this || owner.overMenuItem==this.getItemId();
}

function NeoMenuItem_IsSelected()
{
	var owner=this.getOwner();
	return owner.selectedMenuItem==this || owner.selectedMenuItem==this.getItemId();
}

function NeoMenuItem_IsStatic()
{
	var owner=this.getOwner();
	return this.depth<owner.staticDisplayLevel;
}

function NeoMenuItem_AreItemsStatic()
{
	var owner=this.getOwner();
	return this.depth+1<owner.staticDisplayLevel;
}

function NeoMenuItem_HandleRadioBehaviour()
{
	var owner=this.getOwner();
	if (this.getRadioBehaviour() && !this.areItemsStatic()) owner.hideItemChildren(this.getParentItem(),this,true);
}

function NeoMenuItem_RadioBehaviourHide()
{
	if (this.hasItems()) this.startAnimation(false);
}

function NeoMenuItem_IsInOverPath()
{
	var owner=this.getOwner();
	var imteId=this.getItemId();
	var overMenuItem=owner.overMenuItem;
	while (overMenuItem!=null) if (this==overMenuItem || imteId==overMenuItem) return true; else overMenuItem=overMenuItem.getParentItem();
	return false;
}

function NeoMenuItem_UpdateItemSourceStyle()
{
	this._itemSource.className=this.getItemStyle();
	var url=this.getItemImageUrl();
	if (this._itemImage.src!=url)
	{
		this._itemImage.src=url;
		this._itemImage.style.display=url?"":"none";
	}
	if (this._itemSourceHyperLink) this._itemSourceHyperLink.className=this.getHyperLinkStyle();
}

function NeoMenuItem_MenuItemOut()
{
	this.updateItemSourceStyle();
	var parent=this.getParentItem();
	if (parent!=null) parent.menuItemOut();
}

function NeoMenuItem_MenuItemOver()
{
	this.updateItemSourceStyle();
	var parent=this.getParentItem();
	if (parent!=null) parent.menuItemOver();
}

function NeoMenuItem_MenuItemClick(e)
{

}

function NeoMenuItem_MenuItemHyperLinkClick(e)
{
	if (this.navigateUrl && this.navigateUrl!="#") this.getOwner().setSelectedMenuItem(this);
}

function NeoMenuItem_MenuItemSelect()
{
	this.updateItemSourceStyle();
}

function NeoMenuItem_MenuItemUnselect()
{
	this.updateItemSourceStyle();
}

function NeoMenuItem_CreateItemSource()
{
	var table=document.createElement("TABLE");
	table.setAttribute("cellSpacing","0");
	table.setAttribute("cellPadding","0");
	table.id=this.getItemId();
	table.className=this.getItemStyle();
	if (this.toolTip) table.title=this.toolTip;

	var tbody=document.createElement("TBODY");
	table.appendChild(tbody);
	
	var tr=document.createElement("TR");
	tbody.appendChild(tr);
	
	var td=document.createElement("TD");
	tr.appendChild(td);
	
	var items=this.getItems();
	var owner=this.getOwner();
	var flag1=owner.dynamicPopOutImageUrl && this.hasItems();
	if (flag1) 
	{
		var flag1=false;
		for(var itemId in items) flag1|=items[itemId].visible;
	}
	if (!owner.itemWrap) td.setAttribute("noWrap","true");
	if (!flag1) td.setAttribute("colspan","2");
	td.width="100%";
	
	var link=document.createElement("A");
	td.appendChild(link);
	
	if (this.enabled && this.selectable)
	{
	    var addTarget=this.target && this.target!="_self";
		if (this.navigateUrl) link.href=this.navigateUrl;
		if (addTarget) link.target=this.target;
		else if (owner.target) link.target=owner.target;
		if (this.linkClass) link.className=this.getHyperLinkStyle();
		if (!addTarget && owner.enableAjax && this.canAjax && this.navigateUrl && this.navigateUrl!="#" && this.navigateUrl.match(/^javascript:/i)==null) link.onclick=new Function("event","NeoMenu_AjaxRequest("+owner.ajaxClientName+",\""+this.navigateUrl+"\"); return false;");
	}
	else if (!this.selectable) link.style.cursor="pointer";
	else if (!this.enabled) link.disabled=true;
	
	var url=this.getItemImageUrl();
	var img=document.createElement("IMG");
	img.src=url;
	img.style.display=url?"":"none";
	var className=this.isStatic()?owner.staticMenuItemImageClass:owner.dynamicMenuItemImageClass;
	if (className) img.className=className;
	else
	{
		img.border="0px";
		img.style.verticalAlign="middle";
	}
	
	if (this.toolTip) img.title=this.toolTip;
	link.appendChild(img);
	
	link.appendChild(document.createTextNode(this.text));
	
	if (flag1)
	{
		td=document.createElement("TD");
		tr.appendChild(td);

		td.style.width="0px";

		var img=document.createElement("IMG");
		td.appendChild(img);
		
		img.src=owner.dynamicPopOutImageUrl;
		img.alt=owner.dynamicPopOutImageTextFormatString.replace(/\{0\}/,this.text);
		img.style.borderStyle="none";
		img.style.verticalAlign="middle";
	}
	
	return table;
}

function NeoMenuItem_CreateItemElement()
{
	var div1=document.createElement("DIV");
	div1.id=this._element;
	div1.style.display="none";
	
	var div2=document.createElement("DIV");
	div1.appendChild(div2);
	
	div2.className=this.elementClass;
	//div2.style.display="block";
	
	var table=document.createElement("TABLE");
	div2.appendChild(table);
	
	table.setAttribute("cellSpacing","0");
	table.setAttribute("cellPadding","0");
	//table.setAttribute("width","100%");
	
	var tbody=document.createElement("TBODY");
	table.appendChild(tbody);
	
	var items=this.getItems();
	var owner=this.getOwner();
	var flag1=false;
	var bottomSeparator=null;
	for(var itemId in items)
	{
		if (items[itemId].visible)
		{
			if (!flag1) flag1=true;
			else if (bottomSeparator!=null) 
			{
				tbody.appendChild(bottomSeparator);
				bottomSeparator=null;
			}
			
			if (owner.dynamicTopSeparatorImageUrl && (num2>0 || owner.dynamicTopSeparatorImageIncludeFirst))
			{
				var tr=document.createElement("TR");
				tbody.appendChild(tr);

				var td=document.createElement("TD");
				tr.appendChild(td);
				
				var img=document.createElement("IMG");
				td.appendChild(img);
				
				img.src=owner.dynamicTopSeparatorImageUrl;
				if (owner.dynamicSeparatorImageClass) img.className=owner.dynamicSeparatorImageClass;
			}
			
			var tr=document.createElement("TR");
			tbody.appendChild(tr);

			var td=document.createElement("TD");
			tr.appendChild(td);

			td.appendChild(items[itemId]._itemSource);

			if (owner.dynamicBottomSeparatorImageUrl && (num2<num1-1 || owner.dynamicBottomSeparatorImageIncludeLast))
			{
				bottomSeparator=document.createElement("TR");
				
				var td=document.createElement("TD");
				tr.appendChild(td);
				
				var img=document.createElement("IMG");
				td.appendChild(img);
				
				img.src=owner.dynamicBottomSeparatorImageUrl;
				if (owner.dynamicSeparatorImageClass) img.className=owner.dynamicSeparatorImageClass;
			}
		}
		if (bottomSeparator!=null) tbody.appendChild(bottomSeparator);
	}
	
	return div1;
}

function NeoMenuItem_AppendItemElement()
{
	this.getOwner().sourceElement.appendChild(this._itemElement);
}

function NeoMenu_AjaxRequest(ajaxMenu,url)
{
	if (ajaxMenu.req) ajaxMenu.abort();
	if (ajaxMenu.ajaxCursor) document.body.style.cursor=ajaxMenu.ajaxCursor;
	for (var num1=0;num1<ajaxMenu.containersId.length; num1++)
	{
		var obj1=document.getElementById(ajaxMenu.containersId[num1]);
		if (obj1!=null)
		{
			if (ajaxMenu.opacityPercent<1)
			{
				obj1.style.opacity=ajaxMenu.opacityPercent;
				if (obj1.filters) obj1.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+Math.round(ajaxMenu.opacityPercent*100)+");";
			}
		}
	}
	if (url.indexOf("://")==-1) url=ajaxMenu.baseUrl+url;
	url=changeUrlParam(url,"ajax","true");
	return ajaxMenu.doGet(url,NeoMenu_AjaxReply,null);
}

function NeoMenu_AjaxReply(ajaxMenu,replyDoc)
{
	document.body.style.cursor="";
	NeoMenu_AjaxChangeForms(replyDoc);
	NeoMenu_AjaxChangeHiddenFields(replyDoc);
	NeoMenu_AjaxAddMissingScripts(replyDoc,ajaxMenu.baseUrl);
	NeoMenu_AjaxCopyContainersContent(replyDoc,ajaxMenu.containersId,ajaxMenu.opacityPercent<1);
}

function NeoMenu_AjaxError(ajaxMenu,replyDoc)
{
    document.body.style.cursor="";
	for (var num1=0;num1<ajaxMenu.containersId.length; num1++)
	{
		var obj1=document.getElementById(ajaxMenu.containersId[num1]);
		if (obj1!=null) 
		{
		   if (ajaxMenu.opacityPercent<1)
			{ 
				obj1.style.opacity=1;
				if (obj1.filters) obj1.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100);";
			}
		}
	}
	ajaxMenu.handleError(ajaxMenu,replyDoc);
}

function NeoMenu_AjaxGetElementById(id,doc)
{
	return new RegExp("<(\\w+)[^<]*?id=\""+id+"\"[^>]*?>","gim").exec(doc);
}

function NeoMenu_AjaxGetHTML(match,doc,outer)
{
	var match1;
	var num1=1;
	var regex1=new RegExp("</?"+match[1],"gim");
	regex1.lastIndex=match.index+match[0].length;
	while(num1>0) 
	{
		match1=regex1.exec(doc);
		if (match1==null) break;
		num1+=match1[0].charAt(1)=='/'?-1:1;
	}
	return match1!=null?doc.substring(match.index+(outer?0:match[0].length),match1.index+(outer?match1[0].length+1:0)):null;
}

function NeoMenu_AjaxDecodeHTML(html){return html.replace(/&amp;/gi,"&").replace(/&quot;/gi,"\"").replace(/&lt;/gi,"<").replace(/&gt;/gi,">").replace(/&nbsp;/gi," ");}

function NeoMenu_AjaxChangeForms(replyDoc)
{
	var regex1=new RegExp("<form[^>]*?>","gim");
	var regex2=new RegExp("id=\"(.*?)\"","i");
	var regex3=new RegExp("action=\"(.*?)\"","i");
	var regex4=new RegExp("method=\"(.*?)\"","i");
	var regex5=new RegExp("onsubmit=\"(.*?)\"","i");
	
	var match1=regex1.exec(replyDoc);
	while(match1!=null)
	{
		var text1=match1[0];
		var text2=regex2.exec(text1)[1];
		var text3=regex3.exec(text1)[1];
		var text4=regex4.exec(text1)[1];
		var match5=regex5.exec(text1);
		var form1=document.getElementById(text2);
		
		if (form1!=null) 
		{
			form1.action=NeoMenu_AjaxDecodeHTML(text3);
			form1.method=text4;
			form1.onsubmit=match5!=null?new Function("event",match5[1].replace(/javascript:/i,"")):null;
		}

		match1=regex1.exec(replyDoc);
	}
}

function NeoMenu_AjaxChangeHiddenFields(replyDoc)
{
	var array1=new Array();
	var regex1=new RegExp("<input[^>]*?type=\"hidden\"[^>]*?>","gim");
	var regex2=new RegExp("id=\"(.*?)\"","i");
	var regex3=new RegExp("name=\"(.*?)\"","i");
	var regex4=new RegExp("value=\"(.*?)\"","i");
	var match1=regex1.exec(replyDoc);
	while(match1!=null)
	{
		var text1=match1[0];
		var text2=regex2.exec(text1)[1];
		var text3=regex3.exec(text1)[1];
		var text4=regex4.exec(text1)[1];
		var input1=document.getElementById(text2);
		
		if (input1!=null) input1.value=text4;
		else
		{
			input1=document.createElement("INPUT");
			input1.type="hidden";
			input1.id=text2;
			input1.name=text3;
			input1.value=text4;
			document.forms[0].appendChild(input1);
		}
		array1.push(text2);
		
		match1=regex1.exec(replyDoc);
	}
	
	var array2=document.getElementsByTagName("INPUT");
	for(var num1=0;num1<array2.length;num1++)
	{
		var input2=array2[num1];
		if (input2.type=="hidden" && array1.indexOf(input2.id)==-1) input2.parentNode.removeChild(input2);
	}
}

function NeoMenu_AjaxAddMissingScripts(replyDoc,baseUrl)
{
	var array1=document.getElementsByTagName("SCRIPT");
	var array2=new Array();
	for (var num1=0;num1<array1.length;num1++)
	{
		var script1=array1[num1];
		if (script1.src!=null && script1.src.length!=0) array2.push(script1.src);
	}
	
	var regex1=new RegExp("<(script)[^>]*?>","gim");
	var regex2=new RegExp("src=\"(.*?)\"","i");
	var match1=regex1.exec(replyDoc);
	while(match1!=null)
	{
		var text1=match1[0];
		var match2=regex2.exec(text1);
		var text2=match2!=null?NeoMenu_AjaxDecodeHTML(match2[1]):null;
		if (text2==null)
		{
			//this cause problems with ajax and execute twice the menugeneration script!!!
			//debug("Executing script");
			//var text3=NeoMenu_AjaxGetHTML(match1,replyDoc,false);
			//try{eval(text3);}catch(ex){}
		}
		else 
		{
			var script2=document.createElement("SCRIPT");
			script2.src=text2;
			if(array2.indexOf(script2.src)==-1) document.forms[0].appendChild(script2);
		}
		match1=regex1.exec(replyDoc);
	}
}

function NeoMenu_AjaxCopyContainersContent(replyDoc,containersId,resetOpacity)
{
	for (var num1=0;num1<containersId.length;num1++)
	{
		var obj1=document.getElementById(containersId[num1]);
		var obj2=NeoMenu_AjaxGetElementById(containersId[num1],replyDoc);
		
		if (obj1!=null && obj2!=null) 
		{
			var text1=NeoMenu_AjaxGetHTML(obj2,replyDoc,obj1.outerHTML!=null);
			if (obj1.outerHTML) obj1.outerHTML=text1;
			else obj1.innerHTML=text1;
		}
		
		if (resetOpacity)
		{
			obj1.style.opacity=1;
			//Explorer has problems with innerHTML and if use outerHTML some problem with filters ... just not set them.
			//if (obj1.filters) obj1.style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100);";
		}
	}
}