﻿/**
*     @fileoverview Simple example that shows how to encapsulate 
*     XMLHTTPRequestCalls




/**
*     Constructor for the class.
*
*     @param {String} dataURL The path to the data that the class
*     will load (OPTIONAL)
*
*     @constructor
*/
function removeTags(tag, text) {
    //var obj = document.getElementsByTagName('textarea')[0];
    var re = new RegExp('<' + tag + '[^><]*>|<.' + tag + '[^><]*>', 'g');
    return text.replace(re, '');
}


function MessageLoader(dataURL,container,doParentRefresh, evaltxt, notFounfEvaltxt)
{

      if(dataURL != undefined)
      {
            this._dataURL = dataURL;
      }
      if(container != undefined)
      {
            this._containerID = container;
      }     
      if(doParentRefresh != undefined)
      {
            this._doParentRefresh = doParentRefresh;
      }     
      if(evaltxt != undefined)
      {
            this._evaltxt = evaltxt;
      }
      if(notFounfEvaltxt != undefined)
      {
            this._notFounfEvaltxt = notFounfEvaltxt;
      }                 
      this._writeContainer();
}

//where to load the data from
MessageLoader.prototype._dataURL = "data.txt";

//var to hold an instance of the XMLHTTPRequest object
MessageLoader.prototype._request = undefined;

//ID for the html div we will create to display the data
MessageLoader.prototype._containerID = "container";

//name of the css class for the HTML container
MessageLoader.prototype._containerClass = "ml_container";

MessageLoader.prototype._doParentRefresh = false;

/**************** Public APIs **********************/

/**
*     Tells the class to load its data and render the results.
*/
MessageLoader.prototype.load = function()
{
      //get a new XMLHTTPRequest and store it in an instance var.
      this._request = this._getXMLHTTPRequest();
      
      //set the var so we can scope the callback
      var _this = this;
      
      //callback will be an anonymous function that calls back into our class
      //this allows the call back in which we handle the response (_onData())
      // to have the correct scope.
      this._request.onreadystatechange = function(){_this._onData()};
      this._request.open("GET", this._generateDataUrl(), false);
      this._request.setRequestHeader('Cache-Control', 'no-cache');
      
      
      this._request.send(null);
}

/***************Private Rendering APIs ********************/

//writes the top level div for the class / widget
MessageLoader.prototype._writeContainer = function()
{
      //styles should be in external CSS
      //document.write("<div id='"+this._containerID+"' class='"+this._containerClass+"'></div>");
}

//renders the entire widget
MessageLoader.prototype._render = function (title) {

    var content = document.getElementById(this._containerID);
    //content.appendChild(document.createTextNode(title));
    if (!content) {
        alert(this._containerID + " is not an object!");
    } else {
        title = removeTags('form', title);
        title = removeTags('body', title);
        title = removeTags('html', title);
        title = removeTags('head', title);
        title = removeTags('title', title);
        title = removeTags('body', title);

        content.innerHTML = title;

        if (content.innerHTML == "n/a") {
            if (this._notFounfEvaltxt.length > 0) {

                eval(this._notFounfEvaltxt);
            } else {
                eval(this._evaltxt);
            }
        } else {
            var evals = this._evaltxt.split("|");
            for (var num = 0; num < evals.length; num++) {
                eval(evals[num]);
            }
            //eval(this._evaltxt);
        }
        //initShowHideDivsAll();
        //initShowHideDivs(bShowUserInventory);
        //if(this._doParentRefresh){initShowHideDivs_sub(bShowUserInventory);}
        //                eval(this._evaltxt);
    }
}

/***************Private Data Loading Handlers*******************/

//return the URL from which the data will be loaded
MessageLoader.prototype._generateDataUrl = function()
{
      return this._dataURL;
}


//callback for when the data is loaded from the server
MessageLoader.prototype._onData = function()
{
      if(this._request.readyState == 4)
      {
            if(this._request.status == "200")
            {
                  this._render(this._request.responseText);
                  
                  //if the onDraw callback has been defined
                  //call it to let the listener know
                  //that we are done creating the list
                  if(this.onDraw != undefined)
                  {
                        this.onDraw();
                  }
            }
            else
            {     
                  //check if an error callback handler has been defined
                  if(this.onError != undefined)
                  {
                        //pass an object to the callback handler with info
                        //about the error
                        this.onError({status:this_request.status, 
                                    statusText:this._request.statusText});
                  }
            }
            
            //clean up
            delete this._request;
      }
}

/***************Private Data Util Functions ********************/


//returns an XMLHTTPRequest instance (based on browser)
MessageLoader.prototype._getXMLHTTPRequest = function()
{

      var xmlHttp;
      try
      {
            xmlHttp = new ActiveXObject("Msxml2.XMLHttp");
      }
      catch(e)
      {
            try
            {
                  xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
            }
            catch(e2)
            {
            }
      }

      if(xmlHttp == undefined && (typeof XMLHttpRequest != 'undefined'))
      {
            xmlHttp = new XMLHttpRequest();
      }
      
      return xmlHttp;
}


