/*===============================================================
 *  Chameleon Javascipt Utilities
 *
 * created - 7/7/2005
 * authors: dbarron, pkenia
 *
 * (c) excalibur 2005 - all rights reserved - www.convera.com
 *===============================================================*/
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  * determine browser type
  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   var IE = "IE";
   var browser = new Object();
   browser.type = "notIE";
   if( document.all ) { 
     browser.type = IE;
   }

 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  * global variables for the file
  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
    var GENERIC_PAGE_TARGET = "row3col2";
    var debug = false;
    var nl = "\n";
  	
    var searchBoxes = new Array();
    searchBoxes[0] = "general";

    var searchInput = new Array();
    searchInput["general"] = new Object();
    searchInput["general"].linkId = "generalLink";
    searchInput["general"].boxes = new Array();
    searchInput["general"].boxes[0] = "qgeneral";
 	var searchLink = new Array();
  	searchLink[0] = "webLink";
	searchLink[1] = "imageLink";
	searchLink[2] = "videoLink";
	searchLink[3] = "audioLink";
 	defaultSearchLink = 'webLink';
 	
	var languages = new Array();
	languages[0] = "arabic"; //Arabic
	languages[1] = "chinese"; //Chinese
	languages[2] = "english"; //English
	languages[3] = "french"; //French
	languages[4] = "german"; //German
	languages[5] = "hindi"; //Hindi
	languages[6] = "italian"; //Italian
	languages[7] = "japanese"; //Japanese
	languages[8] = "korean"; //Korean
	languages[9] = "portugese"; //Portugese
	languages[10] = "russian"; //Russian
	languages[11] = "spanish"; //Spanish
	  		 	
    var media = new Array();
    media[0] = "text";
    media[1] = "image";
    media[2] = "video";
    media[3] = "audio";
    
    var mediaInput = new Array();
    mediaInput["text"] = new Object();
    mediaInput["text"].linkId = "webLink";

    mediaInput["image"] = new Object();
    mediaInput["image"].linkId = "imageLink";

    mediaInput["video"] = new Object();
    mediaInput["video"].linkId = "videoLink";

    mediaInput["audio"] = new Object();
    mediaInput["audio"].linkId = "audioLink";

	function resetSearchForm() {
		var q = document.getElementById('q');
		var docstart = document.getElementById("docstart");
		if (q) 
			q.value='';
		if (docstart)
			docstart.value='';
	}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * still use this function for the advanced page
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
   function makeQ() {
   
     if(debug) alert( "in makeQ()" );
     
     var query = "";
     
     // set the query if the general text string is set
     var qgeneral = document.getElementById(searchInput["general"].boxes[0]);
     if( qgeneral.value.length > 0 ) query = qgeneral.value;
     
     // set the query if the person fields are set
     var qfname = document.getElementById(searchInput["person"].boxes[0]);
     var qlname = document.getElementById(searchInput["person"].boxes[1]);

     var parens = false;
     if( query.length > 0 && ( qfname.value.length > 0 || qlname.value.length > 0 ) ) {
       query = query + " AND ";
       parens = true;
     }
       
     if( qfname.value.length > 0 && qlname.value.length > 0 ) {
         if( parens ) query = query + "(";
         query = query + "'first:" + qfname.value.toLowerCase() + " last:" + qlname.value.toLowerCase() + "'"; 
         if( parens ) query = query + ")";
     } else if( qfname.value.length > 0 ) {
         if( parens ) query = query + "(";
         query = query + "first:" + qfname.value.toLowerCase(); 
         if( parens ) query = query + ")";
     } else if( qlname.value.length > 0 ) {
         if( parens ) query = query + "(";
         query = query + "last:" + qlname.value.toLowerCase(); 
         if( parens ) query = query + ")";
     }
     
     // set the query if the date fields are set
     var qmonth = document.getElementById(searchInput["date"].boxes[0]);
     var qday = document.getElementById(searchInput["date"].boxes[1]);
     var qyear = document.getElementById(searchInput["date"].boxes[2]);

     if( query.length > 0 && ( qday.value.length > 0 || qmonth.value.length > 0 || qyear.value.length > 0 ) ) {
       query = query + " AND ";
       parens = true;
     }

     if( qday.value.length > 0 && qmonth.value.length > 0 && qyear.value.length > 0 ) {
         if( parens ) query = query + "(";
         query = query + "'edd:" + (qday.value/1) + " edm:" + (qmonth.value/1) + " edy:" + (qyear.value/1) + "'"; 
         if( parens ) query = query + ")";
     } else if( qday.value.length > 0 ) {
         if( parens ) query = query + "(";
         
         if( qmonth.value.length > 0 || qyear.value.length > 0 ) {
           if( qmonth.value.length > 0 )
             query = query + "'edd:" + (qday.value/1) + " edm:" + (qmonth.value/1) + "'"; 
           else
             query = query + "'edd:" + (qday.value/1) + " edy:" + (qyear.value/1) + "'"; 
          } else {
             query = query + "edd:" + (qday.value/1); 
          }
         if( parens ) query = query + ")";
         
     } else if( qmonth.value.length > 0 ) {
         if( parens ) query = query + "(";
         
          if( qyear.value.length > 0 ) 
             query = query + "'edm:" + (qmonth.value/1) + " edy:" + (qyear.value/1) + "'"; 
          else 
             query = query + "edm:" + (qmonth.value/1); 
         if( parens ) query = query + ")";
          
     } else if( qyear.value.length > 0 ) {
         if( parens ) query = query + "(";
         query = query + "edy:" + (qyear.value/1); 
         if( parens ) query = query + ")";
     }

     // set the query if the phone fields are set
     var qareacode = document.getElementById(searchInput["phone"].boxes[0]);
     var qregioncode = document.getElementById(searchInput["phone"].boxes[1]);
     var qlocalcode = document.getElementById(searchInput["phone"].boxes[2]);
   
     if( query.length > 0 && ( qareacode.value.length > 0 || qregioncode.value.length > 0 || qlocalcode.value.length > 0 ) ) {
       query = query + " AND ";
       parens = true;
     }

     if( qareacode.value.length > 0 && qregioncode.value.length > 0 && qlocalcode.value.length > 0 ) {
         if( parens ) query = query + "(";
         query = query + "'eta:" + qareacode.value + " etr:" + qregioncode.value + " etl:" + qlocalcode.value + "'"; 
         if( parens ) query = query + ")";
     
     } else if( qareacode.value.length > 0 ) {
         if( parens ) query = query + "(";
         
         if( qregioncode.value.length > 0 || qlocalcode.value.length > 0 ) {
           if( qregioncode.value.length > 0 )
             query = query + "'eta:" + qareacode.value + " etr:" + qregioncode.value + "'"; 
           else
             query = query + "'eta:" + qareacode.value + " etl:" + qlocalcode.value + "'"; 
          } else {
             query = query + "eta:" + qareacode.value; 
          }
         if( parens ) query = query + ")";
         
     } else if( qregioncode.value.length > 0 ) {
         if( parens ) query = query + "(";
         
          if( qlocalcode.value.length > 0 )
             query = query + "'etr:" + qregioncode.value + " etl:" + qlocalcode.value + "'"; 
          else
             query = query + "etr:" + qregioncode.value; 
         if( parens ) query = query + ")";

     } else if( qlocalcode.value.length > 0 ) {
         if( parens ) query = query + "(";
         query = query + "etl:" + qlocalcode.value; 
         if( parens ) query = query + ")";
     }

     if( debug ) alert("query=" + query + nl);
     
     // set the q request parameter with the query
     var q = document.getElementById('q');
     q.value = query;
     //searchInput["general"].orig = qgeneral.value;
     qgeneral.value = query
     
     qfname.value = "";
     qlname.value = "";
     
     qday.value = "";
     qmonth.value = "";
     qyear.value = "";
     qareacode.value = "";
     qregioncode.value = "";
     qlocalcode.value = "";

   }


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * toggleVisibility()
 * usage: toggleVisibility( 'objid')
 * objId - is the id of the document element you wish to toggle
 *         between visible and hidden.
 * This function will toggle the visibility style value for the
 * given element in the document.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  function toggleVisibility( objId ) {
    var obj = document.getElementById(objId);
    if(debug) alert(" objId=" + objId + " obj=" + obj + " obj.style.visibility=" + obj.style.visibility + nl);
    if( obj.style.visibility == 'visible' ) {
      setVisibility(objId, 'hidden');
    } else {
      setVisibility(objId, 'visible');
    } 
    if(debug) alert(" objId=" + objId + " obj=" + obj + " obj.style.visibility=" + obj.style.visibility + nl);
  }

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * toggleObjectsVisibility()
 * usage: toggleObjectsVisibility( 'objid')
 * objId - is the id of the document elements you wish to toggle
 *         between visible and hidden.
 * This function will toggle the visibility style value for the
 * given elements in the document.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  function toggleObjectsVisibility( objId ) {
    
    var obj = document.getElementsByName(objId);
    var moreObjects = document.getElementById(objId+'More');
    if (!obj) {
        return;
    }
    if( debug ) alert("moreObjects="+moreObjects);
    
    var moreVisible = true;
    
      if( debug ) alert(" objId=" + objId + " obj=" + obj + nl);
      if( debug ) alert(" objId=" + objId + " obj=" + obj + nl + " length: " + obj.length);

    for( i = 0; i < obj.length; i++ ){
        // alert("obj[i].style.visibility:"  + obj[i].style.visibility)
        if( obj[i].style.visibility == 'visible' ) {
          obj[i].style.visibility = 'hidden';
          obj[i].style.display = 'none';
	      moreVisible = false;
	    } else {
	      obj[i].style.visibility = 'visible';
          //obj[i].style.display = '';
          obj[i].style.display = 'inline';
	    }
	    if(debug) alert(" objId=" + objId + " obj["+i+"]=" + obj[i] + " obj.style.visibility=" + obj[i].style.visibility + nl);
    } // end for()
    
    if( moreObjects != null ) {
	    
	    if( moreVisible ) {
	    
	      if( moreObjects.style.visibility == 'hidden'  ) {
		      moreObjects.style.visibility = 'visible';
		      moreObjects.style.display = 'inline';
		  }
		   
	    } else {
	      
	      if( moreObjects.style.visibility == 'visible' ) {
              moreObjects.style.visibility = 'hidden';
		      moreObjects.style.display = 'none';
		  } else {
		      toggleObjectsVisibility(objId+'M');
		  }

	    }
    }
    
  }

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * toggleImage()
 *
 * usage: toggleImage('objid', 'imageA', 'imageB')
 *
 * objId - is the id of the image you wish to toggle
 *         between imageA and imageB
 * imageA - one of the two images you wish to toggle
 * imageB - one of the two images you wish to toggle
 *
 * This function will toggle the visibility image of an image
 * object between the two given images.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  function toggleImage( objId, imageA, imageB ) {
    var obj = document.getElementById(objId);
    var src = obj.src;
   // if(debug) alert(" objId=" + objId + " obj=" + obj + " obj.style.visibility=" + obj.style.visibility + nl);
    if( src.indexOf(imageA) > 0 ) {
      obj.src = imageB;
    } else {
      obj.src = imageA;
    } 
    //if(debug) alert(" objId=" + objId + " obj=" + obj + " obj.src=" + obj.src + nl);
  }
  
/* JR General purpose toggle for any style attribute */
	function toggleStyleAttribute(objId, attr, valA, valB)
	{
		var obj = document.getElementById(objId);	
		var curStyle = eval("obj.style." + attr);
		if ( curStyle.length == 0 || curStyle == valA )
			eval("obj.style." + attr + "=\'" + valB + "\'");
		else
			eval("obj.style." + attr + "=\'" + valA + "\'");
						
		return false;
	}


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setVisibility()
 * usage: setVisibility( 'objid', 'value')
 * objId - is the id of the document element you wish to toggle
 *         between visible and hidden.
 * value - the value of the visibility style property. current
 *         valid values are 'visible' and 'hidden'
 * This function will set the visibility style value for the
 * given element in the document.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  function setVisibility( objId, value ) {
    if(debug) alert("setVisibility() objId=" + objId + nl);
    var obj = document.getElementById(objId);
    if( obj != null ) {
	    if( value == 'hidden') {
	      obj.style.visibility = 'hidden';
	      obj.style.display = 'none';
	    } else {
	      obj.style.visibility = 'visible';
	      obj.style.display = '';
	    } 
	 }
  }

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * toggleTypeVisibility()
 * usage: toggleVisibility( 'objid')
 * objId - is the id of the document element you wish to toggle
 *         between visible and hidden.
 * This function will toggle the visibility style value for the
 * given element in the document.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

  function toggleTypeVisibility( objId, type ) {
    var obj = document.getElementById(objId);
    if(debug) alert("toggleTypeVisibility() objId=" + objId + " obj=" + obj + " obj.style.visibility=" + obj.style.visibility + nl);
    if( obj.style.visibility == 'visible' ) {
      obj.style.visibility = 'hidden';
      obj.style.display = 'none';
    } else {
      obj.style.visibility = 'visible';
      obj.style.display = type;
    } 
    if(debug) alert("toggleTypeVisibility() objId=" + objId + " obj=" + obj + " obj.style.visibility=" + obj.style.visibility + nl);
  }

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setSearchType()
 * usage: setSearchType( 'sForm', 'linkId')
 * sForm - the current search form
 * linkId - the actual link text being clicked
 * This function will set the search type based on the current
 * value provided by the linkId field
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  function setSearchType( sForm, linkId ) {

    if( debug ) alert("setSearchType() sForm=" + sForm + " linkId=" + linkId + nl);

    var lObj = document.getElementById('searchLink');
  	lObj.value = linkId;

  	var uClass = 'upperSearchLink';
  	var uClassSelected = 'upperSearchLinkSelected';
  	var lClass = 'lowerSearchLink';
  	var lClassSelected = 'lowerSearchLinkSelected';
  	

  	for( i=0; i < searchLink.length; i++ ) {
  	  
  	   if( debug ) alert("setSearchType() searchLink[" + i + "]=" + searchLink[i] + nl);
  	  
  	  if( searchLink[i] == linkId ) {
  	    var linkObj = document.getElementById(linkId);
  	    if( linkObj != null ) linkObj.className = uClassSelected;
  	    if( debug) alert("setSearchType() bolding: " + linkId + "/" + searchLink[i]  + nl );
  	    
  	    if( debug ) alert("setting the domaintext field for " + searchLink[i] + "=" + searchTabs[searchLink[i]].domain);
  	    
  	    // set the domain text field
  	    var domainText = document.getElementById("d");
  	    if( searchTabs[searchLink[i]].domain.length > 0 )
  	    {
  	      if( searchTabs[searchLink[i]].domain != "CLEAR_DOMAIN_TEXT" )
  	        domainText.value = searchTabs[searchLink[i]].domain;
  	      else
  	        domainText.value = "";
  	    }
  	   
   	  } else {
  	    var searchLinkObj = document.getElementById(searchLink[i]);
  	    if( searchLinkObj != null ) searchLinkObj.className = uClass;
  	    if( debug ) alert("setSearchType() not bolding: " + linkId + "/" + searchLink[i] + nl );
  	  }

	  // change the tabs
	  if( false) {
	  
	  if(debug) { 
	    alert("setSearchType() searchTabs[searchLink[" + i + "]]=" + searchTabs[searchLink[i]] + nl);
	    alert("setSearchType() searchTabs[].linkId=" + searchTabs[searchLink[i]].linkId + nl);
	    alert("setSearchType() A searchTabs[].tabId=" + searchTabs[searchLink[i]].tabId + nl);
	    alert("setSearchType() searchTabs[].goId=" + searchTabs[searchLink[i]].goId + nl);
	  } 

      if( debug ) alert("setSearchType() searchLink[" + i + "]=" + searchLink[i] + " equal to " + linkId + nl);
 
   	  if( searchTabs[searchLink[i]].linkId == linkId ) {
  	    
  	    // change the text link class
  	    var linkObj = document.getElementById(linkId);
  	    linkObj.className = uClassSelected;
  	    
  	    // change the tab class
  	    //var tabId = searchTabs[searchLink[i]].tabId;
  	    var tabObj = document.getElementById(searchTabs[searchLink[i]].tabId);
  	    tabObj.className = "searchSelectedTab";
  	    
  	    
  	    // change the instant go button to proper backgound color
        //var goId = document.getElementById(searchTabs[searchLink[i]].goId);
        //goId.src = "images/green-go-bb.gif";
        //goId.onMouseOver = "images/gray-go-bb.gif";
        //goId.onMouseOut = "images/green-go-bb.gif";
  	    if( debug) alert("setSearchType() bolding: " + linkId + "/" + searchTabs[i].linkId  + nl);
  	    
   	  } else {

  	    // change the text link class
  	    var searchLinkObj = document.getElementById(searchTabs[searchLink[i]].linkId);
  	    searchLinkObj.className = uClass;

  	    // change the tab class
  	    var tabObj = document.getElementById(searchTabs[searchLink[i]].tabId);
  	    tabObj.className = "searchUnselectedTab";

  	    // change the instant go button to proper backgound color
  	    if( debug ) alert("setSearchType() not bolding: " + linkId + "/" + searchTabs[searchLink[i]].linkId  + nl);
        var goId = document.getElementById(searchTabs[searchLink[i]].goId);
        //goId.src = "images/green-go-gb.gif";
        //goId.onMouseOver = "images/gray-go-gb.gif";
        //goId.onMouseOut = "images/green-go-gb.gif";
  	  }
  	  
  	  }

     }  

  }
  
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setMedia()
 * usage: setMediaType( 'media' )
 * media - the type of media being searched
 * This function will set the type of media being searched
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 function setMedia( media ) {
    var searchform = document.getElementById('search');
    try {
     if (searchform.elements) {
    searchform.elements['media'].value = media;
         }
    document.getElementById("media").value = media;
    }catch(err){
      // do nothing if this throws an errror
    }
 }

 function setUserAction( useraction ) {
    var searchform = document.getElementById('search');
    try {
	    if (searchform.elements) {
	    	searchform.elements['useraction'].value = useraction;
	    }
	    document.getElementById("useraction").value = useraction;
    }catch(err){
      // do nothing if this throws an errror
      // just don't tosh an error in IE
    }
 }

 function setDoccount( doccount ) {
    var searchform = document.getElementById('search');
    try {
	    if (searchform.elements) {
	    	searchform.elements['doccount'].value = doccount;
	    }
	    document.getElementById("doccount").value = doccount;
    }catch(err){
      // do nothing if this throws an errror
      // just don't tosh an error in IE
    }
 }

 function setDocstart( docstart ) {
    var searchform = document.getElementById('search');
    try {
	    if (searchform.elements) {
	       searchform.elements['docstart'].value = docstart;
	    }
	    document.getElementById("docstart").value = docstart;
    }catch(err){
      // do nothing if this throws an errror
      // just don't tosh an error in IE
    }
 }

 function setQgeneral( qgeneral ) {
    var searchform = document.getElementById('search');
    try {
	    if (searchform.elements) {
	        searchform.elements['qgeneral'].value = qgeneral;
	    }
    	document.getElementById("qgeneral").value = qgeneral;
    }catch(err){
      // do nothing if this throws an errror
      // just don't tosh an error in IE
    }
 }

 function setQ( q ) {
    var searchform = document.getElementById('search');
    try {
	    document.getElementById("q").value = q;
    }catch(err){
      // do nothing if this throws an errror
      // just don't tosh an error in IE
    }
 }

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setInputType()
 * usage: setInputType( 'type', 'linkId' )
 * type - the type of media being searched
 * linkId - the actual link text being clicked
 * This function will set the type of search input fields there are
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

  function setMediaType( sForm, linkId ) {
    
    var sObj = document.getElementById("media");
    sObj.value = linkId;
  	
  	var selected = 'searchLinkSelected';
  	var unselected = 'searchLink';
  	
  	for( i=0; i < media.length; i++ ) {
  	  
  	  if(debug) alert("setMediaType() mediaInput[media[" + i + "]]=" + mediaInput[media[i]] + nl);
  	    var selectedInputObj = document.getElementById(mediaInput[media[i]].linkId);

  	  if( media[i] == linkId ) {
  	    if( selectedInputObj != null) selectedInputObj.className = selected;
  	    if(debug) alert("setMediaType() changing: " + linkId + "/" + mediaInput[media[i]].linkId + nl);
   	  } else {
  	    if( selectedInputObj != null ) selectedInputObj.className = unselected;
  	    if(debug) alert("setMediaType() not changing: " + linkId + "/" + mediaInput[media[i]].linkId  + nl);
  	  }
  	  
  	}
 		
  }


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setInstantMediaType()
 * usage: setMediaType( 'sForm', 'mediaType' )
 * sForm - the current search form
 * mediaType - the media type to switch to and submit a search
 * This function will set the type of media being searched, then
 * submit the search.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 function setInstantMediaType( sForm, mediaType) {
    
    var mediaObj = document.getElementById('media');
    var searchType = document.getElementById('searchType').value;
	var form = document.getElementById(sForm);
    
    if( debug ) alert("setInstantMediaType () sForm=" + sForm + " mediaType=" + mediaType + nl);
    
    for( i=0; i < media.length; i++ ) {
      if( media[i] == mediaType ) 
        setMediaType( sForm, mediaType);
    }
    
    setDocstart(0);
    checkSearchBoxes( searchType, sForm, 'button');
 }
 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setInstantSearchType()
 * usage: setMediaType( 'sForm', 'mediaType' )
 * sForm - the current search form
 * mediaType - the media type to switch to and submit a search
 * This function will set the type of media being searched, then
 * submit the search.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 function setInstantSearchType( sForm, searchType) {
    var searchObj = document.getElementById('searchType');
    
    if( debug ) alert("setInstantSearchType() sForm=" + sForm + " searchType=" + searchType + nl);
    
    for( i=0; i < searchLink.length; i++ ) {
      if( searchLink[i] == searchType )
        setSearchType( sForm, searchType);
    }
    
    checkSearchBoxes( searchType, sForm, 'button');
  }

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setInputType()
 * usage: setInputType( 'type', 'linkId' )
 * type - the type of media being searched
 * linkId - the actual link text being clicked
 * This function will set the type of search input fields there are
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  function setInputType( sForm, linkId ) {
    
    var sObj = document.getElementById('searchType');
    sObj.value = linkId;
  	
  	var selected = 'searchLinkSelected';
  	var unselected = 'searchLink';
  	
  	var visible = 'visible';
  	var hidden = 'hidden';
  	
  	for( i=0; i < searchBoxes.length; i++ ) {
  	  
  	  if(debug) alert("setInputType() searchInput[searchBoxes[" + i + "]]=" + searchInput[searchBoxes[i]] + nl);
  	  
        var inputObj = document.getElementById(searchBoxes[i]);
  	    var selectedInputObj = document.getElementById(searchInput[searchBoxes[i]].linkId);

  	  if( searchBoxes[i] == linkId ) {
  	    if( inputObj != null ) inputObj.className = visible;
  	    if( selectedInputObj != null) selectedInputObj.className = selected;
  	    if(debug) alert("setInputType() changing: " + linkId + "/" + searchInput[searchBoxes[i]].linkId  + nl);
  	    document.getElementById(searchInput[linkId].boxes[0]).focus();
   	  } else {
  	    if( inputObj != null ) inputObj.className = hidden;
  	    if( selectedInputObj != null ) selectedInputObj.className = unselected;
  	    if(debug) alert("setInputType() not changing: " + linkId + "/" + searchInput[searchBoxes[i]].linkId  + nl);
  	  }
  	  
  	}
 		
  }



/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * checkSearchBoxes()
 * usage: checkSearchBoxes( 'searchType','formId','caller')
 * searchType - is the value of the select object that specifies 
                the type of search
 * formId - is the id of the form we will submit
 * caller - represents who is calling this function. If its 'button' 
            then submit the form else don't
 * This function checks all the text boxes associated with a 
 * specific type of search represented by the searchType parameter. 
 * If any of the text field has length > 0 i.e. it contains some 
 * search string, then form can be sumbitted. But it is submitted 
 * only if caller is 'button' else it just sets the 'docstart' = 0
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
 function checkSearchBox()
  {
    
    if( debug ) alert("In checkSearchBox");
    
    //var searchform = document.getElementById('search');
      var searchform = document.SearchForm;
       var submit = false;
    if (searchform == null) {
        alert("ERROR: search form not found")
    } else {

    }
    if(debug) alert("useraction=" + searchform.elements['useraction']);

      // hkim 7/6/07: searchform.elements does not exist in firefox if gotten from
      //  searchform = document.getElementById('search')
      //   .....so use getElementById to get fields.
      //  or use searchform = document.SearchForm.

       //Check if any of the general search string is non empty.
//   	var qgeneral = searchform.elements['qgeneral'];
//   	var q = searchform.elements['q'];

      var qgeneral = document.getElementById('search-box');
      var q = document.getElementById('q');
      if (qgeneral == null) {
          alert("ERROR: qgeneral does not exist");
      }
      if (q == null) {
          alert("ERROR: q does not exist");
      }

    if( debug ) alert("qgeneral.value=" + qgeneral.value + " q=" + q.value);
    if( debug ) alert("qgeneral.value.length=" + qgeneral.value.length);

	var xmlSearch = document.getElementById('xmlSearch');
	if (xmlSearch && xmlSearch.value == 'true')
	{
		var inputs = document.getElementsByTagName("input");
		for (var i = 0; i < inputs.length; i++)
		{
			if (inputs[i].name && inputs[i].name.indexOf("xmlSearch")==0)
			{
				if (inputs[i].value.length>0)
				{
					submit = true;
					break;
				}				
			}
		}
	}
	
	if( qgeneral.value.length > 0 ) 
	{
		submit = true;
	}


   	if( submit ) {

        if( debug ) alert( "checkSearchBox() submitting form here...");

   		setDocstart(0);
		q.value = qgeneral.value;
	   	searchform.submit();

        if( debug ) alert("qgeneral.value=" + qgeneral.value + " q=" + q.value);
	   	
	 } else {
	   return false;
	 }
  }
 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * checkSearchBoxes()
 * usage: checkSearchBoxes( 'searchType','formId','caller')
 * searchType - is the value of the select object that specifies 
 *              the type of search
 * formId - is the id of the form we will submit
 * caller - represents who is calling this function. If its 'button' 
 *          then submit the form else don't
 * This function checks all the text boxes associated with a 
 * specific type of search represented by the searchType parameter. 
 * If any of the text field has length > 0 i.e. it contains some 
 * search string, then form can be sumbitted. But it is submitted 
 * only if caller is 'button' else it just sets the 'docstart' = 0
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
 function checkSearchBoxes( searchType, formId, caller)
  {
   	if( debug ) alert("checkSearchBoxes() searchType=" + searchType + " formId=" + formId + " caller=" + caller + nl);
   	if( debug ) alert("checkSearchBoxes() searchInput[" + searchType + "].boxes[0]=" + searchInput["general"].boxes[0] + nl);
   	
   	var submit = false;
    
    if( debug ) alert( "checkSearchBoxes() submit=" + submit);
   	
   	//Check if any of the associated text fields are non empty.
   	//If any text field is non empty, form can be sumbitted, form can be submitted
   	var boxes = searchInput["general"].boxes;
   	for(i=0; i < boxes.length; i++) {
        if( debug ) alert( "checkSearchBoxes() general: document.getElementById("+boxes[i]+").value).length=" + document.getElementById(boxes[i]).value.length);
   		if((document.getElementById(boxes[i]).value).length < 1)
   		  document.getElementById(boxes[i]).value = "";
   		else
   		  submit = true;
   	}
    if( debug ) alert( "checkSearchBoxes() submit=" + submit);
   	
   	boxes = searchInput["person"].boxes;
   	for(i=0; i < boxes.length; i++) {
        if( debug ) alert( "checkSearchBoxes() person: document.getElementById(boxes[i]).value).length=" + document.getElementById(boxes[i]).value.length);
   		if((document.getElementById(boxes[i]).value).length < 1) 
   		  document.getElementById(boxes[i]).value = "";
   		else 
   		  submit = true;
   	}
    if( debug ) alert( "checkSearchBoxes() submit=" + submit);
   	
   	boxes = searchInput["date"].boxes;
   	for(i=0; i < boxes.length; i++) {
        if( debug ) alert( "checkSearchBoxes() date: document.getElementById(boxes[i]).value).length=" + document.getElementById(boxes[i]).value.length);
   		if((document.getElementById(boxes[i]).value).length < 1) 
   		  document.getElementById(boxes[i]).value = "";
   		else 
   		  submit = true;
   	}
    if( debug ) alert( "checkSearchBoxes() submit=" + submit);

   	boxes = searchInput["phone"].boxes;
   	for(i=0; i < boxes.length; i++) {
        if( debug ) alert( "checkSearchBoxes() phone: document.getElementById(boxes[i]).value).length=" + document.getElementById(boxes[i]).value.length);
   		if((document.getElementById(boxes[i]).value).length < 1) 
   		  document.getElementById(boxes[i]).value = "";
   		else 
   		  submit = true;
   	}
   
    if( debug ) alert( "checkSearchBoxes() submit=" + submit);
   
    if( searchType == 'advanced') { 
	    var media = document.getElementById('media');
	    if( media == 'webLink' ) 
	      setAdvSearch('webLink','text','searchText',10);
	    else if( media == 'imageLink' )
	      setAdvSearch('imageLink','image','searchImage',15);
	    else if( media == 'videoLink' ) 
	      setAdvSearch('videoLink','video','searchVideo',5);
	    else if( media == 'audioLink' ) 
	      setAdvSearch('audioLink','audio','searchAudio',10);
   }

   	if( submit ) {

      if( debug ) alert( "checkSearchBoxes() submitting form here...");

    	var searchform = document.getElementById(formId);
    	
   		searchform.elements['docstart'].value = 0;
		searchform.elements['q'].value='';
	   	searchform.submit();
	 }
  }
  
  
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setOnLoad()
 * usage: setOnLoad( 'sForm')
 * sForm - is the value of the search form being loaded
 * This function sets the proper input search type when the page
 * is loaded.
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function setOnLoad(sForm, sType) {
    var theform = document.forms[sForm];
      if (theform == null) {
          alert("ERROR: form " + sForm + " is not found.")
      }

    var media = document.getElementById('media');
	//var link = document.getElementById('searchLink');
	//var type = document.getElementById('searchType');
	var qgeneral = document.getElementById('search-box');
	var q = document.getElementById('q');
	
	// reset the temporary free form paramters
	var all = document.getElementById('all');
	if ( all != null ) all.value = 0;
	
	     
    if( qgeneral.value.length == 0 && q.value.length > 0 ) qgeneral.value = q.value;
	    
    if( sType == 'Advanced') {
	    
	    if( debug ) alert("media=" + media.value);
	    
	    if( media.value == 'text' ) 
	      setAdvSearch('webLink','text','searchText',10);
	    else if( media.value == 'image' )
	      setAdvSearch('imageLink','image','searchImage',15);
	    else if( media.value == 'video' ) 
	      setAdvSearch('videoLink','video','searchVideo',5);
	    else if( media.value == 'audio' ) 
	      setAdvSearch('audioLink','audio','searchAudio',10);
   }
      // Make sure to use getElementByName, not byId, since id varies.
  // ns but not ie:    var searchTypeRadio = theform.elements['searchType'];
   var searchTypeRadio = document.getElementsByName('searchType');
   var defaultRadioValue = "defLink";

   if (searchTypeRadio != null) {
       radioValue = getCheckedValue(searchTypeRadio);
       if (radioValue == "") {
           // set default value to defLink
           radioValue = defaultRadioValue;
       }
       if (radioValue == "defLink") {
           toggleUkOnlyEnabled(true)
       } else {
           toggleUkOnlyEnabled(false)
       }
   } else {
       alert("ERROR: searchType is not found")
   }
   

   return true;
   
  }


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setKey()
 * usage: setKey( 'key')
 * key - pass key to use the service
 * This function sets the pass key to validate the user
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
 function setKey( key ) {
	//var keyObj = document.getElementById('key');
	//keyObj.value = key;
 }

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * clearLanguages()
 *
 * usage: clearLanguages( )
 *
 * This function clears all the language checkboxes if the
 * all languages box is checked.  Otherwise it does nothing. 
 * It also ensures that the all languages box is checked if the
 * user tries to uncheck while there are no other languages 
 * checked.
 *
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function clearLanguages( ) {
	   
	var all = document.getElementById('allLanguages');
	all.checked = true;
	for( i=0; i<languages.length; i++ ) {
	  var language = document.getElementById(languages[i]);
	  language.checked = false;
	  if(debug) alert("clearLanguages() languages[" + i + "]=" + languages[i] + " language.checked=" + language.checked + nl);
      
	}
		
  }
 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setAllLanguages()
 * usage: setAllLanguages( value )
 * value - the value of the specific language checkbox
 * This function sets the all languages checkbox based on the 
 * specific language checkbox settings as they are checked on 
 * or off. 
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function setAllLanguages( value ) {
	   
	var all = document.getElementById('allLanguages');
	
	if( value ) {
	  all.checked = false;
	} else {
	  var count = 0;
	  // if any one of the languages are checked then check off all languages
	  for( i=0; i<languages.length; i++ ) {
	    var language = document.getElementById(languages[i]);
	    if( language.checked ) { 
	      all.checked = false;
	      count = count + 1;
	    }
	  }

      //alert("count=" + count);
      // if none of the languages are checked then check on all languages
      if(count == 0 ) all.checked = true;
	  
	}
		
  }
  
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setFormAction()
 * usage: setFormAction( 'sForm', 'action')
 * sForm - is the value of the search form to set its action to
 * the given 'action'
 * action - is the value to set the 'sform' action to
 * This function sets the given form action to the given action 
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function setFormAction( sForm, action ) {
	var form = document.getElementById(sForm);
    form.action = action;
  }
  
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * submitForm()
 * usage: submitForm( 'sForm')
 * sForm - is the value of the search form to set its action to
 * the given 'action'
 * This function submits the given form  
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function submitForm( sForm ) {
	var form = document.getElementById(sForm);
	if(debug) alert("submitForm() sForm=" + sForm + " searchType=" + form.searchType.value + " searchLink=" + form.searchLink.value + nl); 
	form.submit();
  }
 
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setElementValue()
 * usage: setElementValue( 'name', 'value')
 * name - is the value of the element to set
 * value - is the value to set it to
 * This function set an element value
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function setElementValue( name, value ) {
	var elem = document.getElementById(name);
	elem.value = value;
  }
 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * getElementValue()
 * usage: getElementValue( 'name' )
 * name - is the value of the element to set
 * This function gets an element value
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function getElementValue( name ) {
	var elem = document.getElementById(name);
	return elem.value;
  }
 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * setElementChecked()
 * usage: setElementChecked( 'name', 'value')
 * name - is the value of the element to set
 * value - is the value true or false to set checkbox to
 * This function set a checkbox element value
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function setElementChecked( elem, value ) {
	elem.checked = value;
  }
 
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * getAdvSearchForm()
 * usage: getAdvSearchForm( )
 * This function is a helper function to call the functions needed
 * to get the advanced search form
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 
  function getAdvSearchForm( ) {
 	  setElementValue('advanced','true'); 
	  setFormAction('search','EUIAdvancedSearchForm.do'); 
	  submitForm('search');
  }
  
  function checkField( type ) {
    if( type == 'qmonth' ) {
      var month = document.getElementById("qmonth");
      if( month.value.length > 0 && (isNaN(month.value) || (month.value < 1) || (month.value > 12))) {
        alert("Month must be a number between 1 and 12");
        month.value = "";
      }
    } else if( type == 'qday' ) {
      var day = document.getElementById("qday");
      if( day.value.length > 0 && (isNaN(day.value) || (day.value < 1) || (day.value > 31))) {
        alert("Day must be a number between 1 and 31");
        day.value = "";
      }
    } else if( type == 'qyear' ) {
      var year = document.getElementById("qyear");
      if( year.value.length > 0 && (isNaN(year.value))) {
        alert("Year must be a valid number");
        year.value = "";
      }
    } else if( type == 'qareacode' ) {
      var field = document.getElementById("qareacode");
      if( field.value.length > 0 && (isNaN(field.value))) {
        alert("Area Code must be a valid number");
        field.value = "";
      }
    } else if( type == 'qregioncode' ) {
      var field = document.getElementById("qregioncode");
      if( field.value.length > 0 && (isNaN(field.value))) {
        alert("Region Code must be a valid number");
        field.value = "";
      }
    } else if( type == 'qlocalcode' ) {
      var field = document.getElementById("qlocalcode");
      if( field.value.length > 0 && (isNaN(field.value))) {
        alert("Local Code must be a valid number");
        field.value = "";
      }
    }
  
  
  }
  
  function isEmpty(o) {
    if (isObject(o)) {
      for (var i in o) {
         return false;
      }
    }
    return true;
  }
  
  function isObject(a) {
    return (typeof a == 'object' && !!a) || isFunction(a);
  }
  
  function isFunction(a) {
    return typeof a == 'function';
  }

function getCheckedValue(radioObj) {
    if(!radioObj)
        return "";
    var radioLength = radioObj.length;
    if(radioLength == undefined)
        if(radioObj.checked)
            return radioObj.value;
        else
            return "";
    for(var i = 0; i< radioLength; i++) {
        if(radioObj[i].checked) {
            return radioObj[i].value;
        }
    }
    return "";
}

  function toggleUkOnlyEnabled(toggleValue) {
      var ukcheckbox = document.getElementById("ukOnly");
      //var ukScope = document.getElementById("ukScope");

      if (ukcheckbox != null) {
            ukcheckbox.disabled = !toggleValue;
            //Workaround to force repaint for IE6
            var x = document.getElementById("search");
            x.style.visibility="hidden";
            x.style.visibility="visible";
       }

  }


function addLoadEvent(func) {
	var oldonload = window.onload;
  	if (typeof window.onload != 'function') 
  	{
    	window.onload = func;
  	} 
  	else 
  	{
    	window.onload = function() 
    	{
      		oldonload();
      		func();
    	}
  	}
}

  	
//JR Cookie handler functions
function createCookie(name,value,days)
{
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name)
{
	createCookie(name,"",-1);
}



//the Omniture callback function  
//function omniture(pageurl, pagename, nhits, p1, p2, p3, p4, p5 ,p6, p8 )  
function omniture(pageurl, pagename, nhits, qgeneral, docstart, p3, p4, p5 ,p6, p8 )  
{
	//alert("entering omniture() - self.s=" + self.s);
	if (self.s)
	{
		s.pageName=pagename;
		s.pageURL=pageurl;
		s.channel='Search';
		if(qgeneral) 
		{
			s.prop1=s.getQueryParam(qgeneral);
			s.eVar1 = s.prop1;
			if (nhits != null)
			{
				if (nhits > 0)
				{
					s.events="event1";
				}
				else
				{
					s.events="event2";
				}
			}
		}
		if(docstart) 
		{
			s.prop2=s.getQueryParam(docstart);
		}
		else
		{
			s.prop2=0;
		}
		if(p3) {
			var uk = s.getQueryParam('ukOnly');
			if ((uk == 'on') || (uk == 'true')) 
			{
				s.prop3 = 'ukOnly';
				s.prop7 = 'UK Only';
			}
			else 
			{
				s.prop3 = s.getQueryParam(p3);
				s.prop7 = 'All';
			}
		}
		if(p4) s.prop4=s.getQueryParam(p4);
		if(p5) s.prop5=s.getQueryParam(p5);
		if(p6) s.prop6=s.getQueryParam(p6);
		if(p8) {
			var p=s.getQueryParam(p8);
			if (p != 'all') s.prop8=p;
		}
		//alert(s.pageName + "," + nhits + "," + s.pageURL + "," + s.prop1 + "," + s.prop2 + "," + s.prop3 + "," + s.prop4 + "," + s.prop5 + "," + s.prop6 + "," + s.prop7 + "," + s.prop8)
		var s_code=s.t();
		return s_code;
	}
}


function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function hideFeedback()
{
	var el = document.getElementById('userFeedback');
	el.style.display = 'none';
	return false;
}

function showFeedback(obj)
{
    try
    {
		var el = document.getElementById('userFeedback');
		var help_yes = document.getElementById('help_yes');
		help_yes.checked = false;
		var help_no = document.getElementById('help_no');
		help_no.checked = false;
		var user_comments = document.getElementById('comments');
		user_comments.value = "";
		el.style.display = 'block';;
		el.style.left =  (findPosX(obj) + 15) + 'px';
		el.style.top = (findPosY(obj) - 45) + 'px';
		uf_url = obj.href;
	}
	catch (e) {}	
	return false;
}
function hideFeedbackResponse()
{
	var el = document.getElementById('userFeedbackResponse');
	el.style.display = 'none';
	return false;
}
function showFeedbackResponse()
{
	hideFeedback();
	var obj = document.getElementById('userFeedback');
	var el = document.getElementById('userFeedbackResponse');
	el.style.display = 'block';
	el.style.left =  (findPosX(obj) + 15) + 'px';
	el.style.top = (findPosY(obj) - 45) + 'px';
	return false;

}
function replaceAll(s, s1, s2)
{
	while ( s.indexOf(s1) != -1)
	{
		s = s.replace(s1,s2);
	}
	return s;
}
function urlencode(st)
{
	var s = st;
	s=replaceAll(s,"+", "%2B");
	s=replaceAll(s,"/", "%2F");;
	return escape(s);
}
//return value for query parameter q from url u
function getQueryVal(url, q)
{
	var rval=null;
	var p = q + "=";
	var i = url.indexOf(p,0);
	if (i>0)
	{
		var spos = url.indexOf("=",i) + 1;
		if (spos > i)
		{
			var epos = url.indexOf("&",spos);
			if (epos>0)
				rval = url.substring(spos,epos);
			else
				rval = url.substring(spos);
		}
	}
	return rval;
}
//return the URL minus the query string
function getBaseURL(url)
{
	var i=url.lastIndexOf('/');
	if (i>0)
		return url.substring(0,i)
	else
		return url;
}
function submitUserFeedback(feedback_url, error_text)
{
	try {
		var el = document.getElementById('userFeedbackResponse');
		var help_yes = document.getElementById('help_yes');		
		var help_no = document.getElementById('help_no');
		var user_comments = document.getElementById('comments');
		var comments = "&comments=" + urlencode(user_comments.value);
		var rating = '';
		if (help_yes.checked) rating = '&rating=1';
		else if (help_no.checked) rating = '&rating=0';
		else {
			//hideFeedback();
			alert(error_text);
			return;
		}	
		var s_url = getQueryVal(uf_url,"s");
		var title = getQueryVal(uf_url,"title");
		var q = getQueryVal(uf_url,"qgeneral");
		var qtype = getQueryVal(uf_url,"type");
		var docnum = getQueryVal(uf_url,"docnum");
		var tabid = getQueryVal(uf_url, "tabid");
	    var url = feedback_url + '?url=' + s_url + '&title=' + title;
	    url += '&qgeneral=' + q + '&docnum=' + docnum;
	    url += '&type=' + qtype + rating + comments;
	
		//alert(uf_url);
		//alert(url);
		
		new ajax (url, {onComplete: null});
		showFeedbackResponse();
	} 
	catch (e) {
		if (e.description)
			alert(e.description);
		else
			alert(e);
		hideFeedback();
	}	
}

function toggleDisplayStyle(id, visStyle)
{
	//toggle display style for element 'id' between none and visStyle
	var obj = document.getElementById(id);
    if( obj.style.display == 'none' || obj.style.display == '') {
    	obj.style.display = visStyle;
    } else {
        obj.style.display = 'none';
    }    
} 

/* JR Toggle or show/hide display for advanced fields */	
	function toggleXmlFields(keydir, state)
	{
		var obj = document.getElementById('advancedSearch');
		var link = document.getElementById('advancedLink');
		var img = document.getElementById("advancedImg");
		var label = document.getElementById("advancedLabel");
		var xmlSearch = document.getElementById("xmlSearch");

		if (state)
		{
			if (state == "true")
			{//show
				obj.style.display = "block";
				img.src = "keyed/" + keydir + "/images/arrow-up.gif";
				label.innerHTML = "Simple";
				xmlSearch.value = "true";
			}
			else
			{//hide
				obj.style.display = "none";
				img.src = "keyed/" + keydir + "/images/arrow-down.gif";
				label.innerHTML = "Advanced";
				xmlSearch.value = "false";	
			}
		}
		
		else //toggle
		{	
			if (obj.style.display == "" || obj.style.display == "none")
			{//show
				obj.style.display = "block";
				img.src = "keyed/" + keydir + "/images/arrow-up.gif";
				label.innerHTML = "Simple";
				xmlSearch.value = "true";
			}
			else
			{//hide
				obj.style.display = "none";
				img.src = "keyed/" + keydir + "/images/arrow-down.gif";
				label.innerHTML = "Advanced";
				xmlSearch.value = "false";
			}
		}

		
		//A hack for IE bug to force a layout refresh	
		obj = document.getElementById('fluid');	
		if (obj)
		{
			obj.style.display="none";	
			obj.style.display="block";	
		}

	}
	
	function initXmlFields(keydir, sizelist)
	{
		var xmlSearch = document.getElementById("xmlSearch");
		var sizes = sizelist.split(",");
		var obj = document.getElementById('advancedSearch');	
		var fields = obj.getElementsByTagName('input');
		if (sizes && fields && fields.length > 0 && sizes.length > 0)
		{
			for (var i=0; i<sizes.length; i++)
			{
				fields[i].style.width = sizes[i];
			}
		}

		toggleXmlFields(keydir, xmlSearch.value);
	}
	
	function toggleRank(chk)
	{
		var pop = document.getElementById('useRankPop');
		var fresh = document.getElementById('useFreshPop');
		//alert(pop.checked + "," + fresh.checked);
		
		if (chk == pop && pop.checked) fresh.checked=false;
		if (chk == fresh && fresh.checked) pop.checked=false;
	
	}


	function showPage(p) 
	{
		document.location.href = getBaseURL(document.location.href) + "/page.do?name=" + encodeURIComponent(p);	
	}
	
	function genericFormSubmit(p, next)
	{
		try {
			if (validateScript.length>0) {
				var result = eval(validateScript);
				if (result==false) return false;
			}
		}
		catch (e) {};
	
		var f = document.generic_form.elements;
		var postData="";
		for (var i=0;i<f.length;i++) {
			if (f[i].name) {
				var t=f[i].type;
				if (t=="checkbox") {
					var c = "false";
					if (f[i].checked) c = "true";
					postData += "ck_val_" + f[i].name + "=" + c + "&";
				}
				else if (t=="radio") {
					if ( f[i].checked == true )
	 					postData += "rb_val_" + f[i].name + "=" + f[i].value  + "&";
				}
				else
					postData += f[i].name + "=" + f[i].value + "&";
			}
		}

		postData += "nextpage="+next;
		genericFormRequest(p, encodeURI(postData));
		return false;
	}
	
	function genericFormRequest(p, data)
	{
		var e=document.location.href;
		var url = getBaseURL(e) + "/generic_form.do?pageid=" + p;
		var debug = getQueryVal(e, "debug");
		if (debug)
			url += "&debug=" + debug;
		new ajax (url, {onComplete: null});
	}
				
	
