// gridrequest.js
//
// Copyright 2005 Tivo Inc.
// All Rights Reserved
//
// AJAX code to request a chunk of data for the TV listings
//
// Author: Mac Vu 
// requires: prototype.js

function requestDisplayChunk(aStartTime, aEndTime, aOffset, aCount) {
  var tempStartTime = new Date(aStartTime);
  var tempEndTime = new Date(aEndTime); 
  var offsetStartTime = offsetTimeInMinutes(tempStartTime, 1);
  var offsetEndTime = offsetTimeInMinutes(tempEndTime, -1);
  var tempStartTimeString = dateToRequestString(offsetStartTime);
  var tempEndTimeString = dateToRequestString(offsetEndTime);

  var requestUrl = 'ggproxy2.do';
  
  if (gridguidedebug__) {
    var tempST = aStartTime / (60 * 1000);
    var tempET = aEndTime / (60 * 1000);
    
    Log.write('Request Chunk: [' + aOffset + ', ' + aCount + ', ' + 
            tempST + ', ' + tempET + ']' );
  }

  var pars = "offset=" + aOffset + "&count=" + aCount + 
             "&tsn=" + tsn + 
             "&maxEndTime=" + tempStartTimeString + "&minStartTime=" + tempEndTimeString;

  if (urldebug__) {		
    Log.write(requestUrl + '?' + pars);
  }
  
  requestStartTime = aStartTime;
  requestEndTime = aEndTime;
  requestOffset = aOffset;
  requestCount = aCount;

  var myAjax = new Ajax.Request(requestUrl, 
               {method: 'get', parameters: pars, onSuccess: processDisplayChunkCB, onFailure: processFailureCB});
}

function processDisplayChunkCB(originalRequest, obj) {
  // only if req shows "loaded"
  // var dom = xmlParse(originalRequest.responseText);
  var dom = originalRequest.responseXML;
  var minEndTime = originalRequest.getResponseHeader('minEndTime');
  var maxStartTime = originalRequest.getResponseHeader('maxStartTime');
  var offset = originalRequest.getResponseHeader('offset');
  if (urldebug__) {	
    Log.write('minEndTime: ' + minEndTime);
    Log.write('maxStartTime: ' + maxStartTime);
    Log.write('offset: ' + offset);
  }
  
  var error = dom.getElementsByTagName('error');
  if (error.length > 0) {
    if (gridguidedebug__) {
      Log.write('An Error returned');
    }
    return;
  }
  var gchunk = xmlResultToGridList(dom, minEndTime, maxStartTime, offset);
	
  if (displayChunk == null) {
    displayChunk = gchunk;
  } else {
    connectToDisplayChunk(gchunk);
    
    if (!gridDisplay.chunkInQuadTwo(displayChunk)) {
      displayChunk = gchunk;
    }
  }
	
  displayRequestCount ++;
  if (displayRequestCount > displayTryThreshold) {
    var answer = confirm('TV Listings is unable to retrieve data to display.  Do you want to try again?');
    if (answer) {
      displayRequestCount = 0;
      displayAndLoadNextQuad();
    }
  } else {
  	displayAndLoadNextQuad();
  }
}
 
function processFailureCB(originalRequest, obj) {
  displayRequestCount ++;
  
  if (urldebug__) {		
    Log.write('url request failed. count ' + displayRequestCount);
  }

  if (displayRequestCount > displayTryThreshold) {
    var answer = confirm('TV Listings is unable to retrieve data to display.  Do you want to try again?');
    if (answer) {
      displayRequestCount = 0;
      displayAndLoadNextQuad();
    }
  } else {
    displayAndLoadNextQuad();
  }
}
