/*
	Dynamic HoverSmack() Web-Service Search Script v2.5

	by Charon, ForgetFoo (3/18/2005)
	http://www.forgetfoo.com/

	Notes:
	
		Root Object = "foo";
		Results Object = "getResults";
		Arguments = "[search string], [type], event";
		Types = "images, video, web, flickr, msn, pic";

		Example:  foo.getResults('paris hilton','images',event)

	rev. 2/2/2006
	  - positioning on x axis
	  - crowbrow drag-n-drop (now supports firefox)
*/
var foo = new searchBox();
var isIE = false;
var object = null;
var Req_;

function searchBox(title, searchString)
{
	if (!title)
		this.title = "Foo.HoverSmack()";
	else
		this.title = title;
   
	if (!searchString)
		this.searchString = "";
	else
		this.searchString =  searchString;

	this.boxObj = null; 
	this.contentObj = null;
}

searchBox.prototype.beginDrag = function()
{
	eventObj = (window.event) ? window.event : e;
	foo.boxObj.dragX = eventObj.screenX - foo.boxObj.offsetLeft;
	foo.boxObj.dragY = eventObj.screenY - foo.boxObj.offsetTop;
	foo.boxObj.dragging = true;
}

searchBox.prototype.endDrag = function()
{
	foo.boxObj.dragging = false;
}

searchBox.prototype.drag = function()
{
	if (!foo.boxObj)
	return;

	eventObj = (window.event) ? window.event : e;
	if (foo.boxObj.dragging) move(eventObj.screenX - foo.boxObj.dragX, eventObj.screenY - foo.boxObj.dragY);
}

move = function(left, top) {
	foo.boxObj.style.left = left+"px";
	foo.boxObj.style.top = top+"px";
}

function killSearchBox(e)
{
	var obj = (isIE) ? window.event.srcElement : window.event.target;
	while (obj && obj.className != "hoverSearch")
		obj = obj.parentNode;
	if (obj)
		obj.srcBox.destroyBox(); 
}

searchBox.prototype.destroyBox = function()
{
	document.body.removeChild ( this.boxObj );
	this.boxObj = null;
	this.contentObj = null;
	this.searchString = "";
	this.title = "Foo.HoverSmack()";  
	new fooManager().showElems();
}

searchBox.prototype.createBox = function()
{
	this.boxObj = document.createElement("div");
	this.boxObj.srcBox = this;
	this.boxObj.className = "hoverSearch";
	this.boxObj.innerHTML = "<div id='hs_titlebar' class='titlebar'><img class='close' src='/hs/images/ico-redx-off.gif' width='14' height='14' border='0' alt='Close' style='cursor:pointer' />"+this.title+"</div>" //<span class='close' title='Close'>X</span>
	this.boxObj.childNodes[0].childNodes[0].onclick = killSearchBox;  //This will need to be changed if the box's element structure is changed.
	this.boxObj.onselectstart = new Function("return false");
	if (window.addEventListener)
	{
		this.boxObj.childNodes[0].addEventListener( "mousedown", function (e) { window.event = e; return foo.beginDrag(); }, false );
		this.boxObj.childNodes[0].addEventListener( "mouseup", this.endDrag, false );
	}
	else
	{
		this.boxObj.childNodes[0].attachEvent( "onmousedown", this.beginDrag );
		this.boxObj.childNodes[0].attachEvent( "onmouseup", this.endDrag );	
	}
	this.boxObj.move = this.move;
	this.boxObj.dragX = 0;
	this.boxObj.dragY = 0;
	this.boxObj.dragging = false;
 
	// create results container .. only need a link temporarily
	var resultsObj = document.createElement("div");
	resultsObj.className = "results";
	
	// create a permanent link to the content Object so results can be directly added
	this.contentObj = document.createElement("div");
	this.contentObj.id = "hs_inner";
	this.contentObj.className = "content";
	this.contentObj.srcObj = this;
  
	if (this.searchString == "")
		this.contentObj.innerHTML = "<div style='padding:5px 8px'>No search results.</div>";
	
	// fuse contents to the results Object
	resultsObj.appendChild( this.contentObj );
  
	// fuse resultsObj with containing object
	this.boxObj.appendChild( resultsObj );
  
	// add created object to the page
	document.body.appendChild( this.boxObj );
}

function renderAdjust( object, boxPosY, boxPosX )
{
	var maxWidth;
	
	object.style.display = "none";    
	maxWidth = (document.documentElement) ? document.documentElement.scrollWidth : window.scrollX;
	object.style.display = "";
	
	if ( !boxPosY )
		boxPosY = parseInt(object.scrollHeight);
	if ( !boxPosX )
		boxPosX = parseInt(object.scrollWidth);	

	if (!isNaN(boxPosY) )
	{
		if(object.style.top)
			object.style.top = parseInt(object.style.top) - (parseInt(object.scrollHeight) - boxPosY)+"px";
	}
	if (!isNaN(boxPosX) )
	{
		if(object.style.left)
			object.style.left = parseInt(object.style.left) - (parseInt(object.scrollWidth) - boxPosX)+"px";
	}

	if ( isIE )
	{
		if ( document.documentElement.scrollTop > parseInt(object.style.top)) 
			object.style.top = object.offY + 20;
		if ( maxWidth < parseInt(object.style.left) + parseInt( object.scrollWidth) )
			object.style.left = maxWidth - object.offsetWidth - 50;
	} else
	if ( window.scrollY > parseInt(parseInt(object.style.top) - (parseInt(object.scrollHeight) - boxPosY)))
		object.style.top = object.offY + 20 + "px";
	if ( maxWidth < parseInt(parseInt(object.style.left) + parseInt(object.scrollWidth) ))
		object.style.left = maxWidth - object.offsetWidth - 50 + "px";
}

searchBox.prototype.searchXML = function(e,xmlURL) {	
	  
	// branch for native XMLHttpReq_uest object
	isIE = false;
	object = this.contentObj;
	object.innerHTML = '<div style="padding:5px 8px"><img src="/hs/images/loading-bar-wht.gif" width="102" height="5" border="0" vspace="20" alt="Loading..." style="border:none !important;" /></div>';
	var XMLurl = xmlURL; 
	if (window.XMLHttpRequest) {
		Req_ = new XMLHttpRequest();
		Req_.onreadystatechange = this.processReq_Change;
		Req_.open("GET", XMLurl, true);
		Req_.send(null);
		// branch for IE/Windows ActiveX version
	} else if (window.ActiveXObject) {
		isIE = true;
		Req_ = new ActiveXObject("Microsoft.XMLHTTP");
		if (Req_) {
			Req_.onreadystatechange = this.processReq_Change;
			Req_.open("GET", XMLurl, true);
			Req_.send();
		}
	}
	    
	if (!e || !this.boxObj)
		return; 
	var offX, OffY;
	
	if (isIE) 
	{
		offX = e.clientX + document.documentElement.scrollLeft;
		offY = e.clientY + document.documentElement.scrollTop ;
	} else {
		offX = e.pageX;
		offY = e.pageY;
	}
	
	this.boxObj.style.left = (offX - 50) + "px";
	this.boxObj.style.top = (offY - (this.boxObj.offsetHeight) - 20 ) + "px"; 
	this.boxObj.offY = offY;
	this.boxObj.offX = offX;
	renderAdjust( this.boxObj );
}

// handle onReadyStateChange event of Req_ object
searchBox.prototype.processReq_Change = function() {
	// only if Req_ shows "loaded"
	if (Req_.readyState == 4) {
	        // only if "OK"
	        if (Req_.status == 200) {
			var boxPosY = parseInt(object.srcObj.boxObj.scrollHeight);
			var boxPosX = parseInt(object.srcObj.boxObj.scrollWidth);
			object.innerHTML = Req_.responseText;
			renderAdjust( object.srcObj.boxObj, boxPosY, boxPosX );
		} 
		else 
		{
			object.innerHTML = '<div style="padding:20px"><img src="/hs/images/ico-sm-alert2.gif" width="16" height="16" border="0" alt="" /> There was a problem grabbing or displaying the webservice.</div>';
		}
	}
}

searchBox.prototype.getResults = function(string,type,e)
{	
	if (this.searchString == "" && !string)
    		return;
	
	if (string)
		this.searchString = string;
  
	  switch (type)
	  {
		case "image":
			xmlURL = "/hs/ysearch.php?s=image&q="+this.searchString;
			hsTitle = "Yahoo! Image Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
			break;
		case "video":
			xmlURL = "/hs/ysearch.php?s=video&q="+this.searchString;	
			hsTitle = "Yahoo! Video Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
			break;
		case "web":
			xmlURL = "/hs/ysearch.php?s=web&q="+this.searchString;
			hsTitle = "Yahoo! Web Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
			break;
		case "local":
			xmlURL = "/hs/ysearch.php?s=local&q="+this.searchString;
			hsTitle = "Yahoo! Web Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
			break;
		case "news":
			xmlURL = "/hs/ysearch.php?s=news&q="+this.searchString;
			hsTitle = "Yahoo! News Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
			break;
		case "google":
			xmlURL = "/hs/gsearch.php?s=web&q="+this.searchString;
			hsTitle = "Google Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
			break;
		case "flickr":
			xmlURL = "/xml-flickr-images.cfm?s=flickr&q="+this.searchString;	
			hsTitle = "Flickr:&nbsp; <span class='q'>"+this.searchString+"</span>";
			break;
		case "msn":
			xmlURL = "/xmlMsnSearch.cfm?q="+this.searchString;
			hsTitle = "MSN Search:&nbsp; <span class='q'>"+this.searchString+"</span>";	
			break;	
		case "msn_news":
			xmlURL = "/xmlMsnSearch.cfm?type=news&q="+this.searchString;
			hsTitle = "MSN Search News:&nbsp; <span class='q'>"+this.searchString+"</span>";	
			break;
		case "pic":
			xmlURL = "/rpc-getpic.cfm?img="+this.searchString;
			hsTitle = "Display Image";
			break;  
		case "fvid":
			xmlURL = "/rpc-foovid.cfm?vid="+this.searchString;
			hsTitle = "FooVideo";  
			break;
		case "cal":
			xmlURL = "/rpc-topbar-new.cfm?type=cal-posts&blogid="+this.searchString;
			hsTitle = "FooBlog Calendar";   
			break;
		case "fooslides":
			xmlURL = "/rpc-top-ms-tabs.cfm?type=fooslides";
			hsTitle = "FooSlides:&nbsp;"+this.searchString;   
			break;  
		// google blog search:
		//http://google.com/blogsearch_feeds?hl=en&q=monica+belucci&num=10&output=rss  
	}
  
	this.title = hsTitle;
  
	if (!this.contentObj)
	{
		this.createBox();
	}
	else 
	{
		this.destroyBox();
		this.title = hsTitle;
		this.createBox();
	}
  
	this.searchXML(e,xmlURL);
	new fooManager().hideElems();
}

// Functions to hide/show <select>'s on the page...
var _this = fooManager.prototype;
function fooManager() {}
	if (!isIE)
	{
		// hideSelect()
		_this.hideSelect = function() 
		{
	    	var arSelect = document.getElementsByTagName("select");
	    	for(var i=0;i < arSelect.length;i++) {
	        	arSelect[i].style.visibility="hidden";
	    }}
		// showSelect()
		_this.showSelect = function() 
		{
	    	var arSelect = document.getElementsByTagName("select");
	    	for(var i=0;i < arSelect.length;i++) {
	        	arSelect[i].style.visibility="inherit";
	    }}
		
		// hideForm()
		_this.hideForm = function() 
		{
	    	var arForm = document.getElementsByTagName("form");
	    	for(var i=0;i < arForm.length;i++) {
	        	arForm[i].style.visibility="hidden";
	    }}
		// showForm()
		_this.showForm = function() 
		{
	    	var arForm = document.getElementsByTagName("form");
	    	for(var i=0;i < arForm.length;i++) {
	        	arForm[i].style.visibility="inherit";
	    }}
		
		// hideElems()
		_this.hideElems = function() 
		{
	    	var arForm = document.getElementsByTagName("form");
			var arEmbed = document.getElementsByTagName("embed");
			
	    	for(var i=0;i < arForm.length;i++) {
	        	arForm[i].style.visibility="hidden";
			}	
			for(var x=0;x < arEmbed.length;x++) {
	        	arEmbed[x].style.visibility="hidden";	
			}	
	    }
		// showElems()
		_this.showElems = function() 
		{
	    	var arForm = document.getElementsByTagName("form");
			var arEmbed = document.getElementsByTagName("embed");
			
	    	for(var i=0;i < arForm.length;i++) {
	        	arForm[i].style.visibility="inherit";
			}	
			for(var x=0;x < arEmbed.length;x++) {
	        	arEmbed[x].style.visibility="inherit";		
			}	
	    }
		
	}

if (window.addEventListener)
	document.addEventListener( "mousemove", fooMove = function (e) {window.event = e;return foo.drag(); }, false );
else
	document.attachEvent( "onmousemove", foo.drag );

