/** 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;
  var params = false;
  var debug = true;
  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, fnParams)
  {
    if (!xmlhttp) return false;
        
    bComplete = false;
    sMethod = sMethod.toUpperCase();
	params = fnParams;
	noticeWindow_ajax.showOverlay();
	
	sVars = sVars.replace(/[\+]/g,"%2B");

//	sMethod="GET";
    try {
      if (sMethod == "GET")
      {
		var s = sURL;
		if ( sVars != "" ) s += "?"+sVars;
		if ( debug ) console.log( 'xhc str:', s );
        xmlhttp.open(sMethod, s, 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)
        {
	  if ( xmlhttp.status == 200 )
	  {
	          bComplete = true;
			  noticeWindow_ajax.close();
			  
				 if ( xmlhttp.responseText.split("Error report<\/title>").length>1 )
				 {
					 if ( isset( window[ 'frame_showerror' ] ) )
							 res=frame_showerror( xmlhttp.responseText );
					return;
				 }
				 else
				 {
					 if ( !xmlhttp.responseXML && isset( window[ 'frame_showerror' ] ) ) { res=frame_showerror( xmlhttp.responseText ); return; }
					 try{ 
						 if ( isset( xmlhttp.responseXML ) && xmlhttp.responseXML )
						 {
							 validatorOBJ.func_complete2( a );
							 var res = validatorOBJ.getResult( );
						 }
						 else
							 res = xmlhttp.responeText;
						 if ( !res && isset( window[ 'frame_showerror' ] ) ) { res = frame_showerror( xmlhttp.responseText ); return; }
						 if ( !res ) res = xmlhttp;
					 } catch(z){
						 if ( isset( window[ 'frame_showerror' ] ) )
							 res = frame_showerror( xmlhttp.responseText );
						 return;
					 }
				 }
				 // here with no structure errors, but wrong data entered, etc...
				 if ( isset(res[ 'error' ]) ) { showMess( res[ 'error' ] ); try{ fnError( res, params ) } catch(z) { }; return; }

		          fnDone(res, params);
	  }
	  else
	  {
		noticeWindow_ajax.close();
	  	showajaxerror();
	  }
      }};
		if ( debug ) console.log( 'xhc svars:', sVars );
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
    
  this.connect2 = function(sURL, sMethod, sVars, fnDone, fnParams, fnError, id )
  {
    if (!xmlhttp) return false;
    if ( !isset( fnParams[ 'obj' ][ 'nooverlay' ] ) ) fnParams[ 'obj' ][ 'nooverlay' ] = false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();
	params = fnParams;
	 
	sVars = sVars.replace(/[\+]/g,"%2B");

	if ( !DOMREADY )
	{
		// delay myself 10ms
		this.connect2.delay( 100, this, [ sURL, sMethod, sVars, fnDone, fnParams, fnError, id ] );
		return;
	}
	
	if ( !fnParams[ 'obj' ][ 'nooverlay' ] )
		noticeWindow_ajax.showOverlay();
	
//	sMethod="GET";
    try {
      if (sMethod == "GET")
      {
		var s = sURL;
		if ( sVars != "" ) s += "?"+sVars;
		if ( debug ) console.log( 'xhc str:', s );
        xmlhttp.open(sMethod, s, 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)
        {
	  if ( xmlhttp.status == 200 )
	  {
	          bComplete = true;
	          if ( !fnParams[ 'obj' ][ 'nooverlay' ] )
	        	  noticeWindow_ajax.close();
			  
	          if ( xmlhttp.responseText.split("thisisloginpage").length>1 )
	          {
	        	  window.location.href='login.php';
	        	  return;
	          }
	          
			 if ( xmlhttp.responseText.split("Error report<\/title>").length>1 )
			 {
				 if ( isset( window[ 'frame_showerror' ] ) )
					 res=frame_showerror( xmlhttp.responseText );
				return;
			 }
			 else
			 {
				 if ( !xmlhttp.responseXML && isset( window[ 'frame_showerror' ] ) ) {  res=frame_showerror( xmlhttp.responseText ); return; }
				 try{ 
					 validatorOBJ.func_complete2( xmlhttp.responseXML );
					 var res = validatorOBJ.getResult( );
					 if ( !res && isset( window[ 'frame_showerror' ] ) ) { res = frame_showerror( xmlhttp.responseText ); return; }
				 } catch(z){
					 if ( isset( window[ 'frame_showerror' ] ) ) 
						 res = frame_showerror( xmlhttp.responseText );
					 return;
				 }
			 }
			 // here with no structure errors, but wrong data entered, etc...
			 try{
			 if ( res[ 'error' ] ) {
				 showMess( res[ 'error' ] );
				 try{ fnError( res, params ) } catch(z) { }; return; }
			 } catch(z) { };
			 
	          fnDone(res, params);
	  }
	  else
	  {
          if ( !fnParams[ 'obj' ][ 'nooverlay' ] )
        	  noticeWindow_ajax.close();
		  showajaxerror();
	  }
      }};
		if ( debug ) console.log( 'xhc svars:', sVars );
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  
  return this;
}

