var mbStart=false;

function doajax(getparams, layerid, formid, mode, onload, onready, loader) {

	// loader: path+image for visuals

	// onload = funktion VOR ausgabe ausfuehren
	// onready = funktion NACH ausgabe ausfuehren

  // ajaxlayer: ist das element, in dem die ausgabe stattfindet
  // wenn dieser nicht existiert, wird geschaut, ob der parent einen hat, weil wir vielleicht ein iframe sind
  // für die "dialog" gilt das nicht!!!

  var ajaxlayer = null;

  if(mode!='modalbox') {

     // DEFAULT AJAX

	  ajaxlayer = document.getElementById(layerid);

	  // falls ajaxlayer nicht gefunden wird, suchen wir beim parent (entsteht meist bei iframes)
	  if(!ajaxlayer) ajaxlayer = parent.document.getElementById(layerid);

	  // wenn immer noch kein gültiger ajaxlayer existiert, wird die anfrage ohne ausgabe ausgeführt:
	  if(!ajaxlayer) mode=null;

  }
  
  // *************************************************************************************************

  var req = null;
  try{
    req = new XMLHttpRequest();
    }
    catch (ms){
    try{
     req = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (nonms){
    try{
     req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (failed){
    req = null;
    }}}

    if(getparams==null) getparams = '';
    if(mode==null) mode = '';

    if(req!=null) {

		if( layerid && loader ) {

			loader = '<span id="ajaxloader"><img src="'+loader+'" /></span>';

			if(mode=='') {
				document.getElementById(layerid).innerHTML = loader;
			}
	      else if(mode=='prepend') {
	      	$(ajaxlayer).prepend(loader);
	      }
	      else if(mode=='append') {
	      	$(ajaxlayer).append(loader);
	      }

	  }

		if(layerid) getparams+= '&ajaxlayer='+layerid;
				
      req.open('POST', getparams, true);
      req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

	  //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      if(formid) {

      	// AJAX FORM POST, auslesen aller inhalte der formid
      	postparams = '';

		   // that bullshit to receive form components value if it is mce
      	if( typeof(tinyMCE) == 'object' ) tinyMCE.triggerSave(true,true);

		formcomponent = document.getElementById(formid);
		for(i=0; i<formcomponent.elements.length; i++) {

		    if( (formcomponent.elements[i].type=='radio') || (formcomponent.elements[i].type=='checkbox') ) {

				// RADIO, CHECKBOX
				// ACHTUNG: BUG

				if(formcomponent.elements[i].length) {
				for(j=0; j<formcomponent.elements[i].length; j++) {

						// so war es mal früher - das kann doch gar nicht funktionieren???
					   	//if(formcomponent.elements[i][j].checked) postparams+='&'+formcomponent.elements[i][j].name+'='+formcomponent.elements[i][j].name+'='+formcomponent.elements[i][j].value;

					   	// so ist es jetzt eigentlich richtig:
					   	if(formcomponent.elements[i][j].checked) postparams+='&'+formcomponent.elements[i][j].name+'='+formcomponent.elements[i][j].value;
				}}
				else {

					// BUGBEHEBUNG:
					if(formcomponent.elements[i].checked) postparams+='&'+formcomponent.elements[i].name+'='+formcomponent.elements[i].value;

				}

			}

		    else if (formcomponent.elements[i].type=='select') {
		    	// SELECT
		    	// beyond was example from web:
				//var sel = obj.childNodes[i];
	            //getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";

	            // thats my modified code:
	            postparams+='&'+formcomponent.elements[i].name+'='+formcomponent.elements[i].options[formcomponent.elements[i].selectedIndex].value;
		    }

   		    else if (formcomponent.elements[i].type=='file') {
   		    	// FILES
   				postparams+='&'+formcomponent.elements[i].name+'='+formcomponent.elements[i].value;
   		    }

		    else {
			    // TEXT, HIDDEN
				postparams+='&'+formcomponent.elements[i].name+'='+encodeURIComponent(formcomponent.elements[i].value);
		    }

		}

      	req.send(postparams);

      } else {

      	//NORMALER AJAX REFRESH
      	req.send(null);
      }

	  //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    } // end if req!=null

    req.onreadystatechange = function() {

    switch(req.readyState) {
      case 4:
        if(req.status!=200) {

          ajaxlayer.innerHTML = 'Error while loading sitecontents...';

        } else {

			if(document.getElementById('ajaxloader')) $(document.getElementById('ajaxloader')).remove();

         ajaxHTML = req.responseText;         

         if(onload) eval(onload);

         if(mode=='') {
            if(ajaxlayer) ajaxlayer.innerHTML = ajaxHTML;
          }

          else if(mode=='prepend') {
          	$(ajaxlayer).prepend(ajaxHTML);
          }

          else if(mode=='append') {
          	$(ajaxlayer).append(ajaxHTML);
          }

          else if(mode=='before') {
          	$(ajaxlayer).before(ajaxHTML);
          }

          else if(mode=='after') {
          	$(ajaxlayer).after(ajaxHTML);
          }

          else if(mode=='remove') {
		    	$(ajaxlayer).remove();
          }

          else if(mode=='modalbox') {
            $(ajaxHTML).appendTo('body');
          }

          if(onready) eval(onready);

        }

		  // execute javascript in responsetext
        evalJS(ajaxHTML);

        // curvyCorners.scanStyles();

     break;
     default:
     return false;
     break;
     }};

}

function evalJS(scripts)
{
   try
	{	if(scripts != '')
		{	var script = "";
			scripts = scripts.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
	      if (scripts !== null) script += arguments[1] + '\n';
 	        	                        return '';});
			if(script) (window.execScript) ? window.execScript(script) : window.setTimeout(script, 0);
		}
		return false;
	}
	catch(e){}
}
