// Copyright 2006 FineTooth
// All Rights Reserved
//
// Author: Lindsey Simon <lsimon@finetooth.com

// set Google globals
logging = false;
xsltdebug = false;
renderDiv = {};
   
// overwrite 
Utility.AjaxOnException = function( request, exception ) {
   var error_details = exception.error_details ? escape(exception.error_details) : escape( exception.description ? exception.description : exception.message +", on line " + exception.lineNumber + " in file " + exception.fileName );
   
   var msg = "JS Exception in XSLDataGridTest: " + unescape(error_details);
   console.debug( msg );
   new Insertion.Before( "renderDiv", "<div id='JSException'>" + msg + "</div>" );
}


function initXSLDataGrid() {
   console.debug("initXSLDataGrid");
   var xdg = new XSLDataGrid( 'renderDiv', { debugging: true, extra_parameters: extra_parameters, width: 400, height: 250, transformer: ( $F( 'transformTypeSarissa' ) ? 'client' : 'server' ), url: 'DynamicTable.php', prefetch: false });
   xdg._XMLDOMDoc = xmlDoc;
   xdg.loaded( true ); // already have loaded data
   xdg.resize();
}


// create an instance of XSLTProcessor
var SarissaProcessor;
var SarissaXSLDoc;
function initSarissa() {
   SarissaProcessor = new XSLTProcessor();
   new Utility.AjaxUpdater( '', {
      url: '../XSLDataGrid.xsl',
      parameters: '',
      onComplete: initSarissaOnComplete
   });
   
   console.debug("Initializing Sarissa XSL processor with AJAX request");
}

function initSarissaOnComplete( transport ) {
   //alert("transport.responseXML: " + transport.responseXML.xml);
   SarissaProcessor.importStylesheet( transport.responseXML );
   console.debug("Initialized Sarissa XSL processor with XSL document");
   
}

var xmlDoc;
function testSarissaXSLT() {
   console.debug("testSarissaXSLT start");
   renderDiv.className = "loadingBG";
   $( 'testSarissaXSLT' ).disabled = true;
   
   //alert( 'transportResponseText:' + transportResponseText );
   // create source document - doesn't work w/ text/html
   xmlDoc = (new DOMParser()).parseFromString( transportResponseText, "application/xhtml+xml");
   if( Sarissa.getParseErrorText(xmlDoc) != Sarissa.PARSED_OK ){
      // The document was not loaded correctly! Inform the user:
      alert("Parse Error:" + Sarissa.getParseErrorText(xmlDoc));
   }
   
   
   // transform the document 
   var newDocument = SarissaProcessor.transformToDocument(xmlDoc);
   
   // show transformation results
   var SarissaSerializer = new XMLSerializer();
   var transformed = SarissaSerializer.serializeToString(newDocument);
   renderDiv.innerHTML = $( 'xhtml' ).value = transformed;
   renderDiv.className = "";
   
   $( 'postK' ).value = Math.round( ( transformed.length / 1000 ) * 10 ) / 10 + "k";
   
   console.debug("testSarissaXSLT done");
}

function renderXHTML() {
   // fix this so we can write into there and not screw up the table
   renderDiv.innerHTML = $F( 'xhtml' ).replace(/id=\"renderDiv\"/, 'id="renderDivRendered"' );
}

function clearPage() {
   renderDiv = $( 'renderDiv' );
   $( 'xhtml' ).value = 'Source code will appear here';
   renderDiv.innerHTML = "<div id='initMsg'>Code will render here</div>";
}

function toggleAutoTransform() {
   if ( $F( 'autoTransform' ) ) {
      $( 'transformTypeServer' ).disabled = $( 'transformTypeSarissa' ).disabled = false;
      $( 'transformTypeSarissa' ).checked = true;
   }
   else {
      $( 'transformTypeServer' ).disabled = $( 'transformTypeSarissa' ).disabled = true;
      $( 'transformTypeServer' ).checked  = $( 'transformTypeSarissa' ).checked = false;
   }
   
}

var extra_parameters;
var transportResponseText;
function fetchXHTML() {
   console.debug("fetchXHTML start");
   renderDiv.innerHTML = "";
   renderDiv.className = "loadingBG";
   extra_parameters = 'xdguid=testXDG&rows=' + $F( 'rows' ) + ( $F( 'transformTypeServer' ) ? '&transformOnServer=' + $F( 'transformTypeServer' ) : "" );
   new Utility.AjaxRequest({
      url: 'DynamicTable.php',
      method: 'get',
      parameters: extra_parameters,
      onLoading: function() {
         //renderDiv.innerHTML = "";
         //renderDiv.className = "loadingBG";
      },
      onComplete: function( transport ) {
         console.debug("fetchXHTML onComplete");
         
         // fill textarea with code
         //alert( "fetchXHTML xml: " + transport.responseXML );
         $( 'xhtml' ).value = transportResponseText = transport.responseText;
         
         
         // fix renderDiv as id in pasting "code"
         renderDiv.className = "";
         renderDiv.innerHTML = transport.responseText.replace(/id=\"renderDiv\"/, 'id="renderDivRendered"' );
         renderDiv.style.border = "0px";
         
         // auto-transform onload
         if ( $F( 'autoTransform' ) ) {
            $( 'testSarissaXSLT' ).disabled = true;
            
            // test for auto transform type
            if ( $F( 'transformTypeSarissa' ) ) {
               
               // show pre and post k
               $( 'preK' ).value = Math.round( ( transport.responseText.length / 1000 ) * 10 ) / 10 + "k";
               $( 'postK' ).value = "0k";
               testSarissaXSLT();
               initXSLDataGrid();
            }
            // transformed already on server
            else {
               
               // show pre and post k
               $( 'postK' ).value = Math.round( ( transport.responseText.length / 1000 ) * 10 ) / 10 + "k";
               $( 'preK' ).value = "0k";
               initXSLDataGrid();
            }
         }
         // they want the raw code and will transform by hand
         else {
            // show pre and post k
            $( 'preK' ).value = Math.round( ( transport.responseText.length / 1000 ) * 10 ) / 10 + "k";
            $( 'postK' ).value = "0k";
            $( 'testSarissaXSLT' ).disabled = false;
         }
        
      }
   });
}

function killPrefsCookie() {
   new Utility.AjaxRequest({
         url: 'DynamicTable.php',
         parameters: 'killcookie=1',
         onComplete: function() {
            window.location.href = 'Dynamic.php';   
         }
   });
}

function testGetEl() {
   var i = 10000;
   do {
      var t = $( 'testGoogleXSLT' );
   }
   while (i--);
}

function testNode() {
   var i = 10000;
   do {
      var t = renderDiv.firstChild;
   }
   while (i--);
}

