/**
 * Ce fichier defini le moteur AjaX pour le FrontEnd de TeamZone,
 * ainsi que les FX mootools.
 *
 * PHP version 5.x and next...
 *
 * TEAMzone C.M.S framework :  <http://teamzforge.org>
 *
 * Licensed under GNU General Public License version 2,
 * redistributions of files must retain the above copyright notice.
 *
 * @copyright Copyright (c)	1999-2007 www.k-concept.com
 * @link http://www.teamzforge.org/
 * @version $LastChangedRevision: 1172 $
 * @author $LastChangedBy: jb $
 * @since $LastChangedDate: 2008-01-16 14:59:49 +0100 (mer, 16 jan 2008) $
 * @license http://www.opensource.org/licenses/gpl-license.php
 *
 */

function CreaReqObj(){
	if(window.XMLHttpRequest){ // Firefox
	   object = new XMLHttpRequest();
	   return object;
	}else if(window.ActiveXObject){ // Internet Explorer
	   object = new ActiveXObject("Microsoft.XMLHTTP");
	   return object;
	}else{ // XMLHttpRequest non supportee par le navigateur
	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
	   return false;
	}
}


 function req_html(src_url, id){ // Paramettres optionnels : method, form

 	if(req_html.arguments[2]) method = req_html.arguments[2]; else method = 'GET';
	if(req_html.arguments[3]) formName = req_html.arguments[3]; else formName = false;

	// fonction appelle si besoin lors d'un appel ajax
	if(req_html.arguments[4]) fncToCall = req_html.arguments[4]; else fncToCall = false;

 	data = '';

	if(method == 'POST' && formName){

    // le cas des fieldset ? a regler ...
    if (formName == 'tz_obj_form') {
      if (document.forms[formName][0].name) {
      	if(!document.forms[formName][0].value) document.forms[formName][0].value = 'FS';
        data += 'tz_fieldset=FS&';
      } else {
        document.forms[formName][0].name = 'tz_fieldset';
        document.forms[formName][0].value = 'FS';
      }
    }

		for(i = 0; i < document.forms[formName].length; i++) {

			if(i != 0) data += '&';
			switch(document.forms[formName][i].type){
				case 'checkbox':
					if(document.forms[formName][i].checked == true){
						data += document.forms[formName][i].name + '=' + document.forms[formName][i].value.replace(/&/gi, "@$@");
					}else{
						data += document.forms[formName][i].name + '=';
					}
					break;
				case 'radio':
					if(document.forms[formName][i].checked == true){
						data += document.forms[formName][i].name + '=' + document.forms[formName][i].value.replace(/&/gi, "@$@");
					}
					break;
				case 'select-multiple' :
                			for(j=0; j<document.forms[formName][i].options.length; j++) {
                    				if(document.forms[formName][i].options[j].selected == true) {
							if(j != 0) data += '&';
							data += document.forms[formName][i].name + '['+j+']=' + document.forms[formName][i].options[j].value.replace(/&/gi, "@$@");
							//alert(data);
						}
					}
                			break;
				default :
					data += document.forms[formName][i].name + '=' + document.forms[formName][i].value.replace(/&/gi, "@$@");
					//alert(data);
			}
		}
	}else{
		var data = null;
	}

	src_url = src_url.replace(/&amp;/gi, "&");

    // on appelle la fonction de debut d'appel AjaX
    ajaxRequestStarted();

	conn = CreaReqObj();
	conn.open(method, src_url, true);
	conn.onreadystatechange = function (){

		if(conn.readyState == 4){
			response = conn.responseText;
			if(response.substring(0,1) == " ") response = response.substring(1, response.length);

			// traitement des -tzjs-XXXX-tzjs-
			jsact = response.match(/-tzjs-(.*\n)*-tzjs-/gi);
//alert(jsact);
//alert(response);
			response = response.replace(/-tzjs-(.*\n)*-tzjs-/gi, '');

//			jsact = response.match(/-tzjs-(.*)-tzjs-/gi);
//			if(jsact != null  && jsact[0] != null){
//				jsact[0] = jsact[0].replace(/-tzjs-(.*)-tzjs-/gi, "$1");
//				jsact[0] = jsact[0].replace(/&amp;/gi, "&");
//				eval(jsact[0]);
//			}
//			response = response.replace(/-tzjs-(.*)-tzjs-/gi, '');
//alert('#'+response+'#');
			if(response.match(/^ *\n+$/gi)) response = response.replace(/^ *\n+$/gi, '');

			if(response != '') document.getElementById(id).innerHTML = response;

			if(jsact != null  && jsact[0] != null){
				jsact[0] = jsact[0].replace(/-tzjs-/gi, "");
				jsact[0] = jsact[0].replace(/&amp;/gi, "&");
//alert(jsact[0]);
				if(jsact[0] != '') eval(jsact[0]);
			}
		    // on appelle la fonction de fin d'appel AjaX
		    ajaxRequestFinished();

		    // si fonction a  appeller
		    if (fncToCall) fncToCall ();

		}
	}
	if(method == 'POST') conn.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//	if(method == 'POST') conn.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-15;  ");
	conn.send(data);
}


 function check_ireq(){
	if(document.form_ireq && document.form_ireq.ireq_id.value != ''){
		var ireq_id = document.form_ireq.ireq_id.value;
		document.form_ireq.ireq_id.value = '';
		var response = window.frames['UploadTarget1'].document.body.innerHTML;
//alert(response);
		window.frames['UploadTarget1'].document.body.innerHTML = '';
		// pour IE qui rajoute un saut de ligne
		if(document.all){
			jsact = response.match(/-tzjs-(.*)-tzjs-/gi);
			response = response.replace(/-tzjs-(.*)-tzjs-/gi, '');
			response = response.replace(/<script(.*)<\/script>/gi, '');
			tt = response.match(/^(\r|\l|\n)/i);
		}else{
			jsact = response.match(/-tzjs-(.*\n)*-tzjs-/gi);
			response = response.replace(/-tzjs-(.*\n)*-tzjs-/gi, '');
			response = response.replace(/<script(.*)<\/script>/gi, '');
			tt = null;
		}
//alert(jsact);
		if(response != '' && tt == null) document.getElementById(ireq_id).innerHTML = response;

		if(jsact != null && jsact[0] != null){
			//jsact[0] = jsact[0].replace(/-tzjs-(.*\n)-tzjs-/gi, "$1");
			jsact[0] = jsact[0].replace(/-tzjs-/gi, "");
			jsact[0] = jsact[0].replace(/&amp;/gi, "&");
			if(jsact[0] != '') eval(jsact[0]);
		}
 	}
 }

 /*
  * Affiche un div d'erreur (msg_errors)
  *
  * @param text string
  * @param field_focus string optionnel id de l'élément sur lequel faire le focus()
  * @param js_onclick string optionnel code js à ajouter sur le onclick du btn
  */

 function errors(text){
	if(errors.arguments[1] && errors.arguments[1] != '') var field_focus = errors.arguments[1]; else var field_focus = false;
	if(errors.arguments[2] && errors.arguments[2] != '') var js_onclick = errors.arguments[2]; else var js_onclick = false;
	if(!document.getElementById('msg_errors')){
		var div = document.createElement('div');
		div.setAttribute("id", "msg_errors");
		document.body.appendChild(div);
	}

	x = document.getElementById('msg_errors');

	// Positionnement Y du div
	if(document.all){
		pos = posY;
	}else{
		pos = posY - 200;
	}
	if(pos > 0) x.style.top = pos+'px'; else x.style.top = '150px';

	jsonclick = "document.getElementById('msg_errors').style.display = 'none';";

	// Changement de getById par getByName (evite de devoir rajouter des id de champ pour chaque input)
	//if(field_focus) onclick += "document.getElementById('"+field_focus+"').focus();";
	if(field_focus) jsonclick += "document.getElementsByName('"+field_focus+"')[0].focus();";
	if(js_onclick) jsonclick += js_onclick;

	etext = "<table width=\"100%\" border=\"0\" cellpadding=\"2\" cellspacing=\"0\" ><tr><td>"+text+"</td></tr>";
	etext += "<tr><td align=\"center\"><input type=\"button\" name=\"ok\" id=\"ok\" value=\"ok\" class=\"box_btn\" onclick=\"javascript:" + jsonclick + "\"  /></td></tr></table>";

	x.innerHTML = etext;
	x.style.display = 'block';
	document.getElementById('ok').focus();
}

function getPosY(e){
	if(document.all){
		posY = event.y+document.body.scrollTop;;
	}else if(document.getElementById) {
		posY = e.pageY;
	}
}

/*
 * Affiche un div de confirmation (msg_errors)
 *
 * @param text string
 * @param js_true string code js placé sur le onclick du btn ou
 * @param js_false string optionnel code js placé sur le onclick du btn non, par defaut cache le div
 * @param txt_btn_true string optionnel texte du btn oui, par defaut "oui"
 * @param txt_btn_false string optionnel texte du btn non, par defaut "non"
 */
function tz_confirm(text, js_true){
	js_true = js_true + ";document.getElementById('msg_errors').style.display = 'none';";
	if(tz_confirm.arguments[2]) js_false = tz_confirm.arguments[2]+";document.getElementById('msg_errors').style.display = 'none';"; else js_false = "document.getElementById('msg_errors').style.display = 'none';";
 	if(tz_confirm.arguments[3]) txt_btn_true = tz_confirm.arguments[3]; else txt_btn_true = "oui";
 	if(tz_confirm.arguments[4]) txt_btn_false = tz_confirm.arguments[4]; else txt_btn_false = "non";
 	x = document.getElementById('msg_errors');

	// Positionnement Y du div
	getPosY;
	x.style.top = posY+'px';

	htm = '<table border="0" cellpadding="4" cellspacing="1">';
	htm += '<tr><td class="cel_description">'+text+'</td></tr>';

	htm += '<tr><td class="cel_submit" align="center">';
	htm += '<input type="button" class="box_btn" value="'+txt_btn_true+'" onclick="'+js_true+'" />&nbsp;&nbsp;';
 	htm += '<input type="button" class="box_btn" value="'+txt_btn_false+'" onclick="'+js_false+'" />&nbsp;&nbsp;';
 	htm += '<br /></td></tr></table>';

 	x.innerHTML = htm;


	x.style.display = 'block';
// 	x.onclick = function(){
//		this.style.display = 'none';
//	}
}



/**
* Fonction lance lors d'un debut d'appel AjaX
*/
function ajaxRequestStarted(){
    document.body.style.cursor = 'wait';
    window.status = 'Sending ajaX Request...';

    // TODO: start here a visual msg ...
}

/**
* Fonction lance lors d'une fin d'appel AjaX
*/
function ajaxRequestFinished(){

	document.body.style.cursor = 'default';
	window.status = 'Done';

    // TODO: end here a visual msg ...
}

// Fait apparaitre le div avec comme contenu le retour de l'url (ajax)
// div_id : l'id de l'élément du Dom visé
// src_url : l'url appelée
// Param Optionnel :
// 	noCloseOnClick (fermeture de l'element sur le onclick par defaut false)
// 	vCenter (centre verticalement le div dans la fenetre par defaut true)
function showDiv(div_id,src_url){
	if(showDiv.arguments[2]) noCloseOnClick = showDiv.arguments[2]; else noCloseOnClick = false;
	if(showDiv.arguments[3]) vCenter = showDiv.arguments[3]; else vCenter = true
	var x=document.getElementById(div_id);
	if(x){
		req_html(src_url, div_id);
		if(vCenter){
			//if(document.documentElement.scrollTop != 0) x.style.top = (document.documentElement.scrollTop + 400) + 'px';
			getPosY;
			if(posY <= 0) posY = 50;
			x.style.top = (posY - 20)+'px';
		}
		x.style.display = 'block';
	}

	if(x && !noCloseOnClick){
		x.onclick= function() {
			this.style.display = 'none';
		};
	}else{
		x.style.cursor = 'default';
	}
}


/*
* Cache un div
*/
function closeDiv(id){
	if(document.getElementById(id)){
		document.getElementById(id).style.display = 'none';
		document.getElementById(id).innerHTML = '';
	}
}


 var posY=0;
 document.onmousemove=getPosY;
