// #########################################
// #########################################
// ############## AJAX EDITOR ##############
// #########################################
// ########## by Alexandre GALIAY ##########
// #########################################
// #########################################

// ###### CHEMINS ######
var path = '/';
var path_post = path+'templeet.php/admin/';

// ###### GET LOCATION ######

function getLocation(id) {
  var reg = new RegExp(/[\d]+/);
  var reg2 = new RegExp(/_[\d]+/);
  var id_bdd = id.match(reg);
  var val_bdd = id.replace(reg2,'');
  return path_post+'tarif_post,'+val_bdd+','+id_bdd+'.html';
}

// ###### GET ELEMENTS BY CLASS NAME ######

document.getElementsByClassName = function(nomClasse) {
  var liste=document.getElementsByTagName("*");
  var retour=new Array();
  var i=0;
  var j=0;
  var laClasse=" "+nomClasse+" ";
  for( i=0 ; i < liste.length ; i++ ) {
    if( (" "+liste[i].className + " ").indexOf( laClasse ) != -1 )
      retour[j++]=liste[i];
  }
  return retour;
}

// ###### LISTEN ######

function listen() {
  var elements = document.getElementsByClassName('ajaxEditor');
  for(i=0;i<elements.length;i++) {
    if(window.addEventListener) {
      elements[i].addEventListener('click', launchAjaxEditor, true);
    }
    else if(window.attachEvent) {    
      elements[i].attachEvent('onclick', launchAjaxEditor);
    }
    elements[i].style.cursor = 'pointer';
  }
}

// ###### DEAFNESS ######

function deafness() {
  var elements = document.getElementsByClassName('ajaxEditor');
  for(i=0;i<elements.length;i++) {
    if(window.addEventListener) {
      elements[i].removeEventListener('click', launchAjaxEditor, true);
    }
    else if(window.attachEvent) {    
      elements[i].detachEvent('onclick', launchAjaxEditor);
    }
    elements[i].style.cursor = 'auto';
  }
}

// ###### LAUNCH AJAX EDITOR

function launchAjaxEditor() {
  deafness();
  if(window.event) {
    ajaxEditor(event.srcElement.id);
  }
  else {
    ajaxEditor(this.id);
  }
}

// ###### GET XHR ######

function getXHR() {
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
    // Évite un bug du navigateur Safari
    if (xhr.overrideMimeType)
      xhr.overrideMimeType("text/xml");
  }
  else {
    if (window.ActiveXObject) {
      try { // essaie de charger l'objet pour IE
        xhr = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e) {
        try { // essaie de charger l'objet pour une autre version IE
          xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
          window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest.");
        }
      }
    }
  }
  return xhr;
}

// ###### GET STYLE ######

function getStyle(id,property)
{
	var node = document.getElementById(id);
	if (node.currentStyle)
		var val = node.currentStyle[property];
	else if (window.getComputedStyle)
		var val = document.defaultView.getComputedStyle(node,null).getPropertyValue(property);
	return val;
}

// ###### AJAX EDITOR ######

function ajaxEditor(node_id) {
  
  var node = document.getElementById(node_id);
  var width = getStyle(node_id,'width');
  //width = width.replace(/px/,'');
  //width = width - 6;
  //width = width+'px';
  
  var height = getStyle(node_id,'height');
  //height = height.replace(/px/,'');
  //height = height - 6;
  //height = height+'px';
  
  if(!document.getElementById('ajaxFormEditor'))
  {
      var reg = new RegExp(/<br[^>]*>/ig);
      var text = node.innerHTML.replace(reg,'\r');
      node.innerHTML = '';
      
      var form = document.createElement('form');
      form.setAttribute('action','');
      form.setAttribute('method','post');
      form.setAttribute('id','ajaxFormEditor');
      form.onsubmit = function() {
        return false;
      }
      
      fieldset = document.createElement('fieldset');
      fieldset.style.width = width;
      fieldset.style.height = height;
      fieldset.style.border = 'none';
      form.appendChild(fieldset);
      
      textarea = document.createElement('textarea');
      textarea.setAttribute('rows','2');
      textarea.setAttribute('cols','20');
      textarea.setAttribute('id','ajaxEditor');
      textarea.style.width = width;
      textarea.style.height = height;
      //textarea.style.margin = '2px';
      textarea_txt = document.createTextNode(text);
      textarea.appendChild(textarea_txt);
      fieldset.appendChild(textarea);
      
      node.appendChild(form);
      
      document.getElementById('ajaxEditor').focus();
      textarea.onblur = function() {
        if(document.getElementById('ajaxEditor'))
          ajaxEditor(node_id);
      }
  }
  else {
    var text = document.getElementById('ajaxEditor').value;
    var reg = new RegExp(/,/ig);
    text = text.replace(reg,'.');
    var xhr = getXHR();
    xhr.open('POST', getLocation(node_id), true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.send('text='+text+'');
    xhr.onreadystatechange = function() {
      if(xhr.readyState == 4) {
        var form = document.getElementById('ajaxFormEditor');
        node.removeChild(form);
        node.innerHTML = xhr.responseText;
        listen();
      }
    }
  }
}

listen();