function books()
{
  this.params = null;
  this.data = null;
  this.init = init;
  function init( params )
  {
    this.params = params;
    loadXml( params );
  }

  function loadXml( params )
  {
    $.ajax( {
      type : "GET",
      url : params.xmlPath,
      dataType : "xml",
      success : function( data )
      {
        this.data = data;
        this.count = $( "book", data ).length;
        preloadBooks( params, this.data, this.count );
      }
    } );
  }

  function preloadBooks( params, data, count )
  {
    var x = params.scrollID;
    var infoID = "info" + x;
    var ainfoID = "a.info" + x;

    var itemsID = "item" + x;

    $( "ul", params.bookID ).empty();
    var numOfBooks = $( "book", data ).length - 1;
    $( "book", data ).each( function( i )
    {
      var title = $.trim( $( "title", this ).text() );
      title = title.split( "'" ).join( "&#39;" );
      var href = $.trim( $( "morehref", this ).text() );
      var subscribe = $.trim( $( "subscribe", this ).text() );
      if ( subscribe )
      {
        subscribe = " | <a href='" + subscribe + "'>Subscribe</a>";
      }
      else
      {
        subscribe = '';
      }

      var author = $.trim( $( "author", this ).text() );
      author = ( author ) ?
          "<div class='author'>" + author + "</div>" : "";

      $( "ul", params.bookID ).append( [
        "<li class='",itemsID,"'><a",
        " class='thumb ",infoID,"'><img src='",
        $.trim( $( "thumb > src", this ).text() ),
        "' width='",
        $( "thumb", this ).attr( "width" ),
        "' title='",
        title,
        "' alt='",
        title,
        "' /></a></li>" ].join( "" ) );
      $( "body" ).append( [
        "<div class='books_tool_tip' id='books_tool_tip_",
        infoID,"_",i,
        "'><div class='books_top'></div>",
        "<div class='books_inner'><div class='book_img'><p><img src='",
        $.trim( $( "image > src", this ).text() ),
        "' width='",
        $( "image", this ).attr( "width" ),
        "' title='",
        title,
        "' alt='",
        title,"' /></p></div>",
        "<div class='text'><h2>", ,title, "</h2><h3>", $.trim( $( "info", this ).text() ), "</h3>", author,
        "<div class='description'><p>", $.trim( $( "description", this ).text() ),"</p></div>",
        "<p class='links'><a href='", href,"'>Find Out More</a>", subscribe, "</p>",
        "</div></div><div class='books_bottom'><p><span class='close_btn'><img src='/dms/ucp/images/close-x.gif' /></span></p></div></div>" ].join( "" ) );


      if ( i == numOfBooks )
      {

        init_dw_Scroll( params );
      }
    } );

    $( ainfoID, params.bookID ).click( function( e )
    {
      //var tmpContainer = $( "#books_tool_tip_"+infoID+"_" + $(ainfoID,  params.bookID ).index( this ) );
      delayShow( 350, e, $( "#books_tool_tip_" + infoID + "_" + $( ainfoID, params.bookID ).index( this ) ) );


    }, function( e )
    {

      delay( params.delay );

    } );
    $( "#tooltips" ).hover( function( e )
    {
      clearTimer();
      //show(e,tmpContainer);
      // closure to close the popup once the 'Close' label is clicked
      $(".close_btn").click(function( e ){
          hide();
      });
    }, function( e )
    {
      //alert("HERE");
      delay( params.delay );
    } );

  }

  function init_dw_Scroll( params )
  {
    var x = params.scrollID;

    var container = "#sliderContent" + x;
    var itemsID = ".item" + x;
    var sliderID = "#books" + x;
    var conveyor = $( sliderID, $( container ) );
    var itemTmp = $( itemsID, $( container ) );
    conveyor.css( "width", itemTmp.length * parseInt( itemTmp.css( "width" ) ) );
    var slide = "wndo" + x;
    var c = "sliderContent" + x;
    var b = "books" + x;
    var u = "t" + x;
    var d = "dragBar" + x;
    var t = "track" + x;
    var s = "scrollbar" + x;

    slide = new dw_scrollObj( c, b, u );
    slide.setUpScrollbar( d, t, "h", 1, 1 );
    slide.setUpScrollControls( s );
  }

  // tooltip
  function show( e, $o )
  {
    clearTimeout( removeDelay );
    clearTimeout( showdelayed );
    $( "#tooltips" ).empty();
    var v = getViewport();
    //alert( v.pageX );


    var pageX = getMouseCoord( v, e )[0] + 15;
    var pageY = getMouseCoord( v, e )[1];
    //$o.find( ".booksthisointer_right" ).addClass( "booksthisointer_left" ).removeClass( "booksthisointer_right" );
    if ( pageX + $( "#tooltips" ).width() > v.innerWidth + v.pageXOffset )
    {
      pageX = pageX - $( "#tooltips" ).width() - 30;
    }
    $( "#tooltips" ).append( $o.html() );
    var w = $( "#tooltips" ).width();
    //var h = $("#tooltips").height();

    var left = 50;
    var top = 50;
    $( "#tooltips" ).css( "left", left ).css( "top", top ).css( "display", "block" );
  }

  function clearTimer()
  {

    clearTimeout( removeDelay );


  }

  function hide()
  {

    clearTimeout( removeDelay );
    //$("#tooltips").empty();
    $( "#tooltips" ).empty();
    $( "#tooltips" ).css( "display", "none" ).css( "left", 0 ).css( "bottom", 0 );
    //    resetHide();
  }

  var removeDelay;

  function delay( d )
  {

    removeDelay = setTimeout( function()
    {hide()}, d );
    return false;
    //$(this).data('removeTimer', removeDelay);
  }

  function delayShow( d, e, sid )
  {

    showdelayed = setTimeout( function()
    {show( e, sid )}, d );
    return false;
    //$(this).data('removeTimer', removeDelay);
  }

  function getMouseCoord( v, e )
  {
    ( !e ) ? e = window.event : e = e;
    ( e.pageX ) ? v.pageX = e.pageX : v.pageX = e.clientX + v.scrollLeft;
    ( e.pageY ) ? v.pageY = e.pageY : v.pageY = e.clientY + v.scrollTop;
    return [ e.pageX, e.pageY ];
  }

  function getViewport()
  {
    var viewport = {}
    if ( self.innerHeight )
    {
      viewport.pageYOffset = self.pageYOffset;
      viewport.pageXOffset = self.pageXOffset;
      viewport.innerHeight = self.innerHeight;
      viewport.innerWidth = self.innerWidth;
    }
    else
    {
      if ( document.documentElement && document.documentElement.clientHeight )
      {
        viewport.pageYOffset = document.documentElement.scrollTop;
        viewport.pageXOffset = document.documentElement.scrollLeft;
        viewport.innerHeight = document.documentElement.clientHeight;
        viewport.innerWidth = document.documentElement.clientWidth;
      }
    }
    return viewport;
  }

}


