/*

*/


//Namespace 2112
window.NS2112 = window.NS2112 || {};


function selftest()
{
   alert("NS2112.snapInLoader") ;
}




NS2112.namespace("NS2112.snapInLoaderGlobals") ;
NS2112.snapInLoaderGlobals.rSnapIns = null ; //array
NS2112.snapInLoaderGlobals.URI = null 
NS2112.snapInLoaderGlobals.http_request_snap



fnError = function(a,b,c) {

 alert("AJAX call error.") ;
}



/*
NS2112.snapInLoaderGlobals.handlerData = { 
	    //data you wish to pass to your success or failure 
	    //handlers. 
	} 
*/	 
	NS2112.snapInLoaderGlobals.successHandler = function(oData) { 
	    //code to execute when all requested scripts have been 
	    //loaded; this code can make use of the contents of those 
	    //scripts, whether it's functional code or JSON data. 
       if( oData )
         oData.purge();
	} 

   NS2112.snapInLoaderGlobals.failHandler = function(oData) { 
	    //code to execute when all requested scripts have been 
       alert('load failed ' + oData) ;
	    
	} 
	 
	

/*see YUI Documentation for syncArray (varName) - it is used to workaround some SAFARI isssues...*/
NS2112.snapInLoaderGlobals.embedScript = function(r_Scripts, handlerData, mySuccessHandler, myFailHandler, syncArray)
{	
   var theSuccessHandler = NS2112.snapInLoaderGlobals.successHandler  ;
   var theFailHandler = NS2112.snapInLoaderGlobals.failHandler ;
   if(mySuccessHandler)
     theSuccessHandler = mySuccessHandler ;
   if(myFailHandler)
     theFailHandler = myFailHandler ;

	YAHOO.util.Get.script(r_Scripts, { 
	                onSuccess: theSuccessHandler, 
                   onFailure: theFailHandler,
	                data:      NS2112.snapInLoaderGlobals.handlerData,
                   autopurge: false 
	}); 
}




NS2112.snapInLoaderGlobals.onDataReady = new NS2112.CustomEvent("onDataReady");

NS2112.snapInLoaderGlobals.cbLoadNext = function()
{
   NS2112.snapInLoaderGlobals.onDataReady.fire() ;
   NS2112.snapInLoaderGlobals.rSnapIns.splice(0,1) ;  //kick the array
   if( NS2112.snapInLoaderGlobals.rSnapIns && NS2112.snapInLoaderGlobals.rSnapIns[0] )
   {
      var uri = encodeURI(NS2112.snapInLoaderGlobals.URI + '?SNAPINURL=' + NS2112.snapInLoaderGlobals.rSnapIns[0].URL) ;  
      var xhrAsync = new NS2112.snapInLoaderGlobals.asyncXHR() ;    
      NS2112.snapInLoaderGlobals.makeRequest2(xhrAsync, uri, true, xhrAsync.myXHRCallback) ;        
   }
} 

//flinn 06/2008 TBC - not productive
NS2112.snapInLoaderGlobals.cbPostNext = function()
{
   NS2112.snapInLoaderGlobals.onDataReady.fire() ;
   NS2112.snapInLoaderGlobals.rSnapIns.splice(0,1) ;  //kick the array
   if( NS2112.snapInLoaderGlobals.rSnapIns && NS2112.snapInLoaderGlobals.rSnapIns[0] )
   {
      var uri = encodeURI(NS2112.snapInLoaderGlobals.URI) ;            
      var xhrAsync = new NS2112.asyncPost() ;
      NS2112.snapInLoaderGlobals.postRequest2(xhrAsync, uri, 'SNAPINURL=' + NS2112.snapInLoaderGlobals.rSnapIns[0].URL,
                    true, xhrAsync.myXHRCallback) ;        
   }
} 


/*
   this needs to be serialized - it is not multi-request save right now...

*/


NS2112.snapInLoaderGlobals.myXHRCallbackPOST = function(response)
{
//alert("myXHRCallback " + http_request_snap.readyState) ;
      
	if (NS2112.snapInLoaderGlobals.http_request_snap.readyState != 4 
      || NS2112.snapInLoaderGlobals.http_request_snap.status != 200) 
	{
		return ;
	}

	try
	{  
      //alert(NS2112.snapInLoaderGlobals.http_request_snap.responseText) ;       
      //todo -> do some checking before eval.
      //SAP BUSINESS SERVER PAGES sent shit - remove      
      var xlated = NS2112.snapInLoaderGlobals.http_request_snap.responseText.replace(/^[\s \r\n\0]{1,}/,"");
	   xlated = xlated.replace(/[\s \r\n\0]{1,}$/,"");
		eval(xlated);
      NS2112.snapInLoaderGlobals.cbPostNext() ;		
	}
	catch (e) 
	{
		alert('snapInLoaderGlobals.myXHRCallback [' + e + ']') ;
   }
}  

	   
	   

/*This is 2112 Loader specific - don't bother
	The code here stems from antiglobalizing the Variables
*/
//1.5 callers may provide a clientcontext (see grid.js) which could be a storageID or any Object
NS2112.snapInLoaderGlobals.asyncXHR = function(strHTTPVerb, fnClientCallback, bEvalScript, oClientContext)
{
   var XHR = null ;
   var cbClientCallback = fnClientCallback ;  //in case the client wants to be notified
   var mb_ClientContext = oClientContext ;
   var bDoEval = bEvalScript ; //execute eval?
   var self = null ;
   this.VERB = 'GET' ; //Default
   this.postData = null ; //client can set this.
   if( typeof strHTTPVerb  != 'undefined' )
		this.VERB = strHTTPVerb ;
		
    if( typeof bDoEval == 'undefined' )
        bEval = false ; 
   
   
   this.setXHR = function(o){
      XHR = o ;
   }

   this.setSelf = function(o){
      self = o ;      
   }


   this.myXHRCallback = function(response)
   {
      	if (XHR.readyState != 4 || XHR.status != 200) 
	      {
		      return ;
	      }

	      try
	      {         
            //todo -> do some checking before eval.
            //SAP BUSINESS SERVER PAGES send shit - remove      
            var xlated = XHR.responseText.replace(/^[\s \r\n\0]{1,}/,"");
	         xlated = xlated.replace(/[\s \r\n\0]{1,}$/,"");
            if(bDoEval)
            {            
		         eval(xlated);
            }
            if(cbClientCallback)
               cbClientCallback(xlated, mb_ClientContext) ;
            self.cbLoadNext() ;		
	      }
	      catch (e) 
	      {	          
			  alert('CRITICAL ERROR - cannot proceed: NS2112.snapInLoaderGlobals.asyncXHR .myXHRCallback [' + e + ']') ;
	          if( NS2112.portalMan.getNumericSetting('BREAK_LEVEL', null, 0) > 0 )
	             debugger ;		      
         }
   }//end callback


   this.cbLoadNext = function()
   {
      NS2112.snapInLoaderGlobals.onDataReady.fire() ;
      NS2112.snapInLoaderGlobals.rSnapIns.splice(0,1) ;  //kick the array
      if( NS2112.snapInLoaderGlobals.rSnapIns && NS2112.snapInLoaderGlobals.rSnapIns[0] )
      {
         var uri = encodeURI(NS2112.snapInLoaderGlobals.URI + '?SNAPINURL=' + NS2112.snapInLoaderGlobals.rSnapIns[0].URL) ;              
         NS2112.snapInLoaderGlobals.makeRequest2(self, uri, true, self.myXHRCallback) ;         
      }
   } 

}



/*
   this needs to be serialized - it is not multi-request save right now...

*/


NS2112.snapInLoaderGlobals.myXHRCallbackGET = function(response)
{
//alert("myXHRCallback " + http_request_snap.readyState) ;
      
	if (http_request_snap.readyState != 4 || http_request_snap.status != 200) 
	{
		return ;
	}

	try
	{         
      //todo -> do some checking before eval.
      //SAP BUSINESS SERVER PAGES send shit - remove      
      var xlated = http_request_snap.responseText.replace(/^[\s \r\n\0]{1,}/,"");
	   xlated = xlated.replace(/[\s \r\n\0]{1,}$/,"");
		eval(xlated);
      NS2112.snapInLoaderGlobals.cbLoadNext() ;		
	}
	catch (e) 
	{
		alert('snapInLoaderGlobals.myXHRCallback [' + e + ']') ;
   }
}  



   NS2112.snapInLoaderGlobals.makeRequest = function (url, bCallAsync, fnCallback) 
   {		
	    //OSOLETE 1.4
       //Superseeded by makeRequest2
   } ;

   NS2112.snapInLoaderGlobals.makeRequest2 = function (xhrObject, url, bCallAsync, fnCallback) 
   {		
      var XHR = null ;
      XHR = new XMLHttpRequest();               
	  xhrObject.setXHR(XHR) ;    //for cbGetNext
       
       if (!XHR) 
	    {
           //alert('Giving up :( Cannot create an XMLHTTP instance');
           return false;
       }
	    
       if( true == bCallAsync )
       {
          //http_request_snap.onerror = fnError ;     
          xhrObject.setSelf(xhrObject) ;  
	       XHR.onreadystatechange = fnCallback;                 
       }
	   XHR.open(xhrObject.VERB, url, bCallAsync);  
	   if( 'POST' == xhrObject.VERB )
		XHR.setRequestHeader("Content-Type",
                           "application/x-www-form-urlencoded");
	   try
	   {  
			XHR.send(xhrObject.postData);  //can be NULL for 'GET' request.
	   }
	   catch(e){
		debugger ;
	   }
       
      //alert(bCallAsync  + "#########" + url) ;
       if( false == bCallAsync )
       {
         var strResponse = XHR.responseText ;
         var xlated = strResponse.replace(/^[\s \r\n\0]{1,}/,"");
	               xlated = xlated.replace(/[\s \r\n\0]{1,}$/,"");
         

         //alert(url + "##########" + strResponse.length) ;   
         return xlated ;
       }


   /* !!!!!  Da manche Webserver evt. Whitespaces am Anfang schicken, 
      Müssen diese unbedingt entfernt werden! Sonst funktioniert der Parser nicht.
   */		 
   //var i = http_request_snap.responseText.indexOf('<') ;
   //return http_request_snap.responseText.substr( i);
   } ;



   NS2112.snapInLoaderGlobals.postRequest = function (url, strData, bCallAsync, fnCallback) 
   {		
  
     // OBSOLET 1.4
     // SUPERSEEDED by postRequest2

   } ;

 

NS2112.snapInLoader = function ()  //
{ 
   var uri = '' ;         
   NS2112.snapInLoaderGlobals.URI = NS2112.portalMan.getLoaderURL() ;//'/2112PowerWindows/php/loadSnap.php?' ;         
   this.loadSnap = function(rSnapIns, strMethod)
   { 
      NS2112.snapInLoaderGlobals.rSnapIns = rSnapIns.slice() ;  //make snap-shot      
      //alert('loadSnap: ' + NS2112.snapInLoaderGlobals.rSnapIns.length) ;
      if( NS2112.snapInLoaderGlobals.rSnapIns && NS2112.snapInLoaderGlobals.rSnapIns[0] )
      {
         
//the value for Async call is set to false
         if(strMethod == 'POST' )
         {
           var xhrAsync = new NS2112.snapInLoaderGlobals.asyncXHR('POST', null,  //no client callback
                                               true) ;//do eval the script
           NS2112.snapInLoaderGlobals.makeRequest2(
                              xhrAsync, NS2112.snapInLoaderGlobals.URI, 
                              encodeURI('SNAPINURL=' + NS2112.snapInLoaderGlobals.rSnapIns[0].URL),
                              true, xhrAsync.myXHRCallback); 
         
         }
         else
         {
            uri = encodeURI(NS2112.snapInLoaderGlobals.URI + '?SNAPINURL=' + NS2112.snapInLoaderGlobals.rSnapIns[0].URL) ;
            var xhrAsync = new NS2112.snapInLoaderGlobals.asyncXHR('GET', null, true) ; //
            NS2112.snapInLoaderGlobals.makeRequest2(xhrAsync, uri, true, xhrAsync.myXHRCallback) ;              
         }         
      }
   }   
/*
Loading a YAHOO Module  (GET METHOD currently)
*/
   this.loadModule = function(strModuleName, bEval, bCallAsync, bLoadMin, bLoadBeta)
   { //we get the path from our configuration.
         if(NS2112.aPortalSettings['YUI_PATH'] != null) 
         {
            var uri = encodeURI(NS2112.snapInLoaderGlobals.URI + '?MODULE=' + NS2112.aPortalSettings['YUI_PATH'] + '/' + strModuleName 
                  + '/' + strModuleName) ;
            if( true == bLoadBeta ) uri+= '-beta' ;
            bLoadMin==true?uri+= '-min.js':uri+= '.js'  ;
         }
         else
         {
            return -1;
         }
         //usually modules must be called in sync to prevent syntax errors in snaps.
         var xhrAsync = new NS2112.snapInLoaderGlobals.asyncXHR('GET', null, bEval) ;
         var response =  NS2112.snapInLoaderGlobals.makeRequest2(xhrAsync, uri, bCallAsync, xhrAsync.myXHRCallback) ;
         if( true == bEval)
         {
            eval(response) ;            
            return 0 ;
         }
         else
          return response;        
    } 
/*loading an arbitrary module from anywhere*/
   this.loadModule2 = function(strURL, bEval, bCallAsync, cbCompletion)
   { //we get the path from our configuration.
  
//alert('Eval [' + bEval + '] Async [' + bCallAsync + ']') ;
      var uri = NS2112.snapInLoaderGlobals.URI + '?MODULE=' + strURL ;   
      var xhrAsync = new NS2112.snapInLoaderGlobals.asyncXHR('GET', cbCompletion, bEval) ;                  
      //usually modules must be called in sync to prevent syntax errors in snaps.   
      var response ;
      
      if( typeof bEval == 'undefined' )
        bEval = false ; 
        
      if( typeof bCallAsync == 'undefined' )
        bCallAsync = false ; 
        
      if( typeof cbCompletion == 'undefined' )
        cbCompletion = null ; 
      
      
      if( true == bCallAsync)
      {  
         NS2112.snapInLoaderGlobals.makeRequest2(xhrAsync, uri, bCallAsync, xhrAsync.myXHRCallback) ;
         return ;
      }
      else  //sync
      { 
//alert('loader calling sync...') ;
         response = NS2112.snapInLoaderGlobals.makeRequest2(xhrAsync, uri, bCallAsync) ;        
      }      

      if( true == bEval)
      {      
//alert('loader called eval') ;
        eval(response) ;
       
         return ;
      }
      else{
//       alert(response) ;
       return response; 
       }       
    } 


//loading a snapIns config 
//configs are usually located in the same URL as the snap - but have the ".cfg" extension
//the calls are alway sychronous since someone is really waiting for the data.
   this.loadSnapConfig = function(strURL)
   {       
         var uri = encodeURI(NS2112.snapInLoaderGlobals.URI + '?MODULE=' + strURL) ;            
         //usually modules must be called in sync to prevent syntax errors in snaps.
         var xhrAsync = new NS2112.snapInLoaderGlobals.asyncXHR('GET', null, false) ;
         var response =  NS2112.snapInLoaderGlobals.makeRequest2(xhrAsync, uri, false, xhrAsync.myXHRCallback) ;
         return response;        
   } 

   this.loadBootConfig = function()
   {       
         var uri = NS2112.portalMan.getBootConfigURL() ;   
         var xhrAsync = new NS2112.snapInLoaderGlobals.asyncXHR('GET', null, false) ;         
         //usually modules must be called in sync to prevent syntax errors in snaps.
         var response =  NS2112.snapInLoaderGlobals.makeRequest2(xhrAsync, uri, false, xhrAsync.myXHRCallback) ;
         return response;        
   } 
   


};














