// Procédures globales du projet
var _FT_=null;
var _NT_="";
function _TRD()
{
	var b=false;
	if(_FT_!=null)if(_FT_.closed)_NT_="";
	if(_NT_=="")
	{
		b=true;
		_NT_="_TW_";
		if(window.name==_NT_)_NT_+="_";
		_FT_=window.open("",_NT_,"alwaysRaised=1,dependent=1,scrollbars=1,resizable=1,screenX=0,screenY=0,width=388,height=1");
		_FT_.document.writeln("<HTML><HEAD><TITLE>"+STD_TITRE_TRACE+"</TITLE></HEAD><BODY bgcolor='#FFFF00'>");
		if(b)_FT_.document.writeln(""+STD_INFO_TRACE+"<BR><HR>");
		_FT_.document.writeln("<font face='Courier New,Courier,mono' size='-1'>")
	}
}
function _TRC(p)
{
	_TRD();
	_FT_.document.write(p);
	_FT_.document.writeln("<BR>");
	_FT_.scroll(_FT_.innerWidth, _FT_.innerHeight);
}
function _TRF()
{
	if(_FT_)
	{
		_FT_.close();
		_FT_=null;
		_NT_="";
	}
}
function PGNUTIL_PGNTRACE(VPTRACE )
{
	{
	_TRC(VPTRACE);
}
}
function PGNUTIL_PGNCOMBOSAISIESIMPLE(VPFICHIER, VPRUBAFFICHE, VPIDINPUT, VPCHAMPID, VPLARGEURCOMBO, VPCHOISIRPREMIER, VPMINCARACTERES )
{
	{
	if (VPCHAMPID==undefined) VPCHAMPID="";
	if (VPLARGEURCOMBO==undefined) VPLARGEURCOMBO=0;
	if (VPCHOISIRPREMIER==undefined) VPCHOISIRPREMIER=false;
	if (VPMINCARACTERES==undefined) VPMINCARACTERES=1;
	{
		clWDAJAXMain.AJAXExecuteAsynchrone("PGA_INIT_COMBO_SAISIE_SIMPLE","PGNJS_INIT_COMBO_SAISIE_SIMPLE", "",VPFICHIER,VPRUBAFFICHE,VPIDINPUT,VPCHAMPID,VPLARGEURCOMBO,VPCHOISIRPREMIER,VPMINCARACTERES);
	}
}
}
function PGN_FALSE() { return false; }
function PGN_TRUE() { return true; }
function PGNJS_LISTE_AJOUTE(pListeCombo, pValeurAAjouter , pValue)
{ 	// Liste Ajoute en JS 
	// pListeCombo et l'objet JS SELECT 
	var xOption = document.createElement("option");
	
	xOption.text = pValeurAAjouter ;
	xOption.value = (typeof(pValue)!="undefined")?pValue:pValeurAAjouter;
	
	try
	{
		pListeCombo.add(xOption,null); // standards compliant
		}
	catch(ex)
	{
		pListeCombo.add(xOption); // IE only
		}
	
	return pListeCombo.options.length-1;
	
	//	 Ancienne version
	//	if(!document.all){
		//		//alert(" !  document.all  " + pValeurAAjouter);
		//		pListeCombo.add(xOption,pListeCombo.options[pListeCombo.options.length]);
		//	}else{
		//		//alert("document.all " + pValeurAAjouter);
		//		pListeCombo.add(xOption);
		//	}
}


function PGN_EN_MODE_SSL()
{
	if (window.location.href.substr(0,5) == "https") {
		return true;
	}else{
		return false;
	}
}

function PGNJS_COMBO_SAISIE_VILLES(pIdInputVille , pIdInputCodePostal , pNombreEnregMax) {
	
	var xChampCp = $("#"+pIdInputCodePostal);
	var xChampVille = $("#"+pIdInputVille);
	
	if (!pNombreEnregMax) {pNombreEnregMax = 10} 
	
	
	xChampCp.autocomplete({
		minLength: 0,
		source: function ( request, response ){ 
			response( filterCPVille(gTableauCommunes, request.term , xChampVille.val() , pNombreEnregMax ) );
			},
		select: function( event, ui ) {
			xChampCp.val( ui.item.c );
			xChampVille.val( ui.item.v );
			xChampCp.change();
			xChampVille.change();
			return false;
			}
		}).data( "autocomplete" )._renderItem = function( ul, item ) {
		return $( "<li></li>" )
		.data( "item.autocomplete", item )
		.append( "<a>" + item.c + " - " + item.v + "</a>" )
		.appendTo( ul );
		};	
	
	xChampVille.autocomplete({
		minLength: 0,
		source: function ( request, response ){ 
			response(filterCPVille(gTableauCommunes, xChampCp.val() , request.term , pNombreEnregMax ) );
			},
		select: function( event, ui ) {
			xChampCp.val( ui.item.c );
			xChampVille.val( ui.item.v );
			xChampCp.change();
			xChampVille.change();
			return false;
			}
		}).data( "autocomplete" )._renderItem = function( ul, item ) {
		return $( "<li></li>" )
		.data( "item.autocomplete", item )
		.append( "<a>" + item.c + " - " + item.v + "</a>" )
		.appendTo( ul );
		};
}


function filterCPVille(array, cp, ville, pNombreEnregMax) {
	var matcherCp = new RegExp( "^"+$.ui.autocomplete.escapeRegex(cp), "i" );		
	var matcherVille = new RegExp( $.ui.autocomplete.escapeRegex(ville), "i" );		
	return $.grep( array, function(value,index) {		
		return matcherCp.test( value.c ) && matcherVille.test( value.v );
		}).slice(0,pNombreEnregMax);
}

//function PGNJS_COMBO_SAISIE_VILLES(pIdInputVille,pIdInputCodePostal,pLargeurInputVille,pLargeurInputCodePostal) {
//	
//	var xInputVille = $("#"+pIdInputVille).get(0);
//	var xInputCodePostal = $("#"+pIdInputCodePostal).get(0);
//	
//	$(xInputVille).autocomplete(gTableauCommunes,{
//		selectFirst: false,
//		max: 25,
//		width: pLargeurInputVille?pLargeurInputVille:"183px",
//		matchContains: true,
//		autoFill: false,
//		formatItem: function(row) {
//			return row.c + " - " + row.v;
//		},
//		formatResult: function(row) {
//			return row.v;
//		}
//	}).result(function(event,data) {
//		if (data) xInputCodePostal.value = data.c;
//	});
//	
//	$(xInputCodePostal).autocomplete(gTableauCommunes,{
//		
//		max: 25,
//		width: pLargeurInputCodePostal?pLargeurInputCodePostal:"238px",
//		
//		autoFill: false,
//		formatItem: function(row) {
//			return row.c + " - " + row.v;
//		},
//		formatResult: function(row) {
//			return row.c;
//		}
//	}).result(function(event,data) {
//		if (data) xInputVille.value = data.v;
//	});
//	
//}
function PGNJS_INIT_COMBO_SAISIE_SIMPLE(pRetour)
{
	
	var xTableauValeurs = new Array();
	var xTableauRetour = pRetour.split("|");
	var xTableauContenu = xTableauRetour[0].split("$");
	var xTableauParam = xTableauRetour[1].split(";");
	var xDetailContenu;
	var xId;
	var xLib;
	var xObjInput;
	var xObjChampId;
	var xLargeurCombo;
	var xChoisirPremier;
	var xMinCaracteres;
	
	for (var xIndice in xTableauContenu) {
		
		xDetailContenu = xTableauContenu[xIndice].split("#");
		
		xId = xDetailContenu[0];
		xLib = xDetailContenu[1];
		
		xTableauValeurs[xIndice] = new Array();
		
		xTableauValeurs[xIndice]["id"] = xId;
		xTableauValeurs[xIndice]["lib"] = xLib;
		
	}
	
	//Récupérer les paramètres
	xObjInput = $("#"+xTableauParam[0]).get(0);
	xObjChampId = $("#"+xTableauParam[1]).get(0);
	xLargeurCombo = xTableauParam[2];
	xChoisirPremier = parseInt(xTableauParam[3],10);
	xMinCaracteres = parseInt(xTableauParam[4],10);
	
	if (xObjInput) {
	
		$(xObjInput).autocomplete(xTableauValeurs,{
			width: xLargeurCombo,
			selectFirst: xChoisirPremier,
			minChars: xMinCaracteres,
			matchContains: true,
			autoFill: false,
			formatItem: function(row) {
				return row.lib + "";
			},
			formatResult: function(row) {
				return row.lib;
			}
		}).result(function(event,data) {
			if (data) {
				if (xObjChampId) { xObjChampId.value = data.id; ; xObjInput.style.color = ""; }
			} else {
				if (xObjChampId) { xObjChampId.value = 0; xObjInput.style.color = "#FF0000"; }
			}
		}).blur(function(){
			$(this).search();
		});
	
	}
	
}
// Fonction Javascript qui permet de faire de l'heritage d'objet ou de classe JS
// Elle recopie toutes les variables et toutes les méthode de pSource dans pDestination
// pSource 		: la classe mere
// pDestination	: la classe fille
function PGNJS_Heriter(pDestination, pSource)
{
	for (var element in pSource) {
		pDestination[element] = pSource[element];
	}
}

function PGNJS_VERIF_EMAIL(pAdresseEmail)// vérif de la validité de l'email par REGEXP
{

	var reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,4}$/
	
	//alert(pAdresseEmail+" : " + (reg.exec(pAdresseEmail)!=null))
	
	return (reg.exec(pAdresseEmail)!=null);
}

// Corrige le bug sur les Zones Repetées Non Ajax lorsque l'on essaye de les modifier en code Ajax
// et que la zone repetée est mal générée, c'est à dire le conteneur (div) n'a pas d'ID (con-ZR_XXX ou ctz-ZR_XXX)
WDAJAXMain.prototype.oGetConteneurParent = function(sNomChamp){

	var oConteneurParent = oGetId("con-" + sNomChamp);
	if (oConteneurParent) return oConteneurParent;
	oConteneurParent = oGetId("ctz" + sNomChamp);
	if (oConteneurParent) return oConteneurParent;		
	
	if (oGetId(sNomChamp)){
		oConteneurParent = oGetId(sNomChamp).parentNode;
	}else if(document.getElementsByName(sNomChamp)[0]){
		oConteneurParent = $("input[name='"+sNomChamp+"'] ~ table")[0];
	}
	if (oConteneurParent) return oConteneurParent;

}
function isString(obj)
{
		return !!obj.charAt;
}
function PGNJS_NUM_PORT()
{
		var xServeur = window.location.href.split("/")[2];
		var xNumPort = xServeur.split(":")[1];
		
		if (xNumPort) return xNumPort;
		return "";
}

function PGN_SANS_ESPACE(pChaine)
{
	var xRegExpDeb = new RegExp("^[ ]*","gi"); // recherche des espaces avant le texte
	var xRegExpFin = new RegExp("[ ]*$","gi"); // recherche des espaces apres le texte
	
	var xChaine = pChaine;
	
	xChaine = xChaine.replace(xRegExpDeb , "" );
	xChaine = xChaine.replace(xRegExpFin , "" );
	
	return xChaine;
}
//Procédure PGN_SANS_ESPACE(v00000001ffffffffpChaine)
//
//renvoyer SansEspace(pchaine)
//
//
function PGNJS_VERIF_DATE(pDate)
{
	// Cette fonction test la validité d'une date au format JJ/MM/AAAA avec gestion des années bissextiles
	
	// 1er controle par un expression reguliere que la date respecte le format
	var xRegEx	= new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");	
	if ( ! xRegEx.test(pDate) ) return false;		
	
	// Puis on verifie que la date est valide
	var xTabNbJours = new Array( 0 ,31,28,31,30,31,30,31,31,30,31,30,31);
	var xDate = pDate.split('/');
	var xJour	= parseInt(xDate[0],10);
	var xMois	= parseInt(xDate[1],10);
	var xAnnee	= parseInt(xDate[2],10);
			
	// Si c'est une année bissextile, le mois de fevrier a 29 jours
	if ( xAnnee%4 == 0 && xAnnee%100 > 0 || xAnnee%400 == 0 )	xTabNbJours[2] = 29;	
	
	if ( xMois > 12 || xMois < 1 ) return false;
	if ( xJour > xTabNbJours[xMois] || xJour < 1 ) return false;
	
	return true ;

}

function PGNJS_VERIF_HEURE(pHeure)
{
	// Cette fonction test la validité d'une heure au format HH:MM
	
	// 1er controle par un expression reguliere que l'heure respecte le format
	var xRegEx	= new RegExp("^[0-9]{2}[:]{1}[0-9]{2}$","g");	
	if ( ! xRegEx.test(pHeure) ) return false;		
	
	// Puis on verifie que l'heure est valide
	var xHeureMinute = pHeure.split(':');
	var xHeure	= parseInt(xHeureMinute[0],10);
	var xMinute	= parseInt(xHeureMinute[1],10);
	
	if ( xHeure > 23 || xHeure < 0 ) return false;
	if ( xMinute > 59 || xMinute < 0 ) return false;
	
	return true ;

}

function PGNJS_CONTROLE_RETOUR_CHARIOT(pContenu)
{
	var xRegExpCR = new RegExp("\r","gi")	// Cariage Return
	var xRegExpLF = new RegExp("\n","gi")	// Line Feed
	var xContenu = pContenu ;
	
	// IE fait des mauvais retour chariot : il met \n au lieu de \r\n ... donc on remplace
	xContenu = xContenu.replace(xRegExpCR,"");
	//xContenu = xContenu.replace(xRegExpLF,"\r\n");
	xContenu = xContenu.replace(xRegExpLF,"");
	
	return xContenu;
	
}


