//functions for advanced search

// Code to figure the height and width of the window...
var viewportwidth;
var viewportheight;
// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
if( typeof window.innerWidth != 'undefined' )
{
   viewportwidth = window.innerWidth;
   viewportheight = window.innerHeight;
}
// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
else if( typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0 )
{
   viewportwidth = document.documentElement.clientWidth;
   viewportheight = document.documentElement.clientHeight;
}
// older versions of IE
else
{
   viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
   viewportheight = document.getElementsByTagName('body')[0].clientHeight;
}

var viewportheightpanel = viewportheight * .90 + "px";
var findOffsetForPanelWidth = (( viewportwidth - 700 ) / 2 );
var findOffsetForPanelHeight = viewportheight * .05;
//setCookie for the passing of the selected databases.
function setCookie( name, value, path, domain, secure )
{
   var cookie_string = name + "=" + escape(value);
   /*
    if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    cookie_string += "; expires="+date.toGMTString();
    }
    */
   if( path )
      cookie_string += "; path=" + escape(path);
   if( domain )
      cookie_string += "; domain=" + escape(domain);
   if( secure )
      cookie_string += "; secure";
   document.cookie = cookie_string;
}


// getCookie for retriving the cookies.
function getCookie( name )
{
   var dc = document.cookie;
   var prefix = name + "=";
   var begin = dc.indexOf("; " + prefix);
   if( begin == -1 )
   {
      begin = dc.indexOf(prefix);
      if( begin != 0 ) return null;
   }
   else
   {
      begin += 2;
   }
   var end = document.cookie.indexOf(";", begin);
   if( end == -1 )
   {
      end = dc.length;
   }
   return unescape(dc.substring(begin + prefix.length, end));
}


databaseArrayObj = new Array();


function databaseInfo( groupId, groupDisplayName, targetId, displayName, publisher, shortDescription, selected )
{
   this.groupId = groupId;
   this.groupDisplayName = groupDisplayName;
   this.targetId = targetId;
   this.displayName = displayName;
   this.publisher = publisher;
   this.shortDesc = shortDescription;
   this.selected = selected;
}


function init()
{
   myPanel = new YAHOO.widget.Panel("dbPanel", { close:true, draggable:true, modal:true, underlay:"none",
      visible:false, width:"700px", height:viewportheightpanel,
      zIndex:"1000000", constraintoviewport:true, x:findOffsetForPanelWidth, y:findOffsetForPanelHeight,
      effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.25} });

   myPanel.render(document.body);

   YAHOO.util.Event.addListener("showDbPanel", "click", myPanel.show, myPanel, true);
   YAHOO.util.Event.addListener("hideDbPanel", "click", myPanel.hide, myPanel, true);
   YAHOO.util.Event.addListener("saveDbPanel", "click", myPanel.hide, myPanel, true);
}


function showHideGroup( divToClose )
{
   if( document.getElementById(divToClose).style.display == 'block' )
   {
      document.getElementById(divToClose).style.display = 'none';
   }
   else
   {
      document.getElementById(divToClose).style.display = 'block';
   }
}


function checkOrClearAll( trueOrFalse )
{
   var list = document.getElementsByName("dblist");
   for( var i = 0; i < list.length; i++ )
   {
      list[i].checked = trueOrFalse;
      databaseArrayObj[list[i].value.toString()].selected = trueOrFalse;
   }
   refreshRightColumn();
   isSaveAvailable();
}


function checkOneDatabase( checkObj )
{

   if( checkObj.checked )
   {
      addRemoveDatabaseRightColumn(true, checkObj.value.toString());
      checkDuplicateDatabases(true, checkObj.value.toString());
      shouldGroupBeChecked();
      isSaveAvailable();
   }
   else
   {
      addRemoveDatabaseRightColumn(false, checkObj.value.toString());
      checkDuplicateDatabases(false, checkObj.value.toString());
      shouldGroupBeChecked();
      isSaveAvailable();
   }
}


function checkDuplicateDatabases( trueOrFalse, targetId )
{
   var list = document.getElementsByName("dblist");
   if( targetId.indexOf(",") != -1 )
   {
      targetId = targetId.substring(targetId.indexOf(",") + 1);
   }
   for( var i = 0; i < list.length; i++ )
   {
      if( (list[i].value == targetId) || (list[i].value.substring(list[i].value.indexOf(",") + 1)) == targetId )
      {
         list[i].checked = trueOrFalse;
         databaseArrayObj[list[i].value].selected = trueOrFalse;
      }
   }
}


function addRemoveDatabaseRightColumn( trueOrFalse, targetId )
{
   try
   {
      if( targetId.indexOf(",") != -1 )
      {
         targetId = targetId.substring(targetId.indexOf(",") + 1);
      }

      if( trueOrFalse )
      {
         databaseArrayObj[targetId].selected = true;
      }
      else
      {
         databaseArrayObj[targetId].selected = false;
      }

      refreshRightColumn();

   }
   catch( err )
   {
      //continue...
      //added the try catch to fail gracefully if probelms occur...
   }
}

function refreshRightColumn()
{
   var divTag = document.getElementById("currentDatabases13");
   divTag.innerHTML = "";
   for( db in databaseArrayObj )
   {
      if( databaseArrayObj[db].selected && db.substring(0, 5) != "group" && db.substring(0, 7) != "inGroup" )
      {
         divTag.innerHTML += "<div>&nbsp;&nbsp;&nbsp;&nbsp;<input type='checkbox' checked name='dblist' value=" + databaseArrayObj[db].targetId + " onclick='checkOneDatabase(this);' style='vertical-align:-1px;'>&nbsp;" + databaseArrayObj[db].displayName + "</div>";
      }
   }
}

function shouldGroupBeChecked()
{
   var checked = true;
   var list = document.getElementsByName("dblist");
   var num = databaseArrayObj[list[0].value].groupId;
   for( var i = 0; i < list.length; i++ )
   {
      // just continue if its the head group checkbox
      if( list[i].value.substring(0, 5) == "group" )
      {
         continue;
      }
      // this will check whether the previous group should be checekd
      if( (list[i].value.substring(0, 7) == "inGroup") && (num == databaseArrayObj[list[i].value].groupId) )
      {
         if( !list[i].checked )
         {
            checked = false;
         }
      }
      // this will check to see if the it should or shouldnt be checekd and do the appropriate thing...
      else if( (list[i].value.substring(0, 7) == "inGroup") && (num != databaseArrayObj[list[i].value].groupId) )
      {
         if( checked )
         {
            forLoop(list, num, true);
         }
         else
         {
            forLoop(list, num, false);
         }
         i--;
         num = databaseArrayObj[list[i].value].groupId
         checked = true;
      }
      // after there are no more databases in groups, check to see if the last group should be checked....
      else
      {
         if( checked )
         {
            forLoop(list, num, true);
         }
         else
         {
            forLoop(list, num, false);
         }
         break;
      }
   }
}


// generic function for loop through the dblist - created for the function above ( shouldGroupBeChecked )...
function forLoop( list, num, trueOrFalse )
{
   for( var j = 0; j < list.length; j++ )
   {
      if( list[j].value == "group" + num )
      {
         list[j].checked = trueOrFalse;
      }
   }
}


function checkGroup( checkObj )
{
   var list = document.getElementsByName("dblist");
   for( var i = 0; i < list.length; i++ )
   {
      if( ( databaseArrayObj[checkObj.value].groupId == databaseArrayObj[list[i].value].groupId ) && ( list[i].value.substring(0, 5) != "group" ) )
      {
         if( checkObj.checked )
         {
            list[i].checked = true;
            addRemoveDatabaseRightColumn(true, list[i].value.toString());
            checkDuplicateDatabases(true, list[i].value.toString());
         }
         else
         {
            list[i].checked = false;
            addRemoveDatabaseRightColumn(false, list[i].value.toString());
            checkDuplicateDatabases(false, list[i].value.toString());
         }
      }
   }
   shouldGroupBeChecked();
   isSaveAvailable();
}


function dbPanelSave()
{
   var dbListCookieString = "";
   for( var i in databaseArrayObj )
   {
      if( !databaseArrayObj[i].groupId && databaseArrayObj[i].selected )
      {
         dbListCookieString += databaseArrayObj[i].targetId + ",";
      }
   }
   dbListCookieString = dbListCookieString.substring(0, (dbListCookieString.length - 1));
   setCookie("LAC-User-Databases", dbListCookieString, "/", "");
   location.href = "/advancedsearch";
}

function isSaveAvailable()
{
   var isOneSelected = true;
   for( var i in databaseArrayObj )
   {
      if( databaseArrayObj[i].selected == true && !databaseArrayObj[i].groupId )
      {
         isOneSelected = false;
         break;
      }
   }
   document.getElementById("saveDbPanel").disabled = isOneSelected;
}

