
/********************************************* New js-scheme ****************************************/
var ISUSERSEARCH = false;
var ISNAVIGATIONSEARCH = false;

//initial advanced search xml, initialized when user open advanced search panel
var InitialAdvancedSearch = null;
//should be enabled when we need to skip advanced search monitoring
var SkipAdvancedSearchConfirmation = false;
//id for attached onbeforeupdatenavigation event handler
var AdvancedSearchMonitoringId = null;
/************ UIControls templates of search tags imagery for advanced search right panel ***********/
var __AR_HEADERROW = ["<tr class='lmodule-search-block'><td width='100%' ",null,"><div>",null,":</div></td>",null,null,null,"</tr>"];
var __AR_GROUPROW = ["<tr class='lmodule-search-block-group'><td width='100%'><div>",null,":</div></td>",null,null,null,"</tr>"];
var __AR_ITEMROW = ["<tr class='lmodule-search-block'><td width='100%' style='overflow:hidden;",null,"' ",null," ",null,">",null,"</td>",null,null,null,"</tr>"];
var __AR_ACTIONCTRL = ["<a href='#' class='adv_cross' onclick=\"srch_advDeleteTag('",null,"',unescape('",null,"'));return false;\">x</a>"];
var __AR_GROUPACTIONCTRL = ["<a href='#' class='adv_cross' onclick=\"srch_advDeleteTags('",null,"','",null,"');return false;\">x</a>"];
var __AR_HDRACTIONCTRL = ["<a href='#' class='adv_cross' onclick=\"srch_advDeleteTags('",null,"','",null,"');return false;\">x</a>"];
var __AR_RULESPREF = ["<strong>[",null,"]</strong>"];

DeclareClass("Data.Search.TemplateControl", null,
{
	__IsEnabled : [decl_virtual, function()
	{
		return true;
	}]
	,__GetTagPropertyValue : function(tag,propertyname)
	{
		var nodes = tag.getElementsByTagName(propertyname);	
		if (!nodes || nodes.length < 1)
			return;
		return nodes[0].text;
	}
	,__GetHeaderRow : [decl_virtual, function(tag)
	{
		var name = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_NAME)),
			tagscope = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_TAGSCOPE)),
			hac = this.__GetHeaderActionControl(tag, tagscope), 
			dispname = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_DISPLAYNAME)); 
			
		var cashe = GETSTIBYID(name);
		if (cashe != null)
			dispname = cashe.advdispname; 
			
		if (str_IsStringEmpty(hac)) 
		{
			__AR_HEADERROW[1] = "colspan=2";
			__AR_HEADERROW[5] = __AR_HEADERROW[6] = __AR_HEADERROW[7] = null;
		}
		else
		{
			__AR_HEADERROW[1] = null;
			__AR_HEADERROW[5] = "<td width=10 vAlign='top' class='lmodule-search-action'>";
			__AR_HEADERROW[6] = hac;
			__AR_HEADERROW[7] = "</td>";
		}
		
		if (!str_IsStringEmpty(dispname)) 
			__AR_HEADERROW[3] = dispname;
		else
			__AR_HEADERROW[3] = null;
			
		return __AR_HEADERROW.join('');
	}]
	,__GetFooterRow : [decl_virtual, function(tag)
	{
		return "";
	}]
	,__GetItemRow : [decl_virtual, function(tag)
	{
		var error = this.__GetTagPropertyValue(tag, SRCH_AN_TEXTERROR);
		var errorCustom = this.__GetTagPropertyValue(tag, SRCH_AN_CUSTOMERRORMESSAGE);
		if (!str_IsStringEmpty(error) || !str_IsStringEmpty(errorCustom)) {
			if(!str_IsStringEmpty(error))
			{
				__AR_ITEMROW[1] = "color:red;font-weight:bold;";
				__AR_ITEMROW[3] = "title='"+error+"'";
			}
			else
			{
				__AR_ITEMROW[1] = "color:#FF9900;font-weight:bold;";
				__AR_ITEMROW[3] = "title='"+errorCustom+"'";
			}
		}
		else
			__AR_ITEMROW[1] = __AR_ITEMROW[3] = null;
		
		var ac = this.__GetActionControl(tag);
		if (str_IsStringEmpty(ac)) 
		{
			__AR_ITEMROW[5] = "colspan=2";
			__AR_ITEMROW[9] = __AR_ITEMROW[10] = __AR_ITEMROW[11] = null;
		}
		else
		{
			__AR_ITEMROW[5] = null;
			__AR_ITEMROW[9] = "<td width=10 valign='top'>";
			__AR_ITEMROW[10] = ac;
			__AR_ITEMROW[11] = "</td>";
		}
		__AR_ITEMROW[7] = this.__GetContentControl(tag);
		return __AR_ITEMROW.join('');
	}]
	,__GetContentControl : [decl_virtual, function(tag)
	{
		var res = "";
		var dispvalue = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_DISPLAYVALUE));
		if (!str_IsStringEmpty(dispvalue))
			res += dispvalue+";";
		return res;
	}]
	,__GetActionControl : [decl_virtual, function(tag)
	{
		var extracting = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_EXTRACTING));
		if (extracting == SRCH_EX_NO) return "";
		var name = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_NAME));
		if (!str_IsStringEmpty(name)) {
			var value = this.__GetTagPropertyValue(tag, SRCH_TP_VALUE);
			if (!str_IsStringEmpty(value)) {
				__AR_ACTIONCTRL[1] = name;
				__AR_ACTIONCTRL[3] = escape(value);
				return __AR_ACTIONCTRL.join('');
			}
		}
		return "";
	}]
	,__GetGroupActionControl : [decl_virtual, function(tag, tagScope)
	{
		var extracting = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_EXTRACTING));
		if (extracting == SRCH_EX_NO) return "";
		var name = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_NAME));
		var tagscope = tagScope;
		if (!str_IsStringEmpty(name)) {
			 __AR_GROUPACTIONCTRL[1] = name;
			 __AR_GROUPACTIONCTRL[3] = tagscope;
			return __AR_GROUPACTIONCTRL.join('');
		}
		return "";
	}]
	,__GetHeaderActionControl : [decl_virtual, function(tag, tagScope)
	{
		var extracting = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_EXTRACTING));
		if (extracting == SRCH_EX_NO) return "";
		var name = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_NAME));
		var tagscope = tagScope;
		if (!str_IsStringEmpty(name)) {
			__AR_HDRACTIONCTRL[1] = name;
			__AR_HDRACTIONCTRL[3] = null;
			return __AR_HDRACTIONCTRL.join('');
		}
		return "";
	}]
	,__GetRulesPrefixControl : [decl_virtual, function(tag,tagscope,name, postfix)
	{
		if (!str_IsStringEmpty(tagscope)) { 
			__AR_RULESPREF[1] = uiasc_GetDisplayScopeByValue(tagscope,name, postfix);
			return __AR_RULESPREF.join('');
		}
		return "";
	}]
	,__GetGroupRow : function(tags)
	{
		var tag = tags[0];
		
		var name = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_NAME)),
			tagscope = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_TAGSCOPE)),
			hac = this.__GetGroupActionControl(tag, tagscope)
			htmlRule = this.__GetRulesPrefixControl(tag, tagscope, name, " of");
		
		if (!str_IsStringEmpty(htmlRule))
		{
			__AR_GROUPROW[1] = htmlRule;
			
			if (!str_IsStringEmpty(hac))
			{
				__AR_GROUPROW[3] = "<td width=10 valign='top'>";
				__AR_GROUPROW[4] = hac;
				__AR_GROUPROW[5] = "</td>";
			}
			else
				__AR_GROUPROW[3] = __AR_GROUPROW[4] = __AR_GROUPROW[5] = null;
				
			return __AR_GROUPROW.join('');
		}
		return "";
	}
	,GetHTML : function(tags, groups) 
	{
		var r = [];
		if (this.__IsEnabled())
		{
			if (tags != null && tags.length > 0) 
			{
				r[0] = this.__GetHeaderRow(tags[0]);
				var j = 1;
				for (var i = 0; i < groups.length; ++i)
				{ 
					r[j++] = this.__GetGroupRow(groups[i]);
					
					for(var k = 0, kc = groups[i].length; k < kc; ++k)
						r[j++] = this.__GetItemRow(groups[i][k]);
				}
				r[j++] = this.__GetFooterRow(tags[0]);
			}
		}
		return r.join('');
	}
});
var __AR_PERTMP = ["<table cellpadding=0 cellspacing=0 border=0 style='width:100%; height:100%;'>",
	"<tr><td width='70'>Start Date:</td></tr><tr><td>", null, "</td></tr>", "<tr><td width='70'>End Date:</td></tr><tr><td>",
	null, "</td></tr>", "</table>"];
 
DeclareClass("Data.Search.PeriodTemplateControl", "Data.Search.TemplateControlWithoutScope",
{
	__GetContentControl : [decl_virtual, function(tag)
	{
		var res = "";
		var dispvalue = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_DISPLAYVALUE));
		if (!str_IsStringEmpty(dispvalue))
		{
			var value = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_VALUE));
			if (value == "custom") 
			{
				var start_date = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_AN_PERIODDISPLAYSTARTDATE));
				var end_date = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_AN_PERIODDISPLAYENDDATE));
				__AR_PERTMP[2] = start_date;
				__AR_PERTMP[5] = end_date;
				return __AR_PERTMP.join('');
			}
			else
				res += dispvalue+";";
		}
		return res;
	}]
	,__GetActionControl : [decl_virtual, function(tag)
	{
		return "";
	}]
	,__GetHeaderActionControl : [decl_virtual, function(tag, tagScope)
	{
		return "";
	}]
});
DeclareClass("Data.Search.TemplateControlWithoutScope", "Data.Search.TemplateControl",
{
	__GetRulesPrefixControl : [decl_virtual, function(tag,tagscope,name)
	{
		return "";
	}]
});
DeclareClass("Data.Search.PortfolioTemplateControl", "Data.Search.TemplateControlWithoutScope",
{
	__GetContentControl : [decl_virtual, function(tag)
	{
		var res = "";
		var dispvalue = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_DISPLAYVALUE));
		if (!str_IsStringEmpty(dispvalue))
		{
				var primary = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_AN_SYMBOLPRIMARYONLY));
				if (!str_IsStringEmpty(primary) && primary != "0")
					res += "[P] ";
				res += dispvalue+";";
		}
		return res;
	}]
});
DeclareClass("Data.Search.TextTemplateControl", "Data.Search.TemplateControl",
{
	__GetContentControl : [decl_virtual, function(tag)
	{
		var res = [];
		var dispvalue = this.__GetTagPropertyValue(tag, SRCH_TP_DISPLAYVALUE);
		if (!str_IsStringEmpty(dispvalue))
		{
				var strs = dispvalue.split(",");
				for(var i = 0, ic = strs.length; i < ic; ++i)
				{					
					strs[i] = str_Trim(strs[i]);
					if(strs[i].indexOf(" ")>0&&strs[i].indexOf("\"")!=0)
						strs[i] = "\""+strs[i]+"\"";
					if(i>0)
						res[res.length] = ";<br/>";
					res[res.length] = cmn_htmlEncode(strs[i]);
				}
		}
		return res.join('');
	}]
	,__GetActionControl : [decl_virtual, function(tag)
	{
		return "";
	}]
});
DeclareClass("Data.Search.SymbolTemplateControl", "Data.Search.TemplateControl",
{
	__GetContentControl : [decl_virtual, function(tag)
	{
		var res = "";
		var dispvalue = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_DISPLAYVALUE));
		if (!str_IsStringEmpty(dispvalue))
		{
				var primary = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_AN_SYMBOLPRIMARYONLY));
				if (!str_IsStringEmpty(primary) && primary != "0")
					res += "[P] ";
				res += dispvalue+";";
		}
		return res;
	}]
	,__GetRulesPrefixControl : [decl_virtual, function(tag,tagscope,name,postfix)
	{
		return this.base.__GetRulesPrefixControl(tag,tagscope,name," of");
	}]
});

var __AR_CNTFOOTER = ["<tr class='lmodule-search-block'><td width='100%' colspan=2><div><strong>[",null,"]</strong></div></td></tr>"];
DeclareClass("Data.Search.ContainerTemplateControl", "Data.Search.TemplateControl",
{
	__GetRulesPrefixControl : [decl_virtual, function(tag, tagscope, name)
	{
		var tagscope = this.__GetTagPropertyValue(tag, SRCH_TP_TAGSCOPE)
		if (name != SRCH_TN_CONTAINERSEARCHSCOPE && tagscope == SRCH_TS_ANY)
			return this.base.__GetRulesPrefixControl(tag,SRCH_TS_ANY,name);
		return "";
	}]
	,__GetFooterRow : [decl_virtual, function(tag)
	{
		var name = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_NAME));
		if (name != SRCH_TN_CONTAINERSEARCHSCOPE)
		{
			var tagscope = this.__GetTagPropertyValue(tag, SRCH_TP_TAGSCOPE);
			if (tagscope != SRCH_TS_ANY) {
				var cnt_scope = this.__GetTagPropertyValue(tag, SRCH_AN_CONTAINERSCOPE);
				if (!str_IsStringEmpty(cnt_scope)) {
					__AR_CNTFOOTER[1] = cmn_htmlEncode(UI.AS.FeedSourcesSelector.GetDisplayContainerRule(cnt_scope));
					return __AR_CNTFOOTER.join('');
				}
			}
		}
		return this.base.__GetFooterRow(tag);
	}]
	,__GetContentControl : [decl_virtual, function(tag)
	{
		var res = "";
		var name = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_NAME));
		var value = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_VALUE));
		if (name == SRCH_TN_CONTAINERSEARCHSCOPE)
		{
			if (!str_IsStringEmpty(value))
				res += UI.AS.FeedSourcesSelector.GetScopeDisplayValue(value)+";";
		}
		else
		{
			var dispvalue = cmn_htmlEncode(this.__GetTagPropertyValue(tag, SRCH_TP_DISPLAYVALUE));
			if (!str_IsStringEmpty(dispvalue))
				res += dispvalue +";";
		}
		return res;
	}]
});
/*************************************** Templates collection ***************************************/
DeclareClass("Data.Search.TemplatesCollection", null,
{
	constructor : function()
	{
		this.collection = new dm_KeyedCollection();
		this.collection.Add(SRCH_TN_PERIOD, new Data.Search.PeriodTemplateControl());
		this.collection.Add(SRCH_TN_SYMBOL, new Data.Search.SymbolTemplateControl());
		this.collection.Add(SRCH_TN_TEXT, new Data.Search.TextTemplateControl());	
		this.collection.Add(SRCH_TN_FILETYPE, new Data.Search.TemplateControlWithoutScope());
		if (!IS_ANONYMOUS_USER)
		{
			if (!IS_TMC_USER)
				this.collection.Add(SRCH_TN_PORTFOLIO, new Data.Search.PortfolioTemplateControl());
			if (CURUSERTYPE != UserType.LiteUser && !IS_TMC_USER)
			{
				this.collection.Add(SRCH_TN_CALENDAR, new Data.Search.ContainerTemplateControl());
				this.collection.Add(SRCH_TN_BLOG, new Data.Search.ContainerTemplateControl());
				this.collection.Add(SRCH_TN_FOLDER, new Data.Search.ContainerTemplateControl());
			}
		}		
		this.collection.Add(SRCH_TN_CONTAINERSEARCHSCOPE, new Data.Search.ContainerTemplateControl());
		this.collection.Add(SRCH_TN_FEED, new Data.Search.ContainerTemplateControl());		
	}
	,GetTemplate : function(tagName, tags, groups)
	{
		var obj = this.collection.Get(tagName);
		if (obj != null)
			return obj.GetHTML(tags, groups);
		return new Data.Search.TemplateControl().GetHTML(tags, groups);
	}
});
/*************************************** Client Search Xml ******************************************/
DeclareClass("Data.Search.ClientXml", null,
{
	constructor : function(xml)
	{
		this.xmlDocument = new Xml.NodeAccessor();
		this.defaulttags = new Array(SRCH_TP_DISPLAYNAME, SRCH_TP_DISPLAYVALUE, SRCH_TP_TAGTYPE, SRCH_TP_TAGSCOPE, SRCH_TP_EXTRACTING);
		this.__TemplatesCollection = new Data.Search.TemplatesCollection();
		this.SetXml(str_IsStringEmpty(xml) ? "<tags></tags>" : xml, false);		
	}
	,AddTag : [decl_virtual, function(name, value, params, occurrence)
	{
		if (str_IsStringEmpty(name) || str_IsStringEmpty(value))
			return false;
			
		var deltag = this.GetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,name),new srch_XmlSearchExParam(SRCH_TP_VALUE,value)));
		if (deltag != null && this.DeleteTagFromParent(this.GetTagsGroup(name), deltag) == false)
			return false;
			
		var tag = this.CreateTag(name, value, params);
		var group = this.GetTagsGroup(name);	
		if (occurrence && occurrence != -1 && group != null && group.childNodes.length >= occurrence)
		{
			for(var i=0, ic=group.childNodes.length-occurrence; i <= ic; i++)
				this.DeleteTagFromParent(group, group.childNodes[i]);
		}
		if (group == null)
		{
			group = this.CreateTagsGroup(name);
			this.xmlDocument.AddNode(this.xmlDocument.GetFirstChild(), group);
		}
		this.xmlDocument.AddNode(group, tag);
		return true;
	}]
	,CreateTagsGroup : function(name)
	{
		return this.xmlDocument.CreateNode(SRCH_TP_TAGSGROUP, null, new Array(new Xml.Attribute(SRCH_AN_TAGGROUPID,name)));
	}
	,CreateTag : function(name, value, params)
	{
		var tag = this.xmlDocument.CreateNode(SRCH_TP_TAG);
		this.xmlDocument.AddNode(tag, this.xmlDocument.CreateNode(SRCH_TP_NAME, name));
		this.xmlDocument.AddNode(tag, this.xmlDocument.CreateNode(SRCH_TP_VALUE, value));
		
		if (params && params.length > 0)
		{
			for(var i=0, ic=params.length; i<ic; ++i)	
			{
				var node = this.xmlDocument.CreateNode(params[i].nodename, params[i].nodevalue);
				this.xmlDocument.AddNode(tag, node);
			}
		}		
		for(var i=0,ic=this.defaulttags.length; i<ic; ++i)
		{
			if (tag.selectSingleNode(this.defaulttags[i]) == null)
			{
				var val;
				switch(this.defaulttags[i]) 
				{
					case SRCH_TP_DISPLAYNAME:
						val = name;
						break;
					case SRCH_TP_DISPLAYVALUE:
						val = value;
						break;
					case SRCH_TP_TAGTYPE:
						val = SRCH_TT_STD;
						break;
					case SRCH_TP_TAGSCOPE:
						val = name == SRCH_TN_TEXT ? SRCH_TS_ALL : SRCH_TS_ANY;
						break;
					case SRCH_TP_EXTRACTING:
						val = SRCH_EX_YES;
						break;
				}
				this.xmlDocument.AddNode(tag, this.xmlDocument.CreateNode(this.defaulttags[i], val));
			}
		}
		return tag;
	}
	,CreateXRule : function(path, params, isOR)
	{
		if (!params || !params.length || params.length <1 )
			return path;
		
		var xrule = "";
		for(var i=0, ic = params.length; i<ic; i++) 
		{
			if (!params[i].nodename) continue;
			var tmp = params[i].nodename, v = params[i].nodevalue;
			if (v) tmp +="=" + Xml.Helper.PrepareXPathLiteral(v);
			tmp = "[" + tmp + "]";
			
			if (isOR)
			{
				if (xrule != "")
					xrule += "|";
				xrule += path + tmp;
			}
			else
			{
				if (xrule == "")
					xrule = path;
				xrule += tmp;
			}
		}
		return xrule;
	}
	,GetSearchParam : [decl_virtual, function(paramname)
	{
		var attr = this.xmlDocument.GetFirstChild().getAttribute(paramname);
		return (str_IsStringEmpty(attr) ? null : attr);
	}]
	,SetSearchParam : [decl_virtual, function(paramname, paramvalue)
	{
		this.xmlDocument.GetFirstChild().setAttribute(paramname, paramvalue);
	}]
	,GetTag : [decl_virtual, function(params, isOR)
	{
		return this.xmlDocument.SelectSingleNode(this.CreateXRule("//"+SRCH_TP_TAGSGROUP+"/"+SRCH_TP_TAG, params, isOR));
	}]
	,GetTags : [decl_virtual, function(params, isOR)
	{
		return this.xmlDocument.SelectNodes(this.CreateXRule("//"+SRCH_TP_TAGSGROUP+"/"+SRCH_TP_TAG, params, isOR));
	}]
	,GetTagsGroup : function(name)
	{
		return this.xmlDocument.SelectSingleNode("//"+SRCH_TP_TAGSGROUP+"[@"+SRCH_AN_TAGGROUPID+"='"+cmn_htmlEncode(name)+"']");
	}
	,GetTagsGroups : [decl_virtual, function()
	{
		return this.xmlDocument.GetFirstChild().childNodes;
	}]
	,GetTagPropertyValue : [decl_virtual, function(tag, propertyname)
	{
		var nodes = tag.getElementsByTagName(propertyname);	
		if (!nodes || nodes.length <1)
			return null;
		return nodes[0].text;
	}]
	,SetTagPropertyValue : [decl_virtual, function(tag, propertyname, value)
	{
		var nodes = tag.getElementsByTagName(propertyname);	
		if (!nodes || nodes.length <1)
			this.xmlDocument.AddNode(tag, this.xmlDocument.CreateNode(propertyname, value));
		else
			nodes[0].text = value;
	}]
	,DeleteTagFromParent : function(parent, tag)
	{
		if (!parent  || !tag || this.GetTagPropertyValue(tag, SRCH_TP_EXTRACTING) == SRCH_EX_NO)
			return false;
		try
		{	
			var error = !str_IsStringEmpty(this.GetTagPropertyValue(tag, SRCH_AN_TEXTERROR)) || !str_IsStringEmpty(this.GetTagPropertyValue(tag, SRCH_AN_CUSTOMERRORMESSAGE));
			parent.removeChild(tag);
			if (error) 
				this.DecreaseCountErrors(1);
		}
		catch(e)
		{
			return false;
		}
		return true;
	}
	,DeleteTag : [decl_virtual, function(name, value)
	{
		return this.DeleteTagFromParent(this.GetTagsGroup(name), this.GetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,name),new srch_XmlSearchExParam(SRCH_TP_VALUE,value))));
	}]
	,DeleteTags : [decl_virtual, function(name, tagscope)
	{
		if (str_IsStringEmpty(name))
			return false;
		var params = new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,name));
		if (!str_IsStringEmpty(tagscope))
			params.push(new srch_XmlSearchExParam(SRCH_TP_TAGSCOPE,tagscope));
		var tags = this.GetTags(params);
		if (tags && tags.length > 0)
		{	
			var group = this.GetTagsGroup(name);
			for (var i=0, ic = tags.length; i<ic; i++)
			{
				var error = !str_IsStringEmpty(this.GetTagPropertyValue(tags[i], SRCH_AN_TEXTERROR)) || !str_IsStringEmpty(this.GetTagPropertyValue(tags[i], SRCH_AN_CUSTOMERRORMESSAGE));
				group.removeChild(tags[i]);
				if (error) 
					this.DecreaseCountErrors(1);
			}
			if (group.childNodes.length == 0)
				group.parentNode.removeChild(group);
			return true;
		}
		return false;
	}]
	,DeleteAllTag : [decl_virtual, function()
	{
		this.SetXml(this.xmlDocument.GetRootNode().cloneNode(false).xml);
		this.DecreaseCountErrors(this.GetCountErrors());
		return true;
	}]
	,GetXml : [decl_virtual, function()
	{
		return this.xmlDocument.GetXml();
	}]
	,SetXml : [decl_virtual, function(xml,fireevents)
	{
		this.xmlDocument.LoadXml(xml);
	}]
	,Clear : [decl_virtual, function(fireevents)
	{
		this.SetXml("<tags></tags>",fireevents);
		return true;
	}]
	,IsEmpty : [decl_virtual, function()
	{
		return this.IsXmlEmpty();
	}]
	,IsXmlEmpty : function()
	{
		return !this.xmlDocument.GetFirstChild().hasChildNodes();
	}
	,GetTagGroups: function(name)
	{
		var groups = [];
		var tagsAny = this.GetTags([new srch_XmlSearchExParam(SRCH_TP_NAME, name), new srch_XmlSearchExParam(SRCH_TP_TAGSCOPE, SRCH_TS_ANY)]);
		if (tagsAny && tagsAny.length != 0)
			groups.push(tagsAny);
			
		var tagsAll = this.GetTags([new srch_XmlSearchExParam(SRCH_TP_NAME, name), new srch_XmlSearchExParam(SRCH_TP_TAGSCOPE, SRCH_TS_ALL)]);
		if (tagsAll && tagsAll.length != 0)
			groups.push(tagsAll);
			
		var tagsExclAny = this.GetTags([new srch_XmlSearchExParam(SRCH_TP_NAME, name), new srch_XmlSearchExParam(SRCH_TP_TAGSCOPE, SRCH_TS_EXCLUDEANY)]);
		if (tagsExclAny && tagsExclAny.length != 0)
			groups.push(tagsExclAny);
		
		return groups;
	}
	,GetHTML : [decl_virtual, function()
	{
		var __GETHTML = [
			"<table cellpadding=0 cellspacing=0 style='width:100%; table-layout:fixed'>",
			"<colgroup><col width='100%'><col width='10'></colgroup>"];
			
		var groups = this.xmlDocument.GetFirstChild().childNodes;
		var noordershtmls = [];
		var ordershtmls = [];
		var renderedCount = 0;
		if (groups.length > 0)
		{
			for(var i=0, ic=groups.length; i<ic; i++)
			{
				var name = groups[i].getAttribute(SRCH_AN_TAGGROUPID);
				var order = as_GetOrder(name);
				
				var tags = this.GetTags([new srch_XmlSearchExParam(SRCH_TP_NAME, name)]);
				
				var temphtml = this.__TemplatesCollection.GetTemplate(name, tags, this.GetTagGroups(name));
				if (str_IsStringEmpty(temphtml)) continue;
				if (order != null && order != -1) 
					ordershtmls[order] = temphtml;
				else
					noordershtmls.push(temphtml);
				renderedCount++;
			}
			for (var i=0, ic=ordershtmls.length; i<ic; i++)
				if (typeof(ordershtmls[i]) != "undefined")
					__GETHTML[__GETHTML.length] = ordershtmls[i];
					
			__GETHTML[__GETHTML.length] = noordershtmls.join('');
		}
		if (renderedCount == 0)
			__GETHTML[__GETHTML.length] = "<tr><td>&nbsp;</td></tr><tr><td>You have no selected criteria.</td></tr>";
		__GETHTML[__GETHTML.length] = "</table><div class='lmodule-search-block'>&nbsp;</div>";
		return __GETHTML.join('');
	}]
	,DecreaseCountErrors : [decl_virtual, function(count)
	{
		if (count == null || count < 0) count = 1;
		var counterrors = this.GetCountErrors();
		counterrors = counterrors - count;
		if (counterrors < 0) counterrors = 0
		this.SetSearchParam(SRCH_AN_COUNTERRORS,counterrors);
	}]
	,GetCountErrors : [decl_virtual, function()
	{
		var counterrors = this.GetSearchParam(SRCH_AN_COUNTERRORS);
		if (!str_IsStringEmpty(counterrors))
			counterrors = parseInt(counterrors,10);
		else
			counterrors = 0;
		return counterrors;
	}]
});
/*************************************** Advanced Search ********************************************/
DeclareClass("Data.Search.GlobalAdvancedSearchEventManager", null,
{
	constructor : function()
	{
		this.events = new cmn_EventContainer();
	}	
	,AttachEvent : function(evt, func)
	{
		this.events.attachEvent(evt, func);
	}
	,DetachEvent : function(evt, func)
	{
		this.events.detachEvent(evt, func);	
	}
	,OnDeleteTag : function(obj, tagName, tagValue)
	{
		this.events.fireEvent("ontagdelete", obj, tagName, tagValue);
	}
	,OnXmlChange : function(obj)
	{
		this.events.fireEvent("onxmlchange",obj);
	}
	,OnClear : function(obj)
	{
		this.events.fireEvent("onclear",obj);
	}
	,OnLoad : function(obj)
	{
		this.events.fireEvent("onload",obj);
	}
	,OnDoSearch : function(obj)
	{
		this.events.fireEvent("ondosearch",obj);
	}
	,OnLoadDataFromInput : function()
	{
		this.events.fireEvent("onloaddatafrominput");
	}
});
var GlobalAdvancedSearchEventManager = new Data.Search.GlobalAdvancedSearchEventManager(); 

DeclareClass("Data.Search.AdvancedSearch", "Data.Search.ClientXml",
{
	constructor : function(xml)
	{
		this.cid = null;
		this.__ChangeDefault(false);
		this.__InitConnectorStore();
		this.base(xml);		
		if (!this.IsEmpty())
			window.setTimeout(function() { GlobalAdvancedSearchEventManager.OnXmlChange(null); }, 100);		
	}
	,__ChangeDefault : function(val)
	{
		if (this.__searchByDefault != val)
			this.__searchByDefault = val;
	}
	,__InitConnectorStore : function()
	{
		new srch_InputSearchConnector(this);
	}
	,SaveLastState : function()
	{
		this.__xml = this.GetXml();
	}
	,AllowFireEvent : function()
	{
		return this.__xml != this.GetXml();
	}
	,AddTag : [decl_virtual, function(name, value, params, occurrence, fireevents)
	{
		this.SaveLastState();
		if (this.base.AddTag(name, value, params, occurrence) == true && fireevents != false && this.AllowFireEvent())
		{
				this.__ChangeDefault(false);
				GlobalAdvancedSearchEventManager.OnXmlChange(this);
		}
	}]
	,DeleteTag : [decl_virtual, function(name, value, fireevents)
	{
		this.SaveLastState();
		if (this.base.DeleteTag(name, value) == true && fireevents != false && this.AllowFireEvent())
		{
			this.__ChangeDefault(false);
			GlobalAdvancedSearchEventManager.OnDeleteTag(this, name, value);
		}
	}]
	,DeleteTags : [decl_virtual, function(name, tagscope, fireevents)
	{
		this.SaveLastState();
		if (this.base.DeleteTags(name, tagscope) == true && fireevents != false && this.AllowFireEvent())
		{
			this.__ChangeDefault(false);
			GlobalAdvancedSearchEventManager.OnXmlChange(null);
		}
	}]
	,DeleteAllTag : [decl_virtual, function(fireevents)
	{
		this.SaveLastState();
		if (this.base.DeleteAllTag() == true && fireevents != false && this.AllowFireEvent())
		{
			this.__ChangeDefault(false);
			GlobalAdvancedSearchEventManager.OnXmlChange(null);
		}
	}]
	,Clear : [decl_virtual, function(fireevents, onlyBase)
	{
		this.SaveLastState();
		this.cid = null;
		if (this.base.Clear(fireevents) == true && !onlyBase && fireevents != false && this.AllowFireEvent())
		{
			GlobalAdvancedSearchEventManager.OnClear(this);
		}
	}]
	,Load : function(fireevents)
	{
		this.Clear(fireevents, true);
		if (fireevents != false)
			GlobalAdvancedSearchEventManager.OnLoad(this);
	}
	,SetXml : [decl_virtual, function(xml, fireevents)
	{
		this.base.SetXml(xml);
		this.__ChangeDefault(this.IsEmpty());
		var cntId = this.GetSearchParam(SRCH_AN_CONTAINERID);
		if(!str_IsStringEmpty(cntId))
			this.cid = cntId;
		else
			this.cid = null;
		if ((this.IsEmpty() || this.GetDecimalSearchID() == 0) && (!nav_IsNavigationEnabled() || nav_currentNavInfo.GetPageID() != PID_MANAGESEARCHES))
			this.AddDefaultParameters();
		if (fireevents != false)
			GlobalAdvancedSearchEventManager.OnXmlChange(null);
	}]
	,GetHTML : [decl_virtual, function()
	{
		var html = "";
		if (this.HasErrors())
		{
			var customErrorMessage = this.CustomErrorMessage();
			if(customErrorMessage!=null && customErrorMessage.length>0)
				html +=	"<span style=\"color:#FF9900; padding-top:15px\"><strong style=\"color:brown\">WARNING: </strong>" + customErrorMessage + "</span>"
			else
				html +=	"<span style=\"color:red; padding-top:15px\"><strong style=\"color:brown\">WARNING: </strong>Items highlighted in red contain errors. Move mouse over item to see error details.</span>"
		}
		return html + this.base.GetHTML();
	}]
	,GetSearchID : function()
	{
		return this.GetSearchParam(SRCH_AN_SEARCHID);
	}
	,GetDecimalSearchID : function()
	{
		var searchId = this.GetSearchID();
		if (str_IsStringEmpty(searchId))
			return 0;
		return parseInt(searchId,10);
	}
	,GetSearchName : function()
	{
		return this.GetSearchParam(SRCH_AN_SEARCHNAME);
	}
	,IsDefaultSearch : function()
	{
		return this.__searchByDefault;
	}
	,HasErrors : function()
	{
		return this.GetCountErrors() > 0;
	}
	,CustomErrorMessage : function()
	{
		return this.GetSearchParam(SRCH_AN_CUSTOMERRORMESSAGE);
	}	
	,GetSearchAlertId : function()
	{
		return this.GetSearchParam(SRCH_AN_SEARCHALERT);
	}
	,SetSearchAlertId : function(id)
	{
		if (InitialAdvancedSearch)
			InitialAdvancedSearch.SetSearchParam(SRCH_AN_SEARCHALERT, id);
		return this.SetSearchParam(SRCH_AN_SEARCHALERT, id);
	}
	,SetSearchID : function(val)
	{
		this.SetSearchParam(SRCH_AN_SEARCHID,val);
	}
	,SetTMCProfileName : function(val)
	{
		this.SetSearchParam(SRCH_AN_TMCSEARCHNAME,val);
	}
	,SetSearchName : function(val)
	{
		this.SetSearchParam(SRCH_AN_SEARCHNAME,val);
		this.__ChangeDefault(false);
		GlobalAdvancedSearchEventManager.OnXmlChange(null);
	}
	,GetPID : function()
	{
		return this.GetSearchParam(SRCH_AN_PAGEIDENTIFIER);
	}
	,GetCID : function()
	{
		return this.cid;
	}	
	,SetPID : function(val)
	{
		this.SetSearchParam(SRCH_AN_PAGEIDENTIFIER, val);
		if (InitialAdvancedSearch)
			InitialAdvancedSearch.SetSearchParam(SRCH_AN_PAGEIDENTIFIER, val);
	}
	,SetCID : function(val)
	{
		this.cid = val;
	}
	,DoSearch : function(skipRun)
	{
		ISUSERSEARCH = !ISNAVIGATIONSEARCH;
		GlobalAdvancedSearchEventManager.OnDoSearch(this);
		srch_DoSearch(this.GetXml(), true, null, skipRun);
		ISUSERSEARCH = false;
	}
	,GetXml : [decl_virtual, function()
	{
		if (str_IsStringEmpty(this.GetSearchID()))
			this.SetSearchID(0);			
		return this.xmlDocument.GetXml();
	}]
	,attachEvent : function(evt, func)
	{
		GlobalAdvancedSearchEventManager.AttachEvent(evt, func);
	}
	,LoadDataFromInputSearch : function(needload)
	{
		if (needload)
		{
			var tmp = new Data.Search.ClientXml(srch_inpGetXml());
			var tags = tmp.GetTags();
			for(var i=0, ic=tags.length; i<ic; i++)
			{	
				var name = tmp.GetTagPropertyValue(tags[i], SRCH_TP_NAME);
				var value = tmp.GetTagPropertyValue(tags[i], SRCH_TP_VALUE);
				var cache = GETSTIBYID(name);
				var isIncorect = false;
				if (cache != null &&!str_IsStringEmpty(cache.advdispname))
				{
					switch(name)
					{
						case SRCH_TN_PERIOD:
							tmp.SetTagPropertyValue(tags[i], SRCH_TP_DISPLAYVALUE, srch_getPeriodDisplayValueByValue(value));
							break;
						case SRCH_TN_COUNTRY:
							var cname = cmn_GetCountryNameBySymbol(tmp.GetTagPropertyValue(tags[i], SRCH_TP_DISPLAYVALUE));
							if (cname != null)
								tmp.SetTagPropertyValue(tags[i], SRCH_TP_DISPLAYVALUE, cname);		
							break;
						case SRCH_TN_REGION:
							var rname = cmn_GetRegionNameBySymbol(tmp.GetTagPropertyValue(tags[i], SRCH_TP_DISPLAYVALUE));
							if (rname != null)
								tmp.SetTagPropertyValue(tags[i], SRCH_TP_DISPLAYVALUE, rname);		
							break;
					}
				}
				else
					isIncorect = true; 
				if (isIncorect)
					tmp.DeleteTag(name, value); 				
				else
					tmp.SetTagPropertyValue(tags[i], SRCH_TP_DISPLAYNAME, cache.advdispname);	
			}
			var scope = SiteLayout.InputSearchControlBase.GetScopeForCurrentPage();
			if (!str_IsStringEmpty(scope) && scope.toLowerCase() != BRANDNAME_SNP.toLowerCase())
			{
				var aa = new Array();
				aa.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,UI.AS.FeedSourcesSelector.GetContainerDisplayName()));
				aa.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYVALUE,UI.AS.FeedSourcesSelector.GetScopeDisplayValue(scope)));
				aa.push(new srch_XmlSearchExParam(SRCH_TP_TAGSCOPE,SRCH_TS_ANY));
				aa.push(new srch_XmlSearchExParam(SRCH_TP_TAGTYPE,SRCH_TT_STD));
				tmp.AddTag(SiteLayout.InputSearchControlBase.GetScopeTagName(),scope,aa);
			}
			this.SetXml(tmp.GetXml());			
		}
		GlobalAdvancedSearchEventManager.OnLoadDataFromInput();
	}
	,AddDefaultParameters : function()
	{
		var isChanged = false;
		var isEmpty = this.IsEmpty();
		if (this.GetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME, SRCH_TN_PERIOD))) == null)
			isChanged = this.AddDefaultPeriod();
		if (this.GetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME, SRCH_TN_LANGUAGE))) == null)
			isChanged = this.AddDefaultLanguages() || isChanged;
		if (isChanged)
		{			
		}
		this.__ChangeDefault(isEmpty);
	}
	,AddDefaultPeriod : function()
	{
		var dv = srch_getDefaultPeriodDisplayValue();
		var isChanged = false;
		if (dv)
		{
			var aa = new Array();
			aa.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,SRCH_PERIOD_DISPLAYNAME));
			aa.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYVALUE,dv));
			aa.push(new srch_XmlSearchExParam(SRCH_TP_TAGSCOPE,SRCH_TS_ANY));
			aa.push(new srch_XmlSearchExParam(SRCH_TP_TAGTYPE,SRCH_TT_STD));
			this.AddTag(SRCH_TN_PERIOD,srch_getDefaultPeriodValue(),aa,1,false);
			isChanged = true;
		}
		return isChanged;
	}
	,AddDefaultLanguages : function()
	{
		var list = ts_GetPreferredLanguages();
		var isChanged = false;
		if (!str_IsStringEmpty(list))
		{	
			var cache = GETSTIBYID(SRCH_TN_LANGUAGE);
			var advdispname;
			if (cache != null)
				advdispname = str_IsStringEmpty(cache.advdispname) ? SRCH_TN_LANGUAGE : cache.advdispname;
			list = list.split(",");
			for (var i = 0, ic = list.length; i < ic; i++)
			{
				var params = new Array();
				var dvalue = cmn_GetLanguageNameByCode(list[i])
				if (dvalue == null) continue;
				params.push(new srch_XSEP(SRCH_TP_DISPLAYVALUE, dvalue));
				params.push(new srch_XSEP(SRCH_TP_DISPLAYNAME, advdispname));
				this.AddTag(SRCH_TN_LANGUAGE, list[i], params, null, false);
				isChanged = true;
			}			
		}
		return isChanged;
	}
});

/*************************************** Input Search ***********************************************/

DeclareClass("Data.Search.InputSearch", "Data.Search.ClientXml",
{
	constructor : function(xml, defaulttag)
	{
		this.events = new cmn_EventContainer();
		this.base(xml);
		this.tags = new dm_KeyedCollection();
		this.InitResolver();
		this.InitMappers();
		this.ClearProcess();
		this.defaultTag = defaulttag;
		this.needsearch = true;
		this.pid = null;
		this.ShowHint = true;
		this.RESOLVED_Tags = null;
		this.RESOLVED_PREFIX = "__rp__";
		this.ShowHiddenInfo = false;
		this.scopeValue = null;
		if (currentNavContInfo)
			currentNavContInfo.AttachEvent("oninforeceived", this.CreateCallback(this.UpdateContainerInfo));
	}
	,InitResolver : function()
	{
		var thisObj = this;
		this.resolver = new Resolver(true);
		this.resolver.OnResolveCancel = this.CreateCallback(this.OnResolveCancel);
		this.resolver.OnResolveComplete = this.CreateCallback(this.OnResolveComplete);
	}
	,InitMappers : [decl_virtual, function()
	{
		this.classmappers = new dm_KeyedCollection(null, true);
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).hint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).longhint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, true));
		if (!(IS_ANONYMOUS_USER || IS_TMC_USER))
		{
			this.classmappers.Add(GETSTIBYID(SRCH_TN_PORTFOLIO).hint, new srch_PortfolioMapper(SRCH_TN_PORTFOLIO, this, false));
			this.classmappers.Add(GETSTIBYID(SRCH_TN_PORTFOLIO).longhint, new srch_PortfolioMapper(SRCH_TN_PORTFOLIO, this, true));
		}
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).hint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).longhint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).hint, new srch_TextMapper(SRCH_TN_TEXT, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).longhint, new srch_TextMapper(SRCH_TN_TEXT, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PERIOD).hint, new srch_PeriodMapper(SRCH_TN_PERIOD, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PERIOD).longhint, new srch_PeriodMapper(SRCH_TN_PERIOD, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).hint, new srch_ProviderMapper(SRCH_TN_PROVIDER,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).longhint, new srch_ProviderMapper(SRCH_TN_PROVIDER, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).hint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).longhint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, true));
		if (!IS_ANONYMOUS_USER && CURUSERTYPE != UserType.LiteUser)
		{
			this.classmappers.Add(GETSTIBYID(SRCH_TN_SAVEDSEARCH).hint, new srch_SavedSearchMapper(SRCH_TN_SAVEDSEARCH, this, false));
			this.classmappers.Add(GETSTIBYID(SRCH_TN_SAVEDSEARCH).longhint, new srch_SavedSearchMapper(SRCH_TN_SAVEDSEARCH, this, true));
			if (!IS_TMC_USER)
			{
				this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOGCATEGORY).hint, new srch_CategoryMapper(SRCH_TN_BLOGCATEGORY, this, false, PID_BLOGS));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOGCATEGORY).longhint, new srch_CategoryMapper(SRCH_TN_BLOGCATEGORY, this, true, PID_BLOGS));		
				this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOG).hint, new srch_ContainersMapper(SRCH_TN_BLOG, this, false, PID_BLOGS));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOG).longhint, new srch_ContainersMapper(SRCH_TN_BLOG, this, true, PID_BLOGS));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_CALENDAR).hint, new srch_ContainersMapper(SRCH_TN_CALENDAR, this, false, PID_CALENDARS));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_CALENDAR).longhint, new srch_ContainersMapper(SRCH_TN_CALENDAR, this, true, PID_CALENDARS));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_FOLDER).hint, new srch_ContainersMapper(SRCH_TN_FOLDER, this, false, PID_FOLDERS));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_FOLDER).longhint, new srch_ContainersMapper(SRCH_TN_FOLDER, this, true, PID_FOLDERS));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_BROKER).hint, new srch_BrokerMapper(SRCH_TN_BROKER,this, false));
				this.classmappers.Add(GETSTIBYID(SRCH_TN_BROKER).longhint, new srch_BrokerMapper(SRCH_TN_BROKER, this, true));
			}
		}
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).hint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).longhint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).hint, new srch_GeographyMapper(SRCH_TN_REGION, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).longhint, new srch_GeographyMapper(SRCH_TN_REGION, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_LANGUAGE).hint, new srch_GeographyMapper(SRCH_TN_LANGUAGE, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_LANGUAGE).longhint, new srch_GeographyMapper(SRCH_TN_LANGUAGE, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEEDCATEGORY).hint, new srch_CategoryMapper(SRCH_TN_FEEDCATEGORY, this, false, PID_FEEDS, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEEDCATEGORY).longhint, new srch_CategoryMapper(SRCH_TN_FEEDCATEGORY, this, true, PID_FEEDS, false));		
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEED).hint, new srch_ContainersMapper(SRCH_TN_FEED, this, false, PID_FEEDS));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEED).longhint, new srch_ContainersMapper(SRCH_TN_FEED, this, true, PID_FEEDS));		
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TOPIC).hint, new srch_TopicMapper(SRCH_TN_TOPIC,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TOPIC).longhint, new srch_TopicMapper(SRCH_TN_TOPIC, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CUSTOMTOPIC).hint, new srch_TopicMapper(SRCH_TN_CUSTOMTOPIC,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CUSTOMTOPIC).longhint, new srch_TopicMapper(SRCH_TN_CUSTOMTOPIC, this, true));		
				
		this.tagsinfo = new dm_KeyedCollection();
		this.tagsinfo.Add(SRCH_TN_INDUSTRY, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH), null));
		if (!(IS_ANONYMOUS_USER || IS_TMC_USER) && CURUSERTYPE != UserType.LiteUser)
		{
			this.tagsinfo.Add(SRCH_TN_PORTFOLIO, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH, SRCH_TN_SYMBOL), 1));
			this.tagsinfo.Add(SRCH_TN_BLOGCATEGORY, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH, SRCH_TN_FOLDER, SRCH_TN_FEED, SRCH_TN_CALENDAR, SRCH_TN_FEEDCATEGORY),  null));
			this.tagsinfo.Add(SRCH_TN_FOLDER, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH, SRCH_TN_FEED, SRCH_TN_BLOG, SRCH_TN_CALENDAR, SRCH_TN_BLOGCATEGORY, SRCH_TN_FEEDCATEGORY),  null));
			this.tagsinfo.Add(SRCH_TN_BLOG, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH, SRCH_TN_FOLDER, SRCH_TN_FEED, SRCH_TN_CALENDAR, SRCH_TN_FEEDCATEGORY),  null));
			this.tagsinfo.Add(SRCH_TN_CALENDAR, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH, SRCH_TN_FOLDER, SRCH_TN_BLOG, SRCH_TN_FEED, SRCH_TN_BLOGCATEGORY, SRCH_TN_FEEDCATEGORY),  null));
		}
		this.tagsinfo.Add(SRCH_TN_KEYWORD, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH), null));
		this.tagsinfo.Add(SRCH_TN_TEXT, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH), null));
		this.tagsinfo.Add(SRCH_TN_PERIOD, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  1));
		this.tagsinfo.Add(SRCH_TN_FEEDCATEGORY, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_PROVIDER, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_SYMBOL, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH,SRCH_TN_PORTFOLIO),  null));
		this.tagsinfo.Add(SRCH_TN_COUNTRY, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_LANGUAGE, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_BROKER, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_TOPIC, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_SAVEDSEARCH, new srch_TagInfo(new Array("ALL"), 1));
		this.tagsinfo.Add(SRCH_TN_CONTAINERSEARCHSCOPE, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  1));
		this.tagsinfo.Add(SRCH_TN_FEEDCATEGORY, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH, SRCH_TN_FOLDER, SRCH_TN_BLOG, SRCH_TN_CALENDAR, SRCH_TN_BLOGCATEGORY),  null));
		this.tagsinfo.Add(SRCH_TN_FEED, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH, SRCH_TN_FOLDER, SRCH_TN_BLOG, SRCH_TN_CALENDAR, SRCH_TN_BLOGCATEGORY),  null));
		this.tagsinfo.Add(SRCH_TN_CUSTOMTOPIC, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
	}]
	,GetResolver : function()
	{
		return this.resolver;
	}
	,GetAvailableTags : function()
	{
		var res = [];
		for(var i=0, ic=this.classmappers.getCount(); i<ic; ++i)
		{
			var tag = this.classmappers.GetByIndex(i).GetTagName(), taglo=tag.toLowerCase();
			var iscontains = false;
			for (var j=0, jc=res.length; j<jc; ++j) {
				if (res[j].toLowerCase() == taglo) {
					iscontains = true;
					break;	
				}
			}
			if (iscontains != true)
				res[res.length] = tag;
		}
		return res;
	}
	,GetAvailableTagsAsPattern : function(strbefore,strafter)
	{
		if (strbefore == null) strbefore = "";
		if (strafter == null) strafter = "";
		var res = this.GetAvailableTags();
		var pattern = "";
		for(var i=0, ic = this.classmappers.getCount(); i<ic; i++)
		{
			if (i > 0) pattern += "|";
			pattern += strbefore + this.classmappers.GetKeyByIndex(i) + strafter;
		}
		return pattern;
	}
	,ClearProcess : function(fireEvent)
	{
		fireEvent = fireEvent == false ? false : true;
		this.Clear();
		this.resolver.Clear();
		this.mappingStack = new Array();			
		this.callbackcomplete = null;
		this.callbackcanceled = null;
		this.tags.Clear();
		this.needsearch = true;
		for(var i=0,ic=this.classmappers.getCount(); i < ic; i++)
			this.classmappers.GetByIndex(i).Clear();
		if (fireEvent)
			this.events.fireEvent("onxmlchange",this);
		
	}
	,AddFilter : function(name, value, dispvalue, needvalidate, params, fireevent)
	{
		if (str_IsStringEmpty(name) || str_IsStringEmpty(value))
			return false;
		fireevent = fireevent == false ? false : true;
		var info = this.GetTagInfo(name);
		var occnum = info.GetOccurrenceNumber();
		var dispname = null;
		var cashe = GETSTIBYID(name);
		if (cashe != null)
		{
			dispname = cashe.longhint;
			var mapper = this.classmappers.Get(GETSTIBYID(name).hint, true);
			if (mapper == null)
				mapper = this.classmappers.Get(this.defaultTag, true);
			params = mapper.CheckParams(params);
			if (needvalidate != false)
			{
				var ndel = mapper.AddValue(dispvalue);
				if (!mapper.Validate(this.tags))
				{
					if (ndel) mapper.DeleteValue(dispvalue);
					return false;
				}
			}
		}		
		this.AddTagToCollection(name);
		var addparams;
		if (typeof(params) == 'object' && params && params.length > 0)
			addparams = params;
		else
			addparams = new Array();
		if (!str_IsStringEmpty(dispname))
			addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,dispname);
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_DISPLAYVALUE,dispvalue);
		this.AddTag(name, str_Trim(value), addparams, occnum);
		if (fireevent)
			this.events.fireEvent("onxmlchange",this);		
		return true;
	}
	,DeleteFilter : function(name, value)
	{
		var res = this.DeleteTag(name, value);
		this.events.fireEvent("onxmlchange",this);
		return res;
	}
	,DeleteFilters : function(name, fireevent)
	{
		fireevent = fireevent == false ? false : true;
		var mappers = this.GetMappersByTagName(name);
		if (mappers != null)
			for(var i=0, ic=mappers.length; i<ic; i++)
				mappers[i].Clear();
		this.tags.Delete(name);
		res = this.DeleteTags(name);
		if (fireevent)
			this.events.fireEvent("onxmlchange",this);
		return res;
	}
	,AddTagToCollection : function(tagname)
	{
		if (this.tags.Get(name) == null)
			this.tags.Add(tagname, tagname);
	}
	,SplitStringForTags : function(value)
	{
		value = value.replace(/\s+/g, " ");
		return value.split(new RegExp("[\\W](?="+this.GetAvailableTagsAsPattern("",":")+")", "ig"));
	}
	,SplitStringForNameValues : function(values)
	{
		return values.split(new RegExp(this.GetAvailableTagsAsPattern("(?:^|\\s)",":"), "ig"));
	}
	,AddPrompt : function(tagname,displayvalue,tagid,item)
	{
		if (displayvalue == null || tagname == null) return;
		if ( this.RESOLVED_Tags == null )
			this.RESOLVED_Tags = new Array();

		tagname = str_Trim(tagname);
		displayvalue = str_Trim(displayvalue);
		var tagvalue = displayvalue.toLowerCase();
		if (this.RESOLVED_Tags[tagname] == null)
		{
			this.RESOLVED_Tags[tagname] = new Array();
			this.RESOLVED_Tags[tagname].resolved = true;
		}
		if (this.RESOLVED_Tags[tagname] != null && (this.RESOLVED_Tags[tagname])[this.RESOLVED_PREFIX+tagvalue] != null)
		{
			var added = false;
			for (var jj = 0, jjc=((this.RESOLVED_Tags[tagname])[this.RESOLVED_PREFIX+tagvalue]).length; jj < jjc; ++jj)
				if ((((this.RESOLVED_Tags[tagname])[this.RESOLVED_PREFIX+tagvalue])[jj])[0] == tagid)
				{
					added = true;
					return;
				}
			//if (added) return;
		}
		if ((this.RESOLVED_Tags[tagname])[this.RESOLVED_PREFIX+tagvalue] == null) (this.RESOLVED_Tags[tagname])[this.RESOLVED_PREFIX+tagvalue] = new Array();
		(this.RESOLVED_Tags[tagname])[this.RESOLVED_PREFIX+tagvalue].resolved = true;
		(this.RESOLVED_Tags[tagname])[this.RESOLVED_PREFIX+tagvalue].push([tagid,displayvalue,item]);
	}
	,CancelPrompt : function(allowClearValues)
	{
		if (allowClearValues)
			this.RESOLVED_Tags = null;
	}
	,Parse : function(value,pos)
	{
		if (pos > 0) pos = pos - 1;	
		var values = this.SplitStringForTags(value);
		var start = 0;
		var diffstr = value;
		var diff;
		var result = null;
		var _Tags = new Array();
		if (this.PreviousCountTags == null)
			this.PreviousCountTags = 0;
		if (this.PreviousCountValues == null)
			this.PreviousCountValues = 0;
		var countTags = 0;
		var countValues = 0;
		for (var i = 0; i < values.length; i++)
		{
			var temp = this.SplitStringForNameValues(values[i]);
			if (temp == null || temp.length == 0) 
			{
				var tn = values[i].substr(0,values[i].length-1)
				if (tn)	tn = tn.toLowerCase();
				var pm = GETSTIBYID(SRCH_TN_PERIOD);
				if (pm == null || pm.hint.toLowerCase() != tn && pm.longhint.toLowerCase() != tn)
					continue;
				else
					temp = [""];
			}
			countTags++;
			diff = diffstr.indexOf(values[i]);
			diffstr = diffstr.substr(diff + values[i].length);
			start += diff;
			if (i + 1< values.length)
				diff = diffstr.indexOf(values[i + 1]);
			else
				diff = diffstr.length;
			//mandatory step
			var rightWay = start <= pos && pos < start + values[i].length + diff;
			var tagname = values[i].substr(0,values[i].length - temp[0].length - 1);
			var svalues = temp[0];
			var mapper = null;
			mapper = this.classmappers.Get(tagname, true);
			if (mapper == null)
				mapper = this.classmappers.Get(this.defaultTag, true);
			var vals;
			if (str_IsStringEmpty(svalues))
				vals = [""];
			else
				vals = this.SplitForTokens(svalues, mapper);
			var inc = 0;
			var sind = start;
			if (tagname.length > 0)
				sind += tagname.length + 1;
			for (var j = 0; j < vals.length; j++)
			{
				var val = str_Trim(vals[j]).toLowerCase();
				if (!str_IsStringEmpty(val))
				{
					countValues++;
					if (_Tags[mapper.tagname] == null) _Tags[mapper.tagname] = new Array();
					if (((_Tags[mapper.tagname])[this.RESOLVED_PREFIX+val]) == null) (_Tags[mapper.tagname])[this.RESOLVED_PREFIX+val] = new Array();
					((_Tags[mapper.tagname])[this.RESOLVED_PREFIX+val]).push(true);
				}
				if (rightWay)
				{
					var startpos = sind;
					if (pos == sind - 1)
						pos += 1;
					var endpos = sind + vals[j].length + (j == vals.length - 1 ? diff : 0);
					if (startpos <= pos && pos < endpos || startpos == endpos && startpos == pos)
						result = [mapper.GetTagName(),vals[j],startpos,endpos];
					sind += vals[j].length + 1;
				}
			}
			start += values[i].length;			
		}
		if (this.PreviousCountTags != countTags || this.PreviousCountValues != countValues)
		{
			for (var objtag in this.RESOLVED_Tags)
			{
				if (this.RESOLVED_Tags[objtag].resolved != true) continue;
				for (var objval in this.RESOLVED_Tags[objtag])
				{
					if (!((this.RESOLVED_Tags[objtag])[this.RESOLVED_PREFIX+objval]) ||
						(this.RESOLVED_Tags[objtag])[this.RESOLVED_PREFIX+objval].resolved != true) continue;
					if (_Tags[objtag] == null || (_Tags[objtag])[this.RESOLVED_PREFIX+objval] == null)
						((this.RESOLVED_Tags[objtag])[this.RESOLVED_PREFIX+objval]).shift();	
					else
					{
						((_Tags[objtag])[this.RESOLVED_PREFIX+objval]).shift();
						if ((_Tags[objtag])[this.RESOLVED_PREFIX+objval].length == 0)
							delete (_Tags[objtag])[this.RESOLVED_PREFIX+objval];
					}
				}
			}
		}
		this.PreviousCountTags = countTags;
		this.PreviousCountValues = countValues;
		return result;
	}
	,RestoreLatestSearch : function(s, callbackcomplete, callbackcanceled)
	{
		if (str_Trim(s) == this.GetQueryString())	
		{
			var tags = this.GetTags();
			if (tags)
			{
				for(var i=0, ic=tags.length; i<ic; i++ )
				{
					var tn = this.GetTagPropertyValue(tags[i], SRCH_TP_NAME);
					var cashe = GETSTIBYID(tn);
					if (cashe != null)
					{
						var mapper = this.classmappers.Get(cashe.hint, true);
						if (mapper != null)
						{
							mapper.ReformatXmlParams(tags[i]);
							switch(mapper.GetTagName())
							{
								case SRCH_TN_SAVEDSEARCH:
									if (!mapper.srch_id || mapper.srch_id == 0)
										this.DeleteFilters(SRCH_TN_SAVEDSEARCH);
								break;
							}
						}
					}
				}
			}	
			if (callbackcomplete)
				this.callbackcomplete = callbackcomplete;
			if (callbackcanceled)
				this.callbackcanceled = callbackcanceled;
			this.OnResolveComplete();
			return true;
		}
		return false;
	}
	,GetCollectionItemName : function(tagName)
	{
		var itemname = null;
		switch(tagName)
		{
			case SRCH_TN_SYMBOL:
				itemname = ResolverSymbolItem;
				break;
			case SRCH_TN_SAVEDSEARCH:
				itemname = SearchItem;
				break;
			case SRCH_TN_INDUSTRY:
				itemname = ResolverIndustryItem;
				break;
			case SRCH_TN_PORTFOLIO:
				itemname = CoverageItem;
				break;
			case SRCH_TN_REGION:
			case SRCH_TN_COUNTRY:
			case SRCH_TN_LANGUAGE:
				itemname = ResolverGeographyItem;
				break;
			case SRCH_TN_CALENDAR:
			case SRCH_TN_BLOG:
			case SRCH_TN_FOLDER:
			case SRCH_TN_FEED:
				itemname = ContainerItem;
				break;
			case SRCH_TN_PROVIDER:
				break;
			case SRCH_TN_FEEDCATEGORY:
			case SRCH_TN_CUSTOMTOPIC:
			case SRCH_TN_TOPIC:
				itemname = LookingForwardItem
				break;
			case SRCH_TN_BLOGCATEGORY:			
				itemname = CategoryItem
				break;
		}
		return itemname;
	}
	,LoadQueryString : function(s, callbackcomplete, callbackcanceled)
	{
		this.inputString = s;
		if (this.RestoreLatestSearch(s, callbackcomplete, callbackcanceled)) return;
		this.ClearProcess();
		this.ClearResolvingItemInfo();
		if (callbackcomplete)
			this.callbackcomplete = callbackcomplete;
		if (callbackcanceled)
			this.callbackcanceled = callbackcanceled;
		var values = this.SplitStringForTags(s);
		var ejectedItems = new Array();
		for (var i = 0; i < values.length; i++)
		{
			var temp = this.SplitStringForNameValues(values[i]);
			if (temp == null || temp.length == 0) continue;
			var str = new Array();
			str[1] = temp[0];
			str[0] = values[i].substr(0,values[i].length - temp[0].length - 1);
			
			var mapper = null;
			if (str.length > 1)
				mapper = this.classmappers.Get(str[0], true)
			if (mapper == null)
				mapper = this.classmappers.Get(this.defaultTag, true);
			/*block for examination resolved tags*/
			var tagvalues = this.SplitForTokens(str[str.length-1], mapper);
			var tagname = mapper.GetTagName();
			var isTagAdded = false;
			if (this.RESOLVED_Tags != null && this.RESOLVED_Tags[tagname] != null)
			{
				var _Tags = this.RESOLVED_Tags;
				var new_tagvalues = new Array();
				for (var j = 0; j < tagvalues.length; j++)
				{
					var val = str_Trim(tagvalues[j]).toLowerCase();
					if ((_Tags[tagname])[this.RESOLVED_PREFIX+val] == null || ((_Tags[tagname])[this.RESOLVED_PREFIX+val]).length == 0)
						new_tagvalues.push(tagvalues[j]);
					else
					{
						var first = ((_Tags[tagname])[this.RESOLVED_PREFIX+val]).shift();
						var ejectedItem = new Object();
						ejectedItem.tagname = tagname;
						ejectedItem.tagvalue = val;
						if (!ejectedItem.items)
							ejectedItem.items = new Array();
						ejectedItem.items.push(first);
						ejectedItems.push(ejectedItem);
						var itemname = this.GetCollectionItemName(tagname);
						mapper.AddValue(first[0],false);
						if (mapper.Validate(this.tags))
						{
							if (itemname && typeof(mapper.AddToParent) != "undefined")
							{
								var xItem = data_createEmptyItem(itemname);
								if (first[2])
									xItem.Merge(first[2].GetXmlDocument());
								mapper.AddToParent(xItem,null,first[1]);
							}
							else
								this.AddFilter(tagname, first[0], first[1], false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,mapper.dispname)]);
							isTagAdded = true;
						}
						else
						{
							this.OnLoadQueryStringError(ejectedItems);
							return;
						}
					}
				}			
				tagvalues = new_tagvalues;
			}
			/*block for examination resolved tags*/
			if (tagvalues.length != 0)
			{
				mapper.AddValues(tagvalues);
				if (!mapper.Validate(this.tags))
				{
					this.OnLoadQueryStringError(ejectedItems);
					return;
				}
				isTagAdded = true;
				this.PushMapperInStack(mapper);
			}	
			if (isTagAdded)
				this.AddTagToCollection(mapper.tagname);
		}
		this.resolver.Resolve();
	}
	,ValidateSearchXml : function(callbackcomplete, callbackcanceled)
	{
		this.ClearResolvingItemInfo();
		if (callbackcomplete)
			this.callbackcomplete = callbackcomplete;
		if (callbackcanceled)
			this.callbackcanceled = callbackcanceled;
		var groups = this.xmlDocument.GetFirstChild().childNodes;
		if (groups.length > 0)
		{
			for(var g=0, gc=groups.length; g<gc; g++)
			{
				var group = groups[g];
				var name = groups[g].getAttribute(SRCH_AN_TAGGROUPID);
				var tags = this.GetTags([new srch_XmlSearchExParam(SRCH_TP_NAME, name)]);
				var tagvalues = [];
				var mapper = null;
				for (var i = 0; i < tags.length; i++)
				{					
					var tag = tags[i];
					mapper = this.GetMappersByTagName(this.GetTagPropertyValue(tag,SRCH_TP_NAME));
					if (mapper == null)
						mapper = this.classmappers.Get(this.defaultTag, true);
					else
						mapper = mapper[0];
					var val = this.GetTagPropertyValue(tag,SRCH_TP_VALUE);
					var dval = this.GetTagPropertyValue(tag,SRCH_TP_DISPLAYVALUE);
					if (str_IsStringEmpty(val) && !str_IsStringEmpty(dval))
					{
						tagvalues.push(dval)
						this.DeleteTagFromParent(group,tag);
					}
				}
			}
			var isTagAdded = false;
			if (tagvalues.length != 0)
			{
				mapper.AddValues(tagvalues);
				if (!mapper.Validate(this.tags))
					return;
				isTagAdded = true;
				this.PushMapperInStack(mapper);
			}	
			if (isTagAdded)
				this.AddTagToCollection(mapper.tagname);
		}
		this.resolver.Resolve();
	}
	,OnLoadQueryStringError : function(ejectedItems)
	{
		if (this.RESOLVED_Tags == null) return;
		for (var ei = 0; ei < ejectedItems.length; ei++)
			for (var eii = 0; eii < ejectedItems[ei].length; eii++)
				((this.RESOLVED_Tags[(ejectedItems[ei].tagname)])[this.RESOLVED_PREFIX+(ejectedItems[ei].tagvalue)]).push(first);
		this.ClearProcess();
	}
	,SplitForTokens : [decl_virtual, function(str,mapper)
	{
		var res = new Array();
		var arr = null;
		if (mapper.GetTagName() != SRCH_TN_TEXT)
			arr = str.match(new RegExp("([^,]+)", "ig"));
		else
		{
			arr = str.match(/\w+|\"[^\"]*\"/ig);
			if(str.length>0&&!arr)//str.charAt(0)!="\"")
				arr = str.match(/[^\s]+/ig);
		}
		if (arr && arr != null)
			for(var i=0, ic=arr.length; i<ic; i++)
			{
				res[i] = str_Trim(arr[i]);
				if(res[i].indexOf(" ")>0&&res[i].indexOf("\"")!=0)
					res[i] = "\""+res[i]+"\"";
			}
		return [res.join(",")];
	}]
	,GetMappersByTagName : function(name)
	{
		var cashe = GETSTIBYID(name);
		if (cashe != null)
		{
			var res = new Array();
			var mapper = this.classmappers.Get(cashe.hint, true);
			if (mapper != null)
				res[res.length] = mapper;
			mapper = this.classmappers.Get(cashe.longhint, true);
			if (mapper != null)
				res[res.length] = mapper;			
			return res.length == 0 ? null : res;
		}
		return null;
	}
	,PushMapperInStack : function(mapper)
	{
		if (!this.mappingStack)
			return;
		for(var i=0, ic=this.mappingStack.length; i<ic; i++)
			if (this.mappingStack[i] == mapper)
				return;
		this.mappingStack[this.mappingStack.length] = mapper;
	}
	,Processing : function()
	{
		if (this.mappingStack != null)
		{
			var i=0;
			while (this.mappingStack.length != 0) 
			{
				if (this.mappingStack[0].Processing() == false)
					return;
				else
					this.mappingStack.splice(0, 1);
			}	
		}
		var tags = this.GetTags();
		if (tags != null && tags.length > 0)
		{	
			this.CancelPrompt(true);
			for (var i=0; i< tags.length; i++)
			{
				var tagname = this.GetTagPropertyValue(tags[i], SRCH_TP_NAME);
				var dispvalue = this.GetTagPropertyValue(tags[i], SRCH_TP_DISPLAYVALUE);
				var value = this.GetTagPropertyValue(tags[i], SRCH_TP_VALUE);
				if (str_IsStringEmpty(dispvalue)) dispvalue = value;
				this.AddPrompt(tagname, dispvalue, value, this.GetResolvingItemInfo(tagname,value));
			}
		}
		if (this.callbackcomplete != null)
		{
			if (usageLogger) 
			{
				usageLogger.addLogParameter("searchString", this.inputString)
				usageLogger.Log(USG_EVT_ACTIONSEARCHSTRINGSEARCH);
			}
			this.callbackcomplete();
		}
	}
	,AddResolvingItemInfo : function(name,val,item)
	{
		if (this.ResolvingItemInfo == null) this.ResolvingItemInfo = new Array();
		if (this.ResolvingItemInfo[name] == null) this.ResolvingItemInfo[name] = new Array(); 
		(this.ResolvingItemInfo[name])[this.RESOLVED_PREFIX+val] = item;
	}
	,GetResolvingItemInfo : function(name,val)
	{
		if (this.ResolvingItemInfo == null || this.ResolvingItemInfo[name] == null) return null;
		return (this.ResolvingItemInfo[name])[this.RESOLVED_PREFIX+val];
	}
	,ClearResolvingItemInfo : function()
	{
		this.ResolvingItemInfo = null;
	}
	,OnResolveComplete : function()
	{
		this.Processing();
	}
	,OnResolveCancel : function()
	{
		callbackcanceled = this.callbackcanceled;
		this.ClearProcess();
		if (callbackcanceled)
			callbackcanceled();	
	}
	,GetState : function()
	{
		if (this.IsEmpty() == true)
			return SRCH_SES_NONE;
		return SRCH_SES_FILTER;
	}
	,GetTagInfo : function(name)
	{
		var info = this.tagsinfo.Get(name);
		if (info == null)
			info = new srch_TagInfo(null,null,null);
		return info;
	}
	,SetXml : [decl_virtual, function(xml, fireevents)
	{
		this.base.SetXml(xml);
		if (fireevents != false)
			this.events.fireEvent("onxmlchange",this);
	}]
	,GetQueryString : function()
	{
		var groups = this.GetTagsGroups();
		var res = "";
		for(var i=0, ic=groups.length; i < ic; i++)
		{
			var jc = groups[i].childNodes.length;
			if (jc > 0)
			{
				var srchtaginfo = GETSTIBYID(this.GetTagPropertyValue(groups[i].childNodes[0], SRCH_TP_NAME));
				if (GETSTIBYID(this.GetTagPropertyValue(groups[i].childNodes[0], SRCH_TP_NAME)) == null)
					continue;
				var tagname = this.GetTagPropertyValue(groups[i].childNodes[0], SRCH_TP_DISPLAYNAME);
				if (tagname == null)
					continue;
				if (tagname != srchtaginfo.hint && tagname != srchtaginfo.longhint)
					tagname = srchtaginfo.hint;
				var values = "";
				for(var j=0; j < jc; j++)
				{
					var val = this.GetTagPropertyValue(groups[i].childNodes[j], SRCH_TP_DISPLAYVALUE);
					if (values != "")
						values += ", "
					values += this.PrepareDisplayValue(val);
				}
				if (!str_IsStringEmpty(values))
				{
					if (res != "")
						res += " ";
					if (this.ShowHint)
						res += tagname + ":";
					res +=values;
				}
			}
		}
		return res;
	}
	,PrepareDisplayValue : function(val)
	{
		var res;
		var reg = new RegExp("[\+]","ig");
		if (reg.test(val))
		{
			if (val.substr(0,1) != "\"" || val.substr(val.length-1,1) != "\"")
				res = "\""+val+"\"";
			else
				res = val;
		}
		else
			res = val;
		return res;
	}
	,PrepareSearchParam : function()
	{
		var queryString = this.GetQueryString();
		srch_inpSetInputValue(queryString,this);
		this.needsearch = true;
		var tlen = this.tags.getCount();
		var tagname;
		for (var i = 0; i < tlen; i++)
		{
			tagname = this.tags.GetByIndex(i);
			var mappers = this.GetMappersByTagName(tagname);
			if (mappers != null)
				for(var j=0, jc=mappers.length; j<jc; j++)
					if (mappers[j].ContainInternalCommand() == true)
					{
						if (this.needsearch || tlen != 1 || tagname != SRCH_TN_SAVEDSEARCH)
							this.needsearch = mappers[j].InternalCommand();
					}
		}
		return queryString;
	}
	,IsEmpty : [decl_virtual, function()
	{
		var groups = this.GetTagsGroups();
		if (groups && groups.length == 1 && this.GetScopeValue())
		{
			if (groups[0].childNodes && groups[0].childNodes.length > 0)
			{
				if (SiteLayout.InputSearchControlBase.GetScopeTagName() ==  this.GetTagPropertyValue(groups[0].childNodes[0], SRCH_TP_NAME))
					return true;
			}
		}
		return this.base.IsEmpty();
	}]
	,GetInputControl : [decl_virtual, function()
	{
		this.input = SiteLayout.InputSearchControlBase.GetInputControl();
		return this.input;
	}]
	,DeleteScopeFilter : function()
	{
		this.DeleteFilters(SiteLayout.InputSearchControlBase.GetScopeTagName());
		this.SetScopeValue(null);
	}
	,AddScopeFilter : function()
	{
		this.DeleteScopeFilter();
		if (this.GetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,SRCH_TN_SAVEDSEARCH))) != null)
			return;
		scope = SiteLayout.InputSearchControlBase.GetScopeForCurrentPage();
		if (!str_IsStringEmpty(scope))
		{
			this.AddFilter(SiteLayout.InputSearchControlBase.GetScopeTagName(), scope, scope, false);
			this.SetScopeValue(scope);
		}		
	}
	,GetScopeValue : function()
	{
		return this.scopeValue;
	}
	,SetScopeValue : function(value)
	{
		this.scopeValue = value;
	}
	,IsScopeChanged : function()
	{
		if (this.GetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,SRCH_TN_SAVEDSEARCH))) != null)
			return false;
		return this.GetScopeValue() != SiteLayout.InputSearchControlBase.GetScopeForCurrentPage();
	}
	,GetNavigationContainerID : function()
	{
		return nav_currentNavInfo && nav_currentNavInfo.GetContainerLocation();
	}
	,GetSingleSearchContainerID : function()
	{
		var scid = null;
		var tagname = srch_GetCurrentContainerSearchTagName();
		if (tagname)
		{
			var tags  = this.GetTags(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME, tagname)));
			if (tags != null && tags.length == 1)
				scid = this.GetTagPropertyValue(tags[0],SRCH_TP_VALUE);
		}
		return scid;
	}
	,NeedResearchByContainer : function()
	{
		return this.GetNavigationContainerID() != this.GetSingleSearchContainerID();
	}
	,UpdateContainerInfo : function()
	{
		if (!currentNavContInfo) return;
		var value = this.GetSingleSearchContainerID();
		if (value)
		{
			if (currentNavContInfo.GetContainerID() == value)
			{
				var tags = this.GetTags(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME, srch_GetCurrentContainerSearchTagName())));
				var tag = tags[0];			
				var tagname = this.GetTagPropertyValue(tag, SRCH_TP_NAME);
				this.DeleteFilters(tagname, false);
				this.AddFilter(tagname, value, currentNavContInfo.GetContainerName(), false, null, false);
				var queryString = this.GetQueryString();
				srch_inpSetInputValue(queryString,this);
				if (srch_mySearhesCol != null && !str_IsStringEmpty(queryString)) 
					srch_mySearhesCol.Add(queryString);
			}
		}
	}
	,DoSearch : function(changenav)
	{
		Utils.MonitoringHelper.SetMonitoringInfoIfEmpty(MA_RunInputSearch);
			
		ISUSERSEARCH = !ISNAVIGATIONSEARCH;
		var queryString = this.PrepareSearchParam();
		this.AddScopeFilter();
		SiteLayout.InputSearchControlBase.AddSpecialFilters();
		var xml = "";
		var isEmpty = this.IsEmpty();
					
		var cid = this.GetNavigationContainerID();
		var tagname = srch_GetCurrentContainerSearchTagName();
		var scid = this.GetSingleSearchContainerID();
		
		if (this.NeedResearchByContainer())
		{
			var xmlchange = false;
			if (ISUSERSEARCH)
			{
				if (scid)
				{
					var tags  = this.GetTags(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME, SRCH_TN_FEEDCATEGORY)));
					if (tags != null && tags.length > 0)
					{
						xmlchange = this.DeleteFilters(tagname, false);
					}
					else
						nav_ChangePageParams(url_MakeParam(P_CONTAINER_ID, scid), false);
				}
				else
					nav_ChangePageParams(P_CONTAINER_ID, false);
				this.needsearch = true;
			}			
			else
			{
				xmlchange = this.DeleteFilters(tagname, false);				
				if (cid)
				{
					var cache = GETSTIBYID(tagname);
					if (cache)
					{
						var dv;
						if (currentNavContInfo)
							dv = currentNavContInfo.GetContainerName();
						if (!dv)
							dv = "";
						this.AddFilter(tagname, cid, dv, false, null, false);
						xmlchange = true;
					}
				}
			}
			if (xmlchange)
			{
				this.needsearch = true;
				isEmpty = this.IsEmpty();
				//this.events.fireEvent("onxmlchange",this);
				queryString = this.GetQueryString();
				srch_inpSetInputValue(queryString,this);
			}
		}
		if (!this.IsXmlEmpty())
			xml = this.GetXml();
		if (!isEmpty && srch_mySearhesCol != null && !str_IsStringEmpty(queryString)) 
			srch_mySearhesCol.Add(queryString);
		if (this.needsearch == true) 
		{
			// Recent items processing
			if (!isEmpty) 
				new httpcmd_AddRecentItemXML(xml);
			srch_DoSearch(xml, false, changenav);		
		}
		ISUSERSEARCH = false;
	}
	,OnNavigationsParamsChange : function(isFireEvent,isNavChange,skippedtags,isAdv)
	{		
		isFireEvent = isFireEvent != false ? true : false; 
		isNavChange = isNavChange != true ? false : true; 
		var needresearch = 
			this.CheckPrimarySymbol() || 
			this.IsScopeChanged();
		var pid = nav_currentNavInfo.GetPageID();
		if (this.pid == null)
			this.pid = pid;
		if (this.pid != pid || isNavChange)
		{
			this.pid = pid;
			var groups = this.GetTagsGroups();
			for(var i=groups.length-1; i >= 0; i--)
			{
				if (groups[i].childNodes.length > 0)
				{
					var tagname = this.GetTagPropertyValue(groups[i].childNodes[0], SRCH_TP_NAME);
					var tagvalue = this.GetTagPropertyValue(groups[i].childNodes[0], SRCH_TP_VALUE);
					if (skippedtags && skippedtags[tagname])
						continue;
					if (!this.IsValidTagForCurrPage(tagname,tagvalue,isAdv))
					{
						this.DeleteTags(tagname);
						if (isFireEvent)
							this.events.fireEvent("onxmlchange",this);
						this.tags.Delete(tagname);
						needresearch = true;
						var mappers = this.GetMappersByTagName(tagname);
						if (mappers != null)
							for(var j=0, jc=mappers.length; j<jc; j++)
								mappers[j].Clear();
					}		
				}
			}
		}
		if (!this.GetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,SRCH_TN_SAVEDSEARCH))))
			needresearch = needresearch || this.NeedResearchByContainer();
		if (!needresearch)
			srch_inpSetInputValue(this.GetQueryString(),this);
		return needresearch;
	}
	,CheckPrimarySymbol : function()
	{
		var needresearch = false;
		var tags = this.GetTags(new Array(new srch_XmlSearchExParam(SRCH_AN_SYMBOLPRIMARYONLY)));
		if (tags != null && tags.length > 0)
		{
			var pref = pref_GetShowPrimarySymbols()?-1:0;
			for (var i=0; i< tags.length; i++)
			{
				var primary = this.GetTagPropertyValue(tags[i], SRCH_AN_SYMBOLPRIMARYONLY);
				if (primary != pref.toString())
				{
					this.SetTagPropertyValue(tags[i], SRCH_AN_SYMBOLPRIMARYONLY, pref);
					needresearch = true;
				}
			}
		}
		return needresearch;
	}
	,IsValidTagForCurrPage : function(tagname,tagvalue,isAdv)
	{
		var pid = nav_currentNavInfo.GetPageID();
		var mappers = this.GetMappersByTagName(tagname);
		if (mappers == null)
			return false;
		switch(tagname)
		{
			case SRCH_TN_PERIOD:
				if (tagvalue && tagvalue == srch_getPeriodDisplayValueByValue(tagvalue))
					return false;
				break;
		}
		for(var j=0, jc=mappers.length; j<jc; j++)
		{
			var pids = mappers[j].GetPagesIDs(isAdv);
			if (pids != null)
			{
				for(var p=0,pc=pids.length; p<pc; p++)
					if (pids[p] == pid)
						return true;
				return false;
			}
		}
		return true;
	}
	,GetAvailableTagsHtml : function(types, bantags)
	{
		if (!this.__AvailableTagsHtml)
		{
			var avtags = this.GetAvailableTags();
			var typeArr = types.split(',');
			var banTagsm = null;
			if (!str_IsStringEmpty(bantags))
				banTagsm = bantags.split(',');
			var sb = new Utils.StringBuilder();
			sb.Append("<table width=\"340px\">");
			sb.Append("<tr><td width=\"40px\">code</td><td width=\"100px\">or name</td><td width=\"200px\">searches...</td></tr>");
			for(var i=0, ic=avtags.length; i<ic; i++)
			{
				var tag = GETSTIBYID(avtags[i]);
				if (!srch_IsTypeContained(typeArr, tag.type, banTagsm) || srch_IsBanTag(avtags[i], banTagsm))
					continue;
				sb.Append("<tr><td><a href=\"#\" onclick=\"srch_inpAddToInputValue('");
				sb.Append(tag.hint);
				sb.Append(":'); return false;\"><B>");
				sb.Append(tag.hint);
				sb.Append(":</B></a></td><td><a href=\"#\" onclick=\"srch_inpAddToInputValue('");
				sb.Append(tag.longhint);
				sb.Append(":'); return false;\"><B>");
				sb.Append(tag.longhint);
				sb.Append(":</B></a></td><td>");
				sb.Append(tag.description);
				sb.Append("</td></tr>");
			}
			this.__AvailableTagsHtml = sb.ToString();
		}
		return this.__AvailableTagsHtml;
	}
});

/*************************************** Scrollable Alerts Input Search ******************************************/

DeclareClass("Data.Search.ScrollableAlertsInputSearch", "Data.Search.InputSearch",
{
	InitMappers : [decl_virtual, function()
	{
		this.classmappers = new dm_KeyedCollection(null, true);
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).hint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).longhint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).hint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).longhint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).hint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).longhint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).hint, new srch_GeographyMapper(SRCH_TN_REGION, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).longhint, new srch_GeographyMapper(SRCH_TN_REGION, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).hint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).longhint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).hint, new srch_TextMapper(SRCH_TN_TEXT, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).longhint, new srch_TextMapper(SRCH_TN_TEXT, this, true));
		this.tagsinfo = new dm_KeyedCollection();
	}]
});

/*************************************** Home Input Search ******************************************/
DeclareClass("Data.Search.HomeInputSearch", "Data.Search.InputSearch",
{
	InitMappers : [decl_virtual, function()
	{
		this.classmappers = new dm_KeyedCollection(null, true);
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).hint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).longhint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, true));
		if (!IS_ANONYMOUS_USER)
		{
			this.classmappers.Add(GETSTIBYID(SRCH_TN_PORTFOLIO).hint, new srch_PortfolioMapper(SRCH_TN_PORTFOLIO, this, false));
			this.classmappers.Add(GETSTIBYID(SRCH_TN_PORTFOLIO).longhint, new srch_PortfolioMapper(SRCH_TN_PORTFOLIO, this, true));
		}
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).hint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).longhint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).hint, new srch_TextMapper(SRCH_TN_TEXT, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).longhint, new srch_TextMapper(SRCH_TN_TEXT, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).hint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).longhint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).hint, new srch_GeographyMapper(SRCH_TN_REGION, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).longhint, new srch_GeographyMapper(SRCH_TN_REGION, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).hint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).longhint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PERIOD).hint, new srch_PeriodMapper(SRCH_TN_PERIOD, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PERIOD).longhint, new srch_PeriodMapper(SRCH_TN_PERIOD, this, true));
		this.tagsinfo = new dm_KeyedCollection();
		this.tagsinfo.Add(SRCH_TN_INDUSTRY, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH), null));
		if (!IS_ANONYMOUS_USER)
		{
			this.tagsinfo.Add(SRCH_TN_PORTFOLIO, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH,SRCH_TN_SYMBOL), 1));
		}
		this.tagsinfo.Add(SRCH_TN_KEYWORD, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH), null));
		this.tagsinfo.Add(SRCH_TN_PERIOD, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  1));
		this.tagsinfo.Add(SRCH_TN_SYMBOL, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH,SRCH_TN_PORTFOLIO),  null));
		this.tagsinfo.Add(SRCH_TN_COUNTRY, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_LANGUAGE, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_REGION, new srch_TagInfo(new Array(SRCH_TN_SAVEDSEARCH),  null));
		this.tagsinfo.Add(SRCH_TN_SAVEDSEARCH, new srch_TagInfo(new Array("ALL"), 1));
	}]
});

/*************************************** Bloggers Input Search *****************************************/

DeclareClass("Data.Search.BloggersInputSearch", "Data.Search.InputSearch",
{
	InitMappers : [decl_virtual, function()
	{
		this.tagsinfo = new dm_KeyedCollection();
		this.classmappers = new dm_KeyedCollection(null, true);
		this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOGGERNAME).hint, new srch_TextMapper(SRCH_TN_BLOGGERNAME, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOGGERNAME).longhint, new srch_TextMapper(SRCH_TN_BLOGGERNAME, this, true));
	}]
	,SplitForTokens : [decl_virtual, function(str,mapper)
	{
		return [str_Trim(str.replace(/\"/gi, " "))];
	}]
});

/*************************************** Container Input Search *************************************/

DeclareClass("Data.Search.ContainerInputSearch", "Data.Search.InputSearch",
{
	InitMappers : [decl_virtual, function()
	{
		this.classmappers = new dm_KeyedCollection(null, true);
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).hint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).longhint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).hint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).longhint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).hint, new srch_TextMapper(SRCH_TN_TEXT, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).longhint, new srch_TextMapper(SRCH_TN_TEXT, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).hint, new srch_ProviderMapper(SRCH_TN_PROVIDER,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).longhint, new srch_ProviderMapper(SRCH_TN_PROVIDER,this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).hint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).longhint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).hint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).longhint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).hint, new srch_GeographyMapper(SRCH_TN_REGION, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).longhint, new srch_GeographyMapper(SRCH_TN_REGION, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_LANGUAGE).hint, new srch_GeographyMapper(SRCH_TN_LANGUAGE, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_LANGUAGE).longhint, new srch_GeographyMapper(SRCH_TN_LANGUAGE, this, true));
		this.InitMappersInternal();
		this.tagsinfo = new dm_KeyedCollection();
	}]
	,InitMappersInternal : [decl_virtual, function()
	{	
	}]
});

DeclareClass("Data.Search.FeedInputSearch", "Data.Search.InputSearch",
{
	InitMappers : [decl_virtual, function()
	{
		this.classmappers = new dm_KeyedCollection(null, true);
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).hint, new srch_ProviderMapper(SRCH_TN_PROVIDER,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).longhint, new srch_ProviderMapper(SRCH_TN_PROVIDER,this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEEDCATEGORY).hint, new srch_CategoryMapper(SRCH_TN_FEEDCATEGORY, this, false, PID_FEEDS, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEEDCATEGORY).longhint, new srch_CategoryMapper(SRCH_TN_FEEDCATEGORY, this, true, PID_FEEDS, false));	
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).hint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).longhint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TOPIC).hint, new srch_TopicMapper(SRCH_TN_TOPIC,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TOPIC).longhint, new srch_TopicMapper(SRCH_TN_TOPIC, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).hint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).longhint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, true));		
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).hint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).longhint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).hint, new srch_GeographyMapper(SRCH_TN_REGION, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).longhint, new srch_GeographyMapper(SRCH_TN_REGION, this, true));		
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).hint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).longhint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, true));	
		this.classmappers.Add(GETSTIBYID(SRCH_TN_LANGUAGE).hint, new srch_GeographyMapper(SRCH_TN_LANGUAGE, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_LANGUAGE).longhint, new srch_GeographyMapper(SRCH_TN_LANGUAGE, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).hint, new srch_TextMapper(SRCH_TN_TEXT, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TEXT).longhint, new srch_TextMapper(SRCH_TN_TEXT, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEED).hint, new srch_TextMapper(SRCH_TN_FEED, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FEED).longhint, new srch_TextMapper(SRCH_TN_FEED, this, true));		
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CUSTOMTOPIC).hint, new srch_TopicMapper(SRCH_TN_CUSTOMTOPIC,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CUSTOMTOPIC).longhint, new srch_TopicMapper(SRCH_TN_CUSTOMTOPIC, this, true));		
		this.tagsinfo = new dm_KeyedCollection();
	}]
});

DeclareClass("Data.Search.FolderInputSearch", "Data.Search.ContainerInputSearch",
{
	InitMappersInternal : [decl_virtual, function()
	{
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FOLDER).hint, new srch_TextMapper(SRCH_TN_FOLDER, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_FOLDER).longhint, new srch_TextMapper(SRCH_TN_FOLDER, this, true));
	}]
});

DeclareClass("Data.Search.CalendarInputSearch", "Data.Search.ContainerInputSearch",
{
	InitMappersInternal : [decl_virtual, function()
	{
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CALENDAR).hint, new srch_TextMapper(SRCH_TN_CALENDAR, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CALENDAR).longhint, new srch_TextMapper(SRCH_TN_CALENDAR, this, true));
	}]
});

DeclareClass("Data.Search.BlogInputSearch", "Data.Search.ContainerInputSearch",
{
	InitMappersInternal : [decl_virtual, function()
	{
		this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOG).hint, new srch_TextMapper(SRCH_TN_BLOG, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_BLOG).longhint, new srch_TextMapper(SRCH_TN_BLOG, this, true));
	}]
});
/*************************************** Input Search (for others pages) ****************************/

DeclareClass("Data.Search.AtypicalInputSearch", "Data.Search.InputSearch",
{
	constructor : function(xml, inputname, defaulttag)
	{
		this.base(xml, defaulttag);
		this.inputname = inputname;
	}
	,GetInputControl : [decl_virtual, function()
	{
		this.input = document.getElementById(this.inputname);
		return this.input;
	}]
	,AppendValueToInput : function(val)
	{
		if (this.GetInputControl())	
		{
			var inputvalue = this.input.value;
			if (!str_IsStringEmpty(inputvalue))
				inputvalue += " ";
			else
				inputvalue = "";
			inputvalue += val;
			this.SetInputValue(inputvalue);
		}
	}
	,SetInputValue : function(value)
	{
		if (str_IsStringEmpty(value))
			value = "";
		if (this.GetInputControl())	
			this.input.value = value;
	}
	,GetInputValue : function()
	{
		if (this.GetInputControl())	
			return this.input.value;
		return null;
	}
});

DeclareClass("Data.Search.TaggingInputSearch", "Data.Search.AtypicalInputSearch",
{
	constructor : function(xml, defaulttag)
	{
		this.base(xml, 'textarea', defaulttag);
	}
	,InitMappers : [decl_virtual, function()
	{
		this.classmappers = new dm_KeyedCollection(null, true);
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).hint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_INDUSTRY).longhint, new srch_IndustryMapper(SRCH_TN_INDUSTRY, this, true));
		if (!IS_ANONYMOUS_USER)
		{
			this.classmappers.Add(GETSTIBYID(SRCH_TN_PORTFOLIO).hint, new srch_BaseMapper(SRCH_TN_PORTFOLIO, this, false, false));
			this.classmappers.Add(GETSTIBYID(SRCH_TN_PORTFOLIO).longhint, new srch_BaseMapper(SRCH_TN_PORTFOLIO, this, false, true));
		}
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).hint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_KEYWORD).longhint, new srch_BaseMapper(SRCH_TN_KEYWORD, this, false, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).hint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, true, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).longhint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, true, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).hint, new srch_GeographyMapper(SRCH_TN_REGION, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_REGION).longhint, new srch_GeographyMapper(SRCH_TN_REGION, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).hint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_COUNTRY).longhint, new srch_GeographyMapper(SRCH_TN_COUNTRY, this, true));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TOPIC).hint, new srch_TopicMapper(SRCH_TN_TOPIC,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_TOPIC).longhint, new srch_TopicMapper(SRCH_TN_TOPIC, this, true));		
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CUSTOMTOPIC).hint, new srch_TopicMapper(SRCH_TN_CUSTOMTOPIC,this, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_CUSTOMTOPIC).longhint, new srch_TopicMapper(SRCH_TN_CUSTOMTOPIC, this, true));				
		if (CURUSERTYPE == UserType.SuperAdmin)
		{
			/*this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).hint, new srch_ProviderMapper(SRCH_TN_PROVIDER,this, false));
			this.classmappers.Add(GETSTIBYID(SRCH_TN_PROVIDER).longhint, new srch_ProviderMapper(SRCH_TN_PROVIDER,this, true));*/
			
			this.classmappers.Add(GETSTIBYID(SRCH_TN_BROKER).hint, new srch_BrokerMapper(SRCH_TN_BROKER,this, false));
			this.classmappers.Add(GETSTIBYID(SRCH_TN_BROKER).longhint, new srch_BrokerMapper(SRCH_TN_BROKER, this, true));		
		}	
		this.tagsinfo = new dm_KeyedCollection();
	}]	
});

DeclareClass("Data.Search.PortfolioInputSearch", "Data.Search.AtypicalInputSearch",
{
	constructor : function(xml, defaulttag)
	{
		this.base(xml, 'txta_portfolio_tags', defaulttag);
	}
	,InitMappers : [decl_virtual, function()
	{
		this.classmappers = new dm_KeyedCollection(null, true);		
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).hint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, true, false));
		this.classmappers.Add(GETSTIBYID(SRCH_TN_SYMBOL).longhint, new srch_SymbolMapper(SRCH_TN_SYMBOL, this, true, true));	
		this.tagsinfo = new dm_KeyedCollection();
	}]
	,SplitStringForTags : function(value)
	{
		value = value.replace(/\t/g, ",");
		value = value.replace(/\n/g, ",");
		value = value.replace(/\s+/g, " ");
		return value.split(new RegExp("[\\W](?="+this.GetAvailableTagsAsPattern("",":")+")", "ig"));
	}
	,SplitForTokens : [decl_virtual, function(str,mapper)
	{
		var res = new Array();
		var arr = null;
		if (mapper.GetTagName() != SRCH_TN_TEXT)
		{
			/*regTxt = "([^\\s]+)";
			if (str.indexOf(",") != -1)*/
				regTxt = "([^,]+)";
			arr = str.match(new RegExp(regTxt, "ig"));
		}
		else
			arr = [str];
		if (arr && arr != null)
			for(var i=0,ic=arr.length; i<ic; i++)
				res[i] = arr[i].replace(/\"/gi, " ");
		return res;
	}]
});
/********************************************* New js-scheme ****************************************/
// UI relatedIsAdvancedSearchPaneOpened
function srch_OpenAdvancedSearchPane(loaddatafrominput)
{
	if (!loaddatafrominput && !srch_checkCurrentAdvancedSearchState()) return;
		
	Utils.MonitoringHelper.SetMonitoringInfoIfEmpty(MA_Navigate);
	srch_advLoad(loaddatafrominput);
	nav_ChangePageParams(P_BRANDFILTER, false);
	
	if (nav_IsNavigationEnabled() && nav_currentNavInfo.GetPageID() == PID_HOME)
		nav_NavigateTo(PID_FEEDS,null,PID_PLADVANCEDSEARCH);
	else
		nav_SwitchPageLocation(PID_PLADVANCEDSEARCH);
	srch_CheckContainerInNavigation();
}

/*********************************************** XmlSearch ******************************************/
//***********************Helper class and functions **********************//
function srch_XmlSearchExParam(nodename,nodevalue)
{
	this.nodename = nodename;
	this.nodevalue = nodevalue;	
}
function srch_XSEP(nodename,nodevalue)
{
	this.base = srch_XmlSearchExParam;
	this.base(nodename,nodevalue);
}
srch_XSEP.prototype = new srch_XmlSearchExParam;
srch_XSEP.prototype.constructor = srch_XSEP;

//----------------  BaseMapper --------------//
function srch_BaseMapper(tagname, obj, containinternalcommand, islonghint)
{
	this.tagname = tagname;
	this.dispname = tagname;
	this.obj = obj;
	this.values = new Array();
	this.containinternalcommand = containinternalcommand;
	
	var info = GETSTIBYID(this.tagname);
	if (info != null)
		this.dispname = islonghint == true ? info.longhint : info.hint;
}
srch_BaseMapper.prototype.GetTagName = function()
{
	return this.tagname;
}
srch_BaseMapper.prototype.GetPagesIDs = function(isAdv)
{
	return null;
}
srch_BaseMapper.prototype.AddValues = function(values, needresolve)
{
	for(var j=0, jc=values.length; j < jc; j++)
		this.AddValue(str_Trim(values[j]),needresolve);
}
srch_BaseMapper.prototype.AddValue = function(value, needresolve)
{
	if (str_IsStringEmpty(value))
		return false;
	needresolve = needresolve == false ? false : true;
	for(var j=0, jc=this.values.length; j < jc; j++)
		if (this.values[j].value == value && this.values[j].needresolve == needresolve)
			return false;
	var obj = new Object();
	obj.value = value;
	obj.needresolve = needresolve;
	this.values.push(obj);
	return true;
}
srch_BaseMapper.prototype.DeleteValue = function(value,needresolve)
{
	for(var j=0, jc=this.values.length; j < jc; j++)
		if (this.values[j].value == value && this.values[j].needresolve == needresolve)
		{
			this.values.splice(j,1);
			return true;
		}
	return false;
}
srch_BaseMapper.prototype.Processing = function()
{
	if (this.values && this.values.length > 0)
		for(var i=0,ic=this.values.length; i<ic; i++)
			this.obj.AddFilter(this.tagname, this.values[i].value, this.values[i].value, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
	return true;
}
srch_BaseMapper.prototype.Clear = function()
{
	this.values = new Array();
}
srch_BaseMapper.prototype.Validate = function(tags)
{
	var info = this.obj.GetTagInfo(this.tagname);
	var bantags = info.GetBanTags();
	var occurrenceNumber = info.GetOccurrenceNumber();	
	var shorttag = GETSTIBYID(this.tagname).hint
	if (bantags && bantags != null && bantags.length > 0)
	{
		if (bantags[0] != "ALL") 
		{
			var iserror = false;
			var shorttags = "";
			for(var i=0, ic=bantags.length; i < ic; i++)
			{
				var shortname = GETSTIBYID(bantags[i]).hint;
				if (shortname)
				{
					if (shorttags != "") shorttags +=", ";
					shorttags += shortname;
				}
				if (tags.Get(bantags[i]) != null)
					iserror = true;
			}

			if (iserror == true) 
			{
				alert("Tag '"+shorttag+"' cannot be used together with tag(s) '"+shorttags+"'");
				return false;
			}
		}
		else
		{
			for(var i=0, ic=tags.getCount(); i<ic; i++ )
				if (tags.GetByIndex(i) != this.tagname)
				{
					alert("Tag '"+shorttag+"' cannot be used together with others tags");
					return false;	
				}
		}
	}
	if (occurrenceNumber && occurrenceNumber != null)
	{
		if (this.values.length > occurrenceNumber)
		{
			alert("Tag '"+shorttag+"' cannot appear more than "+occurrenceNumber+" times in search string!");
			return false;
		}
	}
	return this.InternalValidate(tags);
}
srch_BaseMapper.prototype.InternalValidate = function(tags)
{
	return true;
}
srch_BaseMapper.prototype.ContainInternalCommand = function()
{
	return this.containinternalcommand;
}
srch_BaseMapper.prototype.InternalCommand = function()
{
	return true;
}
srch_BaseMapper.prototype.CheckParams = function(params)
{
	return params;
}
srch_BaseMapper.prototype.ReformatXmlParams = function(tag)
{
	return;
}
//----------------  BaseMapper --------------//

//---------------- ResolveBaseMapper --------------//
function srch_ResolveBaseMapper(tagname, obj, containinternalcommand, islonghint)
{
	this.base = srch_BaseMapper;
	this.base(tagname, obj, containinternalcommand, islonghint);
}
srch_ResolveBaseMapper.prototype = new srch_BaseMapper;
srch_ResolveBaseMapper.prototype.constructor = srch_ResolveBaseMapper;
srch_ResolveBaseMapper.prototype.AddValue = function(value, needresolve)
{
	if (str_IsStringEmpty(value))
		return false;
	needresolve = needresolve == false ? false : true;
	for(var j=0, jc=this.values.length; j < jc; j++)
		if (this.values[j].value.toLowerCase() == value.toLowerCase() && this.values[j].needresolve == needresolve)
			return false;
			
	var obj = new Object();
	obj.value = value;
	obj.needresolve = needresolve;
	this.values.push(obj);
	if (needresolve)
	this.obj.resolver.AddToResolution(this.tagname, value);
	return true;
}
srch_ResolveBaseMapper.prototype.Processing = function()
{
	if (this.values && this.values.length > 0)
		{
		var infos = this.obj.resolver.GetResolutions(this.tagname);
		if (infos != null)
		{
			for(var i=0, ic=infos.length; i<ic; i++)
			{
				var info = infos[i];
				if (info != null)
					for (var j=0; j < info.GetCount(); j++)
						this.AddToParent(info.GetByIndex(j), info, info.GetToken());
			}
			}
		}
	return true;
}
srch_ResolveBaseMapper.prototype.AddToParent = function(item, info, token)
{
	var val = item.getValue("ID");
	if (val != null)
	{
		this.obj.AddFilter(this.tagname, val, token, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
//---------------- ResolveBaseMapper --------------//

//---------------- TextMapper --------------//
function srch_TextMapper(tagname, obj, islonghint)
{
	this.base = srch_BaseMapper;
	this.base(tagname, obj, false, islonghint);
}
srch_TextMapper.prototype = new srch_BaseMapper;
srch_TextMapper.prototype.constructor = srch_TextMapper;
//---------------- TextMapper --------------//

//---------------- PeriodMapper --------------//
function srch_PeriodMapper(tagname, obj, islonghint)
{
	this.base = srch_BaseMapper;
	this.base(tagname, obj, false, islonghint);
}
srch_PeriodMapper.prototype = new srch_BaseMapper;
srch_PeriodMapper.prototype.constructor = srch_PeriodMapper;
srch_PeriodMapper.prototype.InternalValidate = function(tags)
{
	for(var j=0, jc=this.values.length; j<jc; j++)
	{
		var isincorrect = true;
		var val = this.values[j].value.toLowerCase();
		if (srch_getPeriodDisplayValueByValue(val) == val)
		{
			alert("Incorrect period value: \""+this.values[j].value+"\"!");
			return false;
		}
	}
	return true;
}
//---------------- PeriodMapper --------------//

//---------------- SymbolMapper --------------//
function srch_SymbolMapper(tagname, obj, fullname, islonghint)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, false, islonghint);
	this.fullname = fullname;
}
srch_SymbolMapper.prototype = new srch_ResolveBaseMapper;
srch_SymbolMapper.prototype.constructor = srch_SymbolMapper;
srch_SymbolMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = token;
	var val = item.getValue(ResolverSymbolItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		var addparams = new Array();
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_RIC,item.getValue(ResolverSymbolItem.PN_RIC));
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_CUSIP,item.getValue(ResolverSymbolItem.PN_CUSIP));
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_SECOMPID,item.getValue(ResolverSymbolItem.PN_SECOMPID));
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_GVKEY,item.getValue(ResolverSymbolItem.PN_GVKEY));
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_SYMBOL,item.getValue(ResolverSymbolItem.PN_SYMBOL));
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_COMPANYNAME,item.getValue(ResolverSymbolItem.PN_NAME));
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname);
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_AN_SYMBOLPRIMARYONLY,pref_GetShowPrimarySymbols()?-1:0);
		if (this.fullname == true)
		{
			var name = item.getValue(ResolverSymbolItem.PN_NAME);
			if (!str_IsStringEmpty(name))
				dispval = name;
		}
		else
		{
			if (info)
			{
				var symbol = item.getValue(ResolverSymbolItem.PN_SYMBOL);
				if (!str_IsStringEmpty(symbol))
					dispval = symbol;
				
				var nsc = item.getValue(ResolverSymbolItem.PN_NEEDSETCOUNTRY);
		
				if (info.HaveAmbiguity() || token.indexOf("=")>-1 || (!str_IsStringEmpty(nsc) && nsc.toLowerCase() == "true"))
				{
					var countr = item.getValue(ResolverSymbolItem.PN_COUNTRY);
					if (!str_IsStringEmpty(countr))
						dispval += "=" +countr;	
				}
			}
		}
		
		this.obj.AddFilter(this.tagname, val, dispval, false, addparams);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
srch_SymbolMapper.prototype.CheckParams = function(params)
{
	if (params)
	{
		for (var i=0; i<params.length; i++)
			if (params[i].nodename == SRCH_AN_SYMBOLPRIMARYONLY)
			{
				params[i] = new srch_XmlSearchExParam(SRCH_AN_SYMBOLPRIMARYONLY,pref_GetShowPrimarySymbols()?-1:0);
				return params;
			}
	}
	else
		params = [];
	params[params.length] = new srch_XmlSearchExParam(SRCH_AN_SYMBOLPRIMARYONLY,pref_GetShowPrimarySymbols()?-1:0);
	return params;
}
srch_SymbolMapper.prototype.ReformatXmlParams = function(tag)
{
	this.obj.SetTagPropertyValue(tag, SRCH_AN_SYMBOLPRIMARYONLY, pref_GetShowPrimarySymbols()?-1:0);	
}
//---------------- SymbolMapper --------------//

//---------------- IndustryMapper --------------//
function srch_IndustryMapper(tagname, obj, islonghint)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, false, islonghint);
}
srch_IndustryMapper.prototype = new srch_ResolveBaseMapper;
srch_IndustryMapper.prototype.constructor = srch_IndustryMapper;
srch_IndustryMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = token;
	var val = item.getValue(ResolverIndustryItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		var shortname = item.getValue(ResolverIndustryItem.PN_SHORTNAME);
		if (shortname != null)
			dispval = shortname;
		this.obj.AddFilter(this.tagname, val, dispval, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
//---------------- IndustryMapper --------------//

//---------------- GeographyMapper --------------//
function srch_GeographyMapper(tagname, obj, islonghint)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, false, islonghint);
}
srch_GeographyMapper.prototype = new srch_ResolveBaseMapper;
srch_GeographyMapper.prototype.constructor = srch_GeographyMapper;
srch_GeographyMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = item.getValue(ResolverGeographyItem.PN_NAME);
	var val = item.getValue(ResolverGeographyItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		this.obj.AddFilter(this.tagname, val, dispval, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
//---------------- GeographyMapper --------------//

//---------------- ProviderMapper --------------//
function srch_ProviderMapper(tagname, obj, islonghint)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, false, islonghint);
}
srch_ProviderMapper.prototype = new srch_ResolveBaseMapper;
srch_ProviderMapper.prototype.constructor = srch_ProviderMapper;
srch_ProviderMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = item.getValue(LookingForwardItem.PN_NAME);
	var val = item.getValue(LookingForwardItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		this.obj.AddFilter(this.tagname, val, dispval, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
//---------------- ProviderMapper --------------//
//---------------- TopicMapper --------------//
function srch_TopicMapper(tagname, obj, islonghint)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, false, islonghint);
	this.advpids = [PID_FOLDERS,PID_FEEDS];
}
srch_TopicMapper.prototype = new srch_ResolveBaseMapper;
srch_TopicMapper.prototype.constructor = srch_TopicMapper;
srch_TopicMapper.prototype.GetPagesIDs = function(isAdv)
{
	return isAdv ? this.advpids : this.pids;
}
srch_TopicMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = item.getValue(LookingForwardItem.PN_NAME);
	var val = item.getValue(LookingForwardItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		this.obj.AddFilter(this.tagname, val, dispval, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
//---------------- TopicMapper --------------//
//---------------- BrokerMapper --------------//
function srch_BrokerMapper(tagname, obj, islonghint)
{
	this.base = srch_TopicMapper;
	this.base(tagname, obj, islonghint);
}
srch_BrokerMapper.prototype = new srch_TopicMapper;
srch_BrokerMapper.prototype.constructor = srch_BrokerMapper;
//---------------- BrokerMapper --------------//

//---------------- SavedSearchMapper --------------//
function srch_SavedSearchMapper(tagname, obj, islonghint)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, true, islonghint);
	this.srch_id = null;
	this.pid = null;
	this.cntid = null;
	this.cntname = null;
	this.cnttype = null;
}
srch_SavedSearchMapper.prototype = new srch_ResolveBaseMapper;
srch_SavedSearchMapper.prototype.constructor = srch_SavedSearchMapper;
srch_SavedSearchMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = token;
	var val = item.getValue(SearchItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		this.srch_id = val;
		this.pid = nav_getPIDbySLID(item.getValue(SearchItem.PN_SEARCHLOCATIONIDENTIFIER));
		this.cntid = item.getValue(SearchItem.PN_CONTAINERID);
		this.cntname = item.getValue(SearchItem.PN_CONTAINERNAME);
		this.cnttype = item.getValue(SearchItem.PN_CONTAINERTYPE);
		var name = item.getValue(SearchItem.PN_TITLE);
		if (name != null)
			dispval = name;
		this.obj.AddFilter(this.tagname, val, dispval, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
srch_SavedSearchMapper.prototype.Clear = function()
{
	this.values = new Array();
	this.srch_id = null;
	this.pid = null;
	this.cntid = null;
	this.cntname = null;
	this.cnttype = null;
}
srch_SavedSearchMapper.prototype.InternalCommand = function()
{
	if (this.srch_id)
	{
		srch_RunSearch(this.srch_id);
		return false;
	}
	return true;
}
srch_SavedSearchMapper.prototype.ReformatXmlParams = function(tag)
{
	this.srch_id = this.obj.GetTagPropertyValue(tag, SRCH_TP_VALUE);
}

//---------------- SavedSearchMapper --------------//

//---------------- ContainersMapper --------------//
function srch_ContainersMapper(tagname, obj, islonghint, pid)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, true, islonghint);
	this.pid = pid;
}
srch_ContainersMapper.prototype = new srch_ResolveBaseMapper;
srch_ContainersMapper.prototype.constructor = srch_ContainersMapper;
srch_ContainersMapper.prototype.GetPagesIDs = function(isAdv)
{
	return [this.pid];
}
srch_ContainersMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = item.getValue(ContainerItem.PN_TITLE);
	var val = item.getValue(ContainerItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		this.obj.AddFilter(this.tagname, val, dispval, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
srch_ContainersMapper.prototype.InternalCommand = function()
{
	if (!str_IsStringEmpty(nav_currentNavInfo.GetParameter(P_BRANDFILTER)))
		nav_ChangePageParams(P_BRANDFILTER, false);
	if (nav_currentNavInfo.GetPageID() != this.pid)
		nav_NavigateTo(this.pid);
	return true;
}
//---------------- ContainersMapper --------------//

//---------------- CategoryMapper --------------//
function srch_CategoryMapper(tagname, obj, islonghint, pid, applyoncontainer)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, true, islonghint);
	this.pid = pid;
	this.applyoncontainer = applyoncontainer == false ? false : true;
}
srch_CategoryMapper.prototype = new srch_ResolveBaseMapper;
srch_CategoryMapper.prototype.constructor = srch_CategoryMapper;
srch_CategoryMapper.prototype.GetPagesIDs = function(isAdv)
{
	return [this.pid];
}
srch_CategoryMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval, val;
	switch (this.tagname)
	{
		case SRCH_TN_FEEDCATEGORY:
			dispval = item.getValue(LookingForwardItem.PN_NAME);
			val = item.getValue(LookingForwardItem.PN_ID);
			break;
		case SRCH_TN_BLOGCATEGORY:
			dispval = item.getValue(CategoryItem.PN_CATEGORYNAME);
			val = item.getValue(CategoryItem.PN_ID);
			break;
	}
	if (!str_IsStringEmpty(val))
	{
		this.obj.AddFilter(this.tagname, val, dispval, false, [new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)]);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
srch_CategoryMapper.prototype.InternalCommand = function()
{
	if (!this.applyoncontainer)
		nav_ChangePageParams(P_CONTAINER_ID, false);
	
	var pageloc = nav_currentNavInfo.GetPageLocation();
	if (pageloc == PID_PLMANAGEFEEDS)
	{
		if (!str_IsStringEmpty(nav_currentNavInfo.GetParameter(P_CONTAINER_SCOPE)))
			nav_ChangePageParams(P_CONTAINER_SCOPE);
	}
	if (nav_currentNavInfo.GetPageID() != this.pid)
		nav_NavigateTo(this.pid);
	return true;
}
//---------------- CategoryMapper --------------//

//---------------- PortfolioMapper --------------//
function srch_PortfolioMapper(tagname, obj, islonghint)
{
	this.base = srch_ResolveBaseMapper;
	this.base(tagname, obj, false, islonghint);
}
srch_PortfolioMapper.prototype = new srch_ResolveBaseMapper;
srch_PortfolioMapper.prototype.constructor = srch_PortfolioMapper;
srch_PortfolioMapper.prototype.AddToParent = function(item, info, token)
{
	var dispval = item.getValue(CoverageItem.PN_NAME);
	var val = item.getValue(CoverageItem.PN_ID);
	if (!str_IsStringEmpty(val))
	{
		var addparams = [];
		addparams[addparams.length]  = new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,this.dispname)
		addparams[addparams.length] = new srch_XmlSearchExParam(SRCH_AN_SYMBOLPRIMARYONLY,pref_GetShowPrimarySymbols()?-1:0);
		this.obj.AddFilter(this.tagname, val, dispval, false, addparams);
		this.obj.AddResolvingItemInfo(this.tagname,val,item);
	}
}
srch_PortfolioMapper.prototype.CheckParams = function(params)
{
	if (params)
	{
		for (var i=0; i<params.length; i++)
			if (params[i].nodename == SRCH_AN_SYMBOLPRIMARYONLY)
			{
				params[i] = new srch_XmlSearchExParam(SRCH_AN_SYMBOLPRIMARYONLY,pref_GetShowPrimarySymbols()?-1:0);
				return params;
			}
	}
	else
		params = [];
	params[params.length] = new srch_XmlSearchExParam(SRCH_AN_SYMBOLPRIMARYONLY,pref_GetShowPrimarySymbols()?-1:0);
	return params;
}
srch_PortfolioMapper.prototype.ReformatXmlParams = function(tag)
{
	this.obj.SetTagPropertyValue(tag, SRCH_AN_SYMBOLPRIMARYONLY, pref_GetShowPrimarySymbols()?-1:0);	
}
//---------------- PortfolioMapper --------------//

//------------------------------------


//------------------------------------
function srch_TagInfo(bantags, occurrenceNumber)
{
	this.bantags = bantags;
	this.occurrenceNumber = occurrenceNumber;
}
srch_TagInfo.prototype.GetBanTags = function()
{
	if (this.bantags)
		return this.bantags;
	return null
}
srch_TagInfo.prototype.GetOccurrenceNumber = function()
{
	if (this.occurrenceNumber)
		return this.occurrenceNumber;
	return null
}
//------------------------------------

//------------------------------------
function srch_MyRecentSearhesObject(id)
{
	this.init(id);
}
srch_MyRecentSearhesObject.prototype.init = function(name)
{
	this.datasetname = name;	
}
srch_MyRecentSearhesObject.prototype.GetItem=function(name)
{
	var item = data_createEmptyItem(MyRecentSearchItem);
	item.SetNodeValue(MyRecentSearchItem.PN_ID, escape(name));
	item.SetNodeValue(MyRecentSearchItem.PN_TITLE, name);
	return item;
}
srch_MyRecentSearhesObject.prototype.Add = function(name)
{	
	if (!this.isExist(name))
	{
		var ds = data_GetDataset(this.datasetname);
		if (ds != null)
			ds.InsertXmlItem(this.GetItem(name).GetXml(), 0);
		var thisVar = this;
		new httpcmd_AddMyRecentSearches(name, function(){thisVar.OnError(thisVar, name)});
	}
}
srch_MyRecentSearhesObject.prototype.OnError=function(thisVar, name)
{
	var ds = data_GetDataset(thisVar.datasetname);
	if (ds != null)
		ds.DeleteXmlItem(this.GetItem(name).GetXml());
}
srch_MyRecentSearhesObject.prototype.isExist=function(name)
{
	var ds = data_GetDataset(this.datasetname);
	if (ds != null)
		return ds.Get(escape(name)) != null;
	return false;
}
//------------------------------------

//---------------------------------- Connectors for Advanced Search ------------------------------------/

//-------------------Base Connector------------------------

//abstract class
function srch_BaseConnector(obj)
{
	if (typeof(obj) != "object")
		return;
	this.obj = obj;
	var thisObj = this;
	obj.attachEvent("onload", function(curObj){if (curObj == thisObj.obj) thisObj.OnLoad(thisObj)});
	obj.attachEvent("onclear", function(curObj){if (curObj == thisObj.obj) thisObj.OnClear(thisObj)});
	obj.attachEvent("ondosearch", function(curObj){if (curObj == thisObj.obj) thisObj.OnDoSearch(thisObj)});		
}
srch_BaseConnector.prototype.AddTag=function(name, value, params, occurrence)
{
	if (this.obj && this.obj.AddTag)
		this.obj.AddTag(name, value, params, occurrence, true);
}
srch_BaseConnector.prototype.GetTagPropertyValue=function(tag, propertyname)
{
	if (this.obj && this.obj.xmlSearch && this.obj.GetTagPropertyValue)
		return this.obj.GetTagPropertyValue(tag, propertyname);
}
srch_BaseConnector.prototype.OnLoad=function(thisObj)
{
	thisObj.Load();
}
srch_BaseConnector.prototype.OnClear=function(thisObj)
{
	thisObj.Clear();
}
srch_BaseConnector.prototype.OnDoSearch=function(thisObj)
{
	thisObj.DoSearch();
}
srch_BaseConnector.prototype.Load=function(){}//abstract method
srch_BaseConnector.prototype.Clear=function(){}//abstract method
srch_BaseConnector.prototype.DoSearch=function(){}//abstract method
//-------------------Base Connector------------------------

//-----------------InputSearch Connector-------------------

function srch_InputSearchConnector(obj)
{
	this.base = srch_BaseConnector;
	this.base(obj);
}
srch_InputSearchConnector.prototype = new srch_BaseConnector;
srch_InputSearchConnector.prototype.constructor = srch_InputSearchConnector;
srch_InputSearchConnector.prototype.DoSearch=function()
{
	/*if (srch_inpGetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,SRCH_TN_SAVEDSEARCH))) != null)
		return;*/
	var searchname = this.obj.GetSearchName();
	var idsearch = this.obj.GetSearchID();
	if (str_IsStringEmpty(searchname))
	{
		searchname = "Unsaved";
		idsearch = "0";
	}
	srch_inpClearProcess();
	srch_inpAddFilter(SRCH_TN_SAVEDSEARCH, idsearch, searchname, false);
	srch_advSetNavInfo(nav_currentNavInfo.GetPageID(),nav_currentNavInfo.GetContainerLocation())
	var queryString = srch_inpPrepareSearchParam();
	if (idsearch != 0)
		if (srch_mySearhesCol != null && !str_IsStringEmpty(queryString)) srch_mySearhesCol.Add(queryString);	
		
}
srch_InputSearchConnector.prototype.Clear=function()
{
	//this.GetContainers();
}
srch_InputSearchConnector.prototype.Load=function()
{
	//this.GetContainers();
}
//-----------------InputSearch Connector-------------------

//***********************Helper class and functions **********************//

//*******************************SearchEventer*****************************//
//------------- class  --------
function srch_SearchEventer()
{
	this.base = cmn_EventContainer;
	this.base();
	this.state = SRCH_SES_NONE;
}
srch_SearchEventer.prototype = new cmn_EventContainer;
srch_SearchEventer.prototype.constructor = srch_SearchEventer;
srch_SearchEventer.prototype.SetState = function(val, isadvancedpane)
{
	if (str_IsStringEmpty(val))
		this.state = SRCH_SES_NONE;
	else if (isadvancedpane != true)
		this.state = srch_inpGetState();
	else
		this.state = SRCH_SES_ADVANCED;
	this.fireEvent("onstatechange",this.state);
}
srch_SearchEventer.prototype.GetState = function()
{
	return this.state;
}
//------------- class  --------

//------------- static functions ---------------
function  srch_seSetState(value, isadvancedpane)
{
	srch_seEventer.SetState(value, isadvancedpane);
}
function  srch_seGetState()
{
	return srch_seEventer.GetState();
}
function  srch_seAttachEvent(evt, func)
{
	srch_seEventer.attachEvent(evt, func);
}
function srch_CurrentSearchPage()
{
	return srch_PagesCollection.CurrentSearchPage();
}
function srch_IsClusterSearch()
{
	return srch_PagesCollection.IsClusterSearch();
}
function  srch_advAddTag(name, value, params, occnum, fireevent)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		ac.AddTag(name, value, params, occnum, fireevent);
}
function  srch_advAddTagFromLookup(item, name)
{
	var primary = srch_getFromCheckBox("adv_search_symbol_primary");
	var params = new Array();
	params.push(new srch_XSEP(SRCH_TP_DISPLAYVALUE, item.getValue("Name")));
	params.push(new srch_XSEP(SRCH_AN_SYMBOLPRIMARYONLY,primary));
	srch_advAddTag(name, item.GetItemID(), params, null, true);
}
function srch_ShowWarningMessage()
{
	if (!str_IsStringEmpty(srch_WarningMessage))
		alert(srch_WarningMessage);
	srch_WarningMessage = "";
}
function  srch_advGetTag(params, isOR)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (!ac) return null;
	return ac.GetTag(params, isOR);
}
function  srch_advGetTags(params, isOR)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetTags(params, isOR);
}
function  srch_advDeleteTag(name, value, fireevent)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.DeleteTag(name, value, fireevent);
}
function  srch_advDeleteTags(name, tagscope, fireevent)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.DeleteTags(name, tagscope, fireevent);
}
function  srch_advDeleteAllTag(fireevent)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		ac.DeleteAllTag(fireevent);
}
function  srch_advAttachEvent(evt, func)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.attachEvent(evt, func);
}
function  srch_advGetHTML()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetHTML();
}
function  srch_advGetSearchID()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetSearchID();
	return null;
}
function  srch_advGetDecimalSearchID()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetDecimalSearchID();
	return 0;
}
function  srch_advIsDefaultSearch()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.IsDefaultSearch();
	return false;
}
function  srch_advGetSearchName()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetSearchName();
}
function  srch_advGetSearchAlertId()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetSearchAlertId();
	return null;
}
function  srch_advGetDecimalAlertID()
{
	var alertId = srch_advGetSearchAlertId();
	if (str_IsStringEmpty(alertId))
		return 0;
	return parseInt(alertId,10);
}
function  srch_advSetSearchAlertId(id)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.SetSearchAlertId(id);
}
function  srch_advSetSearchInfo(id,name,alertid)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
	{
		ac.SetSearchID(id);
		ac.SetSearchName(name);
		if (alertid)
			ac.SetSearchAlertId(alertid);		
	}
}
function  srch_advGetPID()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (!ac) return null;
	return ac.GetPID();
}
function  srch_advGetCID()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetCID();
}
function  srch_advSetCID(cid)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.SetCID(cid);
}
function  srch_advSetNavInfo(pid, cid)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (!ac) return;
	if (!str_IsStringEmpty(pid))
		ac.SetPID(pid);
	if (cid != null)
		ac.SetCID(cid);
}
function  srch_advSetXml(xml,fireevents)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.SetXml(xml,fireevents);
}
function  srch_advSetTMCProfileName(name)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		ac.SetTMCProfileName(name);
}
function  srch_advGetXml()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.GetXml();
}
function  srch_advClear(fireevents)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (!ac) return true;
	if (!srch_checkCurrentAdvancedSearchState())
		return false;
	ac.Clear(fireevents);
	return true;
}
function  srch_advLoad(loaddatafrominput)
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
	{
		ac.Load();
		ac.LoadDataFromInputSearch(loaddatafrominput);
	}	
}
function  srch_advIsEmpty()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (!ac) return true;
	return ac.IsEmpty();
}
function  srch_advDoSearch(skipRun)
{
	// application usage logging - ActionNewSearch
	if (usageLogger) {
		usageLogger.Log(USG_EVT_ACTIONNEWSEARCH);
	}
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
		return ac.DoSearch(skipRun);
}
function srch_advHasErrors()
{
	var ac = srch_advGetCurrentAdvancedSearch();
	if (!ac) return false;
	return ac.HasErrors() && !ac.CustomErrorMessage();
}
//------------- static functions ---------------

function  srch_inpGetCurrentInputSearch()
{
	return srch_PagesCollection.CurrentSearchPage().InputSearchControl();
}
function  srch_advGetCurrentAdvancedSearch()
{
	return srch_PagesCollection.CurrentSearchPage().AdvancedSearchControl();
}
function  srch_inpAddFilter(name, value, dispvalue, needvalidate, params)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.AddFilter(name, value, dispvalue, needvalidate, params);
	return false;
}
function  srch_inpLoadQueryString(s, callback)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (!ic)
		return;
	if (s == null)
	{
		var query = ic.GetQueryString();
		s = srch_inpGetInputValue();
		if (str_Trim(s) == query)
		{
			var tag = srch_inpGetTag(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME, SRCH_TN_SAVEDSEARCH)))
			if (tag && parseInt(ic.GetTagPropertyValue(tag, SRCH_TP_VALUE)) == 0)
				return srch_ExecuteAdvSearch();
		}
	}
	if (!srch_checkCurrentAdvancedSearchState())
	{
		srch_inpSetInputValue(ic.GetQueryString());
		return;
	}
	return ic.LoadQueryString(s, callback ? callback : srch_inpDoSearch);
}
function  srch_inpLoadQueryStringEx(s)
{
	srch_inpSetInputValue(s);
	srch_inpLoadQueryString();
}
function  srch_inpSave()
{
	Utils.MonitoringHelper.SetMonitoringInfo(MA_SaveInputSearch);
	var s = srch_inpGetInputValue();
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		ic.LoadQueryString(s, srch_saveInputSearch);
	return false;
}
function  srch_inpLoadTaggingString(callbackcomplete, callbackcanceled)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (!ic) return;
	var s = srch_inpGetInputValue(ic);
	if (str_IsStringEmpty(s))
	{
		alert("Please enter tag(s).");
		return false;
	}
	else
		ic.LoadQueryString(s, callbackcomplete, callbackcanceled);
	return true;
}
function  srch_inpSetInputValue(val, obj)
{
	var inputcontrol = obj ? obj : srch_inpGetCurrentInputSearch();
	if (inputcontrol)
	{
		if (!str_IsStringEmpty(inputcontrol.inputname))
			inputcontrol.SetInputValue(val);
		else
			SiteLayout.InputSearchControlBase.SetInputValue(val);
	}
}
function  srch_inpAddToInputValue(val, obj)
{
	var inputcontrol = obj ? obj : srch_inpGetCurrentInputSearch();
	if (inputcontrol)
	{
		if (!str_IsStringEmpty(inputcontrol.inputname))
			inputcontrol.AppendValueToInput(val);
		else
			SiteLayout.InputSearchControlBase.AppendValueToInput(val);
	}
}
function  srch_inpGetInputValue(obj)
{
	var inputcontrol = obj ? obj : srch_inpGetCurrentInputSearch();
	var val = null;
	if (inputcontrol)
	{
		if (!str_IsStringEmpty(inputcontrol.inputname))
			val = inputcontrol.GetInputValue();
		else
			val = SiteLayout.InputSearchControlBase.GetInputValue();
	}
	return val;
}
function  srch_GetQueryString()
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.GetQueryString();
}
function  srch_inpAddToInputValueEx(name, dispval)
{
	var stinfo = GETSTIBYID(name);
	if (stinfo != null)
	{
		var ic = srch_inpGetCurrentInputSearch();
		if (ic)
		{
			dispvalprep = ic.PrepareDisplayValue(dispval);
			srch_inpAddToInputValue(stinfo.hint+":"+dispvalprep);
		}
	}
}
function  srch_inpAddTagFromLookup(item, name)
{
	srch_inpAddFilter(name, item.GetItemID(), item.getValue("Name"), true);
}
function  srch_inpClearProcess(fireevent)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.ClearProcess(fireevent);
}
function  srch_inpIsEmpty()
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.IsEmpty();
}
function  srch_inpGetTag(params, isOR)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.GetTag(params, isOR);
}
function  srch_inpGetTags(params, isOR)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.GetTags(params, isOR);
}
function  srch_inpGetState()
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.GetState();
}
function  srch_inpGetTagInfo(name)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.GetTagInfo(name);
}
function  srch_inpDeleteFilter(name, value)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.DeleteFilter(name, value);
}
function  srch_inpDeleteFilters(name)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.DeleteFilters(name);
}
function  srch_inpSetXml(xml)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.SetXml(xml);
}
function  srch_inpGetXml()
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.GetXml();
}
function  srch_inpPrepareSearchParam()
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
	{
		srch_seSetState(ic.GetState(),false);
		return ic.PrepareSearchParam();	
	}	
}
function  srch_inpDoSearch(changenav)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.DoSearch(changenav);
}
function  srch_inpValidateAndSearch(changenav)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.ValidateSearchXml(function(){srch_inpDoSearch(false)});
}
function  srch_inpDoSearchByFilter(name, value, dispvalue, needclear, changenav, params)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (!ic) return;
	if (needclear == true)
		ic.ClearProcess();
	else
		needclear = false
	if (ic.AddFilter(name, value, dispvalue, !needclear, params) == true)
		srch_inpDoSearch(changenav);
}
function  srch_inpGetClientXmlInterface()
{
	return srch_inpGetCurrentInputSearch();
}
function  srch_inpGetAvailableTagsHtml(types, bantags)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.GetAvailableTagsHtml(types, bantags);
}
function  srch_inpOnNavigationsParamsChange(isFireEvent,isNavChange)
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.OnNavigationsParamsChange(isFireEvent,isNavChange);
}

//------------- static functions ---------------

//*******************************InputSearch*****************************//

//***************************** Other functions ************************//
//search script
function srch_DoSearch(params, isAdvancedPane, changenav, skipRun)
{	
	srch_CurrentSearchPage().DoSearch(params, isAdvancedPane, changenav, skipRun);
}

function srch_ClearSearchResults(fltr)
{
	if (!srch_checkCurrentAdvancedSearchState()) return;
	Utils.MonitoringHelper.SetMonitoringInfo(MA_ClearSearchResults);
	srch_CurrentSearchPage().ClearSearchResults(fltr);
}

function srch_AddTagToXML(name,getvalue,getattributes,occurrence,controlid)
{
	var value = null;
	var attributes = null;
	if (getvalue != null && typeof(getvalue)=="function")
	{
		value = getvalue(controlid);
		if (value == null || value == "")
			alert("Please enter search criteria");
	}
	if (getattributes != null && typeof(getattributes)=="function")
		attributes = getattributes();
	srch_advAddTag(name,value,attributes,occurrence);
	srch_ShowWarningMessage();
}

function srch_AddTagsToXML(name,getvalue,getattributes,occurrence,controlid)
{
	var values = null;
	var attributes = null;
	if (getvalue != null && typeof(getvalue)=="function")
	{
		values = getvalue(controlid);
		if (values == null || values.length == 0)
		{
			alert("Please enter search criteria");
			return;
		}
	}
	if (getattributes != null && typeof(getattributes)=="function")
		attributes = getattributes();

	for(i=0, ic=values.length; i<ic; i++)
	{
		var new_attributes = attributes.slice(0);
		new_attributes.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYVALUE,values[i].text));
		srch_advAddTag(name,values[i].value,new_attributes,occurrence, i==values.length-1);
	}
	srch_ShowWarningMessage();
}
function srch_split(val)
{
	if (val == null) return str;
	var strs = val.match(/([^,]+)/ig);
	var results = new Array();
	for(i=0,ic=strs.length;i<ic;i++)
		results.push(strs[i].replace(/\"/ig,""));
	return results;
}
function srch_gFDDL(id)
{
	var v = srch_getFromDropDownList(id);
	return [new select_Item(v, v)];
}
function srch_getFromDropDownList(id)
{
	if (id == null) return null;
	var obj = gettpDropDownById(id);
	if (obj != null && typeof(obj.GetValue) != "undefined")
	{
		var value = obj.GetValue();
		return value;
	}
	return null;
}
function srch_sDDLI(id,ind,fireevent)
{
	return srch_setDropDownListIndex(id,ind,fireevent)
}
function srch_setDropDownListIndex(id,ind,fireevent)
{
	if (id == null) return;
	if (ind == null) ind = 0;
	if (fireevent != false) fireevent = true;
	var obj = gettpDropDownById(id);
	if (obj != null && typeof(obj.Select) != "undefined")
		obj.Select(ind,fireevent);
}
function srch_sDDLV(id,value,fireevent)
{
	var v = value;
	if (value instanceof Array)
	{
		if (value.length > 0)
			v = value[0];
		else
			v = "";
	}
	return srch_setDropDownListValue(id,v,fireevent)
}
function srch_setDropDownListValue(id,value,fireevent)
{
	if (id == null) return;
	if (fireevent != false) fireevent = true;
	var obj = gettpDropDownById(id);
	if (obj != null && typeof(obj.SetValue) != "undefined")
		obj.SetValue(value,fireevent);
}
function srch_getFromCheckBox(id)
{
	if (id == null) return null;
	var obj = document.getElementById(id);
	if (obj != null)
		return obj.checked ? "-1" : "0";
	return null;
}

function srch_ondatasetregistered(ds)
{
	if (!nav_IsNavigationEnabled()) return;
	var pid = nav_currentNavInfo.GetPageID();
	if (pid != PID_MANAGESEARCHES) 
		return;
	if (ds && !ds.HasSelection())
	{
		var first = ds.GetByIndex(0);
		if (first && ds.name)
		{
			var func = "data_MarkItemSelected('~0', '~1', true, false)".format(ds.name, first.GetItemID());
			setTimeout(func , 0);
		}
	}
}
function srch_onitemselect(xItem)
{
	var cntid = xItem.GetNodeValue(SearchItem.PN_CONTAINERID);
	var params = new Array();
	new httpcmd_GetSearchXml(xItem.GetNodeValue(SearchItem.PN_ID), srch_GetSearchXml_callback);
}

function srch_GetSearchXml_callback(bodyXml,pid,params)
{
	if (bodyXml == null) return;
	srch_advSetXml(bodyXml);
}

function srch_RunSearch(srch_id)
{	
	if (srch_id == null || !srch_checkCurrentAdvancedSearchState()) return;	
	Utils.MonitoringHelper.SetMonitoringInfo(MA_RunSavedSearch, null, 1);
	new httpcmd_GetSearchXml(srch_id, srch_GetSearchXmlAndRun_callback);
}

function srch_GetSearchXmlAndRun_callback(bodyXml)
{
	if (bodyXml == null) return;
	srch_SetCurrentSearchPage(null,false);
	srch_ExecuteAdvSearch(bodyXml);			
}

function srch_LoadSearch(srch_id)
{	
	if (srch_id == null || !srch_checkCurrentAdvancedSearchState()) return;
	Utils.MonitoringHelper.SetMonitoringInfo(MA_EditSearch);
	new httpcmd_GetSearchXml(srch_id, srch_LoadSearch_callback);
}

function srch_LoadSearch_callback(bodyXml)
{
	if (bodyXml == null) return;
	srch_SetCurrentSearchPage(null,false);
	srch_ExecuteAdvSearch(bodyXml,true);
	srch_startAdvancedSearchMonitoring();
}

function srch_ChangeLocation()
{
	var cid = nav_currentNavInfo.GetContainerLocation();
	var pid = nav_currentNavInfo.GetPageID();

	if (pid != PID_TRENDS) {
		var newpid = srch_advGetPID();
		var newcid = srch_GetSingleContainerFromSearch(newpid);
	}
	
	if (!newcid)
		newcid = srch_advGetCID();	
	if (!str_IsStringEmpty(newpid) && (newcid != cid || newpid != pid) )
		nav_ChangeMainNavigationParamsEx(newpid, null, url_MakeParam(P_CONTAINER_ID, newcid));
}

function srch_saveInputSearch()
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
	{
		var skippedtags = new Array();
		skippedtags[SRCH_TN_PERIOD] = true;
		ic.OnNavigationsParamsChange(false,true,skippedtags,true);
	}
	srch_OpenAdvancedSearchPane(true);
	srch_advGetCurrentAdvancedSearch()
	srch_inpClearProcess(false);
	srch_CheckContainerInNavigation();
}

function srch_ExecuteAdvSearch(xml,skipRun)
{
	SkipAdvancedSearchConfirmation = true;
	var ac = srch_advGetCurrentAdvancedSearch();
	if (ac)
	{
		if (xml)
			srch_advSetXml(xml);
		if (srch_advIsEmpty())
		{
			alert("Please choose search criteria");
			return false;
		}
		if (srch_advGetDecimalSearchID() > 0)
			Utils.Timer.SetTimeout(function() { nav_RefreshWorkspaceModules(KEY_SEARCHES); }, 1000);
		srch_ChangeLocation();
		srch_advDoSearch(skipRun);
	}
	SkipAdvancedSearchConfirmation = false;
}

function srch_SaveSearch(Name,Parameters, alertObj, onsavesearchcomplete)
{
	if (AuthorizationNeeded()) return;

	var srch_id = srch_advGetDecimalSearchID();
	var cmd;
	if (srch_id > 0)
		cmd = new httpcmd_SetSearchXml(srch_id,Parameters,srch_SaveSearch_callback,onsavesearchcomplete);
	else
		cmd = new httpcmd_SaveSearch(Name,Parameters,srch_SaveSearch_callback,onsavesearchcomplete);
	cmd.alertObj = alertObj;
}

function srch_SaveSearch_callback(search_id,search_name,onsavesearchcomplete, isError, alert_id)
{
	if (search_id != null)
	{
		srch_advSetSearchInfo(search_id,search_name,alert_id);
		if (alert_id)
			__GetAlertGlobalObject().LoadAlert(alert_id);		
	}
	if (!isError && IS_TMC_USER)
		alert("Search was saved successfully");
	nav_RefreshWorkspaceModules("searches");
	if (onsavesearchcomplete != null)
		onsavesearchcomplete(isError);
	
	srch_startAdvancedSearchMonitoring();
}
function srch_RefineSearch(check_xml)
{
	if (check_xml == true && srch_advGetDecimalSearchID() == 0)
	{
		alert("Please select saved search");
		return;
	}
	srch_ChangeLocation();
	nav_SwitchPageLocation(PID_PLADVANCEDSEARCH);
}

//***************************** Other functions ************************//
/*********************************************** Script for SearchPeriod control ******************************************/
function datesrch_onchange(dropDown,table)
{
	var val = dropDown.GetValue(); 
	var enabled = val == "custom";
	if (table == null) return;
	var date_table = table.rows[0].cells[1].childNodes[0];
	if (date_table == null) return;
	date_table.style.display = enabled ? 'block' : 'none';
}

function datesrch_onkeypress()
{
	if (event.keyCode=="13")
	{
		event.cancelBubble=true; 
		return true;
	}
}

function srch_getFromDateInput(id, drId, text)
{
	if (id == null) return null;
	var selvalue = srch_getFromDropDownList(drId);
	if (selvalue == 'custom')
	{
		var edit = document.getElementById(id);
		if (edit)
{
			if (text == true) return tpcalb_GetText(edit);
			else
			{
				var sDates = new Array();
				var date = tpcalb_GetDate(edit);
				sDates[0] = date.getFullYear();
				sDates[1] =  (date.getMonth() + 1 < 10) ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
				sDates[2] = (date.getDate() < 10) ? "0" + date.getDate() : date.getDate();
				return sDates.join('-');
			}
		}
	}
	return null;
}
/*********************************************** Search Page **************************************************/
function srch_SearchPage(groupid, xml, defaulttag, InputSearchClass, AdvancedSearchClass, pagelocID)
{
	this.groupid = groupid;
	this.srch_inpSearch = null;
	this.srch_advSearch = null;
	this.inputSearchClass = InputSearchClass;
	this.advancedSearchClass = AdvancedSearchClass;
	this.xml = xml;
	this.defaulttag = defaulttag;
	this.pagelocID = str_IsStringEmpty(pagelocID) ? "" : pagelocID;
	this.currpagelocID = null;
	this.currpageID = null;
	this.__lastFilterExpression = "";
	this.NavigationSearchDependedParameters = [P_CLUSTER_ID, P_CLUSTER_NAME, P_PREDEFINEDLOCATION];

	this.AdvancedSearchControl=function()
	{
		if (this.srch_advSearch == null && typeof(this.advancedSearchClass) == 'function')
			this.srch_advSearch = new this.advancedSearchClass(this.xml);
		return this.srch_advSearch;
	}
	this.InputSearchControl=function()
	{
		if (typeof(this.inputSearchClass) == 'function' && this.srch_inpSearch == null)
			this.srch_inpSearch = new this.inputSearchClass(this.xml, this.defaulttag);
			
		return this.srch_inpSearch;
	}
	this.GetLastFilterExpression=function()
	{
		return this.__lastFilterExpression;
	}	
	this.ExecuteSearchCommand=function(params,defered)
	{
		this.__lastFilterExpression = str_IsStringEmpty(params) ? '' : params;
		nav_ExecuteCommand(P_FILTEREXPRESSION, this.__lastFilterExpression, "searchable", str_IsStringEmpty(params) ? "Loading..." : "Please wait while searching...", /*navEnabled*/defered);
	}
	this.ResetNavigationSearchDependedParameters=function(deff)
	{
		if (nav_IsNavigationEnabled())
		{
			var curl = "";
			for (var i = 0, ic = this.NavigationSearchDependedParameters.length; i < ic; i++)
				curl = url_CombineParams(curl,this.NavigationSearchDependedParameters[i]);
			nav_ChangePageParams(curl,!deff);
		}
	}
	this.CheckSnpContent=function(deff,skipNav)
	{
		if (IS_SNP_USER && this.InputSearchControl() && nav_currentNavInfo)
		{
			var isv = this.InputSearchControl().GetScopeValue();
			if (isv == null) isv = "";
			var nsv = nav_currentNavInfo.GetParameter(P_BRANDFILTER);
			if (nsv == null) nsv = "";
			if (isv.toLowerCase() != nsv.toLowerCase())
			{
				if (!skipNav)
				{
					if (isv && isv.toLowerCase() == BRANDNAME_SNP.toLowerCase())
						nav_ChangePageParams(url_MakeParam(P_BRANDFILTER, isv), !deff);
					else
						nav_ChangePageParams(P_BRANDFILTER, !deff);
				}
				return true;
			}
		}
		return false;
	}
	this.HasNavigationSearchDependedParameters=function()
	{
		var res = false;
		if (nav_IsNavigationEnabled() && !srch_IsClusterSearch())
		{
			for (var i = 0, ic = this.NavigationSearchDependedParameters.length; i < ic; i++)
			{	
				res = !str_IsStringEmpty(nav_currentNavInfo.GetParameter(this.NavigationSearchDependedParameters[i]));
				if (res) break;
			}				
		}
		return res;
	}
	this.DoSearch=function(params, isAdvancedPane, changenav, skipRun)
	{
		var navEnabled = nav_IsNavigationEnabled();
		skipRun = skipRun ? true : false;
		var hasError = isAdvancedPane ? srch_advHasErrors() : false;
		var ploc = nav_currentNavInfo ? nav_currentNavInfo.GetPageLocation() : null;
		if (navEnabled == true && changenav != false)
		{
			
			if (hasError || skipRun)
				ploc = PID_PLADVANCEDSEARCH;
			else
				if (isAdvancedPane == true)
				{				
					ploc = PID_PLSEARCHRESULTS;
				}
				else
					ploc = this.pagelocID;
			this.SetCurPageLocID(ploc);
		}
		var hnsdp = this.HasNavigationSearchDependedParameters();
		var iplc = false;
		if (navEnabled)
			iplc = ploc != nav_currentNavInfo.GetPageLocation();
		var iscc = this.CheckSnpContent(true,true);
		var inpc = hnsdp || iplc || iscc; 
		if (!hasError && !skipRun)
			this.ExecuteSearchCommand(params, inpc);
		if (iscc)
			this.CheckSnpContent(hnsdp || iplc);
		if (hnsdp)
			this.ResetNavigationSearchDependedParameters(iplc);
		if (iplc)
			nav_SwitchPageLocation(ploc);		
		srch_seSetState(params, isAdvancedPane);		
	}
	this.GetCurPageLocID=function()
	{
		return this.currpagelocID;
	}
	this.SetCurPageLocID=function(ploc)
	{
		this.currpagelocID = ploc;
	}
	this.GetCurPageID=function()
	{
		return this.currpageID;
	}
	this.SetCurPageID=function(ploc)
	{
		this.currpageID = ploc;
	}
	this.ClearContent=function()
	{
		delete this.srch_inpSearch;
		this.srch_inpSearch = null
		delete this.srch_advSearch;
		this.srch_advSearch = null;
	}
	this.ClearSearchResults=function(fltr, changenav)
	{
		if (fltr != true)
		{
			if (!srch_advClear())
				return;
		}
		this.srch_inpSearch.ClearProcess();		
		srch_inpSetInputValue(null,this.srch_inpSearch);
		if (this.InputSearchControl())
			this.InputSearchControl().DoSearch(changenav);
		else
			this.DoSearch(null, false, changenav);
	}

	this.GroupID=function()
	{
		return this.groupid;
	}
}
/*********************************************** Collection of Search Pages **********************************/
function srch_SearchPagesCollection()
{
	this.collection = new dm_KeyedCollection();
	this.events = new cmn_EventContainer();
	this.isCurrentSearchPageLocked = false;
	if (nav_IsNavigationEnabled())
	{
		this.AddSearchPage("DEFAULT",new srch_SearchPage("GroupID_1",null,GETSTIBYID(SRCH_TN_SYMBOL).longhint, Data.Search.InputSearch, Data.Search.AdvancedSearch));
		this.AddSearchPage(PID_PLMANAGEFEEDS,new srch_SearchPage(null,null,GETSTIBYID(SRCH_TN_TEXT).longhint, Data.Search.FeedInputSearch, null, PID_PLMANAGEFEEDS));
		this.AddSearchPage(PID_PLMANAGECALENDARS,new srch_SearchPage(null,null,GETSTIBYID(SRCH_TN_TEXT).longhint, Data.Search.CalendarInputSearch, null, PID_PLMANAGECALENDARS));
		this.AddSearchPage(PID_PLMANAGEFOLDERS,new srch_SearchPage(null,null,GETSTIBYID(SRCH_TN_TEXT).longhint, Data.Search.FolderInputSearch, null, PID_PLMANAGEFOLDERS));
		this.AddSearchPage(PID_PLMANAGEBLOGS,new srch_SearchPage(null,null,GETSTIBYID(SRCH_TN_TEXT).longhint, Data.Search.BlogInputSearch, null, PID_PLMANAGEBLOGS));
		this.AddSearchPage(PID_PLMYBLOGGINGACTIVITY,new srch_SearchPage(null,null,GETSTIBYID(SRCH_TN_SYMBOL).longhint, Data.Search.InputSearch, null, PID_PLMYBLOGGINGACTIVITY));
		this.AddSearchPage(PID_HOME,new srch_SearchPage("GroupID_1",null,GETSTIBYID(SRCH_TN_SYMBOL).longhint,  Data.Search.HomeInputSearch, null));
		this.AddSearchPage(PID_MANAGESEARCHES,new srch_SearchPage("GroupID_1",null, null, Data.Search.InputSearch, Data.Search.AdvancedSearch, null));
		this.AddSearchPage(PID_MYACCOUNT,new srch_SearchPage(null,null, null, Data.Search.InputSearch, null, null));		
		
		if (this.Contain(nav_currentNavInfo.GetPageLocation()))
			this.SetCurrentSearchPageByName(nav_currentNavInfo.GetPageLocation());
		else
			this.SetCurrentSearchPageByName(nav_currentNavInfo.GetPageID());
	}
	/*else
		this.SetCurrentSearchPageByName();*/
	nav_AttachEvent("onbeforeswitchpages", srch_OnBeforeSwitchPages);
	nav_AttachEvent("onbeforenavigationchange", srch_OnNavigationsParamsChange);
}
srch_SearchPagesCollection.prototype.Contain=function(name)
{
	if (str_IsStringEmpty(name) || this.collection.Get(name) == null)
		return false;
	return true;
}
srch_SearchPagesCollection.prototype.GetSearchPageByName=function(name,realanswer)
{
	var obj = this.collection.Get(name);
	if (obj != null || realanswer)
		return obj;
	return this.collection.Get("DEFAULT");
}
srch_SearchPagesCollection.prototype.ExchangeTags = function(newpage,oldpage)
{
	if (newpage == null || oldpage == null) return;
	if (newpage == oldpage) return;
	var newobj = newpage.InputSearchControl();
	var oldobj = oldpage.InputSearchControl();
	if (newpage.GroupID() != oldpage.GroupID() || newpage.GroupID() == null || oldpage.GroupID() == null) return;
	newobj.ClearProcess();
	newobj.pid = oldobj.pid;
	var filters = oldobj.GetTags();
	if (filters != null)
	{	
		for(var i=0, ic=filters.length; i<ic; i++)
		{
			var name = "";
			var value = "";
			var dispvalue = "";
			var params = new Array();
			for(var j=0, jc=filters[i].childNodes.length; j<jc; j++)
			{
				var val = oldobj.GetTagPropertyValue(filters[i], filters[i].childNodes[j].nodeName);
				switch(filters[i].childNodes[j].nodeName)
				{
					case SRCH_TP_NAME:
						name = val;
						break;
					case SRCH_TP_VALUE:
						value = val;
						break;
					case SRCH_TP_DISPLAYVALUE:
						dispvalue = val;
						break;
					default:
						params[params.length] = new srch_XmlSearchExParam(filters[i].childNodes[j].nodeName,val);
				}
			}
			if (newobj.IsValidTagForCurrPage(name))
				newobj.AddFilter(name, value, dispvalue, false, params);
		}
	}
	newobj = newpage.AdvancedSearchControl();
	oldobj = oldpage.AdvancedSearchControl();
	if (newobj != null && oldobj != null)
	{
		newobj.Clear();
		newobj.SetXml(oldobj.GetXml());
		oldobj.Clear(false);
	}
}
srch_SearchPagesCollection.prototype.LockCurrentSearchPage=function()
{
	this.isCurrentSearchPageLocked = true;
}
srch_SearchPagesCollection.prototype.UnlockCurrentSearchPage=function()
{
	this.isCurrentSearchPageLocked = false;
}
srch_SearchPagesCollection.prototype.SetCurrentSearchPageByName=function(name)
{
	var newpage = this.collection.Get(name);
	return this.SetCurrentSearchPage(newpage);
}
srch_SearchPagesCollection.prototype.SetCurrentSearchPage=function(newpage)
{
	if (this.isCurrentSearchPageLocked) return;
	
	var oldpage = this.currentSearchPage;
	if (newpage == null)
		newpage = this.GetSearchPageByName("DEFAULT");
	this.events.fireEvent("onbeforecurpagechange", newpage);
	if (oldpage != null)
	{
		this.ExchangeTags(newpage,oldpage);
		oldpage.SetCurPageLocID(null);
		if (newpage.GroupID() != oldpage.GroupID() || newpage.GroupID() == null || oldpage.GroupID() == null)
		for (var i=0;i<this.collection.getCount();i++)
		{
			var page = this.collection.GetByIndex(i);
			if (page.AdvancedSearchControl() != null)
				page.AdvancedSearchControl().Clear(false);
			if (page.InputSearchControl() != null)
				page.InputSearchControl().ClearProcess();
		}
	}
	this.currentSearchPage = newpage;
	if (nav_IsNavigationEnabled())
		newpage.SetCurPageID(nav_currentNavInfo.GetPageID());
	this.events.fireEvent("onaftercurpagechange", oldpage);
	return true;
}
srch_SearchPagesCollection.prototype.AddSearchPage=function(name,page)
{
	if (name == null || page == null) return false;
	this.collection.Add(name,page);
	return true;
}
srch_SearchPagesCollection.prototype.ReplaceSearchPage=function(name,page)
{
	if (name == null || page == null) return false;
	var opage = this.collection.Get(name,true)
	if (opage)
		this.collection.Delete(name);
	var res = this.AddSearchPage(name,page);
	this.currentSearchPage = (res && this.currentSearchPage == opage) ? page : this.currentSearchPage;
	return res;
}
srch_SearchPagesCollection.prototype.CurrentSearchPage=function()
{
	return this.currentSearchPage;
}
srch_SearchPagesCollection.prototype.AttachEvent=function(evt, func)
{
	this.events.attachEvent(evt, func);
}
srch_SearchPagesCollection.prototype.IsClusterSearch=function()
{
	if (nav_IsNavigationEnabled())
	{
		var cluster = nav_currentNavInfo.GetParameter(P_CLUSTER_ID);
		return !str_IsStringEmpty(cluster) && !ISUSERSEARCH;
	}
	return false;
}
function srch_SetCurrentSearchPage(name, dosearch)
{
	if ( srch_PagesCollection == null ) return;
	if (srch_PagesCollection.CurrentSearchPage() != srch_PagesCollection.GetSearchPageByName(name))
	{
		srch_PagesCollection.SetCurrentSearchPageByName(name);
		srch_PagesCollection.LockCurrentSearchPage();
		var currentPageLocation = nav_IsNavigationEnabled() ? nav_currentNavInfo.GetPageLocation() : null;
		if (srch_inpGetCurrentInputSearch() && dosearch != false)
			srch_inpDoSearch();			
		srch_PagesCollection.UnlockCurrentSearchPage();
	}
}
function srch_OnNavigationsParamsChange()
{
	ISNAVIGATIONSEARCH = !ISUSERSEARCH;
	//current navigation parameters
	var currentPageLocation = nav_currentNavInfo.GetPageLocation();
	var currentPageID = nav_currentNavInfo.GetPageID();
	
	//old search page
	var oldPage = srch_PagesCollection.CurrentSearchPage();
	var oldPageID = oldPage.GetCurPageID();
	var oldPageLocID = oldPage.GetCurPageLocID();
	
	var currentSearchPage = null;
	//try load search page analyze location
	if (!str_IsStringEmpty(currentPageLocation))
		currentSearchPage = srch_PagesCollection.GetSearchPageByName(currentPageLocation,true);
	//try load search page analyze page identifier
	if (currentSearchPage == null)
		currentSearchPage = srch_PagesCollection.GetSearchPageByName(currentPageID);
	var isSearchPageChanged = false;
	// explicitly set current page ID
	currentSearchPage.SetCurPageID(currentPageID);		
	//set current search page
	if (srch_PagesCollection.CurrentSearchPage() != currentSearchPage)
	{
		isSearchPageChanged = true;		
		srch_PagesCollection.SetCurrentSearchPage(currentSearchPage);		
	}
	
	//if page identifier changed
	var isNavigationChanged = oldPageID != currentSearchPage.GetCurPageID();	
	var allowSearch = isSearchPageChanged;
	var isContainerClicked  = !str_IsStringEmpty(nav_currentNavInfo.GetContainerLocation())
		&& str_IsStringEmpty(oldPageLocID);
	var isNavigateBetweenPages = oldPageID != currentPageID;
	var isDeleteFilter = !((oldPageID==PID_TRENDS&&currentPageID==PID_FEEDS)
		||(oldPageID==PID_FEEDS&&currentPageID==PID_TRENDS));	
	
	if ( ((oldPageLocID==PID_PLSEARCHRESULTS || oldPageLocID==PID_PLADVANCEDSEARCH) &&
		str_IsStringEmpty(currentPageLocation)) || isNavigateBetweenPages || isContainerClicked)
	{
		// Don't clear current search parameters in case of crossing between Trends and Feed locations.
		// Don't clear current search parameters in case we're searching for Saved Search
		if (isDeleteFilter&&!srch_inpGetCurrentInputSearch().GetTagInfo(SRCH_TN_SAVEDSEARCH).GetOccurrenceNumber()>0)
		{
			//when change location
			srch_inpDeleteFilters(SRCH_TN_SAVEDSEARCH);
			allowSearch = true;
		}
	}
	var isManageSearch = currentPageID == PID_MANAGESEARCHES;
	var isOldManageSearch = oldPageID == PID_MANAGESEARCHES;
	var isAdvancedSearchPage = currentPageLocation == PID_PLADVANCEDSEARCH;
	if (isManageSearch || 
		str_IsStringEmpty(currentPageLocation) || 
		oldPageID == PID_HOME &&  currentPageLocation == PID_PLADVANCEDSEARCH)
	{
		//clear advanced search info when user open Mage Searches page
		if (currentSearchPage.AdvancedSearchControl() != null)
		{
			if (oldPageID != currentPageID || oldPageLocID != currentPageLocation  || isContainerClicked)
				// Don't clear current search parameters in case of crossing between Trends and Feed locations.
				if (isDeleteFilter)			
					currentSearchPage.AdvancedSearchControl().Clear();
		}
		if (isManageSearch)
		{
			oldPage.InputSearchControl().ClearProcess();
			currentSearchPage.InputSearchControl().ClearProcess();
			srch_inpSetInputValue(null,oldPage.InputSearchControl());
			srch_inpSetInputValue(null,currentSearchPage.InputSearchControl());
		}
	}
	if (isOldManageSearch && currentSearchPage.InputSearchControl().IsEmpty())
		allowSearch = true;	
	if (isOldManageSearch && currentPageLocation == PID_PLSEARCHRESULTS)
	{
		allowSearch = false;
		currentSearchPage.InputSearchControl().PrepareSearchParam();
	}
	else
		allowSearch = srch_inpOnNavigationsParamsChange(null,isNavigationChanged) || allowSearch;	
	allowSearch = !isAdvancedSearchPage && allowSearch;
	if (isAdvancedSearchPage && !InitialAdvancedSearch)
	{
		srch_startAdvancedSearchMonitoring();
	}
	if (allowSearch)
		srch_inpDoSearch(false);
	else
	{
		var cluster = nav_currentNavInfo.GetParameter(P_CLUSTER_ID);
		if (!srch_IsClusterSearch() && !str_IsStringEmpty(cluster))
			nav_ChangePageParams(url_CombineParams(P_CLUSTER_ID,P_CLUSTER_NAME), true);
	}
	currentSearchPage.SetCurPageLocID(currentPageLocation);
	ISNAVIGATIONSEARCH = false;
}
function srch_OnBeforeSwitchPages()
{
	if (nav_currentNavInfo.GetPageID() == PID_CALENDARS)
	{
		var tags = srch_inpGetTags(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,SRCH_TN_PERIOD)))
		if (tags != null && tags.length > 0)
			nav_ChangePageParams(url_MakeParam(P_CALENDAR_FILTER_TYPE, "1"), false);
		else
			nav_ChangePageParams(P_CALENDAR_FILTER_TYPE, false);
	}
}
function srch_AttachEvent(evt, func)
{
	if ( srch_PagesCollection == null ) return;
	srch_PagesCollection.AttachEvent(evt, func);
}
/*********************************************** Fill Period Drop Down ******************************/
function srch_getDefaultPeriod()
{
	var obj = new Object();
	var dvn = "SRCH_PERIOD_DISPLAYVALUE";
	var vn = "SRCH_PERIOD_VALUE";
	if (nav_currentNavInfo)
	{
		var pid = nav_currentNavInfo.GetPageID();
		switch(pid)
		{
			case PID_FOLDERS:
				dvn = pid + "_" + dvn;
				vn = pid + "_" + vn;
				break;
		}
	}
	obj.DisplayValue = eval(dvn);
	obj.Value = eval(vn);
	return obj;
}
function srch_getDefaultPeriodValue()
{
	var period = srch_getDefaultPeriod();
	if (period)
		return period.Value;
	return null;
}
function srch_getDefaultPeriodDisplayValue()
{
	var period = srch_getDefaultPeriod();
	if (period)
		return period.DisplayValue;
	return null;
}
function srch_getPeriodValues()
{
	var arr = TPDateFilterValues;
	if (nav_currentNavInfo.GetPageID() == PID_CALENDARS)
		arr = TPCalendarDateFilterValues;
	return arr;
}
function srch_getPeriodDisplayValueByValue(value)
{
	var arr = srch_getPeriodValues();
	for(var i=0, ic=arr.length; i< ic; i++)	
		if (value.toLowerCase() == arr[i].value.toLowerCase())
			return arr[i].name;
			
	return value;
}
function srch_startAdvancedSearchMonitoring()
{
	if (IS_ANONYMOUS_USER) return;
	srch_stopAdvancedSearchMonitoring();
	var advControl = srch_advGetCurrentAdvancedSearch();
	if (advControl)
		InitialAdvancedSearch = new Data.Search.AdvancedSearch(advControl.GetXml());
	AdvancedSearchMonitoringId = nav_AttachEvent("onbeforeupdatenavigation",srch_checkCurrentAdvancedSearchState);
}
function srch_stopAdvancedSearchMonitoring()
{
	if (IS_ANONYMOUS_USER) return;
	InitialAdvancedSearch = null;
	if (AdvancedSearchMonitoringId != null)
	{
		nav_DetachEvent("onbeforeupdatenavigation",AdvancedSearchMonitoringId);
	}
	AdvancedSearchMonitoringId = null;
}
function srch_checkCurrentAdvancedSearchState()
{
	if (SkipAdvancedSearchConfirmation) return true;
	var advControl = srch_advGetCurrentAdvancedSearch();
	var result = true;
	if (nav_currentNavInfo && 
		InitialAdvancedSearch && 
		(!advControl || InitialAdvancedSearch.GetXml() != advControl.GetXml() || advControl.GetDecimalSearchID() == 0 && !advControl.IsDefaultSearch()))
	{
		result = confirm("You'll lose your advanced search changes. Continue?");
		nav_currentNavInfo.cancelNavigation = !result;
	}
	if (result)
	{
		srch_stopAdvancedSearchMonitoring();
	}
	return result;
}
/*********************************************** Render Search Tags ******************************/
function srch_RenderTags(id, types, bantags)
{
	var area = document.getElementById(id);
	if (!area) return;
	area.innerHTML = srch_inpGetAvailableTagsHtml(types, bantags);
}
function srch_IsTypeContained(arr, type)
{
	type = str_Trim(type.toLowerCase());
	for(var i=0,ic=arr.length; i<ic ; i++)
	{
		var temp = str_Trim(arr[i].toLowerCase());
		if (type == temp || temp == "all")
			return true;
	}
	return false;
}
function srch_IsBanTag(tag, banTags)
{
	tag = tag.toLowerCase();
	if (banTags && banTags != null)
		for(var i=0,ic=banTags.length; i<ic; i++)
			if (banTags[i].toLowerCase() == tag)
				return true;
	return false;
}
function srch_convertdatetime(str)
{
	if (str == null) return null;
	str = str + '';
	var array = str.split("T");
	if (array.length < 1) return null;
	var strdate = array[0];
	var dmy = strdate.split("-");
	if (dmy.length < 3) return null;
	return new Date(parseInt(dmy[0],10),parseInt(dmy[1],10)-1,parseInt(dmy[2],10));
}
function srch_SetDateTimeInputValue(id,value)
{
	if (id == null) return;
	var obj = document.getElementById(id);
	if (obj == null) return;
	if (value == null) value = new Date();
	tpcalb_SetInputValue(obj,value,false)
}
function srch_ResearchOnNextStep()
{
	var ic = srch_inpGetCurrentInputSearch();
	if (ic)
		return ic.needsearch = true;
}
/*********************************************** Fiedls *********************************************/
var srch_mySearhesCol = null;

var TAGTYPES = new Array(SRCH_TT_STD, SRCH_TT_CUSTOM);

var SRCH_SES_NONE = "none";
var SRCH_SES_FILTER = "filter";
var SRCH_SES_CONTAINER = "container";
var SRCH_SES_ADVANCED = "advanced";

var srch_seEventer = new srch_SearchEventer();
var srch_PagesCollection = new srch_SearchPagesCollection();

var srch_WarningMessage = "";
/*********************************************** XmlSearch ******************************************/
/*********************************************** MyRecentSearchesObject ******************************************/
var TPInputSearchControl = null;
function RecentSearchesObject()
{
	this.PopupID = null;
	this.ContentAreaID = null;
	this.TagTypes = null;
	this.ShowAsLink = false;
	this.BanTags = null;
	this.InternalName = null;
	this.InitContentArea = function(contentAreaID, tagTypes, showAsLink, banTags, internalName)
	{
		this.ContentAreaID = contentAreaID;
		this.TagTypes = tagTypes;
		this.ShowAsLink = showAsLink;
		this.BanTags = banTags;
		this.InternalName = internalName;		
	}
	this.InitPopup = function(popupid)
	{
		this.PopupID = popupid;
	}	
}
var TPRecentSearchesObject = new RecentSearchesObject();
function uirso_InitPopup(popupid)
{
	TPRecentSearchesObject.InitPopup(popupid);
}
function uirso_InitRecentSearchesObject(contentAreaID, tagTypes, showAsLink, banTags, internalName)
{
	TPRecentSearchesObject.InitContentArea(contentAreaID, tagTypes, showAsLink, banTags, internalName);
}
function uirso_RenderAvailableTags()
{
	srch_RenderTags(TPRecentSearchesObject.ContentAreaID,TPRecentSearchesObject.TagTypes,TPRecentSearchesObject.BanTags);
}
/*********************************************** MyRecentSearchesObject ******************************************/
/*Check container in search xml*/
function srch_CheckContainerInNavigation()
{
	if (!SRCH_SEARCHTAGS || !currentNavContInfo || !nav_IsNavigationEnabled()) return;
	var cnt_id = currentNavContInfo.GetContainerID();
	if (str_IsStringEmpty(cnt_id)) return;
	var cnt_name = currentNavContInfo.GetContainerName();
	var tagname = srch_GetCurrentContainerSearchTagName();
	if (str_IsStringEmpty(tagname)) return;
	var STGS = (!IS_TMC_USER) ? SRCH_SEARCHTAGS : SRCH_SEARCHTAGS_TMC;
	for (var i=0, ic=STGS.length; i < ic; ++i) {
		if (STGS[i].id == tagname) {
			var aa = new Array();
			aa.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYNAME,STGS[i].advdispname));
			aa.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYVALUE,cnt_name));
			aa.push(new srch_XmlSearchExParam(SRCH_TP_TAGSCOPE,SRCH_TS_ANY));
			aa.push(new srch_XmlSearchExParam(SRCH_TP_TAGTYPE,SRCH_TT_STD));
			srch_advAddTag(tagname,cnt_id,aa);
			break;
		}
	}
	return;
}
function srch_GetSingleContainerFromSearch(pid)
{
	var tagname, value, nodes;
	value = null;
	tagname = srch_GetCurrentContainerSearchTagName(pid);
	if (str_IsStringEmpty(tagname))
		return;
	var tags = srch_advGetTags(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,tagname)));
	if (tags != null && tags.length == 1)
	{
		nodes = tags[0].getElementsByTagName(SRCH_TP_TAGSCOPE);	
		if (nodes && nodes.length > 0 && nodes[0].text == SRCH_TS_ANY)
		{
			nodes = tags[0].getElementsByTagName(SRCH_TP_VALUE);	
			if (nodes && nodes.length > 0)
				value = nodes[0].text;
		}
	}
	return value;
}
function as_RegisterModuleForTag(tags,module) {
	if ( GlASM )
		GlASM.RegisterModuleForTag(tags,module);
}
function as_GetOrder(tagname) {
	if ( GlASM )
		return GlASM.GetOrder(tagname);
	return -1;
}
function as_RegisterCustomControl(tagName,id,getValuesHandler,setValuesHandler,getAttributesHandler,scopeControlId,getValidationHandler) {
	if ( GlASM )
		GlASM.RegisterCustomControl(tagName,id,getValuesHandler,setValuesHandler,getAttributesHandler,scopeControlId,getValidationHandler);
}
function as_ResetCustomControls() {
	if ( GlASM )
		GlASM.ResetCustomControls();
}
function as_RegisterExpandCustomSection(tagName, id, formid) {
	if ( GlASM )
		GlASM.RegisterExpandCustomSection(tagName, id, formid);
}
function as_ExpandSearchSection(tagName) {
	if ( GlASM )
		GlASM.ExpandCustomSection(tagName);
}

function srch_ExpandSearchSection(id,rowid,formid)
{
	var show;
	if (id) {
		var obj = document.getElementById(id);
		if (obj) {
			show = eval(obj.isopen);
			obj.isopen = !show;
			obj.src = (obj.isopen == true)?cmn_GetImageUrl("icon_tree_minus_15height.gif"):cmn_GetImageUrl("icon_tree_plus_15height.gif");
		}
	}
	if (formid) {
		var obj = document.getElementById(formid);
		if (obj) {
			obj.style.display = show?"none":"block";
			if (!show && obj.tpl_dynamicElement != null)
				obj.tpl_dynamicElement.OnDisplayChange(true);
		}
	}
}

function srch_GetCurrentContainerSearchTagName(pid)
{
	var tagname = null;
	if (nav_IsNavigationEnabled())
	{
		if (!pid)
			pid = nav_currentNavInfo.GetPageID();
		switch (pid)
		{
			case PID_FEEDS: 
				tagname = SRCH_TN_FEED;
				break;
			case PID_FOLDERS: 
				tagname = SRCH_TN_FOLDER;
				break;
			case PID_CALENDARS: 
				tagname = SRCH_TN_CALENDAR;
				break;
			case PID_BLOGS:
				tagname = SRCH_TN_BLOG;
				break;
		}
	}
	return tagname;
}

function srch_ApplyFilter(tag, value, displayValue, params)
{
	if (!srch_checkCurrentAdvancedSearchState()) return;
	srch_inpDeleteFilters(tag);
	if (srch_inpAddFilter(tag, value, displayValue, params))
		srch_inpDoSearch();
}

function srch_ExtractSingleCompany()
{
	var ic = srch_inpGetCurrentInputSearch();
	var company = null;	
	if (ic)
	{
		var tags = ic.GetTags(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,SRCH_TN_SYMBOL)));		
		if (tags && tags.length == 1)
		{
			var tag = tags[0];
			company = new Data.Search.CompanyInfo();
			company.CODE = ic.GetTagPropertyValue(tag, SRCH_TP_VALUE);
			company.RIC = ic.GetTagPropertyValue(tag, SRCH_TP_RIC);
			company.CUSIP = ic.GetTagPropertyValue(tag, SRCH_TP_CUSIP);
			company.SECOMPID = ic.GetTagPropertyValue(tag, SRCH_TP_SECOMPID);
			company.GVKEY = ic.GetTagPropertyValue(tag, SRCH_TP_GVKEY);
			company.SYMBOL = ic.GetTagPropertyValue(tag, SRCH_TP_SYMBOL);
			company.COMPANYNAME = ic.GetTagPropertyValue(tag, SRCH_TP_COMPANYNAME);
			company.DISPLAYNAME = ic.GetTagPropertyValue(tag, SRCH_TP_DISPLAYNAME);
		}		
	}
	return company;
}

DeclareClass("Data.Search.CompanyInfo", null, 
{
	constructor : function()
	{
		this.RIC = null;
		this.CUSIP = null;
		this.SECOMPID = null;
		this.SYMBOL = null;
		this.COMPANYNAME = null;
		this.DISPLAYNAME = null;
		this.CODE = null;
	}
});

function srch_SearchInfoPanelRepaint(handler) 
{
	window.setTimeout(function() {SearchInfoPanelRepaint(); if (handler && typeof(handler) == 'function')handler();}, 100);
}

var GlASM = null;
if (nav_IsNavigationEnabled())
{
	GlASM = new UI.AS.Manager();
}

DeclareClass("Data.Search.SearchEventListener", null,
{
	constructor : function(handler)
	{
		this.__tags = [];
		this.__tagsDatasets = [];
		this.__values = []
		this.AnalyzeHandler = this.CreateCallback(this.AnalyzeSearchState);
		this.Attach();
	}
	,Attach : function()
	{
		//nav_AttachEvent("onnavigationchange", this.CreateCallback(this.AnalyzeNavigation));
		srch_seEventer.attachEvent("onstatechange", this.AnalyzeHandler);	
		GlobalAdvancedSearchEventManager.AttachEvent("onxmlchange",this.AnalyzeHandler);
	}	
	,Detach : function()
	{
		srch_seEventer.detachEvent("onstatechange", this.AnalyzeHandler);	
	}
	,AnalyzeNavigation : function()
	{
		window.setTimeout(this.CreateCallback(this.ReloadSearchState),0);
	}	
	,ReloadSearchState : function()
	{
		this.AnalyzeSearchState(SRCH_SES_FILTER,null,true);
	}
	,AnalyzeSearchState : function(state,dsname,reload)
	{
		this.__oldstate = state;
		for (var i = 0; i < this.__tags.length; i++)
			this.AnalyzeSearchTag(state,i,dsname,reload);
	}
	,AnalyzeSearchTag : function(state,index,dsName,reload)
	{
		var values = null;
		var tagName = this.__tags[index];
		var oldvalues = this.__values[index];
		if (tagName == SRCH_TN_SAVEDSEARCH)
		{
			values = srch_advGetDecimalSearchID();
			if (values)
				values = [values + ""];			
		}
		else
		{
			if (state == SRCH_SES_FILTER)
				values = this.GetTagValuesFromSearch(tagName);
		}
		var i = 0, ic = 0;
		if (!this.__values[index] && !values || this.__values[index] && values && values.length == this.__values[index].length)
		{
			if (values)
				for (i = 0, ic = values.length; i < ic; i++)
				{
					if ((this.__values[index])[i] != values[i])
						break;
				}
			if (!reload && i >= ic) return;
		}		
		this.__values[index] = values;
		if (tagName == SRCH_TN_SAVEDSEARCH)
			nav_RefreshWorkspaceModules(KEY_SEARCHES);
		var datasets = null;
		if (dsName)
			datasets = [dsName];
		else
			datasets = this.__tagsDatasets[tagName];
		ic = datasets ? datasets.length : 0;
		for (i = 0; i < ic; i++)
		{
			var ds = data_GetDataset(datasets[i]);
			this.RefreshItems(ds,tagName,oldvalues);
			this.RefreshItems(ds,tagName,values);
		}
	}
	,RefreshItems : function(ds,searchTag,values)
	{		
		if (ds != null && values != null)
		{
			var doc = ds.GetXmlDocument();
			for (var i = 0, ic = values.length; i < ic; i++)
			{
				var id;
				switch(ds.GetItemName())
				{
					case FilterItem.ItemName:
						id = searchTag+values[i];
						break;
					case TopicItem.ItemName:
						id = doc.selectSingleNode("//~0/~1[../~2='~3']".format( TopicItem.ItemName, TopicItem.ItemIDName, TopicItem.PN_CODE, values[i] ));
						if (id != null)
							id = id.text;
					break;
					default:
						id = values[i];
						break;
				}
				if (id != null)
					ds.TouchItem(id);
			}			
		}
	}
	,GetTagValues : function(tagName)
	{
		for (var i = 0, ic = this.__tags.length; i < ic; i++)
		{
			if (tagName == this.__tags[i])
				return this.__values[i];
		}
	}
	,ContainTagValue : function(tagName, tagValue)
	{
		var values = this.GetTagValues(tagName);
		if (values)
			for (var i = 0, ic = values.length; i < ic; i++)
				if (values[i] == tagValue)
					return true;
		return false;
	}	
	,GetTagValuesFromSearch : function(tagName)
	{
		var values = null;
		var tags = srch_inpGetTags(new Array(new srch_XmlSearchExParam(SRCH_TP_NAME,tagName)));
		if (tags != null && tags.length > 0)
		{
			values = [];
			for (var i = 0, ic = tags.length; i < ic; i++)
			{
				var nodes = tags[i].getElementsByTagName(SRCH_TP_VALUE);
				if (nodes && nodes.length > 0)
					values.push(nodes[0].text);
			}
		}
		return values;
	}
	,AddSearchTag : function(filter,dsName)
	{
		if (!this.__tagsDatasets[filter])
			this.__tags.push(filter);
			
		if (!this.__tagsDatasets[filter])
			this.__tagsDatasets[filter] = [];
		(this.__tagsDatasets[filter]).push(dsName);
		if (this.__oldstate)
			this.AnalyzeSearchState(this.__oldstate);
	}
});

function srch_trendsSetFilterItem(tagName, code, name) {
	if (nav_currentNavInfo.GetPageLocation() != PID_PLSEARCHRESULTS) {
		srch_inpDeleteFilters(tagName);
		srch_inpAddFilter(tagName, code, name);
	} else 	{
		var params = new Array();
		params.push(new srch_XmlSearchExParam(SRCH_TP_DISPLAYVALUE, name));
		srch_advDeleteTags(tagName, null, false);
		srch_advAddTag(tagName, code, params, -1, true);
	}
}

function trends_regionMapLink(value, tdClientId, tooltip, color)
{
	return value + " didim";
/*	var html = "<a href='#' onclick='' onmouseover='toolTip(" + this.tooltip + ")' "
		+ "onmouseout='hideToolTip()' style='color:" + this.color + ";'>"
		+ cmn_scriptEncodeString(this.value)
		+ "</a>";*/

	return html;
}

function srch_trendsDoSearch() {
	if (nav_currentNavInfo.GetPageLocation() != PID_PLSEARCHRESULTS) {
		srch_inpDoSearch();
	} else {
		srch_advDoSearch();
	}
}

function srch_trendsApply(industryCode, industryName, regionCode, regionName, obj){
	GlobalTrendsEventManager.OnRegionMapClick(industryCode, industryName, regionCode, regionName, obj);
}

function srch_trendsApplyTrend(date, obj)
{
	GlobalTrendsParameters.TrendDate.SetValue(date);
	//GlobalTrendsEventManager.OnTrendClick(date, obj);	
	GlobalTrendsEventManager.OnNeedRefresh();
}

function srch_trendsApplyTag(tagName, code, name) {

    if (tagName == SRCH_TN_SYMBOL) {
        GlobalTrendsParameters.RelatedCompany.SetValue(code);
		GlobalTrendsContext.GetRelatedCompanies().RefreshRelated();
    } else if (tagName == SRCH_TN_TOPIC) {
        GlobalTrendsParameters.RelatedTopic.SetValue(code);
		GlobalTrendsContext.GetRelatedTopics().RefreshRelated();
    } else if (tagName == SRCH_TN_CUSTOMTOPIC) {
        GlobalTrendsParameters.RelatedCustomTopic.SetValue(code);
		GlobalTrendsContext.GetRelatedCustomTopics().RefreshRelated();
    }    

    GlobalTrendsEventManager.OnNeedRefresh();
}

var FiltersSearchEventListener = new Data.Search.SearchEventListener();
var IMPOSSIBLESEARCH = false;