function vjx_write_div( aDivID , aText )
{
	if ( document.getElementById(aDivID) )
	{ document.getElementById(aDivID).innerHTML = aText; }
	else alert('Element '+aDivID+' non trouvé !');
}
////////////////////////////////////////////////////////////////////////////////

function vjx_get_xobject()
{
	if(window.XMLHttpRequest) // FIREFOX
    { return new XMLHttpRequest(); }
	else if(window.ActiveXObject) // IE
    { return new ActiveXObject("Microsoft.XMLHTTP"); }
    else return(false);
}
////////////////////////////////////////////////////////////////////////////////
function vjx_sendAPost($aUrl,$aDatas)
{
	// Récupère une HttpRequest
	var $vXObject=vjx_get_xobject();

	if ($vXObject)
	{

		// Faire la requete AJAX
		//-------------------------------
		// 1 - Appel de la fonction de retour
		// 2 - Open(mode, url, boolean)
		// -> mode: type de requête, GET ou POST
		// -> url: l'endroit ou trouver les données, un fichier avec son chemin sur le disque.
		// -> boolean: true (asynchrone) / false (synchrone).
		// 3 - Ne pas oublier ça pour la methode POST
		// 4 - Effectue la requête en envoyant les données : 

		//$vXObject.onreadystatechange = function() { onResult($vXObject); };
		$vXObject.open('POST', $aUrl, false);
		$vXObject.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		$vXObject.send($aDatas); // Format -> var1=truc&var2=bidule
     	if( $vXObject.readyState == 4) 
		{ return( $vXObject.responseText ); }
		else return(false);
	}
	return false;
}

////////////////////////////////////////////////////////////////////////////////	
function vjx_load_file( aFilename )
{
    vXObject=vjx_get_xobject();
	if (vXObject)
	{
     	vXObject.open("GET", aFilename, false);
     	vXObject.send(null);
     	if( vXObject.readyState == 4) 
		{ return( vXObject.responseText ); }
		else return(false);
	}
	else 
	{
		//alert ('Objet XMLHttpRequest non assigné!');
		return(false); 
	}
}

////////////////////////////////////////////////////////////////////////////////

function vjx_load_div(aDivID,aFilename,aShow)
{
 	var vDiv = document.getElementById(aDivID);
 	if (vDiv)
 	{
 		vjx_write_div(aDivID,'Chargement en cours...');
		var vText=vjx_load_file(aFilename);
		vjx_write_div(aDivID,vText);
		if (aShow)
		{ vjx_show_div(aDivID); }
 	}
}
////////////////////////////////////////////////////////////////////////////////

function vjx_show_div(aDivID)
{
	var vDiv = document.getElementById(aDivID);
	if (vDiv)
	{ vDiv.style.display = ''; }
}
////////////////////////////////////////////////////////////////////////////////

function vjx_hide_div(aDivID)
{
	var vDiv = document.getElementById(aDivID);
	if (vDiv)
	{ vDiv.style.display = 'none'; }
}
////////////////////////////////////////////////////////////////////////////////


function vjx_div_visible($aDivID,$aVisible)
{
	//alert ("vjx_div_visible($aDivID,$aVisible)");
	if ($aVisible)
	{ vjx_show_div($aDivID); }
	else
	{ vjx_hide_div($aDivID); }
}
////////////////////////////////////////////////////////////////////////////////

function vjx_div_is_visible(aDivID)
{
	var vDiv = document.getElementById(aDivID);
	if (vDiv)
	{
		return ( vDiv.style.display != 'none' );
	}
	else return (false);
}
////////////////////////////////////////////////////////////////////////////////

function vjx_copy_values( $aFromID , $aToID )
{
	//alert ("copier "+$aFromID+" vers "+$aToID);
	$vFrom = document.getElementById($aFromID);
	$vTo = document.getElementById($aToID)
	$vTo.value = $vFrom.value;	
}
////////////////////////////////////////////////////////////////////////////////

function vjx_set_value( $aID , $aValue )
{
	$vEl = document.getElementById($aID)
	$vEl.value = $aValue;	
}
////////////////////////////////////////////////////////////////////////////////

function vjx_isIE()
{
	return navigator.userAgent.indexOf('MSIE') != -1;
}

function vjx_forms_optionExist(aElmId,aVal)
{
	var vEl = $(aElmId);
	if (vEl)
	{
		for (var vI = 0; vI < vEl.length; vI++) 
		{
    		if (vEl.options[vI].value == aVal)	return true;
		}
    }
	return false;
}
////////////////////////////////////////////////////////////////////////////////

function vjx_addSelectedListValue_toList($aFromSelect,$aToSelect)
{
	var $vFromSel = document.getElementById($aFromSelect);
	var $vToSel = 	document.getElementById($aToSelect);
	if ($vFromSel && $vToSel)
	{
		var $vFromText = $vFromSel.options[$vFromSel.selectedIndex].text;
		var $vFromValue = $vFromSel.options[$vFromSel.selectedIndex].value;
		if (!vjx_forms_optionExist($aToSelect,$vFromValue))
		{						  
			var $vOption = new Option ($vFromText,$vFromValue,false,true);
			if (vjx_isIE())
			{ $vToSel.add($vOption); }
			else
			{ $vToSel.add($vOption,null); }
		}
	}
	else
	{
		alert('Liste source ou destination non définie...');
	}
}

function vjx_forms_addOption(aElmID,aText,aValue,aSelectedDef,aSelected)
{
	vEl = $(aElmID);
	if (vEl)
	{
		var vO = new Option (aText,aValue,aSelectedDef,aSelected);
		if (vjx_isIE())
		{ vEl.add(vO); }
		else
		{ vEl.add(vO,null); }
	}
}
////////////////////////////////////////////////////////////////////////////////

// OBSOLETE utiliser vjx_forms_addOption
function vjx_addNewOptionToSelect(aVal,aTxt,aElmID)
{
	vjx_forms_addOption(aElmID,aTxt,aVal,false, true);
}
////////////////////////////////////////////////////////////////////////////////

function vjx_delSelectedListValue($aSelect)
{
	var $vSelect = document.getElementById($aSelect);
	for (var $vI = $vSelect.length-1; $vI >=0 ; $vI--) 
	{
    	if ($vSelect.options[$vI].selected) 
		{
			$vSelect.remove($vI);
		}
    }
}
////////////////////////////////////////////////////////////////////////////////

function vjx_selectAll($aSelect)
{
	var $vSelect = document.getElementById($aSelect);
	if ($vSelect)
	{
		for (var $vI = $vSelect.length-1; $vI >=0 ; $vI--) 
		{
    		$vSelect.options[$vI].selected=true;
    	}
	}
	//else alert('Select non trouvé');
}
////////////////////////////////////////////////////////////////////////////////

/* vjx_checkBox_to_urlValues
 * 
 * Retourne une chaine au format val[]=value&val[]=value2 etc....
 * Cette chaine correspond aux valeurs contenue dans les checkBox de nom
 * $aCheckBoxName etant coché (checked)
 */
function vjx_checkBox_to_urlValues($aCheckBoxName)
{
	var $vResult=""; //par defaut
	var $vCBX = document.getElementsByName($aCheckBoxName);
	for (i=0; i<= $vCBX.length; i++) 
	{
		if ($vCBX[i] && $vCBX[i].checked)
		{			
			$vResult = $vResult+$aCheckBoxName+"[]="+$vCBX[i].value+"&";
		}
	}
	if ($vResult)
	{
		$vResult = $vResult.slice(0,-1);
	}
	return $vResult;
}
////////////////////////////////////////////////////////////////////////////////
function vjx_unserialize(txt)
{
	var level=0;
	var arrlen=new Array();
	var del=0;
	var vFinal = new Array();
	var key=new Array();
	var save=txt;
	
	while(1)
	{
		switch(txt.substr(0,1)){
		case 'N':
			del = 2;
			ret = null;
		break;
		case 'b':
			del = txt.indexOf(';')+1;
			ret = (txt.substring(2,del-1) == '1')?true:false;
		break;
		case 'i':
			del = txt.indexOf(';')+1;
			ret = Number(txt.substring(2,del-1));
		break;
		case 'd':
			del = txt.indexOf(';')+1;
			ret = Number(txt.substring(2,del-1));
		break;
		case 's':
			del = txt.substr(2,txt.substr(2).indexOf(':'));
			ret = txt.substr( 1+txt.indexOf('"'),del);
			del = txt.indexOf('"')+ 1 + ret.length + 2;
		break;
		case 'a':
			del = txt.indexOf(':{')+2;
			ret = new Array();
			arrlen[level+1] = Number(txt.substring(txt.indexOf(':')+1, del-2))*2;
		break;
		case 'O':
			txt = txt.substr(2);
			var tmp = txt.indexOf(':"')+2;
			var nlen = Number(txt.substring(0, txt.indexOf(':')));
			name = txt.substring(tmp, tmp+nlen );
			//alert(name);
			txt = txt.substring(tmp+nlen+2);
			del = txt.indexOf(':{')+2;
			ret = new Object();
			arrlen[level+1] = Number(txt.substring(0, del-2))*2;
		break;
		case '}':
			txt = txt.substr(1);
			if(arrlen[level] != 0){alert('var missed : '+save); return undefined;};
			//alert(arrlen[level]);
			level--;
		continue;
		default:
			if(level==0) return vFinal;
			alert('syntax invalid(1) : '+save+"\nat\n"+txt+"level is at "+level);
			return undefined;
		}
		if(arrlen[level]%2 == 0){
			if(typeof(ret) == 'object'){alert('array index object no accepted : '+save);return undefined;}
			if(ret == undefined){alert('syntax invalid(2) : '+save);return undefined;}
			key[level] = ret;
		} else {
			var ev = '';
			for(var i=1;i<=level;i++){
				if(typeof(key[i]) == 'number'){
					ev += '['+key[i]+']';
				}else{
					ev += '["'+key[i]+'"]';
				}
			}
			eval('vFinal'+ev+'= ret;');
		}
		arrlen[level]--;//alert(arrlen[level]-1);
		if(typeof(ret) == 'object') level++;
		txt = txt.substr(del);
		continue;
	}
}
function vjx_debug($aMixed)
{
	alert(vjx_anythingInString($aMixed));
}
function vjx_anythingInString(txt)
{
	switch(typeof(txt)){
	case 'string':
		return 'string('+txt.length+'): "'+txt+'"';
	case 'number':
		if(txt>=0 && String(txt).indexOf('.') == -1 && txt < 65536) return 'integer: '+txt;
		return 'decimal: '+txt;
	case 'boolean':
		return 'boolean: '+( (txt)?'1':'0' );
	case 'object':
		var i=0,k,ret='';
		for(k in txt){
			//alert(isNaN(k));
			if(!isNaN(k)) k = Number(k);
			ret += "\t"+vjx_anythingInString(k)+" = "+vjx_anythingInString(txt[k])+"\n";
			i++;
		}
		return 'array['+i+']:\n'+ret+'\n';
	default:
		return 'undefined\n';
	}
}

function vjx_mysqlDateToFrenchShortDateTime($aMDate)
{
	$vRE = /([0-9]+)-([0-9]+)-([0-9]+)\s([0-9]+):([0-9]+):([0-9]+)/;
 	return $aMDate.replace($vRE, "$3/$2/$1 $4h$5");
}

function vjx_referize_input($aInputID)
{
	var $vInput = document.getElementById($aInputID);
	if ($vInput)
	{
		var $vValue = $vInput.value.toUpperCase();
		var $vRE = /[^A-Z0-9]/g;
		$vValue = $vValue.replace($vRE,"-");
		var $vRE = /-+/g;
		$vValue = $vValue.replace($vRE,"-");
		$vInput.value = $vValue;
	}
}
////////////////////////////////////////////////////////////////////////////////

/**
 * vjx_array_filter: supprime les lignes vide de $aArray
 */
function vjx_array_filter($aArray)
{
	var $vArr = $aArray;
	for (var $vI=$vArr.length-1; $vI>=0; $vI--)
	{
		if ($vArr[$vI]=="")
		{
			$vArr.splice($vI,1);
		}
	}
	return $vArr;
}
////////////////////////////////////////////////////////////////////////////////

