//JAVASCRIPT DOCUMENT BY OXTAL
//JAVASCRIPT DOCUMENT: html2.js.php

var image_to_load = new Array();
function image_init(){
	var i, imgObj;

	if (document.all && document.styleSheets && document.styleSheets[0] && document.styleSheets[0].addRule){
		document.styleSheets[0].addRule('*', 'behavior: url(/css/htc/iepngfix.htc)');
	}
	
	imgObj = new Image();
	
	for(i = 0; i < image_to_load.length; i++){
	
		if( !image_to_load[i][1] ){
		
			imgObj.src = image_to_load[i][0];
			image_to_load[i][1] = true;
		}
	}

}

function add_image_preload(imageSrc){
	image_to_load[image_to_load.length] = new Array(imageSrc, false);
}


/*
Add characters
	alphabet: 	65 a 90
	numbers: 	48 a 57
	keypad: 	96 a 105
	enter:		13
	space:		32
	specials:	59, 61, 106, 107, 108, 109, 110, 111, 188, 190, 191, 192, 219, 220, 221, 222

	
Remove characters
	backspace:	8
	delete:		46
	
*/

var unicode_add_chars = new Array(65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,13,32,59,61,106,107,108,109,110,111,188,190,191,192,219,220,221,222);

var unicode_rem_chars = new Array(8,46);


//GRAPHICAL PURPOSE
function findPos(obj) {

	var curleft = curtop = 0;
	
	if (obj.offsetParent) {
	
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		
		while (obj = obj.offsetParent ) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	
	return [curleft,curtop];
}

function addBookmark(title, url, obj) {
    var message = "<p>Votre <b>navigateur</b> ne supporte pas l'ajout automatis&eacute; de favoris.</p>";
    message = message + " <p> Veuillez l'ajouter manuellement: CTRl + D (Windows) et &#8984; + D (Mac).</p>";
    if (window.sidebar) {
        window.sidebar.addPanel(title, url, "");
    } else if (document.all) {
        window.external.AddFavorite(url, title);
    } else if (window.opera && window.print) {
        show_notice(message, obj);
        return true;
    } else {
        show_notice(message, obj);
        return true;
    }
}

function show_staf(currObj) {
    if (typeof currObj == "string") {
        currObj = document.getElementById(currObj);
    }
    if (typeof currObj == "object") {
        var pos = findPos(currObj);
        var stafDiv = document.getElementById("send_to_a_friend");
        if (typeof stafDiv == "object") {
            stafDiv.style.left = pos[0] - 2 + "px";
            stafDiv.style.top = pos[1] - 358 + "px";
            stafDiv.style.display = "block";
        }
    }
}

function hide_staf() {
    var stafDiv = document.getElementById("send_to_a_friend");
    if (typeof stafDiv == "object") {
        stafDiv.style.display = "none";
    }
}

function send_staf() {
    var myForm = document.getElementById("staf_form");
    var valid = true;
    var borderColor = "#C05650";
    var backroundColor = "#FFC5C5";
    var requiredFieldNames = new Array("sender_name", "sender_email", "receiver_name", "receiver_email", "message");
    var noticeObject = recursive_element_by_id(myForm, "required_field_note", 1);
    var i;
    for (i = 0; i < requiredFieldNames.length; i++) {
        if (myForm.elements.namedItem(requiredFieldNames[i]).value.length <= 0) {
            myForm.elements.namedItem(requiredFieldNames[i]).style.backgroundColor = backroundColor;
            myForm.elements.namedItem(requiredFieldNames[i]).style.borderColor = borderColor;
            document.getElementById(requiredFieldNames[i] + '_required').style.color = borderColor;
            valid = false;
        } else {
            myForm.elements.namedItem(requiredFieldNames[i]).style.backgroundColor = "";
            document.getElementById(requiredFieldNames[i] + '_required').style.color = "";
        }
    }
    if (valid) {
        noticeObject.style.color = "";
        var myAjax = new Ajax("/staf_send.php", "POST");
        myAjax.onComplete = receive_staf_sent;
        myAjax.send(myForm);
    } else {
        if (typeof noticeObject == "object") {
            noticeObject.style.color = borderColor;
        }
    }
}

function receive_staf_sent(responseText, responseXML) {
    hide_staf();
}

function empty( variable ){
	var res = true;

	if( typeof(variable) == "string" ){
		if(variable.length > 0)
			res = false;	
			
	}else if( typeof(variable) == "number" ){
		if(variable != 0)
			res = false;
			
	}else if( typeof(variable) == "boolean" ){
		res = !variable;

	}else if( typeof(variable) == "object" ){
	
		if( typeof(variable.attributes) != "undefined" ){
			if(variable.attributes.length)
				res = false;
		}

		if( typeof(variable.childNodes) != "undefined" ){
			if(variable.childNodes.length)
				res = false;
		}
			
	}else if( typeof(variable) == "function" ){
		res = false;
	}

	return res;
	
}
	
// JavaScript Document
function Ajax( url, method){

	this.url = url;
	this.method = method;

	this.set_function = Ajax_set_function;
	this.statechange = Ajax_statechange;
	this.send = Ajax_send;
	this.valid_http_request = Ajax_valid_http_request;
	var status = this.valid_http_request();

	if( status ){
		if (window.XMLHttpRequest) {
			//MOZ
			this.xhr = new XMLHttpRequest();
	
			this.xhr.open(this.method, this.url, true);
			this.xhr.onreadystatechange = this.set_function(this);
	
		} else if (window.ActiveXObject) {
			//IE
			this.xhr = new ActiveXObject("Microsoft.XMLHTTP");
			if (this.xhr) {
				
				this.xhr.open(this.method, this.url, true);
				this.xhr.onreadystatechange = this.set_function(this);
			}
		}
	
		this.xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');
		this.xhr.setRequestHeader('Charset','');
		
	}else{
		alert("Ajax missing request information: url=" + this.url + ", ou methode=" + this.method );
	}
}

	function Ajax_valid_http_request(){

		if(	!( typeof(this.url)=="string" && this.url!="" && this.url!="undefined" && this.url!="null") )
			return false;
			
		if(	!( typeof(this.method)=="string" && (this.method=="POST" || this.method=="GET") ) )
			return false;
		
		return true;
	}

	function Ajax_statechange(obj){
		try{
			if(this.xhr.readyState == 4){
				if(this.xhr.status == 200){
	
					if(typeof(obj.onComplete) == "function"){
						obj.onComplete.call(obj, obj.xhr.responseText, obj.xhr.responseXML );
					}
					
				}
			}
		}catch(error){
		
		}	
	}
	
	function Ajax_set_function(param){
		return function(){param.statechange(param); };
	}	
	
	function Ajax_send(post_data){
		if(this.method == "POST"){

			if(typeof(post_data) == "object"){
				
				if( post_data.tagName.toUpperCase() == "FORM" ){
					
					var send_data = new Array();
					var i, elem;
					var coll = post_data.elements;
					
					for(i = 0; i < coll.length; i++){
						
						elem = coll[i];
						
						if(elem.tagName.toUpperCase() == "INPUT"){
							
							if( elem.type.toUpperCase() == "CHECKBOX"){

								if( elem.checked ||  elem.checked=="CHECKED" )
									send_data[send_data.length] = elem.name + "=" + elem.value;
								else
									send_data[send_data.length] = elem.name + "=__NULL__";

							}else if( elem.type.toUpperCase() == "RADIO" ){

								if( elem.checked ||  elem.checked=="CHECKED" )
									send_data[send_data.length] = elem.name + "=" + elem.value;
								//else
								//	send_data[send_data.length] = elem.name + "=__NULL__";
							
							}else if( elem.type.toUpperCase() == "TEXT" || elem.type.toUpperCase() == "HIDDEN" ) {

								if(elem.value.length > 0)
									send_data[send_data.length] = elem.name + "=" + elem.value;
								else
									send_data[send_data.length] = elem.name + "=__NULL__";

							}else if( elem.type.toUpperCase() == "PASSWORD" ){
								
								var val = elem.value;
								var no_encrypt = elem.getAttribute("no_encrypt");
								
								if( val.length > 0){
									if( typeof(hex_sha1) == "function" && no_encrypt != "1")
										val = hex_sha1(val);
									
									
								}else
									send_data[send_data.length] = elem.name + "=__NULL__";
									
								send_data[send_data.length] = elem.name + "=" + val;
							}
							
						}else if(elem.tagName.toUpperCase() == "SELECT"){
							if(elem.selectedIndex >= 0){
								if(elem.options[elem.selectedIndex].value != "__UNSET__")
									send_data[send_data.length] = elem.name + "=" + elem.options[elem.selectedIndex].value;
							}else
								send_data[send_data.length] = elem.name + "=__UNSET__";
						
						}else if(elem.tagName.toUpperCase() == "TEXTAREA"){
							send_data[send_data.length] = elem.name + "=" + elem.value;
						}
					}
					
					//CHANGE OF SPECIALS CHARS
					var j = 0;
					for(j = 0; j < send_data.length; j++){
						send_data[j] = send_data[j].replace(/&/g, '!@!');

					}

					send_data = send_data.join("&");

					if(this.xhr.readyState == 1)
						this.xhr.send(send_data);
					else
						alert("Ajax state not ready");
					
				}else{

					if(this.xhr.readyState == 1)
						this.xhr.send(null);
					else
						alert("Ajax state not ready");

				}
					
			}else{

				if(this.xhr.readyState == 1)
					this.xhr.send(post_data);
				else
					alert("Ajax state not ready");
				
			}
		}else{

			if(this.xhr.readyState == 1)
				this.xhr.send(null);
			else
				alert("Ajax state not ready");

		}
		
	}


	function page_init(){
		if( (typeof(page_load)).toUpperCase() == "FUNCTION")
			page_load();
	}
	
	function close_context_menu(){
	
	}
	
	function clear_object_content(obj){
		var tmp;
		var cpt;
		try{
			if(obj.lang != "list_template" && obj.lang != "form_template"){
				for((cpt = obj.childNodes.length - 1); cpt >= 0; cpt--){
				  tmp = obj.childNodes[cpt];
				  if(tmp.lang != "list_template" && tmp.lang != "form_template")
					  obj.removeChild(tmp);
				}
			}
		}catch(error){
		
		}
	}
	
	function cancel_bubble(e){

		if (!e) var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
	}

	var localXML = new Array();

	function bring_center_form(objBody, objFormOr, close_callback_function){
	
		var objForm = objFormOr.cloneNode(true);
		var objOverlay = document.createElement("div");
	
		objOverlay.setAttribute('id', 'ol_' + objForm.id);
		objOverlay.className  = 'overlay';
		objOverlay.style.display = 'block';
		objOverlay.onclick = add_close_function(objForm, close_callback_function);
		objBody.appendChild(objOverlay);
	
		var objCenter = document.createElement("div");
		objCenter.className = "centerer";
		objCenter.setAttribute('id', 'fc_' + objForm.id);
		objCenter.onclick = add_close_function(objForm, close_callback_function);
		
		objForm.onclick = add_cb_function();
		
		objForm.style.display = "block";
		
		if(typeof(objFormOr.className) == "undefined")
			objForm.className = "form_container";
		else
			objForm.className = "form_container " + objFormOr.className;
			
		objCenter.appendChild(objForm);	
		objBody.appendChild(objCenter);
		
		return objForm;
	}

	function add_close_function(objForm, close_callback_function){
		var func = function() { close_sub_form( objForm, close_callback_function ); return false; };
		return func;
	}
	
	function add_cb_function(){
		return function(event){ cancel_bubble(event); };
	}

	function control_changed(control){
		var form = recursive_form_find(control,0);
		var is_changed = form.getElementsByTagName("INPUT")[1];
		is_changed.value = "1";
	}

	var max_level = 15;
	function recursive_form_find(obj, level){
	
		if( typeof(obj) != "undefined" && obj != null ){
			if(obj.tagName == "FORM"){
				return obj;
			}else{
				if(level > max_level)
					alert("Erreur de recherche de formulaire:#188");
				else{
					return recursive_form_find(obj.parentNode, level++);
				}
			}
		}
	}

	function fill_form(objForm, record, id){
		var i, j, k, l, field, field_name, form_element;
	
		if( (objForm.tagName).toUpperCase() == "FORM" )
			form_control = objForm;
		else
			form_control = objForm.getElementsByTagName("FORM")[0];
		
		var pos = record.constructor.toString().indexOf("Array");
		if( pos > 0 ){
			//IF THE RECORD IS AN ASSOCIATIVE ARRAY, MUST CONVERT TO XMLDOC
			var xmlRecord = convert_array_to_xml( record, id );
			xmlRecord = xmlRecord.firstChild;
		}else
			var xmlRecord = record;
		
		for(i = 0; i < xmlRecord.childNodes.length; i++){
		
			field = xmlRecord.childNodes[i];
			
			if(typeof(field) != "undefined"){
			
				field_name = field.tagName;
			
				if(field_name == "dynamic_properties"){
	
				}else{
					if(field_name != ""){
						for(k = 0; k < form_control.elements.length; k++){
							form_element = form_control.elements[k];
		
							if(form_element.name == field_name){
								 if(form_element.tagName.toUpperCase() == "INPUT"){
		
									if(form_element.type.toUpperCase() == "TEXT"){
		
										form_element.value = field.childNodes[0].nodeValue;
										form_element.setAttribute('value', field.childNodes[0].nodeValue);
		
									}else if(form_element.type.toUpperCase() == "HIDDEN"){
										if(form_element.className != "no_clear")
											form_element.value = field.childNodes[0].nodeValue;
		
									}
								 
								 }else{
									if(form_element.tagName.toUpperCase() == "SELECT"){
										
										for(l = 0; l < form_element.options.length; l++){
										
											if( form_element.options[l].value == field.childNodes[0].nodeValue){
												form_element.options[l].selected = "selected";
												form_element.options[l].setAttribute('selected', 'selected');
												break;
											}
										}
									}
								 }
								
								break;	
							}
							
						}
					}
				}		
			}
		}
		
	}

	function updateHtmlNode(templateObject, xmlNode, update_existing, index, name_extra){
	
		var j, tmp_object, tmp_cell;
		var property_name, content, tmp_content, node;
		
		var is_new = false;

		if(typeof(name_extra) != "string")
			name_extra = "";
			
	
		if(xmlNode != null){
		
			var template = templateObject.innerHTML;
			template = template.split("#@#");
				
			var template_out = templateObject.innerHTML;
			template_out = template_out.split("#@#");
			
			var id = xmlNode.getAttribute('id');
			

			if( ! update_existing){
	
				var tmp_object = document.createElement( templateObject.tagName );
				tmp_object.className = templateObject.className;
				tmp_object.setAttribute('id', name_extra + "rec_" + xmlNode.getAttribute('id') );
//				templateObject.parentNode.appendChild(tmp_object);
				is_new = true;

			}else{
			
				var top_object = templateObject.parentNode;
				var tmp_object;
				for(j = 0; j < top_object.childNodes.length; j++){
				
					tmp_object = top_object.childNodes[j];
					
					if( typeof(tmp_object) == 'object' && tmp_object.innerHTML != "undefined" ){
					
						if( typeof(tmp_object.id) == "string" ){
						
							if(tmp_object.id != templateObject.id){

								if(tmp_object.id == name_extra + "rec_" + id){
								
									tmp_object = top_object.childNodes[j];
									break;
			
								}
							}
						}
	
					}
					
					tmp_object = '';
				}
			}
			

			
			if( typeof( tmp_object.id) == "undefined" || tmp_object.id == templateObject.id){
			
				var tmp_object = document.createElement( templateObject.tagName );
				tmp_object.className = templateObject.className;
				tmp_object.setAttribute('id', name_extra + "rec_" + xmlNode.getAttribute('id') );
//				templateObject.parentNode.appendChild(tmp_object);
				is_new = true;
			}

			for(j = 1; j < template.length; j = j + 2){
		
				property_name = template[j];
				
				if(property_name == "index")
					template_out[j] = id;
				else{
					node = xmlNode.getElementsByTagName(property_name)[0];

					if( typeof(node) != "undefined"){

						node = node.firstChild;
						
						if(typeof(node) != "undefined" && node != null)
							template_out[j] = node.nodeValue;
						else
							template_out[j] = "";

					}
				}
			}

			content = "";
			for(j = 0; j < template_out.length; j++){
				content = content + "" + template_out[j];
		
			}
			
			if(templateObject.tagName.toUpperCase() == "TR"){
			
				content = content.replace(/\<TD\>/g, "<td>");
				content = content.replace(/\<\/td\>/gi, "");
		
				tmp = content.split("<td>");
				tmp.shift();
				
				content = "";

				if( is_new ){
				
					for(j = 0; j < tmp.length; j++){
					
						tmp_cell = tmp_object.insertCell(tmp_object.cells.length);
						tmp_cell.innerHTML = tmp[j];
			
					}
				}else{
				
					for(j = 0; j < tmp.length; j++){
					
						tmp_cell = tmp_object.cells[j];
						tmp_cell.innerHTML = tmp[j];
			
					}
				
				}
			}else{
			
				if(templateObject.tagName.toUpperCase() == "TABLE"){
				
					tmp_object = document.createElement("span");
					tmp_object.innerHTML = "<TABLE>" + content + "</TABLE>";

//					tmp_object.cellPadding = templateObject.cellPadding;
//					tmp_object.cellSpacing = templateObject.cellSpacing;
					
				}else
					tmp_object.innerHTML = content;
			}
			
			templateObject.parentNode.appendChild(tmp_object);
			
		}else{
		
			var id = index;
			
			//DELETING
			var top_object = templateObject.parentNode;
			var tmp_object, index;

			for(j = 0; j < top_object.childNodes.length; j++){
			
				tmp_object = top_object.childNodes[j];
				if( typeof( tmp_object ) == 'object' && tmp_object.innerHTML != undefined ){
					index = tmp_object.getAttribute('id');

					if( index == name_extra + "rec_" + id ){
					
						tmp_object.parentNode.removeChild(tmp_object);

						break;
	
					}
	
				}
			}
			
		}
	}

	function recursive_element_by_id(parent_object, object_id, depth){
	
		var i, node;
			
		if( (typeof(parent_object)).toUpperCase() == "OBJECT" && depth < 25){
			if(parent_object.hasChildNodes){
				for(i = 0; i < parent_object.childNodes.length; i++){
					node = parent_object.childNodes[i];
					if(node.id == object_id){
						return node;
					}else{
					
						node = recursive_element_by_id( node, object_id, (depth + 1) );
						if(node != null){
						
							if(node.id == object_id){
						
								return node;
							}
						}
					}
				
				}
				
			}else{
				return null;
			}
		}else{
			return null;
		}
	
	}
	
	function convert_array_to_xml( my_array, id ){
	
		if (document.implementation && document.implementation.createDocument) {
		//MOZ
			xmlDoc = document.implementation.createDocument("", "", null);
			return build_xml(xmlDoc, my_array, id );
			
		}else if (window.ActiveXObject) {
	  	//IE
			xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			return build_xml(xmlDoc, my_array, id );
		}else {
			alert('Your browser can\'t handle this XML CREATION script');
			return;
		}

	}
	
	function build_xml(xmlDoc, my_array, id ){
	
		var field, elem, text_node;
		
		var record = xmlDoc.createElement("record");
		xmlDoc.appendChild(record);
		record.setAttribute('id', id);
				
		for( field in my_array){
			
			elem = xmlDoc.createElement(field);
			record.appendChild( elem );
			
			text_node = xmlDoc.createTextNode( my_array[field] );
			elem.appendChild( text_node );
			
			
		}
	
		return xmlDoc;
	
	}	function load_datas( remote_object){

		var command = retrieve_template( remote_object );
		var data_provider_url = command['data_provider'];
		var complement_control_id = command['complement_control_id'];
		var xml_name = command['xml_name'];

		if(data_provider_url != null && data_provider_url != "null"){
			var myAjax = new Ajax( data_provider_url , 'POST');
	
			if( typeof(complement_control_id) != "undefined" && complement_control_id!="null" && complement_control_id!=null && complement_control_id != ""){
				//EDITING AND DELETING
				var datas = remote_object;
	
				var found = false;
				var recursive_limit = 15;
				var recursive_count = 0;
				
				var main_container = remote_object;			
				
				while( !found ){
				
						
					if( typeof(main_container) == "object"){
					
						if(typeof(main_container.id) == "string"){
							if(main_container.id == "main_container"){
								
								found = true;
							}
						}
					
					}
					recursive_count++;
					
					if(recursive_count > recursive_limit)
						break;
						
					main_container = main_container.parentNode;
				}
				
	
				var listing_object = recursive_element_by_id( main_container, complement_control_id, 0);
				
				if( typeof( listing_object ) == "undefined" ){
					listing_object = document.getElementById( complement_control_id );
				}
	
	
				myAjax.onComplete = add_function(receive_update, remote_object, listing_object);
				
				var is_saved = datas.getElementsByTagName("INPUT")[0];
				is_saved.value = "1";

				myAjax.send(datas);
	
				datas.getElementsByTagName("INPUT")[0].value = "0";
				datas.getElementsByTagName("INPUT")[1].value = "0";
				
			}else{
				//LISTING AND AUTHENTICATION
	
	
					myAjax.onComplete = add_function(receive_listing_datas, remote_object);
					myAjax.send(remote_object);
			}
		}

	}

	function retrieve_template( remote_object ){
	
		if( (typeof(remote_object)).toUpperCase() == "OBJECT" && remote_object != null && remote_object != "null" && remote_object != ""){
			var title_command = remote_object.getAttribute('title');
			var commands = title_command.split(";");
			
			var command_args = new Array();
			var tmp, command_name, command_value;
				
			for(var i = 0; i < commands.length; i++){
			
				tmp = commands[i].split(":");
	
				command_name = tmp.shift();
				command_value = tmp.join(":");
				
				if(command_value == "true")
					command_value = true;
				else if(command_value == "false")
					command_value = false;
					
				command_args[ command_name ] = command_value;

			}

			return command_args
		}else{
			return new Array();
		}
	}

	function add_function(receive_function, param1, param2){
	
		return function(responseText, responseXML){ receive_function(responseText, responseXML, param1, param2); };
	}
	
	function close_this_sub_form( control){
	
		objForm = recursive_form_find(control, 0);
		var fc = objForm.parentNode.parentNode;
		fc.onclick.call();
	}

	function close_sub_form( objForm, close_callback_function){
	
		var is_saved = objForm.getElementsByTagName("INPUT")[0];
		var is_changed = objForm.getElementsByTagName("INPUT")[1];
		var res = false;
	
		if( typeof(is_saved) == "object" && typeof(is_changed) == "object" ){
		
			if(is_saved.value == "0" && is_changed.value != "0"){
				var res = confirm("Voulez vous sauvegarder vos informations?");
			}
		}else
			res = false;
				
		if(res){
		
			save_ajax_form(form);
		}else{

			var objCenter = document.getElementById( "fc_" + objForm.id );
			var objOverlay = document.getElementById( "ol_" + objForm.id );
			
			if(typeof(objCenter) == "undefined" || objCenter == null || objCenter == "null" || objCenter == ""){

				objCenter = document.getElementById( "fc_" + objForm.parentNode.id );
				objOverlay = document.getElementById( "ol_" + objForm.parentNode.id );
			
			}
			
			if( typeof(objCenter) != "undefined" && objCenter != null){
				objCenter.parentNode.removeChild(objCenter);
				objOverlay.parentNode.removeChild(objOverlay);
			}
			
			clear_ajax_form(objForm);
					
			if( (typeof(close_callback_function)).toUpperCase() == "FUNCTION" ){
				close_callback_function.call();
			}
		}

	}
	
	function save_ajax_form(control){
	
		var form = recursive_form_find(control,0);
		load_datas( form );
	}

	function delete_ajax_form(control, action){
	
		var form = recursive_form_find(control,0);
		load_datas( form, action );
	}
	
	function delete_ajax_list_item(control){
//		load_datas(, 'del');
	}
	
	function clear_ajax_form(form_object){
	
		if( form_object != null && typeof(form_object) != "undefined" ){
			if(form_object.tagName != "form")
				var form_object = recursive_form_find(form_object,0);
			if( form_object != null && typeof(form_object) != "undefined" ){
				for(i = 0; i < form_object.elements.length; i++){
			
					elem = form_object.elements[i];
					if( (typeof(elem)).toUpperCase() == "OBJECT") {
						
						if(elem.name != ""  && (elem.tagName).toUpperCase() != "FIELDSET" && (elem.disabled == false || elem.disabled == "false") ){
		
							if(elem.type != "button" && elem.type != "image" && elem.type != "submit" && elem.type != "reset" && elem.className != "no_clear" )
								elem.value = "";
								
							
							
						}
					}							
				}
			}
		}
	}
	
	function lock_ajax_form(form_object){
	
		if(form_object.tagName != "form")
			var form_object = recursive_form_find(form_object,0);
	
		for(i = 0; i < form_object.elements.length; i++){
	
			elem = form_object.elements[i];
			if( (typeof(elem)).toUpperCase() == "OBJECT") {
			
				
				if(elem.name != ""  && (elem.tagName).toUpperCase() != "FIELDSET" && (elem.type).toUpperCase() != "HIDDEN" && (elem.disabled == false || elem.disabled == "false") ){

					elem.disabled = true;
					elem.className = "control_disabled";
					
				}
			}							
		}
	}
		
	function show_sub_form(body_name, form_name, template_name, index, is_password_checked){
	
		var objBody = document.getElementById(body_name);
		var objForm =  document.getElementById(form_name);
		objForm = bring_center_form(objBody, objForm);
	
		if(typeof is_password_checked == "undefined" || is_password_checked == "undefined")
			is_password_checked = true;
				
		try{
		
			if(is_password_checked){
				form_control = objForm.getElementsByTagName("FORM")[0];
				password_validator.add_security_to_form(form_control);
			}
		}catch(error){
		
		}
	
		var tmp = retrieve_template( template_name );
		var data_provider_url = tmp[0];
		var data_provider_action = tmp[1];
		var complementary_form = tmp[2];
		var data_provider_varname = tmp[3];
		var owner_object = tmp[4];
		var template_info = tmp[5];
		
		var xmlObj = localXML[data_provider_varname];
		
		var global = xmlObj.getElementsByTagName("GLOBAL")[0];
		var records_container = global.getElementsByTagName("records")[0];
		if(typeof(records) != "undefined"){
			var records = records_container.getElementsByTagName("record");
		
			var record = find_record(records, index);
			if( typeof(record) == "object" ){
				fill_form(objForm, record );
			}
		}		
	}

	function find_record(xmlRecords, id){
		var res = null;
		var i = 0;
		for(i = 0; i < xmlRecords.length; i++){
			if(xmlRecords[i].getAttribute('id') == id){
				res = xmlRecords[i];
				break;
			}
		}
		
		return res;
		
	}
	
	function receive_update(responseText, responseXML, form_object, list_object){
	
		var global = responseXML.getElementsByTagName("GLOBAL")[0];
		var status = global.getElementsByTagName("status")[0].childNodes[0].nodeValue;
		var description = global.getElementsByTagName("description")[0].childNodes[0].nodeValue;
		
		var command = retrieve_template( form_object );
		var close_after = command['close_after'];
	
		if( close_after != false){
			//INTERFACE MUST BE CLOSE
			close_sub_form(form_object);
		}else{
			if( typeof(form_changed) == "function")
				form_changed(form_object, list_object);
		}
		load_datas( list_object );
	
	}

	function receive_listing_datas(responseText, responseXML, remote_object){
	
		var command = retrieve_template( remote_object );
		var data_provider_url = command['data_provider'];
		var complement_control_id = command['complement_control_id'];
		var xml_name = command['xml_name'];
		var call_back_function = command['call_back_function'];
		var record_name_extra = command['record_name_extra'];

		if( complement_control_id != "" && typeof(complement_control_id) !="undefined" )
			myRemote = document.getElementById( complement_control_id );	
		else
			myRemote = remote_object;
		
		var previousXML = localXML[ xml_name ];
	
		if( typeof( previousXML ) != "undefined" ){

			if(previousXML == responseXML)
				return null;
				
			else{
				//UPDATE
	
				var pglobal = previousXML.getElementsByTagName("GLOBAL")[0];
				var precords_list = pglobal.getElementsByTagName("records")[0];
				
				if(typeof(precords_list) == "object"){

					var precords = precords_list.getElementsByTagName("record");
					
					var global = responseXML.getElementsByTagName("GLOBAL")[0];
					var records_list = global.getElementsByTagName("records")[0];
					var records = records_list.getElementsByTagName("record");
					
					var id, is_found, rec, prec;
					var updated_ids = new Array();
					
					for(i = 0; i < precords.length; i++){
		
						prec = precords[i];
						id = prec.getAttribute('id');
						rec = find_record(records, id );
						updated_ids[ updated_ids.length ] = id;				
						
						if( rec != null){
						
							if( prec != rec){
								//UPDATED RECORD
								updateHtmlNode(myRemote, rec, true, 0, record_name_extra);
							}
							
						}else{
							//DELETED RECORD
							updateHtmlNode(myRemote, null, false, id, record_name_extra);
						}
					
					}
					
					for(i = 0; i < records.length; i++){
					
						rec = records[i];
						is_found = false;
						
						for(j = 0; j < updated_ids.length; j++){
						
							if( rec.getAttribute('id') == updated_ids[j] ){
								is_found = true;
								break;
								
							}
						}
						
						if(!is_found){
							//NEW RECORD
							updateHtmlNode(myRemote, rec, false, 0, record_name_extra);
						}
					}
				
				
					localXML[ xml_name ] = responseXML;
				}
			}
			
		}else{
			//INSERT
			localXML[ xml_name ] = responseXML;

			var global = responseXML.getElementsByTagName("GLOBAL")[0];
			if(typeof(global) == "object"){

				var records_list = global.getElementsByTagName("records")[0];
				
				if( typeof(records_list) == "object"){
					var records = records_list.getElementsByTagName("record");
		


					if( typeof(records) != "undefined"){

		
						for(i = 0; i < records.length; i++){

							updateHtmlNode(myRemote, records[i],false, 0, record_name_extra);
						}
					}
				}
			}
			
		}
		

		try{
			eval(call_back_function + "()");
		}catch(error){
		
		}
		
		if( typeof( call_back_function) == "function" ){
			call_back_function.call();
		}
		
	}
	
	function page_receive(responseText, responseXML){
		var global = responseXML.getElementsByTagName("GLOBAL")[0];
		var html_content = global.getElementsByTagName("html_content")[0];
		var html_content = html_content.firstChild.nodeValue;
	
		var myDiv = document.createElement("DIV");
		myDiv.setAttribute('id', 'mydiv');
		myDiv.style.display = "none";
		myDiv.innerHTML = html_content;	
		document.body.appendChild(myDiv);
		var myInsert = myDiv.getElementsByTagName("DIV")[0];
		var myForm = myDiv.getElementsByTagName("FORM")[0];
		
		bring_center_form( document.body, myInsert, close_cb_fc );
		
		if(typeof(page_receive_init) == "function")
			page_receive_init(myInsert.id);

	}
	
	function close_cb_fc(){
		var myDiv = document.getElementById('mydiv');
		myDiv.parentNode.removeChild( myDiv );
	}
//JAVASCRIPT DOCUMENT
//READ AND WRITE, CENTRALIZED
//JAVASCRIPT DOCUMENT: rating.php
function rate(rate_type, rate_remote, amount, rating_token){

	myAjax = new Ajax( "http://www.candock.com/data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=rating_comment_favorite&a=rate&rating_type=" + rate_type + "&rating_remote_id=" + rate_remote + "&rating_value=" + amount + "&rating_token=" + rating_token, 'POST');
				myAjax.onComplete = receive_rating;
				myAjax.send();
}

function receive_rating(responseText, responseXML){

}

var rating_set = new Array();

function rating_move(obj, amount, rating_type, rating_remote_id){

	var i = 0;
	
	var cell = obj.parentNode;
	var row = cell.parentNode;
	
	
	if(typeof(rating_set[rating_type + ":" + rating_remote_id]) != "undefined"){
		return;
	}
	
	rating_set_images(row, amount);
	

}

function rating_set_images(row, amount){

	if( amount <= row.cells.length ){
	
		var nb = Math.floor(amount);

		for(i = 0; i < nb; i++){

			row.cells[i].style.backgroundImage = "url(/images/design/etoile_pleine_profil.jpg)";
		}
		
		if( (amount - nb) > 0){
			row.cells[i].style.backgroundImage = "url(/images/design/etoile_demi_profil.jpg)";
			i++;
		}
		
		while(i < row.cells.length){
			row.cells[i].style.backgroundImage = "url(/images/design/etoile_vide_profil.jpg)";
			i++;
		}
	
	}
}

function rating_clear(obj){
	var table = obj.parentNode.parentNode;
	var rating_value = table.getAttribute("rating_value");
	var diff, icon;
	
	var full_star_path = "/images/design/etoile_pleine_profil.jpg";
	var half_star_path = "/images/design/etoile_demi_profil.jpg";
	var empty_star_path = "/images/design/etoile_vide_profil.jpg";
	
	for(i = 0; i < obj.cells.length; i++){
		diff = (rating_value - i ) * 10 ;
				
		if( diff >= 10 ){
			icon = full_star_path;
		}else if( diff > 0 && diff < 10){
			icon = half_star_path;
		}else{
			icon = empty_star_path;
		}
		obj.cells[i].style.backgroundImage = "url(" + icon + ")";
	}
}

function rating_process(obj, amount, rating_type, rating_remote_id, rating_token){

	var cell = obj.parentNode;
	var row = cell.parentNode;
	
	
	if(typeof(rating_set[rating_type + ":" + rating_remote_id]) == "undefined"){
		rating_set[rating_type + ":" + rating_remote_id] = amount;
		row.onmouseout = null;
		rate(rating_type, rating_remote_id, amount, rating_token);
	}

}

var favorite_control_pending;

function show_favorite_form(curr_obj ){

	favorite_control_pending = curr_obj;
	var ns = curr_obj.parentNode.getElementsByTagName("div")[0];

	show_callout(ns.innerHTML, curr_obj, 10, 10, 200, 200, 0, false, null );
}

var favorite_object_pending;

function add_to_favorite( curr_obj ){
	
	favorite_object_pending = curr_obj;
	
	var myForm = recursive_form_find( curr_obj );
	
	var source = myForm.source;
	var source_ex = recursive_element_by_id(myForm, 'src_ex', 0);
	var i;
	var source_value;


	for(i = 0; i < source.length; i++){

		if(source[i].checked){
			source_value = source[i].value;
			break;
		}
	
	}
	var ok = true;
	
	if(source_value == "new"){

		if( source_ex.value.length == 0){
		
			source_ex.value = "Nom requis"
			source_ex.style.color = "#990E15";
			ok = false;
		}
	
	}

	if(ok){
		var url = "http://www.candock.com/data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=rating_comment_favorite&a=add_favorite";
		var myAjax = new Ajax(url, 'POST');
		myAjax.onComplete = add_to_favorite_receive
		myAjax.send(myForm);
	}
}

function add_to_favorite_receive(responseText, responseXML){
	close_this_callout(favorite_object_pending);

	var global = responseXML.getElementsByTagName("GLOBAL")[0];
	var status = global.getElementsByTagName("status")[0].firstChild.nodeValue;
	var id_favorite= global.getElementsByTagName("id_favorite")[0].firstChild.nodeValue;

	if(status == "OK"){

		var pn = favorite_control_pending.parentNode;
		favorite_control_pending.style.display = "none";
		var conf = document.createElement("span");
		conf.innerHTML = "Fait parti de vos favoris <span class='favorite_link' onclick='JAVASCRIPT: remove_from_favorite("+id_favorite+", this)'>retirer</span>&nbsp;&nbsp;<span class='favorite_link' onclick='JAVASCRIPT: view_favorite("+id_favorite+");'>voir</span>";
		pn.appendChild( conf );
		
	}
	
	
	favorite_object_pending = null;
	favorite_control_pending = null;
}

function remove_from_favorite(id_favorite, obj){

	if(typeof(obj) == "object"){
		var sn = obj.parentNode;
		var pn = sn.parentNode;
	
		clear_object_content(sn);
		
		pn.removeChild(sn);
	
		var btn = pn.getElementsByTagName("input")[0];
		btn.style.display = "block";
	}
	
	var url = "http://www.candock.com/data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=rating_comment_favorite&a=del_favorite&id_favorite=" + id_favorite;
	var myAjax = new Ajax(url, 'GET');
	myAjax.send();
	
}

function view_favorite(id_favorite){
	document.location = "/page_module.php?tZ=1280540320&module=rating_comment_favorite&page=favorite_view&id_favorite=" + id_favorite;
}
//JAVASCRIPT DOCUMENT: side_menu.js.php

var menu_mouse_over_add = "_up";
var menu_file_ext = ".png";
var color_switch = new Array("#000000", "#FFFFFF");

function sm_over(obj){

	var id = obj.id;
			
	var rem_obj = document.getElementById(id + "_reg");
	var bring_obj = document.getElementById(id + "_over");
	
	
	if(typeof(rem_obj) == "object")
		rem_obj.style.display = "none";
		
	if(typeof(bring_obj) == "object")
		bring_obj.style.display = "block";
	
	
}

function sm_out(obj){

	var id = obj.id;
			
	var rem_obj = document.getElementById(id + "_over");
	var bring_obj = document.getElementById(id + "_reg");
	
	
	if(typeof(rem_obj) == "object")
		rem_obj.style.display = "none";
		
	if(typeof(bring_obj) == "object")
		bring_obj.style.display = "block";

}//JAVASCRIPT DOCUMENT: keyword.js.php
var current_keyword_type_obj;
var current_id_mmi;
function keyword_type(obj, id_mmi){

	current_keyword_type_obj = obj;
	current_id_mmi = id_mmi;
	var myAjax = new Ajax( "data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=photo_album&a=keyword_list&is_accepted=Y&mask=" + obj.value + "&id_mmi=" + id_mmi, "POST");
	myAjax.onComplete = keyword_type_receive;
	myAjax.send();
	
}

function keyword_type_receive(responseText, responseXML){

	var obj = current_keyword_type_obj;
	
	if( typeof(obj) != "object")
		return;
		
	var control_name = obj.getAttribute("lister_control");
	var lister_control = document.getElementById( control_name );
	
	var global = responseXML.getElementsByTagName("GLOBAL")[0];
	var records_container = global.getElementsByTagName("records")[0];
	var records = records_container.getElementsByTagName("record");
	var i, id_keywords, text, token, new_li;
	
	clear_object_content(lister_control);
	
	if( lister_control.tagName == "UL" ){
	
		
		if(typeof(records) != "undefined"){
			
			for(i = 0; (i < 10 &&  i < records.length); i++){
			
				id_keywords = records[i].getElementsByTagName("id_keywords")[0].firstChild.nodeValue;
				text = records[i].getElementsByTagName("text_")[0].firstChild;
				if(text)
					text = text.nodeValue;
					
				token = records[i].getElementsByTagName("token")[0];
				if(token)
					token = token.firstChild.nodeValue;
						
				new_li = document.createElement("LI");
				new_li.innerHTML = text;
				new_li.setAttribute("token", token);
				new_li.setAttribute("id_keywords", id_keywords);
				new_li.onclick = keyword_add;
				new_li.style.cursor = "pointer";
				new_li.onmouseover = list_over;
				new_li.onmouseout = list_out;
				
				lister_control.appendChild(new_li);
				
			}
		
			
		}	
	
	}else if( lister_control.tagName == "SELECT" ){
	
	}

}

function keyword_add(){

	if(current_id_mmi){
	
		var id_keywords = this.getAttribute("id_keywords");
		var token = this.getAttribute("token");
		
		var myAjax = new Ajax( "data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=photo_album&a=keyword_add&is_accepted=Y&id_keywords=" +id_keywords + "&id_multimedia_item=" + current_id_mmi + "&token=" + token, "POST");
		myAjax.onComplete = keyword_add_receive;
		myAjax.send();
	}
}

function keyword_add_receive(responseText, responseXML){
	var lister = document.getElementById('tag_list');
	load_datas(lister);
}//JAVASCRIPT DOCUMENT: chat.js.php
var pool_check_timer;
function load_poolling_system(){
}

var pool_notifier;

function pool_check(){

	//CHAT POOL
	var myAjax = new Ajax( "data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=chat&a=chat_get_action" , "POST");
	myAjax.onComplete = chat_get_action;
	myAjax.send();
	
}

var users_sender = new Array();
var rooms = new Array();

function chat_get_action(responseText, responseXML){

	if(typeof(responseXML) != "undefined"){
	
		var global = responseXML.getElementsByTagName("GLOBAL")[0];
		var records_list = global.getElementsByTagName("records")[0];
		
		if(typeof(records_list) != "undefined"){
		
			var records = records_list.getElementsByTagName("record");
			var id, sender, receiver, room, moment, type, value, user_nickname, user_avatar, room_name, room_created, token;
			
			if(typeof(records) != "undefined"){
			
				var i;
				
				for(i = 0;  i < records.length; i++){
				
					id = records[i].getElementsByTagName("id_chat_action")[0].firstChild.nodeValue;

					token = records[i].getElementsByTagName("token")[0].firstChild.nodeValue;
					
					sender = records[i].getElementsByTagName("id_chat_users_sender")[0];
					if(sender.hasChildNodes())
						sender = sender.firstChild.nodeValue;
						
					receiver = records[i].getElementsByTagName("id_chat_users_receiver")[0];
					if(receiver.hasChildNodes())
						receiver = receiver.firstChild.nodeValue;
						
					room = records[i].getElementsByTagName("id_chat_room")[0];
					if(room.hasChildNodes())
						room = room.firstChild.nodeValue;

					moment = records[i].getElementsByTagName("moment")[0].firstChild.nodeValue;

					type = records[i].getElementsByTagName("chat_action_type")[0].firstChild.nodeValue;

					value = records[i].getElementsByTagName("chat_value")[0].firstChild.nodeValue;

					user_nickname = records[i].getElementsByTagName("user_nickname")[0];
					if(user_nickname.hasChildNodes())
						user_nickname = user_nickname.firstChild.nodeValue;

					room_name = records[i].getElementsByTagName("room_name")[0];
					if(room_name.hasChildNodes())
						room_name = room_name.firstChild.nodeValue;
						
					room_created = records[i].getElementsByTagName("room_created")[0];
					if(room_created.hasChildNodes())
						room_created = room_created.firstChild.nodeValue;
				
					if(type == "PRIVATE_MESSAGE"){
					
						if(typeof(users_sender[sender]) != "undefined"){
							var check_window = pm_windows[sender];
							
							if( typeof(check_window) == "object"){
								if(!check_window.closed){
									//TODO: emphasize the line of this users because the window is opened						
								}else{
									//TODO: emphasize the line of this users because the window is closed
								}
							}else{
									//TODO: emphasize the line of this users because the window is closed
							}
							
						}else{
							users_sender[sender] = new Array(moment, value, user_nickname, token, receiver );
							update_chat_status_content(type, sender);
						}
						
					}
					
				
				}
				
				
			
			}
		}else{
			var code = global.getElementsByTagName("code")[0];
			
			if(typeof(code) != "undefined"){
				code = code.firstChild.nodeValue;
				
				if(code == 1)
					window.clearInterval( pool_check_timer );
			}
			
		}	
	}
}


function update_chat_status_content(type, sender){

	var sender_infos = users_sender[sender];
	
	var notifier = document.createElement("a");

	notifier.onclick = show_chat_status;
	notifier.innerHTML = "Vous avez des messages priv&eacute;s";
	pool_notifier.appendChild(notifier);
	
	var div;
	var elem;
	var is_found = false;
	
	div = document.getElementById('chat_status');
	var is_div = false;
	try{
	
		if(typeof(div) == "object" && div.tagName=="div")
			is_div = true;
			
	}catch(error){
	
	}
	
	if( !is_div){

		div = document.createElement("div");
		div.style.position = "relative";
		div.style.float = "left";
		div.style.clear = "both";
		div.style.zIndex = "6";
		div.style.display = "none";
		div.id = 'chat_status';
		document.body.appendChild(div);
	
	}else{
	
		var coll = div.getElementsByTagName("div");
		var i = 0;
		
	
			
		for(i = 0; i < coll.length; i++){
			elem = coll[i];
			if(elem.id == "sender_" + sender){
				is_found = true;
			}
		}
	}
		
	if( !is_found ){
	
		elem = document.createElement("div");
		elem.id = "sender_" + sender;
//		elem.innerHTML = "<img src='" + sender_infos[3] + "' /><br />" + sender_infos[2] + "<br /> A dit: " + sender_infos[1];
		elem.innerHTML = "Interlocuteur: <b>" + sender_infos[2] + "</b> A dit: " + sender_infos[1];
		elem.innerHTML = elem.innerHTML + "<a href=\"JAVASCRIPT: show_private_chat(" + sender + ", '" + sender_infos[3]+ "','" + sender_infos[4] + "');\">Discuter</a>";
		div.appendChild(elem);
	}


}

function show_chat_status(){
	var div = document.getElementById('chat_status');
	div.style.display = "block";
}

var pm_windows = new Array();

function show_private_chat(sender, token, receiver){
  var url = "/page_module.php?tZ=1280540320&module=chat&page=private_messaging&sender=" + sender + "&token=" + token + "&receiver=" + receiver;
	
  pm_windows[sender] = window.open(url, "pc_" + sender, "location = no, menubar = no, resizable = yes, scrollbars = yes, status = no, toolbar = no, width=450, height=450");
   pm_windows[sender].id = sender;
}

function close_private_chat(){
	pm_windows[this.id] = null;
}

var room_windows = new Array();
function show_room_chat(id_chat_room){
	var url = "/page_module.php?tZ=1280540320&module=chat&page=room_messaging&id_chat_room=" + id_chat_room;

	room_windows[id_chat_room] = window.open(url, "rc_" + id_chat_room, "location = no, menubar = no, resizable = yes, scrollbars = yes, status = no, toolbar = no, width=920, height=660");

}


function close_room_chat(id_chat_room){
	room_windows[id_chat_room] = null;
	try{
		var url = "/data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=chat&a=chat_add_message&chat_action_type=QUIT&id_chat_room=" + id_chat_room;
	
		var myAjax = new Ajax(url, "POST");
		myAjax.send();
	}catch(error){
		//ERROR TROWN IN CASE OF PREMATURE WINDOW CLOSING
	alert("Error on close_room_chat: " + error);
	}
}


function change_status(status, obj){
	var url = "data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=chat&a=chat_set_status&status=" + status;
	
	var myAjax = new Ajax(url, "POST");
	myAjax.send();
	
	var active_status = document.getElementById("active_status");
	active_status.innerHTML = obj.innerHTML;
}//JAVASCRIPT DOCUMENT: motd.js.php
function edit_motd(control){

	if( control.childNodes[0].tagName!="INPUT" ){

		var itext = document.createElement("INPUT");
		itext.type = "text";
		itext.id = "motd_control";
		itext.onchange = save_motd;
		var original_value = control.innerHTML;
		value = encode_macro(original_value);
		value = spell_uncheck(value);
		itext.value = value;
		
		itext.onkeypress = function(event){kp_motd(event,original_value)};


		itext.size = 64;
		itext.maxLength = 64;

		itext.style.backgroundColor = "#FFFFFF";
		itext.style.color = "#000000";
		control.innerHTML = "";
		control.appendChild(itext);
		itext.focus();
	}			
}

function kp_motd(evObj, original_value){
	if(window.event){
		var keyCode = window.event.keyCode;
	}else
		var keyCode = evObj.keyCode;
		
	if(keyCode == 27){
		var itext = document.getElementById('motd_control');
		var pn = itext.parentNode;
	
		pn.removeChild(itext);
		pn.innerHTML = original_value;
	}
}

function save_motd(){
	var itext = document.getElementById('motd_control');
	if(itext.value.length > 0 ){
		var url = "http://www.candock.com/data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=security&a=user_edit&motd=" + itext.value;
		var myAjax = new Ajax(url, "POST");
		myAjax.onComplete = changed_motd;
		myAjax.send();
	}else{

		 itext.value = "Laisser votre message en cliquant";
		 changed_motd(null, null);
	}
}

function changed_motd(responseText, responseXML){

	var itext = document.getElementById('motd_control');
	
	var value = itext.value;
	var pn = itext.parentNode;
	
	pn.removeChild(itext);
	
	value = spell_check(value);
	value = decode_macro(value);
	//value = wordwrap(value, 64, "<br />");
	pn.innerHTML = value;
	
}//JAVASCRIPT DOCUMENT: callout.js.php

var callouts = new Array();
	
function show_callout( html_content, curr_obj, offset_x, offset_y, width, height, timer, mouse_based, evObj, prevent_opening ){
	
	var i;
	
	if(typeof(mouse_based) != "boolean")
		mouse_based = false;

	if(typeof(prevent_opening) != "boolean")
		prevent_opening = true;
	
	if( typeof(curr_obj) == "string" ){
		curr_obj = document.getElementById(curr_obj);
	}
	
	for(i = 0; i < callouts.length; i++){
		if(curr_obj == callouts[i][0]){
			return;
		}
	}
	
	var callout_control = document.createElement("DIV");
	callout_control.className = "call_out";
	
	var corner = document.createElement("IMG");
	corner.src = "/images/design/callout_coin_droite.png";
	
	var callout_container = document.createElement("DIV");
	callout_container.className = "call_out_container";

	if( typeof(width) != "undefined")
		callout_container.style.width = parseInt(width) + "px";
		
	if( typeof(height) != "undefined")
		callout_container.style.height = parseInt(height) + "px";
	
	if( typeof(html_content) == "string")
		callout_container.innerHTML = html_content;
	else{
		if( typeof(html_content) == "object"){
		
			callout_container.innerHTML = html_content.innerHTML;
		}
	}

	callout_control.appendChild(corner);
	callout_control.appendChild(callout_container);

	if( typeof(curr_obj) != "undefined" ){
		var pos = findPos(curr_obj);

		callout_control.style.position = "absolute";

		if(mouse_based){
		
				if(window.event){

					var callout_x = event.clientX + document.documentElement.scrollLeft + offset_x + "px";
					var callout_y = (event.clientY - (height) - 50) + document.documentElement.scrollTop + offset_y + "px";

				}else{

					if(typeof(evObj) != "undefined"){

						var callout_x = evObj.pageX + offset_x + "px";
						var callout_y = evObj.pageY - (height) - 50 + offset_y + "px";
					}
				}

		}else{

			var callout_x = (parseInt(pos[0]) + offset_x ) + "px";
			var callout_y = (parseInt(pos[1]) + offset_y - (height) - 50 ) + "px";
		}

		callout_control.style.left = callout_x;
		callout_control.style.top = callout_y;
	}
	
	
	document.body.appendChild(callout_control);
	callouts[callouts.length] = new Array(curr_obj, callout_control);

	if(typeof(timer) != "undefined"){
		if(timer > 0)
			window.setTimeout( add_close_callout(curr_obj, prevent_opening) , timer * 1000);
	}
}

function add_close_callout(curr_obj, prevent_opening){

	return function(){ close_callout(curr_obj, prevent_opening); };
}

function add_remove_callout( index ){

	return function(){ remove_callout( index ); };
}


function remove_callout(index){
	callouts.splice(index,1);
}

function close_callout(curr_obj, prevent_opening){
	var i;

	for(i = 0; i < callouts.length; i++){
		if(curr_obj == callouts[i][0]){
			var tmp = callouts[i][1];
			clear_object_content(tmp);
			tmp.parentNode.removeChild(tmp);
			
			if(prevent_opening){
				//WONT APPEAR FOR 30 SECONDS
				window.setTimeout( add_remove_callout( i ) , 30000);
			}else{
				remove_callout(i)
			}
			
			break;
		}
	}
}

function close_this_callout(curr_obj){
	var curr_obj_pointer = curr_obj;
	var max_iteration = 15;
	var iteration = 0;

	while(typeof(curr_obj_pointer.parentNode) == "object"){
		
		if(curr_obj_pointer.className == "call_out"){
		
			for(i = 0; i < callouts.length; i++){
				if(curr_obj_pointer == callouts[i][1]){
					var tmp = callouts[i][1];
					clear_object_content(tmp);
					tmp.parentNode.removeChild(tmp);
					remove_callout(i);
					i = callouts.length + 1;
					iteration = max_iteration + 1;
				}
			}
		
			
		}else
			curr_obj_pointer = curr_obj_pointer.parentNode;
		
		if(iteration < max_iteration)
			iteration++;
		else
			break;
	}
}//------------------------------------- CUSTOM_MENU
//-------------------------------------------------


var nbMenu = 6;
var menu_height = 31;
var v_duration = 400;
var backgroundColors = new Array("#FFFFFF", "#4CA9BB");
var backgroundOpacity = new Array(0.30, 0.80);
var slider_is_open = false;

var slider_timer;
var drop_menu_timer;
var menu_timer;

var time_drop_menu = 200;
var time_bg =  1000;

function open_menu_slider(){
	if(!slider_is_open){
		myFXbg = new Fx.Style('menu_slider', 'background-color', {duration: v_duration, wait:false });
		myFXbg.start(backgroundColors[0], backgroundColors[1]);
		myFXbg = new Fx.Style('menu_slider', 'opacity', {duration: v_duration, wait:false });
		myFXbg.start(backgroundOpacity[0], backgroundOpacity[1]);
		slider_is_open = true;
	}
}

function close_menu_slider(){
	if(slider_is_open){
		myFXbg = new Fx.Style('menu_slider', 'background-color', {duration: v_duration });
		myFXbg.start(backgroundColors[1], backgroundColors[0]);
		myFXbg = new Fx.Style('menu_slider', 'opacity', {duration: v_duration });
		myFXbg.start(backgroundOpacity[1], backgroundOpacity[0]);
		slider_is_open = false;
	}
}

function menu_init(){
	var i, myMenuItem, myContentItem, myDropMenuItem;
	
	for(i = 0; i < nbMenu; i++){
	
		myMenuItem = $('menu_item_' + (i+1) );
		myContentItem = $('menu_content_' + (i+1) );
		
		
		myDropMenuItem = $('drop_menu_item_' + (i+1) );
		var pos = findPos(myMenuItem);
		
		
		
		if( myDropMenuItem != null){
		
			myDropMenuItem = myDropMenuItem.cloneNode( true );
			document.body.appendChild(myDropMenuItem);
			
			myDropMenuItem.addEvent('mouseenter', add_mouseenter_dm(myDropMenuItem));
			myDropMenuItem.addEvent('mouseleave', add_mouseleave_dm(myMenuItem, myContentItem, myDropMenuItem));
		
		}
		
		myMenuItem.addEvent('mouseleave', add_mouseleave(myMenuItem, myContentItem, myDropMenuItem, pos));
		myMenuItem.addEvent('mouseenter', add_mouseenter(myMenuItem, myContentItem, myDropMenuItem, pos));
		

		
	}
}

function add_mouseenter(menuItem, contentItem, dropMenuItem, menuPos){
	return function(){
	
			if(typeof(slider_timer) != "undefined" && slider_timer != null && slider_timer != "null")
				window.clearTimeout(slider_timer);

			var myFX = new Fx.Style(contentItem, 'opacity', {duration: v_duration, wait:false });
			myFX.start(0,1);

			if(typeof(dropMenuItem) == "object" && dropMenuItem != null && dropMenuItem != "null"){

				dropMenuItem.style.position = "absolute";
				dropMenuItem.style.zIndex = 90;
				dropMenuItem.style.left = (menuPos[0] - 2) + "px";
				dropMenuItem.style.top = (menuPos[1] + menu_height + 7  ) + "px";
				
				var myFX = new Fx.Style(dropMenuItem, 'opacity', {duration: v_duration, wait:false });
				myFX.set(0);
				dropMenuItem.style.display = "block";
				myFX.start(0,1);
			}
			
				
			if(!slider_is_open)
				open_menu_slider();
		};
}

function add_mouseleave(menuItem, contentItem, dropMenuItem, menuPos){
	return function(){

			if(typeof(dropMenuItem) == "object" && dropMenuItem != null && dropMenuItem != "null"){
				drop_menu_timer = window.setTimeout(function(){close_drop_menu(dropMenuItem)}, time_drop_menu);
				
				menu_timer = window.setTimeout(function(){
					var myFX = new Fx.Style(contentItem, 'opacity', {duration: v_duration, wait:false });
					myFX.start(1,0);
				}, time_drop_menu);
			}else{
				var myFX = new Fx.Style(contentItem, 'opacity', {duration: v_duration, wait:false });
				myFX.start(1,0);
				
			}
			
			slider_timer = window.setTimeout("close_menu_slider()", time_bg);
			
		};
}

function add_mouseenter_dm(dropMenuItem){
	return function(){
		window.clearTimeout(slider_timer);	
		window.clearTimeout(drop_menu_timer);
		window.clearTimeout(menu_timer);
	};
}

function add_mouseleave_dm(menuItem, contentItem, dropMenuItem){
	return function(){
	
		var myFX = new Fx.Style(contentItem, 'opacity', {duration: v_duration, wait:false });
		myFX.start(1,0);
		
		close_drop_menu(dropMenuItem);
		slider_timer = window.setTimeout("close_menu_slider()", time_bg);
		
	};
}

function close_drop_menu(dropMenuItem){
	var myFX = new Fx.Style(dropMenuItem, 'opacity', {duration: v_duration, wait:false });
	myFX.start(1,0);
}

//JAVASCRIPT DOCUMENT: callout.js.php

function in_array(needle, haystack ){

	var i = 0;
	
	for(i = 0; i < haystack.length; i++){
	
		if( haystack[i] == needle ){
		
			return true;
		}
	}

	return false;
}

function check_keystroke(obj, event_object, startup){
	
	if( typeof(text_color_matrix) == "undefined" )
		var color = new Array("#00FF00", "#CCFF99",  "#FFCC33","#FFFF66", "#FF0000");
	else
		var color = text_color_matrix;
	
	if(!startup){
	
		if(!event_object)
			event_object = event;
	
		var keyCode = event_object.keyCode;
		var shiftKey = event_object.shiftKey;
		
		var limiter_control_name = obj.getAttribute("limiter_control");
		var control_limit = parseInt( obj.getAttribute("limit") );
		
		var limiter_control = document.getElementById( limiter_control_name );
		var control_content = obj.value.toString();
		var char_count = control_content.length;
		
		if( in_array(keyCode, unicode_add_chars) )
			char_count++;
	
		if( in_array(keyCode, unicode_rem_chars) ){
			char_count--;
			window.setTimeout(function(){check_keystroke(obj, event_object);}, 300);
		}
		
		var resulting_chars = control_limit - char_count;
		
		var perc = Math.round(100 * char_count / control_limit);
		var color_level = color[ Math.round( ( (perc / 100) * color.length) - 1 ) ];
		
		
		if(char_count <= control_limit ){
			limiter_control.style.backgroundColor = color_level;																				
			limiter_control.style.width = perc + "%";
			return true;
			
		}else{
		
			if( in_array(keyCode, unicode_rem_chars) ){
				limiter_control.style.backgroundColor = color_level;																				
				limiter_control.style.width = perc + "%";
				return true;
				
			}else{
			
				if( in_array(keyCode, unicode_add_chars) ){
	
					obj.value = control_content.substr( 0, control_limit);
					return false;
				}else{
					
					return true;
				}
				
			}
		}
		
	}else{
		//STARTUP INIT
		var limiter_control_name = obj.getAttribute("limiter_control");
		var control_limit = parseInt( obj.getAttribute("limit") );
		
		var limiter_control = document.getElementById( limiter_control_name );
		var control_content = obj.value.toString();
		var char_count = control_content.length;
		var resulting_chars = control_limit - char_count;
		
		var perc = Math.round(100 * char_count / control_limit);
		var color_level = color[ Math.round( ( (perc / 100) * color.length) - 1 ) ];

		limiter_control.style.backgroundColor = color_level;																				
		limiter_control.style.width = perc + "%";
	
	}	
}

function wordwrap(text, length, separator){
	var actual_length = text.length;
	var output = new Array();
	
	if(actual_length > length){
		var pointer = 0;
		while(pointer < actual_length){
			output[output.length] = text.substr(pointer,length)
			pointer = pointer + length;
		}
		
		return output.join(separator);
	}else
		return text;
}

function spell_check(text){
	
	text = text.replace( /\</g , "&lt;" );
	text = text.replace( /\>/g , "&gt;" );
		
	return text;
}

function spell_uncheck(text){
	
	text = text.replace( /&lt;/g , "<" );
	text = text.replace( /&gt;/g , ">" );
		
	return text;
}


function encode_macro( text){

	//BOLD
	text = text.replace( /\<(b|B)\>/g , "[b]" );
	text = text.replace( /\<\/(b|B)\>/g , "[/b]" );

	//ITALIC
	text = text.replace( /\<(i|I)\>/g , "[i]" );
	text = text.replace( /\<\/(i|I)\>/g , "[/i]" );

	//UNDELINE
	text = text.replace( /\<(u|U)\>/g , "[u]" );
	text = text.replace( /\<\/(u|U)\>/g , "[/u]" );

	return text;
}

function decode_macro( text ){

	//BOLD
	text = text.replace( /\[(b|B)\]/g , "<b>" );
	text = text.replace( /\[\/(b|B)\]/g , "</b>" );

	//ITALIC
	text = text.replace( /\[(i|I)\]/g , "<i>" );
	text = text.replace( /\[\/(i|I)\]/g , "</i>" );

	//UNDELINE
	text = text.replace( /\[(u|U)\]/g , "<u>" );
	text = text.replace( /\[\/(u|U)\]/g , "</u>" );

	return text;
}
//JAVASCRIPT DOCUMENT: control.js.php
function search_input_out(obj, text, color){
			
	if(obj.value == ""){
		obj.style.color = color;
		obj.value = text;
	}

}

function search_input_in(obj, text, color){

	if(obj.value == text){
		obj.style.color = color;
		obj.value = "";
	}
}

function search_form_submit(form_name, search_object_name, text){
	var form_object = document.getElementById(form_name);
	
	var search_object = document.getElementById(search_object_name);
	if( search_object.value == text){
		search_object.value = "";
	}
	
	form_object.submit();

}

function search_input_kp(evObj, obj, form_name, search_object_name, text  ){

	if(evObj)
		var keyCode = evObj.keyCode;
	else
		var keyCode = event.keyCode;

	if(keyCode == 13){
		search_form_submit(form_name, search_object_name, text);
	}
}

function list_over(control){
	control.className = "line_over";
}

function list_out(control){
	control.className = "";
}

var last_page = 1;
function show_page(id_page){

	if(id_page != last_page){

		var oldcontrol = document.getElementById("page_" + last_page);
		oldcontrol.style.display = "none";

		var tab = document.getElementById("tab_page_" + last_page);
		tab.className = "";

		
		var control = document.getElementById("page_" + id_page);
		control.style.display = "block";

		var tab = document.getElementById("tab_page_" + id_page);
		tab.className = "tab_selected";
		

		last_page = id_page;
	}
}

function form_captcha(currObj, captcha_control_name){

	var myForm = recursive_form_find( currObj );
	var input = myForm[captcha_control_name];
	
	if(typeof(input) != "undefined" && typeof(hex_sha1) == "function"){
		var user_token = input.value;
		user_token = user_token.toUpperCase();
		
		var token = hex_sha1(user_token);
		
		var token_check = input.getAttribute("token");
		if( token == token_check)
			return true;
		
	}else
		alert("Error, no control or SHA1 JS function");
	
	return false;
}
//JAVASCRIPT DOCUMENT: auth.js.php
var auth_in_progress = "";
function check_auth(form_id){
	auth_in_progress = form_id;
	
	var my_form = document.getElementById(form_id);
	var myAjax = new Ajax("http://www.candock.com/data_provider/module_softwares.php?tZ=1280540320&dp=module_loader&module=security&a=user_auth", 'POST');
	
	myAjax.onComplete = receive_auth;
	var username = my_form.elements.namedItem('lusername').value;
	var userpass = my_form.elements.namedItem('luserpass').value;
	
	userpass = hex_sha1(userpass);
	var qs = "&username=" + username + "&userpass=" + userpass;
	myAjax.send(qs);

}


function receive_auth(responseText, responseXML){

	var my_form = document.getElementById(auth_in_progress);
	auth_in_progress = "";
	
	var global = responseXML.getElementsByTagName("GLOBAL")[0];
	
	var status = global.getElementsByTagName("status")[0].childNodes[0].nodeValue;
	
	var description = global.getElementsByTagName("description")[0].childNodes[0].nodeValue;
	
	if(status == "OK"){
		var cookie_send = global.getElementsByTagName("cookie")[0].childNodes[0].nodeValue;
		
		document.cookie = cookie_send;
		document.location = "/main.php";
	}else{
		send_auth_error();
	}

}

var is_showing_auth_error = false;
function send_auth_error(){
	if(!is_showing_auth_error){
		//var obj = my_form.elements.namedItem('lusername')
		//show_callout( "Erreur d'autentification", obj, 0, 250, 200, 200, 3, false, null, false);
	
		var div = document.createElement("div");
		var divh = "<form>";
		//HTML OF THE WARNING
		divh += "<h1>Erreur d'autentification</h1>";
		divh += "<p> Si vous avez perdu votre mot de passe cliquez sur le lien suivant: <br />";
		divh += "<a href='#' style='text-decoration:underline;'>Perdu votre mot de passe</a><br /><br />";
		divh += "Assurez vous de v&eacute;rifier votre &quot;Verrouiler Majuscule&quot;<br /><br />";
		divh += "<span onclick=\"JAVASCRIPT: close_this_sub_form(this); \" style='text-decoration:underline;'>Fermer</span>";
		divh += "</p></form>";
		
		div.style.width = "480px";
		div.style.height = "360px";
		div.style.backgroundColor = "#FFFFFF";
		div.innerHTML = divh;
		is_showing_auth_error = true;
		bring_center_form(document.body, div, auth_error_close);
	}
}

function auth_error_close(){
	is_showing_auth_error = false;
}


function key_type(event_object, obj){

	if(event_object)
		var keyCode = event_object.keyCode;
	else
		var keyCode = event.keyCode;

	if(keyCode == 13){
		check_auth(obj.form.id);
	}

}// JavaScript Document
/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
 * in FIPS PUB 180-1
 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}

/*
 * Perform a simple self-test to see if the VM is working
 */
function sha1_vm_test()
{
  return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
}

/*
 * Calculate the SHA-1 of an array of big-endian words, and a bit length
 */
function core_sha1(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << (24 - len % 32);
  x[((len + 64 >> 9) << 4) + 15] = len;

  var w = Array(80);
  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
    e = safe_add(e, olde);
  }
  return Array(a, b, c, d, e);

}

/*
 * Perform the appropriate triplet combination function for the current
 * iteration
 */
function sha1_ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

/*
 * Determine the appropriate additive constant for the current iteration
 */
function sha1_kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

/*
 * Calculate the HMAC-SHA1 of a key and some data
 */
function core_hmac_sha1(key, data)
{
  var bkey = str2binb(key);
  if(bkey.length > 16) bkey = core_sha1(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
  return core_sha1(opad.concat(hash), 512 + 160);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert an 8-bit or 16-bit string to an array of big-endian words
 * In 8-bit function, characters >255 have their hi-byte silently ignored.
 */
function str2binb(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
  return bin;
}

/*
 * Convert an array of big-endian words to a string
 */
function binb2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
  return str;
}

/*
 * Convert an array of big-endian words to a hex string.
 */
function binb2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of big-endian words to a base-64 string
 */
function binb2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * (3 -  i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

	
//END OF GLOBAL JAVASCRIPT FILE
