// JavaScript Document Functions
/* Load a template with an AJAX Protocol (page.php) with a <TEMPLATE> tag
* @param page 	= url page path
* @param node 	= node to inject the template
* @param args 	= array with optionals functions
* @version 1.5b
*/
function loadXMLTemplate( page, node ) {
	if( ! page ){
		throw new Exception( "page must be specified in function loadXMLTemplate" );
	}
	if( ! node ){
		var node = "mainNode";
	}
	loading( $(node) );
	var ajaxObject = new XMLHttpRequest();
	if ( navigator.appName == "Netscape" ) { var syncMethode = true; } else { var syncMethode = false; }
	ajaxObject.open( "GET" , page, syncMethode );
	ajaxObject.onreadystatechange = function() {
		if ( ajaxObject.readyState == 4 && ajaxObject.status == 200 ) {
			var xmlDom = ajaxObject.responseText;
			$(node).innerHTML 	= xmlDom;
			// Detect script tags and excute the code inside			
			var scripts = $(node).getElementsByTagName('script');
			for( var i = 0 ; i < scripts.length ; i++ ) {
				//Sous IE il faut faire un execScript pour que les fonctions soient définie en globale
				if ( window.execScript ) {
					//On replace les éventuels com' html car IE n'aime pas ça
					window.execScript( scripts[i].text.replace('<!--','') );
				} else {
					window.eval( scripts[i].text );
				}
			}
		}
	};
	ajaxObject.send( null );
	return false;
}

function loading( node ) { return false;
	node.innerHTML	= "";
	var d	 		= document.createElement( "div" );	
	d.width			= parent.width+"px";
	d.height		= parent.height+"px";
	d.align			= "center";
	var img			= document.createElement( "img" );
	img.top			= ( d.height / 2 )+"px";
	img.src 		= __APPLICATION_PATH__ + "img/loader/loader.gif";
	d.appendChild( img );
	node.appendChild( d );
	return false;
}

/* fonction de vérification de valeur numérique */
function isNumeric(sText) {
   var ValidChars = "0123456789.,";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) {
         IsNumber = false;
      }
   }
   return IsNumber;   
}
/* Vérifier une adresse email */
function isEmail(my_email) {
	var new_string = new String(my_email);
    if (!new_string.match('^[-_\.0-9a-zA-Z]{1,}@[-_\.0-9a-zA-Z]{1,}[\.][0-9a-zA-Z]{2,}$')) {
    	return false;
    } else {
        return true;
    }
}
/* formatage de date (jj/mm/aaaa) 
@tag = tag input contenant la date
*/
function formatDate(tag) {
	var dteTagValue	 = document.getElementById(tag).value;
	if (dteTagValue.length == 2 || dteTagValue.length == 5) {
		document.getElementById(tag).value = document.getElementById(tag).value + "/";
		return false;
	}
	return false;
}
/* Fonction d'appel de l'aide
@param this.__helper__
*/
function showHelp() {
	if ( this.__HELPER__ != "" ) {
		switch( this.__HELPER__ ) {
			case "USER" 	: loadXMLTemplate( "templates/helper/H_user.php",  "Helper"  ); break;
			case "STOCK" 	: loadXMLTemplate( "templates/helper/H_stock.php", "Helper"  );	break;
			default			: alert( "Aucune aide en ligne pour ce module !" ); return false; break;
		}
	}
	document.getElementById( "Helper" ).style.display = "block";
	return false;
}
/* Fonction de masquage de l'aide */
function hideHelp() {
	document.getElementById( "Helper" ).style.display = "none";
	return false;
}
// constants to define the title of the alert and button text.
var ALERT_TITLE = "Oops!";
var ALERT_BUTTON_TEXT = "Fermer";
// over-ride the alert method only if this a newer browser.
// Older browser will see standard alerts
if( document.getElementById && this.__CUSTOM_ALERT__ == 1 ) {
  	window.alert = function(txt) {
    	createCustomAlert(txt);
  	}
}
function createCustomAlert(txt) {
	// shortcut reference to the document object
	d = document;
	// if the modalContainer object already exists in the DOM, bail out.
	if(d.getElementById("modalContainer")) return;
	// create the modalContainer div as a child of the BODY element
	mObj 		= d.createElement("div");
	mObj.id 	= "modalContainer";
	// make sure its as tall as it needs to be to overlay all the content on the page
	mObj.style.height = document.documentElement.scrollHeight + "px";
	// create the DIV that will be the alert
	alertObj 	= d.createElement("div");
	alertObj.id = "alertBox";
	var table 	= d.createElement("table");
	table.width = "100%";
	table.cellPadding ="0";
	table.cellSpacing ="0";
	table.border = "0";
	table.align	= "center";
	var tbody	= d.createElement("tbody");						
	var tr1		= d.createElement("tr");	
	var td1 	= d.createElement("td");
	td1.height 	= "40px";
	tr1.appendChild(td1);
	tbody.appendChild(tr1);
	var tr2 	= d.createElement("tr");
	var td2 	= d.createElement("td");
	td2.id 		= "alertBoxDiv";	
	td2.innerHTML = txt;	
	tr2.appendChild( td2 );
	tbody.appendChild( tr2 );
	// create an anchor element to use as the confirmation button.
	var tr3		= d.createElement("tr");	
	var td3 	= d.createElement("td");
	td3.align	= "center";
	td3.valign	= "middle";
	td3.height	= "40px";
	btn 		= td3.appendChild(d.createElement("a"));
	btn.id 		= "closeBtn";
	btn.appendChild(d.createTextNode(" "+ALERT_BUTTON_TEXT+" "));
	btn.href 	= "#";
	tr3.appendChild(td3);
	tbody.appendChild(tr3);
	table.appendChild(tbody);
	alertObj.appendChild(table);
	mObj.appendChild(alertObj);
	mObj.style.height = table.style.height;
	mObj.style.width  = table.style.width;
	d.getElementsByTagName("body")[0].appendChild(mObj);
	// Centrer
	centerPopup("alertBox");
	// set up the onclick event to remove the alert when the anchor is clicked
	btn.onclick = function() { removeCustomAlert();return false; }
}
// removes the custom alert from the DOM
function removeCustomAlert() {
	document.getElementsByTagName("body")[0].removeChild(document.getElementById("modalContainer"));
}
function centerPopup(element) {
	var height	=	$(element).offsetHeight;							//hauteur de l'élément à positionner
	var width	=	$(element).offsetWidth;								//largeur de l'élément à positionner
	myParent	=	document.body;
	var pHeight	=	myParent.offsetHeight;								//Hauteur de l'élément parent
	var pWidth	=	myParent.offsetWidth;								//Largeur de l'élément parent
	var sTop	=	myParent.scrollTop;									//Hauteur de défilement de l'élément parent
	var sLeft	=	myParent.scrollLeft;								//Longueur de défilement de l'élément parent
	var posY	=	Math.round((pHeight/2)-(height/2)+sTop);			//Calcul de la position en Y
	var posX	=	Math.round((pWidth/2)-(width/2)+sLeft);				//Calcul de la position en X
	$(element).style.top	= posY+"px";
	$(element).style.left	= posX+"px";
}
/* Position de la souris */
function mousePosition(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY){
		posx = e.pageX;
		posy = e.pageY;
	} else if (e.clientX || e.clientY) {
  		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
 	}
	return[posx,posy];
}
/* Pop-up API        
@param name
@param width
@param height
*/
function PopUp( url ) {
	if ( document.getElementById( "popup" ) != null ) {
		document.getElementById( "popup" ).style.display = "none";
		document.getElementsByTagName( "body" )[0].removeChild( document.getElementById( "popup" ) );
		return false;
	}
	var newDiv				= document.createElement("div");
	newDiv.id				= "popup";
	newDiv.style.position	= "absolute";
	// tableau
	var myTable				= document.createElement( "table" );
	myTable.width			= 100+"%";
	myTable.cellPadding		= 0;
	myTable.cellSpacing		= 0;
	myTable.border			= 0;
	var myTbody				= document.createElement( "tbody" );
	// Haut
	var __trT				= document.createElement( "tr");		
	var __tdTL				= document.createElement( "td" ); __tdTL.id = "POPUP_TOP_LEFT";		__tdTL.innerHTML = "&nbsp;"
	var __tdTC				= document.createElement( "td" ); __tdTC.id = "POPUP_TOP_CENTER";	__tdTC.innerHTML = "&nbsp;"
	var __tdTR				= document.createElement( "td" ); __tdTR.id = "POPUP_TOP_RIGHT";	__tdTR.innerHTML = "&nbsp;"
	__trT.appendChild( __tdTL );
	__trT.appendChild( __tdTC );
	__trT.appendChild( __tdTR );
	myTbody.appendChild( __trT );
	// Center
	var __trM				= document.createElement( "tr" ); __trM.height = "400px";
	var __tdCL				= document.createElement( "td" ); __tdCL.id = "POPUP_CENTER_LEFT"; 	__tdCL.innerHTML 	= "&nbsp;"
	var __tdM				= document.createElement( "td" ); __tdM.id 	= "POPUP_CENTER_MAIN"; 	__tdM.id			= "PopupMainPanel";	
	var __tdCR				= document.createElement( "td" ); __tdCR.id = "POPUP_CENTER_RIGHT";	__tdCR.innerHTML 	= "&nbsp;"
	__trM.appendChild( __tdCL );
	__trM.appendChild( __tdM );
	__trM.appendChild( __tdCR );
	myTbody.appendChild( __trM );
	// Bas
	var __trB				= document.createElement( "tr" );
	var __tdBL				= document.createElement( "td" ); __tdBL.id = "POPUP_BOTTOM_LEFT";		__tdBL.innerHTML = "&nbsp;"
	var __tdBC				= document.createElement( "td" ); __tdBC.id = "POPUP_BOTTOM_CENTER";	__tdBC.innerHTML = "&nbsp;"
	var __tdBR				= document.createElement( "td" ); __tdBR.id = "POPUP_BOTTOM_RIGHT";		__tdBR.innerHTML = "&nbsp;"
	__trB.appendChild( __tdBL );
	__trB.appendChild( __tdBC );
	__trB.appendChild( __tdBR );
	myTbody.appendChild( __trB );
	//
	myTable.appendChild( myTbody );
	newDiv.appendChild( myTable );		
	// Affichage
	document.getElementsByTagName( "body" )[0].appendChild( newDiv );
	loadXMLTemplate( url, "PopupMainPanel" );		
	newDiv.style.display 	= "block";
	centerPopup( "popup" );
	makeDraggable( newDiv );
	return "PopupMainPanel";
}
// Make draggable Object
/*
document.onmousemove = mouseMove; 
document.onmouseup   = mouseUp; 
var dragObject  = null; 
var mouseOffset = null; 
function getMouseOffset(target, ev){ 
    ev = ev || window.event; 
    var docPos    = getPosition(target); 
    var mousePos  = mouseCoords(ev); 
    return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y}; 
} 
function getPosition(e){ 
    var left = 0; 
    var top  = 0; 
    while (e.offsetParent){ 
        left += e.offsetLeft; 
        top  += e.offsetTop; 
        e     = e.offsetParent; 
    } 
    left += e.offsetLeft; 
    top  += e.offsetTop; 
    return {x:left, y:top}; 
} 
function mouseMove(ev){ 
    ev           = ev || window.event; 
    var mousePos = mouseCoords(ev); 
    if(dragObject){ 
        dragObject.style.position = 'absolute'; 
        dragObject.style.top      = mousePos.y - mouseOffset.y; 
        dragObject.style.left     = mousePos.x - mouseOffset.x; 
        return false; 
	    } 
} 
function mouseUp(){ 
    dragObject = null; 
} 
function makeDraggable(item){ 
    if(!item) return; 
    item.onmousedown = function(ev){ 
        dragObject  = this; 
        mouseOffset = getMouseOffset(this, ev); 
        return false; 
    } 
}

function mouseCoords(ev){ 
	if(ev.pageX || ev.pageY){ 
	    return {x:ev.pageX, y:ev.pageY}; 
	}
    return { 
	    x:ev.clientX + document.body.scrollLeft - document.body.clientLeft, 
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop 
	}; 
}
*/
/* Fonction pour la recherche d'une ville à partir du code postal
@param tagCountry 	-> Element
@param tagCp		-> Element
@param tagVille		-> Element Name
@descript Affecte la valeur au tagCountry retournée par XML avec de la Class XMLLoadTown
*/
function loadTown( tagCp, tagTown ) {
	var cp 				= tagCp.value;
	if ( cp.length > 3 ) {
		var ajaxObject = new XMLHttpRequest();
		ajaxObject.open( "GET", __APPLICATION_PATH__+"class/CORE/XMLLoadTown.php?_cpToLoadTown_="+cp );	
		ajaxObject.onreadystatechange = function() { 
			if ( ajaxObject.readyState == 4 && ajaxObject.status == 200 ) {
				var xmlDom 			= ajaxObject.responseXML;
				var AnswerListNode 	= xmlDom.documentElement;
				// Test d'erreur
				var isErrorNode		= AnswerListNode.getElementsByTagName( "Error" )[0];
				if ( typeof( isErrorNode ) == 'undefined' || isErrorNode == null ) {
					// Nombre de resultat sur la requete
					var nbrResultNode	= AnswerListNode.getElementsByTagName( "Count" )[0];
					var nbrResult		= nbrResultNode.firstChild.nodeValue;						
					pNode = $( tagTown ).parentNode;
					pNode.removeChild( $( tagTown ) );				
					if ( nbrResult == 0 ) {				
						var newNode = document.createElement( "input" );
						newNode.id 		= tagTown;
						newNode.name	= tagTown;
						newNode.type 	= "text";
						newNode.className = "text";
						newNode.size	= "30";
						pNode.appendChild( newNode );
					} else {
						var newNode		= document.createElement( "select" );
						newNode.id		= tagTown;
						newNode.name	= tagTown;
						newNode.className = "text";
						pNode.appendChild( newNode );
						newNode.options.length	= 0;
						for ( var i = 0 ; i != nbrResult ; i++ ) {											
							var listNodeId	= AnswerListNode.getElementsByTagName( "Ville"+i )[0];	
							var nodeId		= listNodeId.firstChild.nodeValue; 				
							$(tagTown).options[i] = new Option( nodeId, nodeId );
						}
					}
				}
			}
		}
		ajaxObject.send( null );
		return false;
	}
}
/* 
Change a <img> Tag to input tag type file
*/
function changePicToTag( myTag ){
	var imgSrc 		= myTag.src;
	pNode 			= myTag.parentNode;
	/* Créer le tag Input */
	var newTag		= document.createElement( "input" );
	newTag.type		= "file";
	newTag.id		= myTag.id;
	newTag.name		= myTag.id;
	pNode.removeChild( myTag );
	pNode.appendChild( newTag );
	/* créer le bouton rétablir l'image */
	oTag			= document.createElement( "input" );
	oTag.type		= "button";
	oTag.className 	= "button";
	oTag.value		= "R\351tablir";
	oTag.name		= imgSrc;
	oTag.tagID		= myTag.id;
	pNode.appendChild( oTag );
	oTag.onclick	= function() {
		var pNode 		= this.parentNode;		
		var myImg		= document.createElement( "img" );
		myImg.id		= this.tagID;
		myImg.name		= this.tagID;
		var imgName		= this.name;
		if ( imgName != "" ) {
			myImg.src 	= imgName;
		}
		myImg.onclick = function(){ changePicToTag( this ); }
		pNode.innerHTML = "";
		pNode.appendChild( myImg );
	}
	return false;
}

function imprime_zone(titre, obj) {
	// Définie la zone à imprimer
	var zi = document.getElementById(obj).innerHTML;
	
	// Ouvre une nouvelle fenetre
	var f = window.open("", "ZoneImpr", "toolbar=0, menubar=0, scrollbars=1, resizable=1, status=0, location=0, left=10, top=10");
	
	// Définit le Style de la page
	f.document.body.style.color = '#000000';
	f.document.body.style.backgroundColor = '#FFFFFF';
	f.document.body.style.padding = "10px";
	
	// Ajoute les Données
	f.document.title = titre;
	f.document.body.innerHTML += "" + zi + "";
	
	// Imprime et ferme la fenetre
	f.window.print();
	//f.window.close();
	return true;
}
