
var ro;
var pNode;
var content = new Array;
var contentState = 1;
var timeout = null;

//var searchProgress = "Search for \"%s\" in progress";
//var resTitle = "Search results for \"%s\"";
//var noResMsg = "There is nothing was found";

function loadXMLDoc(url)
{
	ro = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	ro.onreadystatechange = processReqChange;
	ro.open("GET", url, true);
	ro.send(false);
} 

function processReqChange() 
{
	// only if req shows "complete"
  if (ro.readyState == 4) 
  {
  	// only if "OK"
    if (ro.status == 200) 
    {
    	// ...processing statements go here...
      response = ro.responseXML.documentElement;
   		method   = response.getElementsByTagName('method')[0].firstChild.data; //alert(method);
   		result   = response.getElementsByTagName('result')[0];
   		eval(method+'(\'\', result);');
     } 
     else 
     {
	     alert("There was a problem retrieving  the XML data:\n" + ro.statusText);
     }
  }
}


function doSearch( str, result )
{
	if ( !pNode )
	{
		if ( document.getElementById('searchResults') )
		{
			pNode = document.getElementById('searchResults'); //alert('searchRes');
		}
		else
		{
			pNode = document.getElementById('content'); //alert('content');
		}
	}
	
	if ( content.length == 0 )
	{
		saveContent(); //alert(content);
	}

	if ( !result )
	{
		if ( str.length < 3 )
		{
			restoreContent();
		}
		else
		{
			cleanContent();
			rndSearchInProgress(str);
			if (timeout) clearTimeout(timeout);
			url = elBaseURL + '_xml_/__search__/?_form_=search&sstr=' + str; //alert(url);
  		timeout = setTimeout(loadXMLDoc, 1000, url);
		}
	}
	else
	{
		rndSearchResults(result);
	}
}


function saveContent()
{
	for ( var i=0; i<pNode.childNodes.length; i++ )
	{
		content[i] = pNode.childNodes[i].cloneNode(true);
	}
}

function cleanContent()
{
	if ( contentState != 0 )
	{
		while (pNode.childNodes.length>0)
		{
			pNode.removeChild(pNode.childNodes[0]);
		}	
		contentState = 0;
	}
}

function restoreContent()
{
	if ( contentState != 1 )
	{
		cleanContent();
		for ( var i=0; i<content.length; i++ )
		{
			pNode.appendChild(content[i].cloneNode(true));
		}
		contentState = 1;
	}
}


function rndSearchInProgress(str)
{
	cleanContent();
	s = document.createElement('div');
	s.setAttribute('id', 'searchProgress');
	s.setAttribute('class', 'searchProgress');
	s.appendChild( document.createTextNode( searchProgress.replace("%s", str) ) );
	s.appendChild( document.createElement('br'));
	s.appendChild( document.createElement('br'));
	i = document.createElement('img');
	i.setAttribute('src', elBaseURL+'style/icons/Default/lightbox/loading.gif');
	s.appendChild(i);
	pNode.appendChild(s);
	contentState = 2;
}


function rndSearchResults(result)
{
	cleanContent(); 
	contentState = 3;
	
	str    = result.getElementsByTagName('searchString')[0].firstChild.data;
	header = document.createElement('div');
	header.setAttribute('class', 'searchResultHeader');
	header.appendChild( document.createTextNode( resTitle + " \"" + str + "\"" ) );
	pNode.appendChild(header);
	
	records = result.getElementsByTagName('record'); 
	
	if (!records.length)
	{
		pNode.appendChild( document.createTextNode(noResMsg) );
		return;
	}
	
	list = document.createElement('ul');
	
	for (i=0; i<records.length; i++)
	{
		title = records[i].getElementsByTagName('name')[0].firstChild.data;
		url   = records[i].getElementsByTagName('url')[0].firstChild.data;
		
		li = document.createElement('li');
		li.setAttribute('class', 'searchResultList');
		link = document.createElement('a');
		link.setAttribute('href', url);
		link.appendChild(document.createTextNode(title));
		li.appendChild(link);
		list.appendChild(li);
	}
	pNode.appendChild(list);

	
}

