/* <script> */

var Im = new Importer();
 Im.Go(fInitImporter);
 
function fInitImporter(Param)
{
 Param.Path = "/Js/QWJsLib/";
 Param.Ext = ".js";
 
 Param.HFolder = "Help";
 Param.HExt = ".txt";
 
 Param.HIntervalMs = 50;
 
 Param.ImportExtend = true;
}

// shawl.qiu JavaScript Document
/*-----------------------------------------------------------------------------------*\
 * shawl.qiu Javascript Importer class v1.0
\*-----------------------------------------------------------------------------------*/
//---------------------------------begin class Importer()-------------------------------//
function Importer()
{// shawl.qiu code
 //------------------------------------begin private variable
 //---------------begin about
 var Au = {};
  Au.Subject = "shawl.qiu Javascript Importer class";
  Au.Version = "v1.1";
  Au.Name = "shawl.qiu";
  Au.Email = "shawl.qiu@gmail.com";
  Au.Blog = "http://blog.csdn.net/btbtd/";
  Au.CreatedDate = "2007-9-13 v1.0";
  Au.Update = {};
  Au.Update["1"] = "2007-9-29 v1.1";
 //---------------end about
 
 var This = this;
 
 var Param = {};
 Param.Path = "/Js/QWJsLib/";
 Param.Ext = ".js";
 
 Param.HFolder = "Help";
 Param.HExt = ".txt";
 
 Param.HIntervalMs = 50;
 
 var PVar = {};
 PVar.Interval = null;
 PVar.Count = 0;
 //------------------------------------end private variable
 
 //------------------------------------begin public method
 //-------------------Begin this.Get
 this.Get = {};
 this.Get.Au = fGetAu;
 //-------------------End this.Get
 
 //-------------------Begin this.Set
 this.Set = {};
 //-------------------End this.Set
 
 this.Go = fGo;
 this.Include = fInclude;
 this.IncludeDirector = fIncludeDirector;
 this.Help = fHelp;
 //------------------------------------end public method

 //------------------------------------begin private method
 function fGo(fIniter)
 { // shawl.qiu code, void return
  if(fIsFunc(fIniter)) fIniter(Param);
  
  if(Param.ImportExtend)
  {
   var sInclude =  ["<script type='text/javascript' src='", Param.Path, "extend.js'><\/script>"].join('');
   document.write(sInclude);
  }
 } // end function fGo
 
 function fIncludeDirector(sCmdList, bIncludeOnce)
 { // shawl.qiu code, void return
  var CmdAr = sCmdList.split("|");
  var CmdArLen = CmdAr.length;
  var iCmdArCount = 0;
  
  while(iCmdArCount<CmdArLen)
  {
   var sFilePath = CmdAr[iCmdArCount];
   var sClass = sFilePath.replace(/^.*\//g, "").replace(/\..*$/g, "");
   
   var bIncluded = false;
   
   if(bIncludeOnce)
   {
    bIncluded = fIsFunc(window[sClass]);
    
    //document.write("bIncluded: ", bIncluded, "<br/>");
    
    if(bIncluded) 
    {
     iCmdArCount++; 
     continue;
    }
   } // end if
   
   var sInclude =  ["<script type='text/javascript' src='",sFilePath,"'><\/script>"].join('');
   document.write(sInclude);
   //defaultStatus = sFilePath;
   
   iCmdArCount++;
  } // end while
 } // end function fIncludeDirector(sCmdList, bIncludeOnce)
 
 function fInclude(sCmdList, bIncludeOnce)
 { // shawl.qiu code, return array
  var CmdAr = sCmdList.split("|");
  var CmdArLen = CmdAr.length;
  var iCmdArCount = 0;
  var PathAr = [];
  
  while(iCmdArCount<CmdArLen)
  {
   var sCmd = CmdAr[iCmdArCount];
   var sPath = sCmd.replace(/\./g, "/");
   var sClass = sCmd.replace(/^.*\./g, "").replace(/[\d\_\-]+$/, "");
   var sFilePath = [Param.Path, sPath, "/", sClass, Param.Ext].join("");
   var sFolderPath = [Param.Path, sPath, "/"].join("");
   
   PathAr.push(sFolderPath);
   
   var bIncluded = false;
   
   if(bIncludeOnce)
   {
    bIncluded = fIsFunc(window[sClass]);
    
    //document.write("bIncluded: ", bIncluded, "<br/>");
    
    if(bIncluded) 
    {
     iCmdArCount++; 
     continue;
    }
   } // end if
   
//    document.write("sCmd: ", sCmd, "<br/>");
//    document.write("sPath: ", sPath, "<br/>");
//    document.write("sClass: ", sClass, "<br/>");
//    document.write("sFilePath: ", sFilePath, "<br/>");
   
   var sInclude =  ["<script type='text/javascript' src='",sFilePath,"'><\/script>"].join('');
   document.write(sInclude);
   
   iCmdArCount++;
  } // end while
  return PathAr;
 } // end function fInclude(sCmdList, bIncludeOnce)
 
 function fHelp(sCmdList, bHighlight)
 { // shawl.qiu code, void return
  var CmdAr = sCmdList.split("|");
  var CmdArLen = CmdAr.length;
  var iCmdArCount = 0;
  
  if(bHighlight)
  {
   fInclude("String.HighlightEngine", true);
   
   PVar.Interval = 
    setInterval
    ( 
     function()
     {
      defaultStatus = "Loading..."+(PVar.Count++);
      if(window["HighlightEngine"])
      {
       while(iCmdArCount<CmdArLen)
       {
        var sFilePath = fSetHelpPath(CmdAr[iCmdArCount]).join("");
        fXhExt(sFilePath, fHelpCallback, [bHighlight]);      
        iCmdArCount++;
        
        clearInterval(PVar.Interval);
       } // end while
       
       defaultStatus = "Done.";
       PVar.Count = 0;
      }
     }
     ,
     Param.HIntervalMs
    );
  }
  else
  {
   while(iCmdArCount<CmdArLen)
   {
    var sFilePath = fSetHelpPath(CmdAr[iCmdArCount]).join("");
    fXhExt(sFilePath, fHelpCallback, [bHighlight]);
    iCmdArCount++;
   } // end while
  } // end if
 } // end function fHelp(sCmdList, bHighlight)
 
 function fSetHelpPath(sCmd)
 { // shawl.qiu code, return array
  var sPath = sCmd.replace(/\./g, "/");
  var sClass = sCmd.replace(/^.*\./g, "").replace(/[\d\_\-]+$/, "");
  if(/^Readme$/i.test(sCmd))
  {
   return [Param.Path, "Readme", Param.HExt];
  }
  else if(/^Call$/i.test(sCmd))
  {
   return [Param.Path, "Default", Param.HExt];
  }
  else if(/^Source$/i.test(sCmd))
  {
   return [Param.Path, "default", Param.Ext];
  }
  else
  {
   //alert([Param.Path, sPath, "/", Param.HFolder, "/", sClass, Param.HExt])
   return [Param.Path, sPath, "/", Param.HFolder, "/", sClass, Param.HExt];
  }
 } // end function fSetHelpPath(sCmd)
 
 function fHelpCallback(TextAr, bHighlight)
 { // shalw.qiu code, void return;
  //alert(TextAr)
  var Body = document.body;
  
  var SpanEle = $("Span");
  
  if(bHighlight)
  {
   var Hl = new HighlightEngine();
   Hl.Go(TextAr, "Tag");
   delete Hl;
   TextAr.push("<hr/>");
   SpanEle.innerHTML = TextAr.join("");
  }
  else 
  {
   SpanEle.innerHTML = ["<xmp>", TextAr, "<\/xmp><hr/>"].join("");
  }
  
  if(Body.childNodes.length===0)
  {
   alert(0)
  }
  else
  {
   Body.insertBefore(SpanEle, Body.firstChild)
  }
 } // end function fHelpCallback(TextAr)
 
 function fIsFunc(Func)
 { // shawl.qiu code, return Boolean
  if(Func) if(Func.constructor==Function) return true;
  return false;
 } // end function fIsFunc(Func)
 
 function fXhExt(sUrl, oFunc, ExtArgAr, sMethod)
 {//shawl.qiu code, void return
  if(!sMethod) sMethod = "GET";
  var xh;
  
  try{ xh = new XMLHttpRequest();} 
  catch(e)
  {
   try{ xh = new ActiveXObject('microsoft.xmlhttp');} 
   catch(e)
   {
    try{ xh = new ActiveXObject("Msxml2.XMLHTTP");} catch(e){} // end try 2
   } // end try 1
  } // end try
  xh.open(sMethod, sUrl);
  xh.onreadystatechange =
   function()
   {
    if(xh.readyState == 4 && xh.status == 200)
    {
     if(oFunc)
     {
      if(ExtArgAr)
      {
       if(ExtArgAr.constructor==Array)
       {
        ExtArgAr.unshift([xh.responseText]);
        oFunc.apply(null, ExtArgAr);
       }
       else oFunc([xh.responseText]);
      }
      else oFunc([xh.responseText]);
     } 
     else alert(xh.responseText);
    }
   };
  
  xh.send(null);
 } // end function fXhExt(sUrl, oFunc, ExtArgAr, sMethod)

 function $(sTag){return document.createElement(sTag);}
 function _(sText){return document.createTextNode(sText);}
 
 function fGetAu(){ return Au; }
 //------------------------------------end private method
} // shawl.qiu code
//---------------------------------end class Importer()---------------------------------//
/*</script> */

