//########################################################################################################################
// esc Ajax v0.1
// Copyright Escapenet
// created by BG 2009
//########################################################################################################################
window.document.onmousemove = storeMousePos;

//Maus Position speichern
function storeMousePos(evt) 
{ 
  if(!evt) evt = window.event; 
    mousePosition = evt.clientX + ' ' + evt.clientY;
} 



//########################################################################################################################
// HTTP Request Handling
//########################################################################################################################

//HTTP Request durchführen
function getXmlHttpObject(target,handler)
{ 
  //Für IE6 und älter die ActiveX XMLHTTP Methode verwenden
  if (navigator.appVersion.indexOf("MSIE 6.0") >= 0)
    var objXmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
  else
    var objXmlHttp = new XMLHttpRequest();

  objXmlHttp.onreadystatechange = function()
  {
    if (objXmlHttp.readyState == 4 || objXmlHttp.readyState == "complete")
    {
      var strContent = objXmlHttp.responseText;	  
	  
	  //Wie weiter vorgehen?
	  if (target == '')
	    return objXmlHttp.responseText;
	  else
	  {
        if (handler == '')
		  executeScripts(strContent,target);
	    else
	      eval(handler(strContent,target));
	  }
    }
  }
  return objXmlHttp;
} 

//Führt die Javascript (script) Blöcke aus
function executeScripts(r,target)
{	
  //Script Blöcke mittels RegEx ermitteln
  var reg = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
  var match = new RegExp(reg, 'img');
  var response = r.replace(match, '');
  var scripts = r.match(match);
  match2 = new RegExp(reg, 'im');  
  
  if (document.getElementById(target))
  {
    document.getElementById(target).innerHTML = response;
  
	//Alle Script Blöcke ausführen
	if (scripts)
	{
	  if (scripts.length != undefined)
	  {
		for (var i = 0; i < scripts.length; i++)
		  eval(scripts[i].match(match2)[1]);
	  }
	}
  }
}

//HTTP Request einer beliebigen Seite durchführen
function getHTTPContent(url,returnDIV,handler)
{
  xmlHttp = getXmlHttpObject(returnDIV,handler);
  xmlHttp.open("GET", url , true);
  xmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 
  xmlHttp.setRequestHeader("Expires", "Mon, 26 Jul 1970, 00:00:00 GMT"); 
  xmlHttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
  xmlHttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); 	
  xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlHttp.setRequestHeader("Connection", "close");
  xmlHttp.send(null);
}

//Formular via POST an Server schicken
function saveHTTPContent(formID,site,div)
{	
  //Aus allen Form Elemente die Werte abholen
  formValues = getFormElements(formID);  
  xmlHttp = getXmlHttpObject(div,'');
  xmlHttp.open('POST',site,true);
  xmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"); 
  xmlHttp.setRequestHeader("Expires", "Mon, 26 Jul 1970, 00:00:00 GMT"); 
  xmlHttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
  xmlHttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0"); 	
  xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xmlHttp.setRequestHeader("Content-length", formValues.length);
  xmlHttp.setRequestHeader("Connection", "close");
  xmlHttp.send(formValues);
}

//Loader anzeigen
function showLoader(div,text)
{
  if (!text)
    text = '';
  document.getElementById(div).innerHTML = '<img src="/admin/images/icons/ajax_loader.gif" alt="" class="image-icon" />' + text
}



//########################################################################################################################
// Dynamische HTML Struktur Anpassungen
//########################################################################################################################

//Fügt dynamisch ein HTML Element dazu
function attachNode(parentNodeID,htmlElement,newNodeID,positionTyp,width,height)
{
  var list = document.getElementById(parentNodeID);
  var newnode = document.createElement(htmlElement);
  newnode.setAttribute("id",newNodeID);
  
  //Mittig auf dem Bildschirm
  if (positionTyp == 'center')
  {
	var cssLeft = (document.body.offsetWidth-width)/2;
	var cssTop = ((document.body.offsetHeight-height)/2);
	newnode.style.cssText = 'display:none; width:' + width + 'px; height:' + height + 'px; left:' + cssLeft + 'px; top:' + cssTop + 'px;';
  }

  //An Mausposition plazieren  
  if (positionTyp == 'mouse')
  {
    var position = mousePosition.split(" ");
    newnode.style.cssText = 'display:none; left:' + parseInt(position[0]-5) + 'px; top:' + parseInt(position[1]-5) + 'px;';
  }

  //Normal plazieren
  if (positionTyp == 'standard')
  {
    newnode.style.cssText = 'display:none;';
  }

  list.appendChild(newnode);
  return newnode;
}

//Entfernt dynamisch ein HTML Element
function removeNode(id)
{
  var htmlElement = document.getElementById(id);
  htmlElement.parentNode.removeChild(htmlElement);
}



//########################################################################################################################
// Event Handling
//########################################################################################################################

//Event hinzufügen
function addEvent(obj,type,fn)
{
   if (obj.addEventListener)
   {
      obj.addEventListener(type,fn,false);
   } 
   else if (obj.attachEvent)
   {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function(){ obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}

//Event entfernen
function removeEvent(obj,type,fn)
{
   if (obj.removeEventListener)
   {
      obj.removeEventListener(type,fn,false);
   } 
   else if (obj.detachEvent)
   {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }
}



//########################################################################################################################
// Mouseover / Mouseout Überwacher
//########################################################################################################################

//Die nachfolgenden 3 Funktionen korrigeren die Situation dass man in einem Elternelement ein Mouseout Event hat
//und dieser beim überfahren von den Kindernelementen ausgelöst wird.
//Aufzurufen so: onmouseout="if (checkMouseEnter(this,event)) {meineMouseOutFunktion()};"
function containsDOM(container,containee)
{
  var isParent = false;
  do
  {
    if ((isParent = container == containee))
      break;
    containee = containee.parentNode;
  }
  while (containee != null);
  return isParent;
}

function checkMouseEnter(element,evt)
{
  if (element.contains && evt.fromElement)
  {
    return !element.contains(evt.fromElement);
  }
  else if (evt.relatedTarget)
  {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function checkMouseLeave(element,evt)
{
  if (element.contains && evt.toElement)
  {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget)
  {
    return !containsDOM(element, evt.relatedTarget);
  }
}