var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}


jQuery.fn.fillYears = function(startYear, endYear, options) {
  return $.each(this, function(startYear, endYear, options) {
    
    var opts = $.extend(jQuery.fn.fillYears.options, options, {
       startYear: startYear?startYear-1:undefined,
       endYear: endYear
     });

    return function() {
      var years = "";      
      for(var year=opts.endYear;year>opts.startYear;year--)  {
        years += "<option value="+year+">"+year+"</option>";        
      }      
      $(this).html(years);              
     }
  }(startYear, endYear, options)
)}

jQuery.fn.fillYears.options = {
 startYear:1975,
 endYear: (new Date()).getFullYear()
}


function formatDate(date,format) {
  format=format+"";
  var result="";
  var i_format=0;
  var c="";
  var token="";
  var y=date.getYear()+"";
  var M=date.getMonth()+1;
  var d=date.getDate();
  var E=date.getDay();
  var H=date.getHours();
  var m=date.getMinutes();
  var s=date.getSeconds();
  var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
  // Convert real date parts into formatted versions
  var value=new Object();
  if (y.length < 4) {y=""+(y-0+1900);}
  value["y"]=""+y;
  value["yyyy"]=y;
  value["yy"]=y.substring(2,4);
  value["M"]=M;
  value["MM"]=LZ(M);
  value["MMM"]=MONTH_NAMES[M-1];
  value["NNN"]=MONTH_NAMES[M+11];
  value["d"]=d;
  value["dd"]=LZ(d);
  value["E"]=DAY_NAMES[E+7];
  value["EE"]=DAY_NAMES[E];
  value["H"]=H;
  value["HH"]=LZ(H);
  if (H==0){value["h"]=12;}
  else if (H>12){value["h"]=H-12;}
  else {value["h"]=H;}
  value["hh"]=LZ(value["h"]);
  if (H>11){value["K"]=H-12;} else {value["K"]=H;}
  value["k"]=H+1;
  value["KK"]=LZ(value["K"]);
  value["kk"]=LZ(value["k"]);
  if (H > 11) { value["a"]="PM"; }
  else { value["a"]="AM"; }
  value["m"]=m;
  value["mm"]=LZ(m);
  value["s"]=s;
  value["ss"]=LZ(s);
  while (i_format < format.length) {
    c=format.charAt(i_format);
    token="";
    while ((format.charAt(i_format)==c) && (i_format < format.length)) {
      token += format.charAt(i_format++);
      }
    if (value[token] != null) { result=result + value[token]; }
    else { result=result + token; }
    }
  return result;
  }

function getSelectedDissertations() {
  var cb = $('.pub_chk');
  var diss = "";var sep = "";
  for(var x=0;x<cb.length;x++) {
     if (cb[x].checked) {
        diss = diss + sep + $(cb[x]).attr('value');
        sep = ",";
     }
  }


  return diss;
}

function popUp(nameOfpage)
{
    var newwin = window.open(
  nameOfpage ,
  "cart_window",
  "toolbar=no,menubar=no,scrollbars=yes,status=no,width=665,height=600");
    if (newwin != null && newwin.opener == null)
    {
        newwin.opener = self;
    }
}
function addToShoppingCart() {
  var diss = getSelectedDissertations();
     if (diss == "") {
          alert("No dissertations selected to add to cart!");          
       }
       else {
         var d = "&d="+$('#domestic_sel')[0].value;
         var a = "&a="+($('#academic_sel')[0].checked ? "1" : "2");
         var track = "&track="+(username != "" ? "dxill" : "dxweb");
         defaultPay = "&pt="+($('#payment_type')[0].checked ? "1" : "3");
           popUp(host+'/dissertations/cart?add='+diss+'&dlnow=1'+track+a+d+defaultPay+'&u='+escape(username));
       }
}


function getHeader() {
return '<div class="header_row">'+
       '<div style="float: left; width: 50px; font-size: 12px; height: 1em; padding-bottom: 0.5em;" class="header_sel_col">  </div>'+
     '<div style="border-bottom: 2px solid rgb(236, 236, 236);" id="header_col">'+
       '<span style="font-size: 16px;" class="bold"> Citations</span></div>'+
       '</div>';
}

function displayResults(data) {
  $('#results_container')[0].innerHTML = "<div id='results_table'>"+getHeader()+"</div>";

 data = eval(data);
 if (data.length == 0) {
   $('#hit_count')[0].innerHTML = "Your search resulted in 0 hits.";
 } else if (data.length < 40) {
   $('#hit_count')[0].innerHTML = "Your search resulted in "+data.length+" hit"+((data.length>1)?"s":"")+", which are listed below.";
 } else {
   $('#hit_count')[0].innerHTML = "Your search hit the limit of 40 hits, which are listed below.";
 }
 $.each(data, displayResultItem);
}

function displayResultItem(i, item) {
 if (item.canpurchase == "true") {
     item.checkboxTemplate = "<input class='pub_chk' type='checkbox' value='"+item.pubno+"'>";
     item.msg = "";
  } else {
      item.checkboxTemplate = " &nbsp; ";
      item.msg = "<br />Not available for purchase at this time.";
  }
  t = $.template(
        "<div class='result_row'>"+
           "<div class='select_col'> {checkboxTemplate} </div>"+
           "<div class='result_col'>"+
//               "<div style=''>"+
                  "<span class='bold'>{title}</span><br>by <span class='italic'>{author}</span>, <span class='bold'>{school}</span>, {year}, {pagecount} pages; AAT {pubno} {msg}"+
//               "</div>"+
           "</div>"+
        "</div>");

  $("#results_table").append(t, item);
 }

function onAccountDataReceived(data) {
    $('#accountInfo').thtml("accountInfoTmpl", this.data);
}

function onUsageSummaryDataReceived(data) {
  $('#year').html($('#usageSummarySelector')[0].value);
    if (this.data.length > 0)
        $('#usageSummary').thtml("usageSummaryTmpl", this.data);
        else $('#usageSummary').html("<tr><td colspan=3><h2>No data for this year.</h2></td></tr>");
}

function onUsageSearchDataReceived(data) {
  if (this.data != null) {	        
      $('#usageSearchResultsTotal').html("<h2>"+this.data.totalCount+" records found. ("+this.data.records.length+" shown)</h2>");
      if (this.data.records.length == 0) {
            $('#usageSearchResultsTable').hide();
            return;
      }
      $('#usageSearchResultsTable').show();
    $('#usageSearchResults').thtml("usageSearchTmpl", this.data.records);
    setupClickableLinks('#usageSearchResults');

  }
}

function setupClickableLinks(context) {
  $("a.history", context).each(function() {
    // hey, have we already done this?
    if (this.href == "javascript:void(0)") {
        return;
      }
      this.url = this.href;
      this.href = "javascript:void(0)";
      $(this).click(function() {
        if (this.url.substring(0, 4) == "http")
           this.url = this.url.substring(this.url.indexOf("#")+1);
        $.historyLoad(this.url);
      });
  });
}

function performUsageSearch() {
    $('#usageSearchDataSource').setDatasourceUrl('/ap/?ta=be&act=getOrderListByName&limit=1000&sort=entry_date&year='+$('#usageSearchSelector').val()+'&dir=DESC&callback=?&un='+username+'&__customer_name='+escape("%"+$('#tfUsageSearch')[0].value+"%")+'&__patron_name='+escape("%"+$('#tfUsageSearch').val()+"%"), {busySelector:"#busyUsageSearch"});
    $('#usageSearchDataSource').refresh();
    return false;
}

function updateUsageSummary() {
  $('#usageSummaryDataSource').setDatasourceUrl("/ap/?ta=be&act=getOrderSummary&callback=?&un="+username+"&year="+$('#usageSummarySelector').val(), {busySelector:"#busyUsageSummary"});
  $('#usageSummaryDataSource').refresh();
}

function login() {
    $.ajax({
        url: "/ap/?ta=be&act=getAuth&callback=?&un="+$('#username')[0].value+"&pw="+$('#pw')[0].value,
        success: processLoginResults(data),
        error: function(obj, message) {
            $("#login_error").text("Error performing login.");
          }
        });
}

function processLoginResults(data) {
  data = eval(data);
  if (data == null) {
    $("#login_error").text("Username not valid.");
  } else {
      username = data.login_name;
      window.location = "#menu";
  }
}

/*
 PageLoad function
 This function is called when:
 1. after calling $.historyInit();
 2. after calling $.historyLoad();
 3. after pushing "Go Back" button of a browser

 The parameter "hash" does not contain the first # character.
 */



var oldhash = null;
function pageload(hash) {
  if (hash == oldhash)
    return;
  oldhash = hash;
  // When restoring ajax loaded state, we make this a blank slate
  // TODO: use a css selector to call each div instead of being explicit
  $('#order_method').hide();
  $('#landing').hide();
  $('#login').hide();
  $('#search').hide();
  $('#results').hide();
  $('#about_cookies').hide();
  $('#menu').hide();
  $('#usage_menu').hide();
  $('#usage_summary').hide();
  $('#usage_download').hide();
  $('#usage_detail').hide();
  $('#usage_search').hide();
  $('#account').hide();
  hashSplit = hash.split("?");
  hash = hashSplit[0];
  parm = hashSplit[1];

 if ((!hash) || (hash == ''))
    if (dxILLinURL())
        hash = "menu";
        else hash = "landing";

 if (hash == "results") {
    doSearch();
 }

 if (hash == "search") {
         //$(document).unbind('keydown', 'return');
     //$(document).bind('keydown', 'return', doSearchAndShowPage);
     //isbound = true;
 }

 if (hash == "account") {
    // set up the data source.
    $('#accountDataSource').refresh();
 }

 if (hash == "usage_summary") {
   $('#usageSummaryDataSource').setDatasourceUrl("/ap/?ta=be&act=getOrderSummary&callback=?&un="+username+"&year="+$('#usageSummarySelector').val(), {busySelector:"#busyUsageSummary"});
   $('#usageSummaryDataSource').refresh();
 }

 if (hash == "usage_search") {
     //$(document).unbind('keydown', 'return');
     //$(document).bind('keydown', 'return', performUsageSearch);
   $('#tfUsageSearch').val('');
   $('#usageSearchDataSource').setDatasourceUrl('/ap/?ta=be&act=getOrderListByName&sort=order_id&dir=DESC&limit=1000&year='+$('#usageSearchSelector').val()+'&callback=?&un='+username, {busySelector:"#busyUsageSearch"});   
   $('#usageSearchDataSource').refresh();
 }

 if (hash == "usage_detail") {
   //$('#usageDetailSource').url
   //$('#usageDetailSource').refresh();
   showDetail(parm);
 }

 $('#'+hash).show();
}

function makeObjFromHashParm(parm) {
  if (!parm) {
    //parm = window.location.hash.split("?")[1];
    loc = window.location.toString();
    parm = loc.substring(loc.indexOf('?')+1);
  }
  if (!parm)
     return {};
  parms=parm.split("&");
  var obj = {};
   for(var x=0;x<parms.length;x++) {
     fieldVal = parms[x].split('=');
     obj[fieldVal[0]] = fieldVal[1];
     }
   return obj;
}

function showDetail(parm) {
   parm = makeObjFromHashParm(parm);

   var data;
   if (!parm.id)
     data = null;
   else {
     id = $('#usageSearchDataSource')[0].data.records[parm.id].order_id;
     $('#usageDetails').html("<h3>Retrieving details... <img src='/themes/default/img/srchanim.gif'></h3>");
        $.ajax({
            url: "/ap/?ta=be&act=getDetailedOrderListByName&un="+username+"&__pqdd_order.order_id="+id,
            success: function(data){
              data = eval("("+data+")");
              if (data != null) {
                $('#usageDetails').thtml('detailOrderReportTmpl', data.records[0]);
                $('#orderItemDetail').tappend('orderItemDetailTmpl', data.records)
                setupClickableLinks();
              }

          }
            });
   }
}

function doSearchAndShowPage() {
  if ($.browser.msie) {
    $('#search').hide();
    doSearch();
    $('#results').show();

  }
  else window.location = "#results";
}

function doSearch() {
  var search = getSearch();
    if (search != global_search) {
      global_search = search;
      showSearch();
      $.ajax({
        url: "/dxweb/performSearch?query="+search,
        success: displayResults,
        error: function(obj, message) {
            $('#results_container')[0].innerHTML = "<div id='results_table'>There was an error performing your search. Please try again.</div>";
            global_search = "";
          }
        });
    }
    return false;
}

function buildSearch(searchParms) {
  var search = "";
  if (searchParms.keyword)
    search = search + (search != "" ? " AND ":"") + searchParms.keyword;
  if (searchParms.pubno)
    search = search + (search != "" ? " AND ":"") + "DISPUB("+searchParms.pubno+")";
  if (searchParms.author)
    search = search + (search != "" ? " AND ":"") + "AU("+searchParms.author+")";
  if (searchParms.title)
    search = search + (search != "" ? " AND ":"") + "TI("+searchParms.title+")";
   return search;
}

function getSearch() {
  var searchParms = makeObjFromHashParm();
  if (searchParms.keyword || searchParms.pubno || searchParms.author || searchParms.title)
    return buildSearch(searchParms);
  else {
    if ($('#keyword').val() != "") searchParms.keyword = $('#keyword').val();
    if ($('#pubno').val() != "" ) searchParms.pubno = $('#pubno').val();
    if ($('#author').val() != "") searchParms.author = $('#author').val();
    if ($('#title').val() != "") searchParms.title = $('#title').val();
    return buildSearch(searchParms);
  }
  return "";
}

function showSearch() {
  $('#results_container')[0].innerHTML = "<div id='results_table'> <img src='/themes/default/img/srchanim.gif' style='margin:auto auto'> ... Your search results are loading ... </div>";
  $('#hit_count')[0].innerHTML = "Searching...";
  //everyTime(interval : Integer | String, [label = interval : String], fn : Function, [times = 0 : Integer], [belay = false : Boolean])
  $('#search_params')[0].innerHTML = "Search Performed:";
  if ($('#keyword').val() != '')
      $('#search_params').append('<table><tr><td align=right>&nbsp;</td><td>'+$('#keyword')[0].value+'</td></tr></table>');
  if ($('#pubno').val() != '')
      $('#search_params').append('<table><tr><td align=right><b>Order Number:</b></td><td>'+$('#pubno')[0].value+'</td></tr></table>');
  if ($('#author').val() != '')
      $('#search_params').append('<table><tr><td align=right><b>Author:</b></td><td>'+$('#author')[0].value+'</td></tr></table>');
  if ($('#title').val() != '')
      $('#search_params').append('<table><tr><td align=right><b>Title:</b></td><td>'+$('#title')[0].value+'</td></tr></table>');
}

 function historyClick() {

    var hash = this.href;
    hash = hash.replace(/^.*#/, '');
    // moves to a new page.
    // pageload is called at once.
    $.historyLoad(hash);

    return false;
 }
 function downloadCsv() {
   window.location = "/ap/?ta=csv&act=getOrderListByNameReport&sort=pqdd_order.order_id&dir=DESC&un="+username+"&limit=1000&year="+$("#csvYear").val();
 }

function dxILLinURL() {
    // we consider dxweb/login to be dxill
    return (window.location.pathname.toString().match(/\/dxweb\/login/) ||
       (window.location.pathname.toString().match(/\/dxill/) && (!username || (username == '')))
       );
}

function dxWebInURL() {
    return ((!window.location.pathname.toString().match(/\/dxweb\/login/)) &&
            (window.location.pathname.toString().match(/^\/dxweb/))
            );

}

var global_search;
$(document).ready(function(){
  if (dxILLinURL()) {
      window.location = "/dxill/login";
      return;
  }

  // if logged into dxill, but pointed at dxWeb, redirect to dxill
  if (dxWebInURL()) {
      if (username) {
          window.location = "/dxill#menu";
          return;
      }
  }

  $('#accountDataSource').setDatasourceUrl("/ap/?&ta=be&act=getAccountInfo&un="+username+"&callback=?");
  $('#accountDataSource').bind("onDataReceived", onAccountDataReceived); // creates a datareceived event for the data object.

  $('#usageSummaryDataSource').setDatasourceUrl("/ap/?ta=be&act=getOrderSummary&callback=?&un="+username+"&year="+$('#usageSummarySelector').val(), {busySelector:"#busyUsageSummary"});
  $('#usageSummaryDataSource').bind("onDataReceived", onUsageSummaryDataReceived); // creates a datareceived event for the data object.

  $('#usageSearchDataSource').setDatasourceUrl('/ap/?ta=be&act=getOrderListByName&sort=order_id&dir=DESC&limit=100&callback=?&un='+username, {busySelector:"#busyUsageSearch"});
  $('#usageSearchDataSource').bind("onDataReceived", onUsageSearchDataReceived); // creates a datareceived event for the data object.


  // Initialize history plugin.
  // The callback is called at once by present location.hash.
  $('#usageSummarySelector, #usageSearchSelector, #csvYear').fillYears()
  $.historyInit(pageload);

  setupClickableLinks();

  $(".return_to_search").click(historyClick);
  $("#downloadUsageCsv").click(downloadCsv);
  $("#tfUsageSearch").kbind("return", performUsageSearch);
  $("#keyword,#author,#title,#pubno").kbind("return", doSearchAndShowPage);
  $('.shopping_link').attr('href', "javascript:void(0)");
  $('.shopping_link').click(addToShoppingCart);
  
  

});