var ECMSAJAXGET  = 'GET';
var ECMSAJAXPOST = 'POST';
var xmlhttp = null;

function setInnerHTMLAndExecScript (element, html) {
  var newElement = element.cloneNode(false);
  newElement.innerHTML = html;
  element.parentNode.replaceChild(newElement, element);
}

function addJavascriptElement(js) {
	var head = document.getElementsByTagName("head")[0];
	var script = document.createElement('script');
	script.type = "text/javascript";
	script.id   = "jsDialog";
	script.text = js;
	head.appendChild(script);
}

/**
 * Funció -crida- per defecte a l'executar qualsevol crida AJAX
 * @param {Object} myxmlhttp
 * @param {Object} objectId
 */
function ajax_default_callback(myxmlhttp, objectId) {
  // if the ready state is finished (4) and the http status is OK (200
  // a responseText should be available
  // in this case we use the responseText to enter into the innerHTML of the object provided via the var
  if (objectId != '') {
  	if (myxmlhttp.readyState == 4) {
  		if (myxmlhttp.status == 200) {
  			oid = document.getElementById(objectId);
  			// xmlhttp.responseText object contains the response. 
			var scriptStartText = "<script id=\"initDlgScript\" type=\"text/javascript\">";
			var scriptEndText = "</script>";
			
			js = "";
			startScript = myxmlhttp.responseText.indexOf(scriptStartText);
			endScript = myxmlhttp.responseText.indexOf(scriptEndText);
			
			if (startScript > -1) {
				html = myxmlhttp.responseText.substring(0, startScript - 1);
				js = myxmlhttp.responseText.substring(startScript + scriptStartText.length, endScript - 1);
				
				if (oid) setInnerHTMLAndExecScript(oid, html);
				addJavascriptElement(js);
			}else {
				if (oid) setInnerHTMLAndExecScript(oid, myxmlhttp.responseText);
			}
			//If we have "tabbertabs" to enable
			if (myxmlhttp.responseText.indexOf("tabber") > -1) {
				var tabberArgs = ({});
				el = document.getElementById('dialog_tabber_object');
				tabber = new tabberObj(tabberArgs);
				tabber.init(el);
			}
			if (myxmlhttp.responseText.indexOf("InputTextMandatory") > -1) {
				checkMandatoryStartup();
			}
			//Execute an "Startup" function	
			if (myxmlhttp.responseText.indexOf("jsInitDialog") > -1) {
				jsInitDialog();
			}
		}
	}
  }
}

/**************
 * Llença la crida a la funció AJAX
 * @param {Object} params Objecte amb les dades a obtenir
 * 	type: ECMSAJAXGET o ECMSAJAXPOST
 *  url : Fitxer on fer la crida ( relativa o absoluta )
 *  callback: Funció que s'executarà un cop completada la crida
 *  objectId: ID d'un element de la web on es publicarà la resposta
 *  postVar : si el formulari s'envia via POST, la/les variable/s que s'enviarà/n
 *  form    : formulari que s'ha d'enviar
 */
function ecmsAJAXcall(params) {
  try { 
    var myxmlhttp = window.XMLHttpRequest ? new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
  } 
  catch (e) { 
    // use of antique browser, do what you want 
  }
  
  //estalim el callback
  myxmlhttp.onreadystatechange = ((typeof(params.callback)=='undefined')||(params.callback==null)) ? function(){
  ajax_default_callback(myxmlhttp, params.objectId);
  } : function(){
  	params.callback(myxmlhttp, params.objectId)
  };

  //si estem enviant un formulari
  if((typeof(params.form)!='undefined')&&(params.form!=null)) {
  	params.postVar = getFormPost(params.form);	
  }
  
  //fem el get o el POST
  if(params.type==ECMSAJAXPOST){
    myxmlhttp.open("POST", params.url, true);
    myxmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    myxmlhttp.send(params.postVar);
  }
  else{
    myxmlhttp.open("GET", params.url, true);
    myxmlhttp.send(null);
  }
}

/**
 * Obté el post d'un formulari
 * @param {Object} form -OBJECTE- formulari
 */
function getFormPost(form) {
	if (form=='') {
		frm=document;		
	} else {
		frm=form;
	}
	result='';
	
	els = frm.getElementsByTagName('input');
	for(i=0;i<els.length;i++) {
		if(result!='') result += "&";
		result+=els[i].name+"="+URLEncode(els[i].value);
	}
	els = frm.getElementsByTagName('textarea');
	for(i=0;i<els.length;i++) {
		if(result!='') result += "&";
		result+=els[i].name+"="+URLEncode(els[i].value);
	}
	els = frm.getElementsByTagName('select');
	for(i=0;i<els.length;i++) {
		if(result!='') result += "&";
		result+=els[i].name+"="+URLEncode(els[i].options[els[i].selectedIndex].value);
	}
	return result;
}

/**
 * Incrementa les estadístiques del recurs
 * @param {Object} codrecurs
 */
function incStats(codrecurs) {
	ecmsAJAXcall( {type: ECMSAJAXGET,
	               url:  '/index.php?ps=0be95bd55f4d28404030b94ed7a4a022fd731a81ee2afb9a2ae7fb376ec85e64dd&id_recurs=' + codrecurs});
}

