// JavaScript Document Functions
/*
Chargement d'une page template XML ( <TEMPLATE> )
@param page 		= url de la page template a chargée
@param node 		= noeud conteneur du template
*/
function loadXMLTemplate( page, node, ellipseTag, ellipseTag2, callback ) {
	if ( ! node || node == '' ) {
		var myNode = document.getElementById("mainNode");				// Noeud par defaut -> mainNode
	} else {
		var myNode = document.getElementById(node);
	}
	var ajaxObject = new XMLHttpRequest();		// devient 				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) { 
			/* Recupére le Flux XML */
			myNode.innerHTML = "";
			var xmlDom = ajaxObject.responseText;
			myNode.innerHTML 	= xmlDom;
			/* Verifie si le script chargé donne une réponse d'execution d'une fonction de classe */
			if ( document.getElementById( "AJAX_Response" ) ) {
				alert( document.getElementById( "AJAX_Response" ).value );
			}
			/* ajoute un element ellipse */
			if ( ellipseTag == "HtmlTextEditor" ) {
				window.htmlTextEditor = new HtmlTextEditor();            				
    			window.htmlTextEditor.injectInDocument(document.getElementById("HtmlTextEditor"));				
			}
			/* ajoute un element ellipse */
			if ( ellipseTag == "calendar" ) {
				window.calendar1 = new Calendar(new Date(), new Locale( "fr" ));            
    			window.calendar1.injectInDocument(document.getElementById("calendar1"));	
			}
			/* ajoute un element ellipse */
			if ( ellipseTag2 == "calendar" ) {
				window.calendar2 = new Calendar(new Date(), new Locale( "fr" ));            
    			window.calendar2.injectInDocument(document.getElementById("calendar2"));	
			}
			if ( ellipseTag2 == "getContentText" ) {
				window.htmlTextEditor.setTextContent(document.getElementById("text").value);		
			}
			/* ajoute un element ellipse */
			if ( ellipseTag == "graph" ) {
				var nbrTab	= getGraphModel();
				if ( nbrTab == 2 ) {
					var model1 		= new DiagramModel( window.tabGraph, window.graphTitle, Color.GREEN ); 
					var model2 		= new DiagramModel( window.tabGraph2, window.graphTitle2, Color.PINK );
					var diagram 	= new Diagram( [ model1, model2 ] );
				} else {
					var model 		= new DiagramModel( window.tabGraph, window.graphTitle, Color.GREEN ); 
					var diagram 	= new Diagram( model );
				}				
				diagram.setCaption( "Nombre de devis" );
				diagram.getView().setDrawLegend( true );
				diagram.setCanvasSize( new Dimension( 800, 500 ) );
				diagram.setSize( new Dimension( 802, 520 ) );				
				diagram.injectInDocument( $( "graph" ) );
				addEventHandler( $("selectForUniqueDataSerie"), "onchange", function( event ) {
					switch( this.value * 1 ) {
						case 0 :   diagram.setView( new HistogramView() );   break;
						case 1 :   diagram.setView( new CurveView() );       break;
						case 2 :   diagram.setView( new PieView() );         break;
					}
					diagram.getView().setDrawLegend( false );
					diagram.getView().setDrawValues( $("chkValuesDrawn").checked );
				});
				addEventHandler( $("chkValuesDrawn"), "onchange", function( event ) {
					diagram.getView().setDrawValues( this.checked );
				});
			}
			if ( callback ) {
				callback.call();	
			}
		}
	}
	ajaxObject.send( null );	
	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	=	document.getElementById(element).offsetHeight;		//hauteur de l'élément à positionner
	var width	=	document.getElementById(element).offsetWidth;		//largeur de l'élément à positionner
	myParent	=	document.getElementsByTagName("body")[0];
	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
	document.getElementById(element).style.top=posY;
	document.getElementById(element).style.left=posX;
}
/* 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 tagCp
@param tagVille
@descript Affecte la valeur au tagVille retournée par XML
*/
function loadTown( tagCp, tagVille ) {
	var cp = document.getElementById( tagCp ).value;
	if ( cp.length == 5 ) {
		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;	
				// Nombre de resultat sur la requete
				var nbrResultNode	= AnswerListNode.getElementsByTagName( "Count" )[0];
				var nbrResult		= nbrResultNode.firstChild.nodeValue;						
				pNode = document.getElementById( tagVille ).parentNode;
				pNode.removeChild( document.getElementById( tagVille ) );				
				if ( nbrResult == 0 ) {				
					var newNode = document.createElement( "input" );
					newNode.id 		= tagVille;
					newNode.type 	= "text";
					newNode.size	= "30";
					pNode.appendChild( newNode );
				} else {
					var newNode		= document.createElement( "select" );
					newNode.id		= tagVille;
					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; 				
						document.getElementById(tagVille).options[i] = new Option( nodeId, nodeId );
					}
				}
			}
		}
		ajaxObject.send( null );
		return false;
	}
}

