// Pagination logic for new website
// $Id: world_etf_paginate.js,v 1.2 2010/03/19 18:59:57 asarkar Exp $
// $Source: /bbsrc/web/docs/en/jscommon/RCS/world_etf_paginate.js,v $
//
// global variables

/* Set this value to the number of entries a page should have */
var gNumRowsPerPage = 50;

/* The current page number */
var gCurrPage = 1;

/* number of pages of results. Calculate once and store */
var gNumPages = 1;

/* total number of rows in template table including title row.
Calculate once and store */
var gNumRowsTbl = 1;

var gSelectedPageStyle = "PaginationSelected";
var gEllipsesStyle = "PaginationEllipses";

window.onload = weip_init;

// ====================================================

function weip_init()
{
 var templateTable = document.getElementById( "wei_marketdatatable_template" );
 // ignore title row
 gNumRowsTbl = templateTable.rows.length - 1;
 gNumPages = Math.ceil( gNumRowsTbl/gNumRowsPerPage );

 weip_drawPage();
}

// ====================================================

/* draw the current page */
function weip_drawPage( )
{
 var wrapperDiv = document.getElementById( "wei_marketdatatable_wrapper" );

 wrapperDiv.innerHTML = "";
 
 var newTable = document.createElement( 'table' );
 newTable.className = "wei_marketdatatable";
 newTable.id = "wei_marketdatatable";
 newTable.cellspacing = "2";
 newTable.cellpadding = "2";
 newTable.border = "0"; 
 newTable.width = "100%";

 var newTBody = document.createElement( 'tbody' );
 newTable.appendChild( newTBody );

 // draw the table title
 var templateTable = document.getElementById( "wei_marketdatatable_template" );
 var newrow = templateTable.rows[ 0 ].cloneNode( true );
 newTBody.appendChild( newrow );  


 var startRowIdx = ( gCurrPage - 1 )*gNumRowsPerPage + 1; 

 var endRowIdx = startRowIdx + gNumRowsPerPage - 1;

 endRowIdx = endRowIdx > gNumRowsTbl? gNumRowsTbl : endRowIdx;

 for( var i = startRowIdx; i <= endRowIdx; i++ )
 {
  newrow = templateTable.rows[ i ].cloneNode( true );
  newTBody.appendChild( newrow );  
 }

 //weip_drawPagingControls( wrapperDiv ); 

 wrapperDiv.appendChild( newTable );

 weip_drawPagingControls( wrapperDiv ); 

 scroll(0,0);
}

// ====================================================

/* draw the given page */
function weip_drawThePage( pageid )
{
 gCurrPage = pageid;
 weip_drawPage();
}

// ====================================================

function weip_nextPage()
{
 gCurrPage = gCurrPage + 1;
 if( gCurrPage > gNumPages )
   gCurrPage = gNumPages;

 weip_drawPage();
}

// ====================================================

function weip_prevPage()
{
 gCurrPage = gCurrPage - 1;
 if( gCurrPage < 1 )
  gCurrPage = 1;

 weip_drawPage();
}

// ====================================================

function weip_drawPagingControls( parentNode )
{
  var pagingDiv =  document.createElement( "div" );
  pagingDiv.id = "wei_pager";
  pagingDiv.className = "Pagination";

  pagingDiv.align = "right";

  if( gCurrPage > 1 )
   weip_drawLink( "\u2039 Prev  " ,"weip_prevPage", pagingDiv );
  else
   weip_drawGrayLink( "\u2039 Prev  " , pagingDiv );

  var pageArr = weip_calcPagesToDraw();

  var spaces_left, spaces_rt = "false";

  for( var i = 0; i < pageArr.length; i++ )
  {
   if( pageArr[ i + 1 ] < 0 )
   {
    spaces_left = "true";
    spaces_rt = "false";
   }
   if( pageArr[ i - 1 ] < 0 )
   {
    spaces_rt = "true";
    spaces_left="false";
   }
   weip_drawPageNums( pagingDiv, pageArr[ i ], spaces_left, spaces_rt ); 
  }
 
  if( gCurrPage < gNumPages )
   weip_drawLink( "  Next \u203A", "weip_nextPage", pagingDiv );
  else
   weip_drawGrayLink( "  Next \u203A", pagingDiv );

  parentNode.appendChild( pagingDiv );
}
   
// ====================================================

function weip_drawLink( text, fnToInvoke, div )
{
  var alink =  document.createElement( "a" );
  alink.setAttribute( "href", 
   "javascript:" + fnToInvoke + "( );") ;
  alink.appendChild( document.createTextNode( text ) );
  alink.className = "PaginationActive"; 
  div.appendChild( alink );
}

// ====================================================

function weip_drawGrayLink( text, div )
{
  var span =  document.createElement( "span" );
  span.className = "PaginationInactive";
  span.appendChild(  document.createTextNode( text ) );
  div.appendChild( span );
}

// ====================================================

function weip_drawPageNums( wrapper, pageid, spaces_left, spaces_rt )
{
  var pagenum = document.createTextNode( pageid );

  if( pageid == gCurrPage )
  {
   var span =  document.createElement( "span" );  
   span.className = gSelectedPageStyle;
   span.appendChild( pagenum );
   wrapper.appendChild( span );
  }
  else if( pageid < 0 )
  {
   var span =  document.createElement( "span" );
   span.className = gEllipsesStyle;
   span.appendChild( document.createTextNode("...") );
   wrapper.appendChild( span );
  }
  else
  {
    var alink =  document.createElement( "a" );
    alink.setAttribute( "href",
      "javascript:weip_drawThePage( " + pageid + " );") ;
    alink.appendChild( pagenum );
    alink.id = "wei_page_" + pageid;

    if ( spaces_left == "true" )
      alink.className = "PaginationWithLtPadding";
    else if ( spaces_rt == "true" )
      alink.className = "PaginationWithRtPadding";
    else
      alink.className = "PaginationWithLtRtPadding";

    wrapper.appendChild( alink );
  }
}  

// ====================================================

function weip_calcPagesToDraw()
{
  var pageArr = new Array();
  var i = 0;

  //Always show the first page
  pageArr[ i++ ] = 1;

  // special pagenum to indicate elipses should be drawn
  if( gCurrPage - 2  >  1  )
   pageArr[ i++ ] = -1;

  if( gCurrPage ==  gNumPages  )
   pageArr[ i++ ] = gCurrPage - 3 >= 1? gCurrPage - 3 : 1;
  if( gCurrPage >=  gNumPages - 1  )
   pageArr[ i++ ] = gCurrPage - 2 >= 1? gCurrPage - 2 : 1;
  //Always show the prev page
  if( gCurrPage > 1 )
   pageArr[ i++ ] = gCurrPage - 1 >= 1? gCurrPage - 1 : 1;;


  if( gCurrPage >= 1  && gCurrPage <= gNumPages )
   pageArr[ i++ ] = gCurrPage;

  //Always show the next page
  if( gCurrPage < gNumPages )
    pageArr[ i++ ] = gCurrPage + 1 <= gNumPages? gCurrPage + 1 : gNumPages;
  if( gCurrPage <=  2  )
   pageArr[ i++ ] = gCurrPage + 2 <= gNumPages? gCurrPage + 2 : gNumPages;
  if( gCurrPage ==  1  )
   pageArr[ i++ ] = gCurrPage + 3 <= gNumPages? gCurrPage + 3 : gNumPages;

  // special pagenum to indicate elipses should be drawn
  if( gCurrPage + 2  <  gNumPages  )
   pageArr[ i++ ] = -2;

  //Always show the last page
  if( gCurrPage < gNumPages )
   pageArr[ i++ ] = gNumPages;
 
  return wei_uniqueArr( pageArr ); 
}

// ====================================================

//Adds new uniqueArr values to temp array
function wei_uniqueArr( a ) {
 temp = new Array();
 for(var i = 0; i < a.length; i++){
  if( !wei_contains( temp, a[i] ) ){
   temp.length += 1;
   temp[temp.length-1] = a[i];
  }
 }
 return temp;
}

// ====================================================

//Will check for the Uniqueness
function wei_contains(a, e) {
 for( j=0; j<a.length; j++) if( a[j]==e )return true;
 return false;
}

