// XML construction
function createXML(xmlData,textData) {
	if (window.XMLHttpRequest) {
		docXML = xmlData;
	} else if (window.ActiveXObject) {
		var docXML = new ActiveXObject("Microsoft.XMLDOM");
		docXML.async="false";
		docXML.loadXML(textData);
	}
	return docXML;
}

var debug = 0;

// Valid response, alert error and return false if error from callback
// return docXML if no error
// Require object response from xmlhttprequest
function validResponse(obj) {
	if (debug == 1)
		alert(obj.responseText);
	
	var docXML = createXML(obj.responseXML,obj.responseText);
	var r = docXML.firstChild.nodeName;
 	if (r == "error") {
 		if (docXML.firstChild.getElementsByTagName("message")[0].firstChild.nodeValue != "nodisplay") {
			WindowUtilities.notice(docXML.firstChild.getElementsByTagName("message")[0].firstChild.nodeValue);
		}
		tempDocXML = docXML;
		return false;
	}
	return docXML;
}

// Add a "before" and "after" string to the browser selection
// n = object / textarea
function addToSelection(obj,before,after) {
	var v=0;
	if(obj.createTextRange){
		var str = document.selection.createRange().text;

		if (str.length>0)
		{
			var sel = document.selection.createRange();
			sel.text = before + str + after;
			sel.collapse();
			sel.select();
		}
		else
		{
			obj.focus(obj.caretPos);
			obj.focus(obj.value.length);
			obj.caretPos = document.selection.createRange().duplicate();
			
			var bidon = "%~%";
			var orig = obj.value;
			obj.caretPos.text = bidon;
			var i = obj.value.search(bidon);
			obj.value = orig.substr(0,i) + before + after + orig.substr(i, obj.value.length);
			var r = 0;
			for(n = 0; n < i; n++)
			{if(regexp.test(obj.value.substr(n,2)) == true){r++;}};
			pos = i + 2 + selec.length - r;
			var r = obj.createTextRange();
			r.moveStart('character', pos);
			r.collapse();
			r.select();
		}
	}
	else if(obj.setSelectionRange){
		v=obj.selectionStart;
		w=obj.selectionEnd;
		if (w - v > 0)
			obj.value = obj.value.substring(0,v) + before + obj.value.substring(v,w) + after + obj.value.substring(w);
		else
			obj.value = obj.value + before + after;
	}
	else{
		obj.value = obj.value + before + after;
	}
}


// Trouve les éléments d'un noeud
function findElements(element, tag) {
    element = $(element);
    if(!element.hasChildNodes()) return null;
    var elements = [];
    $A(element.childNodes).each( function(e) {
      if(e.tagName && e.tagName.toUpperCase()==tag.toUpperCase())
          elements.push(e);
    });
    return (elements.length>0 ? elements.flatten() : null);
}


function getRandom (n,p) {
	return n + Math.round(Math.random() * (p-n));
}