
function random()
{
	var t = new Date();
	var rnd_t = t.getTime();
	var rnd_full = Math.random()*rnd_t;
	var rnd_float = rnd_full%1;
	var rnd_int = rnd_full-rnd_float;
	var float_to_int = Number(String(rnd_float).substr(2));
	var rnd = rnd_int+float_to_int;
	
	return (rnd);
}

function ajaxFillWith(url, id)
{
	var save_url = url;
	var save_id = id;
	this.callback = function (ajaxInfo) { 
		if (ajaxInfo.readyState == 4 && ajaxInfo.status == 200) 
		document.getElementById(save_id).innerHTML = ajaxInfo.responseText; 
	};
	var myRequest = new AJAXRequest("GET", save_url, null, this.callback, true, true);
}

function loadJavascript(elem, txt)
{
	var scriptlist = elem.getElementsByTagName("script");
	if (scriptlist.length == 0) 
	{
		scriptlist = GetScriptBaliseContent(txt);
	}
	for (var i = 0; i < scriptlist.length; i++)
	{
		try { eval(scriptlist[i].innerHTML); } catch (e) {}	
	}
}

function GetScriptBaliseContent(txt)
{
	var scriptlist = Array();
	inc = 0;
	var slitBaliseTxt = txt.replace(' language="javascript" type="text/javascript"', "").replace("SCRIPT>", "script>").split("</script>");
	
	for (var i = 0; i < slitBaliseTxt.length; i++)
	{
		var scriptelem = slitBaliseTxt[i].split("<script")[1];
		if (typeof scriptelem != "undefined") 
		{
			var pos = scriptelem.indexOf(">");
			scriptelem = scriptelem.substr(pos+1, scriptelem.length);
			scriptlist[inc] = new Object();
			scriptlist[inc++].innerHTML = scriptelem;
		}
	}
	return (scriptlist);
}

function stripScripts(txt) {
    return txt.replace(new RegExp("(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)", 'img'), '');
}

function evalScripts(txt) {
  var matchAll = new RegExp("(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)", 'img');
  var list = txt.match(matchAll);
  if (list && list.length)
  {
	  if (list[0].length > 1)
	  {
		for (var s = 0; s < list.length; s++)
		{
			try { 
				var str = list[s];
				str = str.replace(new RegExp("^(?:<script.*?>)", 'img'), '');
				str = str.replace(new RegExp("(?:<\/script>$)", 'img'), '');
				eval(str);	 
			} catch (e) {}
		}
	  }
	  else
	  {			
		try { 
			var str = list;
			str = str.replace(new RegExp("^(?:<script.*?>)", 'img'), '');
			str = str.replace(new RegExp("(?:<\/script>$)", 'img'), '');
			eval(str);	 
		} catch (e) {}
	  }
  }
}
function ajax_form_submit(form, myCallBack, force)
{
	var param = form2string(form);
	var method = form.method;
	var action = form.action;
	if (method == "get")
	{
		form.action += "?"+param;
		param = "";
	}
	else if (force)
	{
		form.action += "?"+random();
	}
	var callback = function (ajaxInfo) { if (ajaxInfo.readyState == 4 && ajaxInfo.status == 200) myCallBack(ajaxInfo); };
	var myRequest = new AJAXRequest(method, action, param, callback, true, true);
	return;
}

function hideSelect(contener, val)
{
	try {
		if (document.all)
		{
			if (val == true) var visib = ""; else var visib = "hidden";
			var listSelect = document.getElementById(contener).getElementsByTagName("select");
			for (var i = 0; i < listSelect.length; i++) { listSelect[i].style["visibility"] = visib; }
		}
	} catch (e) {}
}


function form2string2(form) {
   var fstr=''; 
   var empty=/^\s*$/;
   for(i=0; i<form.elements.length; i++)
	   if(!empty.test(form.elements[i].value)) 
		   fstr+= i>0?', ':'' + form.elements[i].value;
   return fstr;
}

function form2string(form) {
	var Ch = ""
	for (en=0; en < form.elements.length; en++) {
		var Valeur;
		switch (form.elements[en].type) {
			case "select" :
				Valeur=form.elements[en].options[form.elements[en].selectedIndex].value;
			break;
			case "select-top" :
				Valeur=form.elements[en].options[form.elements[en].selectedIndex].value;
			break;
			case "checkbox" :
				if(form.elements[en].checked) { if (typeof form.elements[en].value != "undefined") Valeur = form.elements[en].value; else Valeur = 1; }
				else { Valeur = 0 }
			break;
			case "radio" :
				Valeur="";
				var index_radio = en - 1;
				do{
					index_radio = index_radio + 1;
					if (form.elements[index_radio + 1]){
						if (form.elements[index_radio].name == form.elements[index_radio + 1].name) var TMP = 1;
						else var TMP = 2;
					}
					else var TMP = 2;
					if(form.elements[index_radio].checked) 
					{
						Valeur = form.elements[index_radio].value;
					}
				}while ( en < form.elements.length && TMP== 1)
				en = index_radio;
			break;
	
			default :
				Valeur=form.elements[en].value;
		}
		if (form.elements[en].type && form.elements[en].type != "button" && Valeur != "")
		{
			Ch += form.elements[en].name + "=" + Valeur + "&"    //
		}
	}
	return Ch
}


/* prototype ajax obkect */

var _ms_XMLHttpRequest_ActiveX = ""; // Holds type of ActiveX to instantiate
var _ajax;                           // Reference to a global XMLHTTPRequest object for some of the samples
var _logger = true;                  // write output to the Activity Log
var _status_area;                    // will point to the area to write status messages to

BASE_URL = "/Site/"


if (!window.Node || !window.Node.ELEMENT_NODE) {
    var Node = { ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4, ENTITY_REFERENCE_NODE: 5,
                  ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, 
    		  DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE: 12 };
}

// From prototype.js @ www.conio.net | Returns an object reference to one or more strings
// ignore the fact that there are no arguments to this method -- javascript doesn't care how many you send (not strongly typed)
// The method checks the actual # of arguments -- returns a single object or an array
function $() {
    var elements = new Array();

    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];

        if (typeof element == 'string')
            element = document.getElementById(element);

        if (arguments.length == 1)
            return element;

        elements.push(element);
    }

    return elements;
}

// Method to get text from an XML DOM object
function getTextFromXML( oNode, deep ) {
    var s = "";
    var nodes = oNode.childNodes;

    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];

        if (node.nodeType == Node.TEXT_NODE) {
            s += node.data;
        } else if (deep == true && (node.nodeType == Node.ELEMENT_NODE || node.nodeType == Node.DOCUMENT_NODE
                                       || node.nodeType == Node.DOCUMENT_FRAGMENT_NODE)) {
            s += getTextFromXML(node, true);
        };
    }

    ;
    return s;
}

;

// If you plan on doing anything outside of North America, then you'd better encode the things you pass back and forth
// the escape() method in Javascript is deprecated -- should use encodeURIComponent if available
function encode( uri ) {
    if (encodeURIComponent) {
        return encodeURIComponent(uri);
    }

    if (escape) {
        return escape(uri);
    }
}

function decode( uri ) {
    uri = uri.replace(/\+/g, ' ');

    if (decodeURIComponent) {
        return decodeURIComponent(uri);
    }

    if (unescape) {
        return unescape(uri);
    }

    return uri;
}

// log information to the status area textfield
function logger( text, clear ) {
    if (_logger) {
        if (!_status_area) {
            _status_area = document.getElementById("status_area");
        }

        if (_status_area) {
            if (clear) {
                _status_area.value = "";
            }

            var old = _status_area.value;
            _status_area.value = text + ((old) ? "\r\n" : "") + old;
        }
    }
}


/*
 * AJAXRequest: An encapsulated AJAX request. To run, call
 * new AJAXRequest( method, url, async, process, data )
 *
 */

function executeReturn( AJAX ) {
    if (AJAX.readyState == 4) {
        if (AJAX.status == 200) {
            logger('AJAXRequest is complete: ' + AJAX.readyState + "/" + AJAX.status + "/" + AJAX.statusText);
	    if ( AJAX.responseText ) {
		    logger(AJAX.responseText);
		    logger("-----------------------------------------------------------");
		    eval(AJAX.responseText);
	    }
	}

    }

}


function AJAXRequest( method, url, data, process, async, dosend) {
    // self = this; creates a pointer to the current function
    // the pointer will be used to create a "closure". A closure
    // allows a subordinate function to contain an object reference to the
    // calling function. We can't just use "this" because in our anonymous
    // function later, "this" will refer to the object that calls the function 
    // during runtime, not the AJAXRequest function that is declaring the function
    // clear as mud, right?
    // Java this ain't
    
    var self = this;

    // check the dom to see if this is IE or not
    if (window.XMLHttpRequest) {
	// Not IE
        self.AJAX = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
	// Hello IE!
        // Instantiate the latest MS ActiveX Objects
        if (_ms_XMLHttpRequest_ActiveX) {
            self.AJAX = new ActiveXObject(_ms_XMLHttpRequest_ActiveX);

        } else {
	    // loops through the various versions of XMLHTTP to ensure we're using the latest
	    var versions = ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
                        "Microsoft.XMLHTTP"];

            for (var i = 0; i < versions.length ; i++) {
            	
                try {
		    // try to create the object
		    // if it doesn't work, we'll try again
		    // if it does work, we'll save a reference to the proper one to speed up future instantiations
                    self.AJAX = new ActiveXObject(versions[i]);

                    if (self.AJAX) {
                        _ms_XMLHttpRequest_ActiveX = versions[i];
                        break;
                    }
                }
                catch (objException) {
                // trap; try next one
                } ;
            }

            ;
        }
    }
    
    // if no callback process is specified, then assing a default which executes the code returned by the server
    if (typeof process == 'undefined' || process == null) {
        process = executeReturn;
    }

    self.process = process;

    // create an anonymous function to log state changes
    self.AJAX.onreadystatechange = function( ) {
        //logger("AJAXRequest Handler: State =  " + self.AJAX.readyState);
		if(self.readyState == 4 && (self.status == 408 
									|| self.status == 204
									|| self.status == 206
									|| self.status == 400
									|| self.status == 404
									|| self.status == 405
									|| self.status == 407
									|| self.status == 410
									|| self.status == 412
									|| self.status == 500
									|| self.status == 504)) 
   		{
			self.send(data);
        }
		else self.process(self.AJAX);
    }

    // if no method specified, then default to POST
    if (!method) {
        method = "POST";
    }

    method = method.toUpperCase();

    if (typeof async == 'undefined' || async == null) {
        async = true;
    }
    
    logger("----------------------------------------------------------------------");
    logger("AJAX Request: " + ((async) ? "Async" : "Sync") + " " + method + ": URL: " + url + ", Data: " + data);

    self.AJAX.open(method, url, async);
    
    if (method == "POST") {
    	
        //self.AJAX.setRequestHeader("Connection", "close");
        self.AJAX.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        //self.AJAX.setRequestHeader("Method", "POST " + url + "HTTP/1.1");
        
    }

    // if dosend is true or undefined, send the request
    // only fails is dosend is false
    // you'd do this to set special request headers$
    
    if ( dosend || typeof dosend == 'undefined' ) {
	    if ( !data ) data=""; 
	    self.AJAX.send(data);
	    
    }
    return self.AJAX;
}


	var variable 	= new Array;
	var names 	= new Array;
	
	/**************************************************************/
	// stocker les données dans les variables les modifications
	/**************************************************************/
	function stockForm(obj){
		//alert(obj.name);
		if(!variable[obj.name]){
			names[names.length] = obj.name;
		}
		switch(obj.type){
			case "checkbox" :
				if(obj.checked==true){
					
					variable[obj.name] = obj.value;
				}
				else{
					variable[obj.name] = '';
				}
				break;
			case "radio" :
				if(obj.checked==true){
					
					variable[obj.name] = obj.value;
				}				
				else
				{
					if(!variable[obj.name])
					variable[obj.name] = '';
				}

				break;
			case "select-one"	:				
					variable[obj.name] = obj.options[obj.selectedIndex].value;
				break;
			default :
			variable[obj.name] = obj.value;
			break;
		}
	}
	/**************************************************************/
	
	/**************************************************************/
	// Contsruction du post
	/**************************************************************/
	function makePost(){
		var post = "";
		for(a=0;a<names.length;a++)
		post += names[a]+"="+variable[names[a]]+"&";
		//alert(post)
		return post;
	}
	
	function ClearVar()
	{
		variable 	= new Array;
		names 	= new Array;
	}

