function getNodeRef(nid) { return document.getElementById(nid);}
function setNodeContent(nid, pContent) { 
	
	var node=getNodeRef(nid);
	if (node!=undefined && node!=null) {
		node.innerHTML=pContent;
	}
}

function getNodeContent(nid) {
	
	var node=getNodeRef(nid);
	return (node!=undefined && node==null) ? "" : node.innerHTML;
}

function getNodeValue(nid) { 
	var retval="";
	var node=getNodeRef(nid);
	if (node!=undefined && node!=null)
		retval = node.value;
	return retval;
}
function setNodeValue(nid, pContent) { 
	var node=getNodeRef(nid);
	if (node!=undefined && node!=null) node.value=pContent;
}
function setNodeFontColor(nid, pcolor){ 
	var node=getNodeRef(nid);
	if (node!=undefined && node!=null) node.style.color=pcolor;	
}                     
function showhideDOMNode(nid,pshowhide){
	var noe=getNodeRef(nid);
	if (noe!=undefined && noe!=null)
		noe.style.display = ((pshowhide) ? "" : "none"); 
}
function showDOMNode(nid) { showhideDOMNode(nid, true);}
function hideDOMNode(nid) { showhideDOMNode(nid, false);}

function visibilityDOMNode(nid, pshowhide){
	
	var noe=getNodeRef(nid);
	if (noe!=undefined && noe!=null) {
		noe.style.visibility = (pshowhide) ? "visible" : "hidden";
	}
}
function toggleVisibility(nid) {
	
	var noe=getNodeRef(nid);
	var showhide=true;
	if (noe!=undefined && noe!=null)
		showhide = ((noe.style.display=="none" ) ? false : true ); 

	showhideDOMNode(nid, !showhide);
}


// General functions
function showError(errmsg) {setNodeContent('errormessage', errmsg);}

function ifError(errmsg) {
	
	if (errmsg.indexOf("ERROR")>0 || errmsg.indexOf("error")>0) {
		showError(errmsg);
		return true;
	}
	else return false;
}



function getFrame(pIfr) {
	
	var fr=null; 		

	if ( window.top.frames) 
		fr=window.top.document.getElementById(pIfr);
		//fr=window.top.frames[pIfr]; 
		//fr=getNodeRef(pIfr);
		
	return fr;
}


function getFrameDoc(pIfr) {
	
	var frdoc=null;
	var frnode=getFrame(pIfr);
	if (frnode!=undefined && frnode!=null) {
		
		frdoc=frnode.contentDocument;
		if (!frdoc) {
			var frw=frnode.contentWindow;
			if (frw!=undefined && frw!=null) {
				frdoc=frw.document;
			} else alert("contentDocument && contentWindow are not defined");
		}
		
		// Version regularly encountered on web
		/*var mainfrnode=getNodeRef(pIfr);
		var y=(mainfrnode.contentWindow || mainfrnode.contentDocument);
		if (y.document) y=y.document;*/
	} else alert("window is not defined");
	
	return frdoc;
}

//Dates


// Verifie une date au format j/m/a, l'affiche formatée ds le champ et retourne sa valeur au format 'yyyymmdd'

function checkDateFld(pDStr, fieldid) {
	
	var realdate=checkDate(pDStr);
	var datestr="";
	if (realdate != null) {
		var d=realdate.getDate().toString().padLeft('0',2);
		var m=(realdate.getMonth()+1).toString().padLeft('0',2);
		var y=realdate.getFullYear().toString();
		datestr=y+m+d;
		
		if (fieldid != null) setNodeValue(fieldid, fmtDateStr(datestr,"/") );
	}
	return datestr;
}

//yyyymmdd -> dd sep mm sep yyyy or 
function fmtDateStr(ds, psep) {
	if (ds!=null) {
		var y = ds.substr(0,4);
		var m = ds.substr(4,2);
		var d = ds.substr(6,2);
		var sep = (psep==null) ? "/" : psep;
		return d + sep + m + sep + y;
	}
	else
		return "";
}

function checkDate(d) {

	  // Cette fonction vérifie le format JJ/MM/AAAA saisi et la validitée de la date.
	  // Le séparateur est défini dans la variable separateur
	  var messerr="";
	  var j=0;
	  var m=0;
	  var a=0;
	  var dateok=false;
	  
	  // Considérer toute autre caractère qu'un chiffre comme séparateur
	  var patt_onlydigits=new RegExp("\\D","g");
	  var datesrc=d;
	  datesrc = datesrc.replace(patt_onlydigits, "/");
	  var separator="/"; // separator between d/m/y
	  
	  var da=datesrc.split(separator);
	  if (da.length == 3) {
		  dateok=true;
	  }	
	  else {
		  // Saisie sous forme jjmmaa ou jjmmaaaa ?
		  if (datesrc.length==6 || datesrc.length==8) {
			datesrc=datesrc.substr(0,2)+"/"+datesrc.substr(2,2)+"/"+datesrc.substr(4);
			da=datesrc.split(separator);
			if (da.length == 3) {
				dateok=true;
			}	 
		  }
		  if (!dateok)
			  messerr="ERROR date not complete";
	  }
	  if (dateok) {
		  var J=new Number(da[0]);
		  var M=new Number(da[1]);
		  var A=new Number(da[2]);
		  j=J.valueOf();
		  m=M.valueOf();
		  a=A.valueOf();
		  // If year <100 add act century if less= than actual year, previous century otherwise
		  if (a<100) {
	  			var actdate 	= new Date();
	  			var actfullyear	= actdate.getFullYear();
	  			var actyear 	= actfullyear%100;
	  			var actcentury 	= actfullyear-actyear; 
	  			a+= (a<=actyear) ? actcentury : (actcentury-100);
		  }
		  
		  if ( (isNaN(j)) || ((j<1) || (j>31)) ) {
			  messerr="ERROR day not right";
		  }
		  else if ( (isNaN(m) ||((m<1)||(m>12)) ) ) {
			  messerr="ERROR inexistant month ";
		  }
		  else if (isNaN(a)) {
			  messerr="ERROR no valuable year";
		  }
	  }
	  	
	  // Date existante ? 
	  var d2=null;
	  if (messerr=="") {
	     d2=new Date(a,m-1,j);
	     j2=d2.getDate();
	     m2=d2.getMonth()+1;
	     a2=d2.getFullYear();
	     if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
	        messerr="ERROR inexistant day";
	     }
	  }
	  //if (messerr!="") console.debug("err:"+messerr+ " date:"+j+" " + m+" " +a);
	  return (messerr=="") ? d2 : null;
	  
}

String.prototype.padLeft = function(s, i) {
	var r = this + '';
	while (r.length < i) r = s + r;
	return r;
}

