/**
Addon for execute Javascript scripts loaded over AJAX

**/
function isIE(){
    if(navigator.appName.indexOf("Microsoft")!=-1)
	if (navigator.userAgent.indexOf('Opera') == -1)
	return true;
return false;
}

function sbExecScript(text)
{
	if (!text)
		return;
		
	if (window.execScript)
	{

		window.execScript(text);
	}
	else 
	{
		var script = document.createElement('script');
  		script.setAttribute('type', 'text/javascript');
  		script.setAttribute('language', 'JavaScript');
 		if (isIE)
  			script.text = text;
  		else
  			script.appendChild( document.createTextNode( text ) );
  		var head = document.getElementsByTagName("head")[0] || document.documentElement;
  		head.insertBefore( script, head.firstChild );
		head.removeChild( script );
 	}
 	
 	return;
}

var sbEvalJSSrcs = [];
function XHEvalJS(s)
{
	var js_ScriptFragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
	var js_ScriptSrcFragment = '<script.+(src[ ]*=[ ]*\'(.*?)\'|src[ ]*=[ ]*"(.*?)").+';

	var matchAll = new RegExp(js_ScriptFragment, 'img');
    var matchOne = new RegExp(js_ScriptFragment, 'im');
    var matchSrc = new RegExp(js_ScriptSrcFragment, 'im');

    var arr = s.match(matchAll) || [];
    var JSCode = [];
	
	for (var i = 0; i < arr.length; i++)
    {
        var srcMt = arr[i].match(matchSrc);
        if (srcMt)
        {
            if (srcMt.length > 3)
            	srcMt = srcMt[3];
            else
            	srcMt = srcMt[2];
            
            if (srcMt != '')
            {
            	var found = false;
            	for (var j = 0; j < sbEvalJSSrcs.length; j++)
            	{
            		if (sbEvalJSSrcs[j] == srcMt)
            		{
            			found = true;
            			break;
            		}
            	}
            	
            	if (found)
            		continue;
            		
            	sbEvalJSSrcs[sbEvalJSSrcs.length] = srcMt;
            	var res = sbLoadSync(srcMt);
            	if (res)
	            	JSCode[JSCode.length] = res;
            }
        }

        var mtCode = arr[i].match(matchOne);
        if (mtCode && mtCode[1] != '') 
        	JSCode[JSCode.length] = mtCode[1];
    }
    
    s = s.replace(matchAll, '');
	
    for(var i = 0; i < JSCode.length; i++)
    	sbExecScript(JSCode[i]);
    
    return s;
}

/** XHConn - Simple XMLHTTP Interface - bfults@gmail.com - 2005-04-08        **
 ** Code licensed under Creative Commons Attribution-ShareAlike License      **
 ** http://creativecommons.org/licenses/by-sa/2.0/                           **/
function XHConn()
{
  var xmlhttp, bComplete = false;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

