function getMorphResults( content , searchStr )
{
	var postQuery = "searchStr="+encodeURIComponent(searchStr);
		postQuery += "&contentStr="+encodeURIComponent(content);
	var xml =  AjaxLoad( "/scripts/GetDoc/GetDocService.asmx/MorphSearch", null, function(n){ alert(AjaxRequests[n].req.responseText); },
			"POST", postQuery , true, { "Content-Type": "application/x-www-form-urlencoded" } );
			//var xml = AjaxLoad( "GetDocService.asmx/MorphSearch?"+postQuery , 
			//	 function(no){alert("000")}, function(no){alert("000")},
			//	 "GET", null, true, null );
			//alert(xml.xml)				
			//xml=string2xml("<mfx><family><sibling>1</sibling><sibling>22</sibling><sibling>33</sibling></family><family><sibling>4444</sibling></family></mfx>")	
	
	arrNodes = selectNodes(xml,"/mfx/family/sibling");
	arr=[];
	for(i=0;i<arrNodes.length; i++)
	{
		arr[i] = arrNodes[i].text || arrNodes[i].textContent;
	}
	
	var n = arr.length;
	do
	{
		swapped = false; n = n - 1;
		for(i=0; i<n; i++)
		{
			if( arr[i].length < arr[i+1].length)
			{
				tmp = arr[i];
				arr[i]=arr[i+1]; 
				arr[i+1]=tmp;
				swapped = true;
			}
		}
	}while(swapped)

	return string2xml("<search><keyword>"+arr.join("</keyword><keyword>")+"</keyword></search>") ;

	
	//return string2xml("<mfx><family><sibling>"+arr.join("</sibling><sibling>")+"</sibling></family></mfx>") ;
}

// =========================================================== //
function MarkSearchMorph( htm, searchStr )
{
	//alert(searchStr)
	if(  searchStr == null || searchStr == '' ) 
		return htm;
		
	var xml = getMorphResults( htm , searchStr )
	if(xml)
	{
		arr = xml.getElementsByTagName("keyword");
		arrMarked = [];
		for(var i=0; i<arr.length; i++)
		{
			searchStr = arr[i].text || arr[i].textContent;
			if(!arrMarked[searchStr])
			{
				htm = MarkSearchStr( htm,searchStr);
				arrMarked.push(searchStr,1);
			}
		}
	}
	return htm;
}

function MarkSearchStr( htm, searchStr )
{
	if(  searchStr == null || searchStr == '' ) 
		return htm;
		
	var expTags      =  "(</?(i|b|span|font)[^<>]*>)*";
	var expTagsPlus  =  "(</?(i|b|span|font)[^<>]*>)+";
	//alert(searchStr)
	
	var i, ch;
	var expMain = searchStr.substr(0,1);   
	for( i=1; i<searchStr.length; i++)
	{
		ch = searchStr.substr(i,1);
		expMain +=  expTags + ch ;
	}
	//alert(expMain)
					
	var regExpMain = new RegExp( expMain, "gi" );
	var	regExpTags = new RegExp( expTagsPlus , "gi" );
	
	var result = htm.match( regExpMain );
	if( result == null ) 
		return htm;
		
	var indOffset, j, arrTags, strPart, startTag;
	for( i = 0; i < result.length; i++ )
	{
		// check if the match inside element
		indOffset = htm.indexOf( result[i], indOffset );
		//-- [] --
		
		if( ( htm.lastIndexOf( "<", indOffset ) <= htm.lastIndexOf( ">", indOffset ) ) )
		{
			arrTags = result[i].match( regExpTags );
			if( arrTags!= null )
			{
				afterInsert = ''; startStrPart = 0;
				for(  j = 0;  j < arrTags.length; j++ )
				{
					startTag = result[i].indexOf( arrTags[j], startStrPart )
					strPart = result[i].substring( startStrPart, startTag );
					
					if ( strPart!=null && strPart!='' )
						strPart = '<span class="SearchResult">' + strPart + '</span>';
					else
						strPart = "";
					afterInsert += strPart + arrTags[j];

					startStrPart = startTag + arrTags[j].length;
				}
				afterInsert += result[i].substr( startStrPart )	}
			else
			{
				afterInsert = '<span class="SearchResult">' + result[i] + '</span>';
			}
				htm = htm.substring( 0,indOffset ) + 
					afterInsert + 
						htm.substr( indOffset + result[i].length );
			indOffset += afterInsert.length;
		}
		else
			indOffset += result[i].length;
	
		//-- [] --
	}
	
	return htm;
}
	
// =========================================================== //
function urlDecode ( str )
{
	var result="" ;
	
	if( (str+"").length )
	{ 	
		str = str.substr(0, str.length-1)
		arrChr = str.split("_");
		result = eval( 'String.fromCharCode('+ (arrChr.join(",")).replace("'","''") +')' )
	}
	return result;
}