/**
 * File: kwSearch.js
 *
 * Author: Chris Boget
 * Copyright 2008 Yakabod, inc.
 *
 * $Revision: 1.13 $
 * $Date: 2012/01/11 15:37:37 $
 * Last edited by: $Author: danderson $
 **/

// Set up the namespace
kwSearch = undefined;
var kwSearch = window.kwSearch || {};
kwSearch.init = function( sSearchFormId, sSearchContainerId, sMessageContainerId, sSubmitType )
{
  kwSearch.sDefaultSearchPage = kwSearch.sDefaultSearchPage || null;

  kwSearch.bAllowSearch = kwSearch.bAllowSearch || true;

  kwSearch.SearchForm.setSearchFormId( sSearchFormId );

  kwSearch.ResultView.setContainerId( sSearchContainerId );
  kwSearch.ResultView.setMessageContainerId( ( sMessageContainerId || sSearchContainerId ) );

  var bAjaxRequest = true;
  if( sSubmitType )
  {
    bAjaxRequest = ( sSubmitType.toLowerCase() == 'ajax' );
  }
  kwSearch.ContentSearch.StreamContent.setAjaxRequest( bAjaxRequest );
};

kwSearch.setDefaultSearchPage = function( sDefaultSearchPage )
{
  kwSearch.sDefaultSearchPage = sDefaultSearchPage;
  kwSearch.ContentSearch.StreamContent.setRequestPage( sDefaultSearchPage );
};

kwSearch.allowSearch = function( bAllowSearch )
{
  if( typeof bAllowSearch == 'undefined' )
  {
    bAllowSearch = true;
  }
  kwSearch.bAllowSearch = bAllowSearch;
};

kwSearch.isSearchAllowed = function()
{
  return kwSearch.bAllowSearch;
};

kwSearchUtil = {
  oOnloadBehaviors : {},
  oLogData         : null,

  showConstraints : function()
  {
    kwSearchUtil.log( kwSearch.SearchForm.getSearchType());
    kwSearchUtil.log( kwSearch.SearchForm.getBaseSearchRequirements());
  },

  log : function( sLogTxt )
  {
    if(( typeof console != 'undefined' ) && ( typeof console.log == 'function' ))
    {
      console.log( sLogTxt );
    }
    else
    {
      if( !kwSearchUtil.oLogData )
      {
        kwSearchUtil.oLogData = document.createElement( 'div' );
        if( typeof kwSearchUtil.oLogData != 'undefined' )
        {
          kwSearchUtil.oLogData.id = 'kwSearchUtilLogData';
          document.body.appendChild( kwSearchUtil.oLogData );
        }
      }
      if( typeof kwSearchUtil.oLogData != 'undefined' )
      {
        kwSearchUtil.oLogData.innerHTML += sLogTxt + '<br>';
      }
    }
  },

  registerOnloadBehavior : function( oBehavior, iDelay )
  {
    var iDelay = iDelay || 0;
    if( typeof kwSearchUtil.oOnloadBehaviors[iDelay] == 'undefined' )
    {
      kwSearchUtil.oOnloadBehaviors[iDelay] = [];
    }
    kwSearchUtil.oOnloadBehaviors[iDelay].push( oBehavior );
  },

  isEmpty : function( oObject )
  {
    if(( oObject ) && ( typeof oObject == 'object' ))
    {
      for( var prop in oObject )
      {
        if( oObject.hasOwnProperty( prop ))
        {
          return false;
        }
      }
      return true;
    }
  },

  getInflectedText : function( sString )
  {
    var retval = '';

    if( sString == 'All' )
    {
      retval = sString;
    }
    else
    {
      if( sString.match( 's$' ))
      {
        retval = sString + "'";
      }
      else
      {
        retval = sString + "'s";
      }
    }
    return retval;
  },

  init : function()
  {
    /**
     * Turning off the search delay so that anything we do here
     * will not trigger a search right away.
     */
    var iSearchDelay    = kwSearch.ContentSearch.setSearchDelay( -1 );
    var bSetSearchDelay = true;

    var aOnloadBehaviors = [];
    for( var sKey in kwSearchUtil.oOnloadBehaviors )
    {
      if( typeof aOnloadBehaviors[sKey] == 'undefined' )
      {
        aOnloadBehaviors[sKey] = [];
      }
      aOnloadBehaviors[sKey].push( kwSearchUtil.oOnloadBehaviors[sKey] );
    }
    for( var x = 0; x < aOnloadBehaviors.length; x++ )
    {
      if(( typeof aOnloadBehaviors[x] != 'undefined' ) &&
         ( typeof aOnloadBehaviors[x][0].length != 'undefined' ) &&
         ( aOnloadBehaviors[x][0].length > 0 ))
      {
        for( var i = 0; i < aOnloadBehaviors[x][0].length; i++ )
        {
          if( typeof aOnloadBehaviors[x][0][i] == 'function' )
          {
            oOnload = aOnloadBehaviors[x][0][i];
            oOnload();
          }
        }
      }
      /**
       * All behaviors defined with an onload delay of greater than or
       * equal to 100 means that there is the possibility that the
       * search request will get sent back to the server.
       */
      if(( x >= 100 ) && ( bSetSearchDelay ))
      {
        kwSearch.ContentSearch.setSearchDelay( iSearchDelay );
      }
    }
    /* Making it so this isn't accidently run again*/
    kwSearchUtil.oOnloadBehaviors = {};
    if( bSetSearchDelay )
    {
      kwSearch.ContentSearch.setSearchDelay( iSearchDelay );
    }
  },

  prepareURNRelatedSearch: function(sURN, oReadyCallback)
  {
    $.getJSON(
      '/library/getURNRelatedSearchMetadata.html',
      {
        'urn': sURN
      },
      function(oData)
      {
        var sType = sURN.split(':')[2];
        var nId   = sURN.split(':')[3];

        if( typeof oData.title !== 'undefined' )
        {
          kwSearch.Widgets.Words.setWords( oData.title );
        }
        if(( typeof oData.publisher !== 'undefined' ) &&
           ( $.sizeOf( oData.publisher ) > 0 ))
        {
          var iPublisherId;
          for( iPublisherId in oData.publisher )
          {
            if(( iPublisherId !== '' ) && ( iPublisherId > 0 ))
            {
              kwSearch.Widgets.Who.addWho( iPublisherId, oData.publisher[iPublisherId] );
            }
          }
        }
        switch(sType.toUpperCase())
        {
          case 'ACCT':
            kwSearch.Widgets.What.setWhats(["Acct"]);
            break;

          case 'SITECOMPONENT':
            kwSearch.Widgets.What.setWhats(["SiteComponent"]);
            break;

          case 'USER':
            kwSearch.Widgets.What.setWhats(["User"]);
            break;

          case 'MESSAGE':
            kwSearch.Widgets.What.setWhats(["Message"]);
            break;

          case 'TASK':
            kwSearch.Widgets.What.setWhats(["Task"]);
            break;

          case 'RESOURCE':
            kwSearch.Widgets.What.setWhats(["Flightboard","ResourceItem"]);
            break;

          case 'CALENDAR':
            kwSearch.Widgets.What.setWhats(['Event']);

            if(typeof(oData.team['']) == 'undefined')
            {
              kwSearch.Widgets.Where.addToSearch(oData.team);
            }
            else
            {
              kwSearch.Widgets.Who.addWho(oData.publisher);
            }

            break;

          case 'DOCUMENT':
            kwSearch.Widgets.What.setWhats(['Lib']);
            kwSearch.Widgets.Subject.addToSearch(oData.aSubjects);

            if(typeof(oData.team['']) == 'undefined')
            {
              kwSearch.Widgets.Subject.setTeams(oData.team);
              kwSearch.Widgets.Subject.integrateTeams();
              kwSearch.Widgets.Subject.addToSearch();
              kwSearch.Widgets.Where.addToSearch(oData.team);
            }

            break;

          case 'VLOGENTRY':
          case 'VLOG':
            kwSearch.Widgets.What.setWhats(['VLog']);
            var oBlogs = {};

            oBlogs[nId] = {
              'VlogName': oData.title
            };

            if(typeof(oData.team['']) == 'undefined')
            {
              oBlogs[nId].Team = oData.team;
            }

            kwSearch.Widgets.Blogs.addToSearch(oBlogs);
            break;

          default:
            kwSearch.Widgets.What.setWhats([sType]);
            break;
        }

        oReadyCallback();
      }
    );
  }
};

function kwSearchUtilInit( iAttempts )
{
  iAttempts = iAttempts || 0;
  if( typeof kwSearch.ContentSearch != 'undefined' )
  {
    kwSearchUtil.init();
  }
  else
  {
    if( iAttempts < 6 )
    {
      setTimeout( function() { kwSearchUtilInit( ++iAttempts ); }, 500 );
    }
  }
}
