/*
	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='/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) )
      object.style.top = parseInt(object.style.top) - (parseInt(object.scrollHeight) - boxPosY)+"px";
    if (!isNaN(boxPosX) )
	  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="/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="/images//images/ico-sm-alert2.gif" width="16" height="16" border="0" alt="" /> There was a problem grabbing/displaying the webservice.</div>';
			//alert("There was a problem retrieving the XML data:\n" + Req_.statusText);
         }
    }
}

searchBox.prototype.getResults = function(string,type,e)
{	
  if (this.searchString == "" && !string)
    return;
	
  if (string)
    this.searchString = string;
  
  switch (type)
  {
    case "image":
	  xmlURL = "/xml-yahoo-images.cfm?q="+this.searchString;
      hsTitle = "Yahoo! Image Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
	  break;
	case "video":
	  xmlURL = "/xml-yahoo-video.cfm?q="+this.searchString;	
      hsTitle = "Yahoo! Video Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
	  break;
	case "web":
	  xmlURL = "/xml-yahoo-web.cfm?q="+this.searchString;
      hsTitle = "Yahoo! Web Search:&nbsp; <span class='q'>"+this.searchString+"</span>";
	  break;
	case "news":
	  xmlURL = "/xml-yahoo-news.cfm?q="+this.searchString;
      hsTitle = "Yahoo! News Search:&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 "icerocket":
  	  xmlURL = "/xml-icerocket-web.cfm?q="+this.searchString;
	  hsTitle = "IceRocket:&nbsp; <span class='q'>"+this.searchString+"</span>";	
	  break;  
	case "flickr":
  	  xmlURL = "/xml-flickr-images.cfm?q="+this.searchString;	
      hsTitle = "Flickr:&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-cal-2k.cfm?type=cal-2k&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 );

