
var npage		= 1;
var nlinespage   =25;
var firstUser	= "";
var firstfirstUser	= "";
var lastUser	= "";
var islastUser  = false;

// user management
var listusers	= new Array();
var actUser		= "";
var UserApplis	= new Array();
var UserAuths	= new Array();
var V4ClientAuth=null;
var v4Login="";

var Applis 		 = new Array("IMSProduits",  "Packed", "SimplyPerso",  "SimplyEdit",  "V4", "V4_Consulte", 		"Websystem");
var ApplisLabels = new Array("IMS Produits", "Packed", "Simply-Perso", "Simply-Edit", "V4", "V4 Statistiques",  "Websystem");

function appli2() {
	
	this.Appli="";
	this.Label="";
	this.Login="";
	this.Password="";
}

function get_Users(nav) {
	
	var myparams = new Hash();
	
	// Filtre
	var filter=getNodeValue("usersel");
	myparams.set('filter', 	filter );
	
	var grpselnode=getNodeRef("usergrpsel");
	var filtergrp=grpselnode.options[grpselnode.selectedIndex].value;
	myparams.set('filtergrp', filtergrp );	
	
	if (nav==undefined || nav==null || nav=="") { 
		firstfirstUser=""; firstUser=""; lastUser=""; islastUser=false; 
	}
	myparams.set('nav', nav);
	var actitem = (nav=="<") ? firstUser : lastUser;
	myparams.set('actitem',  actitem );
	myparams.set('quantity', nlinespage);
	
	// More users in this direction ?
	var ldok=true;
	if ((nav=="<") && (firstfirstUser == firstUser) ) ldok=false;
	if ((nav==">") && (islastUser==true) ) 	ldok=false;
	if ( (nav=="<") || (nav==">") )
		actUser="";
	// Load & show users
	if (ldok==true) ldPageParam("./users/getUsers.php", myparams, null, "showUsers", true);
}


function UsersXmltoArray(xmlinfo) {

	var list=new Array();
	
	var fiches = XMLtoArray(xmlinfo, "user");	
	var ind=0;
	while (	fiches[ind]!=null) {
		list[list.length]=getUserXml(fiches[ind]);
		ind++;
	}

	return list;
}


function user() {
	
	this.Pseudo		="";
	this.Password	="";
	this.Groupe		=0;
	this.Name		="";
	this.FirstName	="";
	this.Enterprise	="";
	this.Phone		="";
	this.EMail		="";
	this.Applis		= new Array();
}


function getUserXml(xmlnode) {
	
	var Item = new user();
	Item.Pseudo		= getTagInfo("pseudo", 		xmlnode);
	Item.Password	= getTagInfo("password",	xmlnode);
	Item.Groupe		= getTagInfo("groupe", 		xmlnode);
	Item.Name		= getTagInfo("name", 		xmlnode);
	Item.FirstName	= getTagInfo("firstname", 	xmlnode);
	Item.Enterprise	= getTagInfo("enterprise", 	xmlnode);
	Item.Phone		= getTagInfo("phone", 		xmlnode);
	Item.EMail		= getTagInfo("email", 		xmlnode);
	//Item.Applis	= getTagInfo("contrat",	xmlnode);

	return Item; 	
}


function showUsers(usersinfo) {
	
	listusers = UsersXmltoArray(usersinfo);
	var contentnode = getNodeRef("userlist");
	islastUser=false;
	if (listusers.length>0) {
		if (firstfirstUser=="") firstfirstUser=listusers[0].Pseudo;
		firstUser= listusers[0].Pseudo;
		lastUser = listusers[listusers.length-1].Pseudo;
		var cinfo="<tr class='user_label' style='background:#ddeeee; border-bottom:thin solid #bbb; border-top:thin solid #EFEFEF'><td></td><td>Utilisateur</td><td>Mot de passe</td><td>Grp</td><td> </td></tr>";
		for (var i=0; i < listusers.length; i++ ) {
			
			var user=listusers[i];
			
			var color = (i%2) ? "#fff" : "#f6f7fa";
			var bordercolor = (i%2) ? "#f2f0f0" : "#ebebec";
			//"<tr id=\"user_"+i+"\" class=\"tableline\" style=\"height:19px\" ";
			var line="<tr id=\"user_"+i+"\" style=\"background-color:"+color+"; border-bottom:thin solid "+bordercolor+"; cursor:pointer\" "+
			" onmouseover=\"visibilityBtns(this, true, webmaster);\" onmouseout=\"visibilityBtns(this, false);\""+
			" onmouseup=\"showUser('"+user.Pseudo+"')\" >";
			// Boutons
			line+="<td>"+"<img id=\"userbtns_"+i+"\" src=\"./images/bin.gif\" style=\"height:14px; display:none\" onmouseup=\"del_User('"+user.Pseudo+"','user_"+i+"')\"/>"+
			"</td>";
			
			// Info
			line +=	"<td style='letter-spacing:1px'>"+user.Pseudo  +"</td>"+
					"<td>"+user.Password+"</td>"+
					"<td>"+user.Groupe  +"</td>"+
					"<td> </td>"; 
			
			line+="</tr>"; 
			
			cinfo+=line;
		}
		contentnode.innerHTML=cinfo;
	}
	else {
		firstfirstUser	= ""; firstUser	= ""; lastUser = "";
		contentnode.innerHTML="";
	}
	setNodeContent("nusers", ""+listusers.length);
	
	// btns
	node=getNodeRef("prev_Users");
	node.style.color = (firstUser==firstfirstUser) ? "#ccc" : "black";
	islastUser = (listusers.length<nlinespage) ? true : false;
	node=getNodeRef("next_Users");
	node.style.color = (islastUser==true) ? "#ccc" : "black";

	// Clear fiche if no actUser
	if (actUser=="") showUser();
	//(or show first : showUser(listusers[0].Pseudo);)
}


function delUser(pId, domnode) {
	
	// TO DO : Delete all his applis and authorizations 
	var fnc = null;

	// Remove from db
	var myparams = new Hash();
	myparams.set('userid', actUser );	
	ldPageParam("./users/delUser.php", myparams, null, fnc, false);

	// Remove from memory
	var idx=getUserInd(pId);
	if (idx>=0)
		listusers.splice(idx, 1);
	UserApplis	= new Array();
	UserAuths	= new Array();

	// Clean info on screen
	hideDOMNode(domnode);
	showUser();
	
	actUser="";
	
	get_Users();
}


function getUserInd(pId) {
	
	for (var i=0; i<listusers.length; i++) {
		if (listusers[i].Pseudo==pId) {
			return i;
		}
	}
	return -1;
}


function getUserInfo(pUser) {
	
	for (var i=0; i<listusers.length; i++) {
		if (listusers[i].Pseudo==pUser) {
			return listusers[i];
		}
	}
	return null;
}


// Called when user in list selected
// Gets all information about the user : user, applis
// and shows this on form

function showUser(pUser) {
	
	// Get user info (from userlist in memory)
	var pseudo=""; var pwd=""; var grp=""; var name=""; var firstname=""; var enterprise=""; var phone=""; var email="";
	var user = null;
	if ( pUser!=undefined &&  pUser!=null && pUser!="")
		user=getUserInfo(pUser);
	if (user != undefined && user != null) {
		pseudo = user.Pseudo; pwd = user.Password; grp = user.Groupe;
		name = user.Name; firstname=user.FirstName; enterprise=user.Enterprise; phone=user.Phone; email=user.EMail;
	}
	
	// Memorise user
	actUser=pseudo; 
	
	// Applis
	if (pseudo!="") {
		get_UserApplis(pseudo); // get from db & show
	}
	else
		showUserApplis();
	
	// Show login 
    setNodeContent("actual_user", pseudo);
    
	// Fill in form 
    setNodeValue("user_pseudo", pseudo); setNodeValue("user_pwd", 		pwd); 		setNodeValue("user_groupe", 	grp);    
    setNodeValue("user_name",   name); 	 setNodeValue("user_firstname", firstname); setNodeValue("user_enterprise", enterprise);    
    setNodeValue("user_phone", 	phone);  setNodeValue("user_email", 	email);    	
  	
}


function newUser() { showUser(""); } // This cleans it all up


function saveUser() {
	
	var userinput = getUserInput();
	
	// new user ?
	if (actUser=="") {
		svUser("new");
	}
	else {
		// if pseudo changed :
		// if so : check if not already exists
		// if not changed or not exists : save
		if ( actUser != userinput.Pseudo ) {

			var myparams = new Hash();
			myparams.set('Login_name', userinput.Pseudo );	
			myparams.set('check', "check"); // Just check id
			ldPageParam("./users/getUser.php", myparams, null, "checkUserbeforeSv", true);
					
		}
		else 
			svUser("update");
	}
	
}


function checkUserbeforeSv(response) {
	
	if (response=="NOSUCHUSER") { // update but with change of pseudo & links
		svUser("links"); 
	}
	else {
		alert("Il existe d&eacute;j&agrave; un utilisateur avec ce pseudo!");
	}
	
}


function svUser(change) {

	// Page
	var sv_upd = (change=="new") ? "createUser.php" : "updUser.php";
	sv_upd="./users/"+sv_upd;
	
	// Params
	var userinput=getUserInput();

	var myparams = new Hash();
	myparams.set('Login_name', 	userinput.Pseudo );	
	myparams.set('Login_pwd', 	userinput.Password );	
	myparams.set('Groupe', 		userinput.Groupe );	
	myparams.set('Name', 		userinput.Name );	
	myparams.set('FirstName', 	userinput.FirstName );	
	myparams.set('Enterprise', 	userinput.Enterprise );	
	myparams.set('Phone', 		userinput.Phone );	
	myparams.set('Email', 		userinput.EMail );	
	if (change=="links") myparams.set('OldPseudo', actUser); // Update user with change of id
	
	// Save user dependant information : applis, authorizations after saving user
	var fnc = (change=="new") ? "svApplisNewUser('"+userinput.Pseudo+"')" : "updateApplis('"+actUser+"')";
	// Save user
	var passereply=false;
	ldPageParam(sv_upd, myparams, null, fnc, passereply);

	
	// Update memory & screen
	
	var idx = (change=="new") ? listusers.length : getUserInd(actUser);
	if (idx>=0)
		listusers[idx]=userinput;
	
	var useridchanged=false;
	if (actUser != userinput.Pseudo) {
		actUser = userinput.Pseudo;
		useridchanged=true;
	}
	
	// Refresh list when new user or id changed
	if ( (change=="new") || (useridchanged==true) )
		get_Users();	

}


function svApplis(pUser, isnewuser) {
	
	for (var i=0; i<Applis.length; i++) {

		update_UserAppli(isnewuser, pUser, Applis[i], i);
	}

}

function updateApplis(pUser) 	{ svApplis(pUser, false);}

function svApplisNewUser(pUser) { svApplis(pUser, true);}


function getUserInput() {
	
	var us=new user();

	us.Pseudo	=getNodeValue("user_pseudo");
	us.Password	=getNodeValue("user_pwd");
	us.Groupe	=getNodeValue("user_groupe");
	us.Name		=getNodeValue("user_name");
	us.FirstName=getNodeValue("user_firstname");
	us.Enterprise=getNodeValue("user_enterprise");
	us.Phone	 =getNodeValue("user_phone");
	us.EMail	 =getNodeValue("user_email");
	
	return us;
}

// User Applis 

function get_UserApplis(pUser) {
	
	var myparams = new Hash(); myparams.set('id', pUser );	
	ldPageParam("./users/getUser_Applis.php", myparams, null, "showUserApplis", true);
}

function showUserApplis(xmlinfo) {
	
	UserApplis = UserApplisXmltoArray(xmlinfo, "appli");

	// Fill all items with data client
    // Add label appli to list of user applis
	var UserAllApplis = new Array();
	
	for (var i=0; i<Applis.length; i++) { //alert("addappli"+Applis[i]);

		var nwItem = new appli2();
		
		nwItem.Appli=Applis[i];
		nwItem.Label=ApplisLabels[i];
		
		var Item = getAppliInfo(Applis[i], UserApplis);
		
		if (Item != null) {
			nwItem.Login=Item.Login;
			nwItem.Password=Item.Password;
		}
		UserAllApplis[UserAllApplis.length]=nwItem;
	}
	
	var contentnode = getNodeRef("userapplislist");
	contentnode.innerHTML="";
	var userapplishtml="";
	for (var i=0; i<UserAllApplis.length; i++ ) {
		
		// Line
		var line="<tr>";
		
		var appli = UserAllApplis[i].Appli;

		// Boutons
		line+="<td><div style='padding:0px 6px'>"+
		
			"<input type='checkbox' id='userapplicb_"+i+"' ";
			if (getAppliInd(appli, UserApplis)>=0) line+=" checked='checked'";
			if (appli=="V4_Consulte") {
				line+=" onchange='V4Consulte_change(this);'";
			}
			line+="/>"+ // fin cb appli 
				"</div></td>"; //id='userapplibtns_"+i+"' 
					
		// Visu
		// - Name
		line+="<td id='userappli_"+i+"' style'cursor:pointer'";
		
		if (appli=="V4_Consulte") 
			line+=" onmouseup='	toggleVisibility(\"V4_Consulte_Auth\"); toggleComboBtn(\"cbutV4Consulte\"); '"; 
		line+=">"+UserAllApplis[i].Label;
		if (appli=="V4_Consulte") 
			line+="&nbsp;<img id='cbutV4Consulte' style='height: 13px; width: 13px; padding: 1px; border: thin solid rgb(170, 170, 170); border-radius: 1px; background: none repeat scroll 0% 0% rgb(204, 204, 204); vertical-align: middle;' src='./images/combo.jpg' >";

		line+="</td>"; 
		
		// - Login / Pwd
		if (appli=="V4_Consulte") {
			line+="<td></td><td></td>";
		}
		else {
			var lgin= UserAllApplis[i].Login.replace(/'/g, "\'");
			var pwd = UserAllApplis[i].Password.replace(/'/g, "\'");
			line+="<td><input type='text' id='userappli_"+i+"Login' size='30' style='color:#222' value='"+lgin+"'></input></td>";
			line+="<td><input type='text' id='userappli_"+i+"Pwd'   size='30' style='color:#222' value='"+pwd+"'></input></td>";
		}
		line+="</tr>";
		if (appli == "V4_Consulte") {
			line+="<tr id='V4_Consulte_Auth' style='display:none'><td></td><td colspan='3'><table >"+
			"<tr><td><input type='checkbox' id='V4_Consulte_AuthClient'     onchange='auth_changed(this,"+i+");' /></td><td>Clients	</td></tr>"+
			"<tr><td><input type='checkbox' id='V4_Consulte_AuthHonoraires' onchange='auth_changed(this,"+i+");' /></td><td>Honoraires</td></tr></table></td></tr>";
		}
		userapplishtml+=line;
		
	}				
	//console.debug("showUserApplis() usermenu : "+userapplishtml);
	
	setNodeContent(contentnode.id,"<table style='padding:0px; border-collapse:collapse; border:solid thin #ddd;'>"+
	"<tr class='user_label' style='background:#eef0f0; border-top:thin solid gray'><td colspan=2 style='padding:left:3px'>Application</td><td>Login</td><td>Mot de passe</td></tr>"+
	userapplishtml+
	"</table>");
	
	UserAuths = new Array(); // Ces infos seront chargé sur l'ouverture de l'appli
	showAuthV4Consulte();
	
}


// Set overlapping appli

function auth_changed(pnode, linenr) {
	//alert("auth_changed()"+pnode.id+","+ linenr );
	if (pnode.checked==true) {
		getNodeRef("userapplicb_"+linenr).checked=true;
	}
		
}

function V4Consulte_change(pnode) {
	if (pnode.checked==false)
		Auths_unselect();
}

function Auths_unselect() {
	getNodeRef("V4_Consulte_AuthClient").checked=false;
	getNodeRef("V4_Consulte_AuthHonoraires").checked=false;
}


function getAppliInd(pAppId, pList) {

	for (var i=0; i<pList.length; i++) {
		if (pList[i].Appli==pAppId) return i;
	}
	return -1;
}


function getAppliInfo(pAppId, pList) {
	
	var idx=getAppliInd(pAppId, pList);
	return (idx>=0) ? pList[idx] : null;
}


function showUserAppli(idx, applic) {
	
	var appli=""; var login=""; var pwd=""; 
	if (applic!=undefined && applic!=null) {
		appli=applic.Appli;
		login=applic.Login;
		pwd	 =applic.Password;
	}
	   
    setNodeValue("userappli_"+idx+"Login", login);
    setNodeValue("userappli_"+idx+"Pwd", 	pwd);
	
}


function update_UserAppli( isnewuser, pUser, pAppId, i) {
	
	var cbnode=getNodeRef("userapplicb_"+i);
	if (cbnode.checked==true) {
		saveUserAppli(pUser, pAppId, i, isnewuser);
	}
	else 
		del_UserAppli(pUser, pAppId, isnewuser);
	
}


function getAppUserInput(idx) {

	var app 	= new appli2();
	app.Appli 	= Applis[idx];
	app.Login   = getNodeValue("userappli_" + idx + "Login");
	app.Password= getNodeValue("userappli_" + idx + "Pwd");
	 
	return app;
}


function saveUserAppli(pUser, pAppli, tableidx, isnewuser) {
	
	
	if (pAppli=="") {
		alert("Veuillez sélectionner une application");
	}
	else {
		
		// Add or update ?
		var idx = getAppliInd(pAppli, UserApplis);
		var act = (idx>=0) ? "upd" : "add";
		
		
		// Info Appli Login Password
		var app=getAppUserInput(tableidx);

		// Postback : Save authorizations after saving userappli
		var fnc = null;
		if (pAppli=="V4_Consulte") {
			fnc = "saveAppliAuth('"+pUser+"');";
		}

		var passereply=false;
		
		// Save appli
		var action="./users/"+act+"UserAppli.php";
		var myparams = new Hash(); myparams.set('UserID', pUser); myparams.set('Appli', pAppli); 
		myparams.set('Login', app.Login); myparams.set('Password', app.Password);
		//alert("saveUserAppli(): calling "+action+ ", "+ pUser + ", "+ pAppli);
		ldPageParam( action, myparams, null, fnc, passereply );
				
		// Upd memory
		if (act=="add") idx=UserApplis.length;
		UserApplis[idx]=app;
		
	}
}



function del_UserAppli(pUser, pAppId, isnewuser) {

	// Ne supprimer que si enregistré auparavant
	var idx = getAppliInd(pAppId, UserApplis);
	var applic=null;
	if (isnewuser==false) {
		
		var fnc= null;
		if (pAppId=="V4_Consulte") {
			fnc = "saveAppliAuth('"+pUser+"');";
		}
		var passereply=false;
		
		// Remove from DB
		var myparams = new Hash(); myparams.set('userid', pUser); myparams.set('appid', pAppId);	
		ldPageParam("./users/delUserAppli.php", myparams, null, fnc, passereply);
		
		// Remove from list
		if (idx>=0)	UserApplis.splice(idx, 1);
	}
	else
		applic=getAppliInfo(pAppId, UserApplis);

	// Refresh screen 
	showUserAppli(idx, applic);

}



// Authorizations

function V4Auth(pClient, pHon) {
	
	this.Client	= pClient;
	this.Honoraires=pHon;
}


// Determines rights of user then calls update function 'modifyAppliAuth()' passing :
// userid, appli, right, newvalue, oldvalue, hasrightdef
// -> Parameters : user, UserAuths[Client/Honoraires] (g), 

function saveAppliAuth(pUser) {
	
	
	for (var j=0; j<2; j++) {
		
		// Droits existants ?
		var right="";
		switch (j) {
			case 0: right="Client"; 	break;
			case 1: right="Honoraires"; break;
		}
	
		var oldvalue=""; var hasoldvalue=""; var idx=0;
		for (var i=0; i<UserAuths.length; i++) {
			var auth=UserAuths[i];
			if (auth.Data==right) { 
				oldvalue = auth.Authorization; 
				hasoldvalue = true;	
				idx=i;
			}
		}
	
		// New value
		var newvalue = getNodeRef("V4_Consulte_Auth"+right).checked; 
		
		
		// Determine and do update
		var mod 	 = Auth_addORdel(newvalue, oldvalue, hasoldvalue);
		//alert("saveAppliAuth():" + mod);
		// Save
		// - in memory
		switch (mod) {
		case -1: UserAuths.splice(idx,1);	break;
		case  1: var Item = new authorization();
				 Item.Data			= right;
				 Item.Authorization	= "true";
				 UserAuths[UserAuths.length]=Item;
				 break;
		}
		
		// - in db
		modifyAppliAuth(pUser, "V4_Consulte", right, mod);
	}
}

// -1= del, +1=add
function Auth_addORdel(newvalue, oldvalue, hasoldvalue) {
	
	var mod=0;
	
	// Add authorization
	if (newvalue==true) {
		if (oldvalue==false) {
			mod=1;
			if (hasoldvalue==true) mod=2; // Del if not authorized value in db(ca n'arrive jamais normalement)
		}
	}

	// Delete authorization
	else if (hasoldvalue==true) mod=-1;
	
	return mod;
}


function modifyAppliAuth(user, pappli, right, mod) {
	
	var myparams = new Hash(); 
	myparams.set('userid', user); myparams.set('appid', pappli); myparams.set('data', right);	
		
	var path="./users/";
	var page="";
	if (mod==-1 )   page="delUserAppliAuth.php";
	if (mod== 1 ) { page="addUserAppliAuth.php"; 	
					myparams.set('authorization', "true" );}; // superflu mais pour toute clareté

	if (mod==-1 || mod==1) {
		//alert("modifyAppliAuth():"+ user +" "+ pappli+" "+ right+" "+mod);
		ldPageParam(path+page, myparams, null, null, false);
	}
}


// Get user authorizations and update screen (next step)
function showAuthV4Consulte() {
	
	if ( actUser !="" ) {
		var myparams = new Hash(); myparams.set('userid', actUser ); myparams.set('appid', "V4_Consulte" );	
		ldPageParam("./users/getUserAppliAuth.php", myparams, null, "showAuthV4Consulte2", true);
	}
	
}

// Load authorizations
function showAuthV4Consulte2(xmlinfo) {

	// Transform auth info in object and Memorise
	var auth=UserAuthsXmltoObject(xmlinfo, "auth");
	
	// Update screen
	document.getElementById("V4_Consulte_AuthClient").checked	 = (auth.Client		=="true") ? true : false;
	document.getElementById("V4_Consulte_AuthHonoraires").checked= (auth.Honoraires =="true") ? true : false;

}

// Memorise authorizations and return as object
function UserAuthsXmltoObject(xmlinfo, mapname) {

	UserAuths=UserAuthsXmltoArray(xmlinfo, mapname);
	
	var client="";
	var honoraires="false";
	for (var i=0; i<UserAuths.length; i++) {
		var auth=UserAuths[i];
		// seulement les ayants droit sont enregistrés : le simple fait d'être déclaré suffit pour validation
		if (auth.Data=="Client") 	 client		="true"; //auth.Authorization;
		if (auth.Data=="Honoraires") honoraires ="true"; //auth.Authorization;
	}
	return new V4Auth(client, honoraires);
}



var clientlist=new Array();

function initpageV4Consulte(pwho, phon) {
	//console.debug("initpageV4Consulte("+pwho+","+ phon+")");
	
	if (pwho == "*") {
		showclients(clientlist, phon);
	}
	else {
		//fr=getFrame("ifr1");
		setNodeContent("clientname", pwho);
		loadclient(pwho, phon);
	}
}


var ordersprevcontent="";
var orderslastclient="";

// Show combo clients
function showclients(clients, phon) {
		
	var keylist = new Array();
	for (var i=0; i<clients.length; i++) {
		var item=clients[i];
		keylist[i]=new keyeditem(item, item);
	}

	// Fills combo with clients, on clic client calls loadclient with authorization to see hon
	// set refreshbutton with fnc refreshclients() 
	fillComboFiltered("client", keylist, "loadclient", phon, "refreshclients();");

	showDOMNode("clientlistcontainer");
	
	// Show previous loaded orders
	if ( orderslastclient != "" ) loadclient(orderslastclient, phon);
	
}


var hasrighthon=false;
var clientid="";
var ordersxml="";

function loadclient(pid, phon) {
	
	// orders
	if ( ordersprevcontent=="" || orderslastclient!=pid ) {
		
		setNodeContent("clientorders", "<div style=\"width:500px; border:thin dashed; background:#fff; padding-left:6px \">Loading ...</div>");

		// Request data then display // Watch out for memory overflow
		orderslastclient=pid;
		hasrighthon=(phon=="true");
		clientid=pid;
		var myparams = new Hash(); myparams.set('client', pid );
		//myparams.set('Honoraires', phon );
		//ldPageParam("./v4/clientorders.php", myparams, "clientorders", "initorders", false);
		var page="./v4/getClientOrdersXml.php";
		new Ajax.Request(page, {
		    method:'post', encoding:'UTF-8', parameters: myparams,
		    onSuccess: 
		    	function(transport) {
		      		ordersxml = transport.responseText || "no response text";
		      		readordersXml();
		  		}
		    ,
		    onFailure: function(){ alert('Ajax message : something went wrong on loading of the page '+ page); return false; }
		});

	}
	else {
		setNodeContent("clientorders", ordersprevcontent);
		initorders();
	}
	
	
}


var orders = new Array();


function readordersXml() {

	var specclient = clientid;

	var fiches 	= XMLtoArray(ordersxml, "viewentry");	 // v1 : order

	var ind=0;
	orders = new Array(); // global : used at totals
	//console.debug(fiches.length + " fiches");
	while (	ind < fiches.length) {
		
		var order = getOrderXml(fiches[ind]);
		if (order!=null) {
			//if (order.name==specclient)
			orders[orders.length] = order;
		}
		ind++;
	}

	console.debug(orders.length + " orders");
	// Classify orders by state
	
	var DocsEtat	= new Array( new Array(), new Array(), new Array(), new Array() );
	var Etats  		= new Array("All", "Cloturé",   "Abandonné", "Autres"); // 0, 9, 50 0: Supprimé, 1:En cours, 2: Clôturé, 3: Abandonné, 4: En préparation, 5: commandes clôturées
	var StateCodes 	= new Array("All", "Completed", "Canceled",   "Other");
	
	var mycols		= new Array (
			
			new Array("id", 	"Dossier", 				"", 73),
			new Array("state",	"Etat", 				"", 22),
			new Array("name",	"Produit",				"", 155),
			new Array("date", 	"Date confirmation", 	"D",65),
			new Array("mntvt", 	"Montant<br/>vente ht", "M",70)
		);

		if (hasrighthon==true) {
			mycols[mycols.length]= new Array("mnthon", 	"Honoraires", 	"M", 65);
			mycols[mycols.length]= new Array("mntachat","Total achats", "M", 70);
		}

		
	// Fills clients[] or orders[]
	ind=0;
	while ( ind < orders.length ) {
		
		var order = orders[ind];
		
		// Put data in array
		var Document=new Array();
		var state="";
		for (var j=0; j < mycols.length; j++) {
		 	
			var columnName = mycols[j][0];

			var fieldvalue	= order[columnName];

			/* xml format
			<etat>CloturÃ©
			<numerodossier>08-02-11-01
			<nom>GOBELET 15 cl
			<TOTALACHAT>348.94
			<mntvente></entrydata>
			<CLIENTNAME">Orangina Schweppes</entrydata>
			<DATEFACTURE">08/10/2009</entrydata>
			<DATE">20080211T000000,00+01</entrydata>
			<COMMERCIALNAME"><text>CN=Christophe LECLERCQ/O=IMS</text></entrydata>
			*/
			
			// Format raw data
			switch (columnName) {
				
				case "id" :
					
					var datevalues=fieldvalue.split("-");
					var nd_year=datevalues[0]; var nd_month=datevalues[1]; var nd_day=datevalues[2]; var nd_no=datevalues[3];
		 			fieldvalue=nd_day+"/"+ nd_month+"/"+nd_year+" "+ nd_no;
					break;
					
				case "date" : 
					
					var tempdate=fieldvalue;
					fieldvalue=tempdate.replace(/\//gi, "");

					//remove hour
					//fieldvalue=fieldvalue.replace(/:/gi, "");
					//var datevalues=fieldvalue.split(" ");
					//var date=datevalues[0]; 
					//var hour=(datevalues.length>1) ? datevalues[1]: "";
		 			//fieldvalue=date;		 			
					break;
					
				case "state" 	: 	state=fieldvalue; 	break;
	 			case "mntvt" 	: 
	  			case "mnthon" 	: 
	 			case "mntachat" : 	break;
			}
	
		 	Document[Document.length] = fieldvalue;	
		}
		 
		// if (ncats==0) {array_push( DocsEtat[0], Document);	} else {// All
		// Add document to its categorie
		//console.debug(state);
	 	var key = array_search(state, StateCodes); // Etats
	 	if (key==-1) key = 3; // Autres
	 	DocsEtat[key][DocsEtat[key].length] = Document;
	 	if (key==1) {
	 		console.debug(Document);
	 	}
		ind++; 
	}
	
	
    // Display

	// Client title
	var contents= "<span><h4>"+clientid+"</h4></span>\n";

	contents+"<div style='padding:0px 5px 5px 0px'><span id='liborders' style='display:none'>Vos commandes<br/></span>\n ";

	// Categories
	var showcolEtat=true;
	var ncats=2;
	var ncatsmax=ncats+1;
	var start=1;
	if (ncats==0) {
		ncatsmax=1;
		start=0;
	}
	else {
		var ndocsothers=DocsEtat[ncatsmax].length;
		if (ndocsothers==0) 
			showcolEtat=false;
	}

	// Selection pane
	// Categories of orders (completed, canceled, ..)
	var styledisplay="display:inline; ";
	var catinfo = "<div style='"+styledisplay+"border:thin solid #aaa; border-radius:2px; padding-bottom:2px'>";
	var firstcat="";
	for (var cati=start; cati<=ncatsmax; cati++) {
		
		var ndocs=DocsEtat[cati].length;
		
		if (ndocs>0) {
			
			var Etat=Etats[cati];
			console.debug(Etat +":" + ndocs);
			if ( (Etat=="Cloturé") || (Etat=="Abandonné") ) Etat+="s";
			
			catinfo += "<span id='TitleOrders_"+cati+"' style='color:#335; border-radius:1px; padding:2px 5px; font-size:14px;'>&bull;"+
				"<a class='ordertitle' href='#' onmouseup='showcat("+cati+")'>"+ htmlentities(Etat,"ENT_QUOTES") +"</a></span> ";

			if (firstcat=="") firstcat=DocsEtat[cati];

		}
	}
	catinfo += "</div>";

	//if (_POST["Honoraires"]!="true") 

	// If at least some data show filterpane
	// Period
	if (firstcat!="") {
		contents += catinfo +
		"<span style='font-size:14px; padding-left:6px'>Du&nbsp;:&nbsp;</span>"+"<input id='Orders_Since' name='Orders_Since' type=text size=10 onchange='checkDateFld(this.value,\"Orders_Since\"); '></input>" +
		"<span style='font-size:14px; padding-left:6px'>au&nbsp;</span>"+"<input id='Orders_Till'  name='Orders_Till'  type=text size=10 onchange='checkDateFld(this.value,\"Orders_Till\");  '></input>" +
		" <img src='./images/filtre.gif' style='width:14px; height:14px; padding:2px; border:thin solid #aaa; border-radius:2px; vertical-align:middle; background:#57b;' onmouseup='filterOrders()'/>" +
		"<br/>\n";
	}
	else 
		contents += "Pas de commandes enregistr&eacute;s.";
	// if (_POST["Honoraires"]!="true") echo "</div>";
		
	contents += "</div>\n";

	// Orders arranged by categorie
	//var data="";

	for (cati=start; cati<=ncatsmax; cati++) {
		
		var ndocs=DocsEtat[cati].length;
		if (ndocs>0) {
			
			var style=" style='font-size:12px; background:white; padding-top:5px; ";
			if (DocsEtat[cati] == firstcat)
				style+=" display:none;";
			style+="'";
			contents += "<div id='TableOrders_"+cati+"'"+style+">";
			//"<span class='ordertitle'>"+Etats[cati]+"</span>";
			
			contents += "<table style='cellspacing:0; border-collapse:collapse'>";
			
			// Header
			contents += "<tr style='padding:2px 4px 2px 4px; background:#eef; border-top:thin solid gray; border-right:thin solid #bbb; '>"+
				 "<td style='border-left:thin solid #bbb; padding-left:4px; vertical-align:top; width:102px' colspan=2>"; // idx
			//rowtotalheader="<tr style='border-top:thin solid gray; text-align:center'><td colspan=2 style='width:110px'></td>";
			var hidecol=-1;
			var ncols=mycols.length;
			for (var j=0; j<ncols; j++) {
				
				var colname = mycols[j][0];
				var collabel= mycols[j][1];
				var coltype = mycols[j][2];
				var colwidth= mycols[j][3];
				
				var showcol=true;
				
				// Hide Col Etat in categ other than 'others' or when no 'others' at all)
				if ( ((ncats>0) && (colname=="state")) && ( (cati!=ncatsmax) || (showcolEtat==false) )   ) { 
					showcol=false;
					hidecol=j;
				}
				
				//colbefore_etathidden=false;
				//if ( ((j+1)<ncols) && ((ncats>0) && (columns[j+1][0]=="etat")) && ( (cati!=ncatsmax) || (showcolEtat==false) )   ) { // Hide Col Etat in categ other than 'others' or when no 'others' at all)
				//	colbefore_etathidden=true;
				// cols following first
				var colhtml="";
				if (j>0) {
					if (showcol==true) {
						var textalign="";
						if (coltype=="M" || coltype=="D")
							textalign="center";
						//var columnName = mycols[j][0];
						//if  (colbefore_etathidden) echo "<td style=' padding:0px 3px'>";else	
						colhtml = "<td style='border-top:thin solid gray; width:"+colwidth+"px; border-left:thin solid #bbb; padding:0px 3px 0px 3px; vertical-align:top; font-style:normal;";
						if (textalign!="") colhtml+= " text-align:"+textalign;
						colhtml += "'>";
					}
					else 
						colhtml += "<td style='border-top:thin solid gray; width:0%'>";

					//rowtotaltitle=""; if (coltype=="M") rowtotaltitle=columns[j][1]; rowtotalheader.="<td style='vertical-align:top'>".rowtotaltitle."</td>";
				}
							
				if (showcol) colhtml += collabel;  // label
					
				colhtml += "</td>"; // end cols (first & following)
				contents+=colhtml;
					
			}
			contents += "</tr></table>";
			
			
			// -> Datalines <-
			
			var doci = ndocs;
			DocsEtat[cati]=DocsEtat[cati].reverse();
			
			var colwidth=66;
			if (hasrighthon==false) colwidth=53;
			for (var f=0; f<mycols.length; f++) { colwidth+=mycols[f][3];}
			
			content= "<div style='width:"+colwidth+"px; max-height:300px; overflow:auto; padding:0px; border:thin solid gray'>";
			content+= "<table id='Table_Orders_"+cati+"' style='cellspacing:0; border-collapse:collapse;'>";
			for (var d=0; d<ndocs; d++) {
				
			 	Document=DocsEtat[cati][d];
			 	var docid=Document[0];
			 	var datearr=docid.split(" ");
			 	var datedoc=datearr[0];
			 	var number =datearr[1];
			 	datearr=datedoc.split("/");
			 	var day=datearr[0];
			 	var month=datearr[1];
			 	var year =datearr[2];
			 	
				// Data
			 	var statecode="Other";
				if ( cati==1 || cati==2)
					statecode=StateCodes[cati];
			 	//var dataitem=statecode+","+year+month+day;
			 	
				// Data & Presentation
			 	content+= "<tr name='"+year+month+day+"'>";
				content+= "<td style='width:24px; color:#79B; vertical-align:top; text-align:right; padding:0px 1px 0px 2px'>"+doci--+"</td>";
				
			 	for (var f=0; f<Document.length; f++) {
	 		 		
			 		// Col description
			 		var columnName = mycols[f][0];
			 		var colType    = mycols[f][2];
			 		var colwidth   = mycols[f][3];
			 		
			 		var columnvalue= Document[f];
			 		
					var textalign="";
					if (colType=="M") ;
			 		switch (colType) {
			 			case "D" 	: textalign="center"; 	break;
	 		 			case "M" 	: textalign="right";	break;
	 		 		}
			 		switch (columnName) {
			 				
			 			case "id"	: break;
			 			case "name"	: columnvalue= columnvalue.substr(0,1).toUpperCase() + columnvalue.substr(1).toLowerCase(); 
			 						  break;
	 		 			case "mntvt" 	: 
	 		 			case "mnthon" 	: 
			 			case "mntachat" :
			 				
			 				var mntvalue=columnvalue; // moneyValue();
			 				//dataitem+=","+mntvalue;
			 				
			 				if (mntvalue==0 || columnvalue=="" ) {
			 					columnvalue="";
			 				}
			 				else {
			 					columnvalue=fmt_Number(columnvalue);
			 					//var dec=( Math.floor(mntvalue) == mntvalue) ? 0 : 2;
			 					//if (dec==0) columnvalue+=",00"; 
			 				}
			 				
			 				break;
			 		}

			 		// Show col content if has to be displayed 
			 		var style="";
			 		if (f == hidecol) {
			 			style="style='width:0%'";
			 		}
			 		else {
			 			if (textalign!="") textalign="; text-align:"+textalign;
			 			style="style='width:"+colwidth+"px; padding:0px 3px; vertical-align:top; text-align:"+textalign+"; border-left:thin solid #bbb; '";
			 		}
		 			content+= "<td "+style+">";
			 		if (f != hidecol) content+=columnvalue;
			 		content+="</td>";
			 	}
			 	//data+=dataitem+"|";
		     	content+= "</tr>";
			}
			content+= "</table></div>";
			contents += content;
			
			
			// Totaux data is passed to calculatetotals() which will fill the template
			// data : orders[]
			//V4Transactions=data;
			// Template 
			var contentstot = "<table style='cellspacing:0; border-collapse:collapse'>";
			// margin
			contentstot+="<tr style='color:#479; vertical-align:top; text-align:right'>"+
			"<td style='width:25px; padding-left:2px'></td>";
			var colwidth=0; for (var f=0; f<4; f++) { colwidth+=mycols[f][3]; }
			var idstat="";
			if (hasrighthon==true)		
				idstat = "id='Total_V4Stats' ";
			contentstot += "<td "+idstat+ "colspan=4 style='width:"+(colwidth-4)+"px; text-align:right; padding-right:5px'></td>";
			// totals
			for (var f=4; f<Document.length; f++) {
		 		
		 		if (f == hidecol) {
		 			contentstot += "<td style='width:0%'></td>";
		 		}
		 		else {
			 		var columnName  = mycols[f][0];
			 		var colwidth 	= mycols[f][3];
			 		contentstot += "<td id='Total_"+columnName+"' style='width:"+colwidth+"px; padding:0px 3px 0px 4px; text-align:right' ></td>";
		 		}
		 	}
			contentstot += "</tr>"+
			"</table>";
			contents +=contentstot+"</div>"; // Categ
			
		} // Categ
	}
	
	
	
	// Show orders on screen
	setNodeContent("clientorders", contents);
	initorders();

	
}


function moneyValue(pVal) {
	
	if (pVal=="")
		return 0;
	
	var mntvaluestr=pVal.replace(/\./g, "");
	mntvaluestr=mntvaluestr.replace(/,/g, ".");
	mntvaluestr=mntvaluestr.replace(/\s/g, "");
	var mntvalue = new Number(mntvaluestr).valueOf();
	//console.debug("moneyValue "+pVal+"->"+mntvalue);
	if (mntvalue > 0) 
		return mntvalue;
	return 0;
}

function array_search(pValue, pArray) {
	for (var i=0; i<pArray.length; i++) {
		if (pArray[i]==pValue) return i;
	}
	return -1;
}


/* xml format
 * Statistiques
<viewentry position="1" unid="53E5BC88AA1D1CC9C12579330001E678" noteid="19BE562" siblings="744">
<entrydata columnnumber="0" name="etat"><text>CloturÃ©</text></entrydata>
<entrydata columnnumber="1" name="numerodossier"><text>08-02-11-01</text></entrydata>
<entrydata columnnumber="2" name="nom"><text>GOBELET 15 cl</text></entrydata>
<entrydata columnnumber="3" name="TOTALACHAT"><number></number></entrydata>
<entrydata columnnumber="4" name="$11"><number></number></entrydata>
<entrydata columnnumber="6" name="CLIENTNAME"><text>Orangina Schweppes</text></entrydata>
<entrydata columnnumber="7" name="DATEFACTURE"><text></text></entrydata>
<entrydata columnnumber="8" name="DATE"><datetime>20080211T000000,00+01</datetime></entrydata>
<entrydata columnnumber="9" name="COMMERCIALNAME"><text>CN=Christophe LECLERCQ/O=IMS</text></entrydata>
</viewentry>

// Brouillons
<entrydata columnnumber="0" name="Form"><text>confirmationdecde</text></entrydata>
<entrydata columnnumber="1" name="etat"><text></text></entrydata>
<entrydata columnnumber="2" name="nom"><text>RUFIN</text></entrydata>
<entrydata columnnumber="3" name="codeclient"><text>074400</text></entrydata>
<entrydata columnnumber="4" name="CLIENTDSPL"><text>CARREFOUR GENIPA</text></entrydata>
<entrydata columnnumber="5" name="NUMERODOSSIER"><text>11-10-24-401</text></entrydata>
<entrydata columnnumber="6" name="$11"><text></text></entrydata>
<entrydata columnnumber="7" name="datefacture"><text></text></entrydata>
<entrydata columnnumber="8" name="DEVISEURNAME"><text>CN=Hervé VANDERMERSCH/O=IMS</text></entrydata>
<entrydata columnnumber="9" name="COMMERCIALNAME"><text>CN=Hervé VANDERMERSCH/O=IMS</text></entrydata>
<entrydata columnnumber="10" name="totalhonoraireok"><text></text></entrydata>
<entrydata columnnumber="11" name="montant"><number>1521.86</number></entrydata>
<entrydata columnnumber="12" name="MONTANTHORSREMISE"><number>1521.86</number></entrydata>

*/ 

// <- params global : clientid
function getOrderXml(xmlnode) {
	
	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	};

	var fields 		= XMLtoArray(xmlnode, "entrydata");	
								//statistiques.nsf
	var fldid		=fields[5]; //1
	var fldname		=fields[2]; //
	var fldclname	=fields[4]; //5
	var fldstate	=fields[0]; // 0
	var fldstate2	=fields[1]; 
	var flddate		=fields[7]; //6
	var fldvt		=fields[11]; //4
	var fldhon		=fields[10];
	var fldachat	=fields[6]; //3
	
	// ID
	var id 		 = getTagInfo("text", fldid);
	var cl_order = null;
	if ( (fields.length>=13) && (id != "")) { // (id is not repeated for productdescriptions in order)
		
		// Filter on client
		var name 	= getTagInfo("text", fldclname); name=name.trim();
		var selorder=true;
		if ((clientid!=undefined) && (clientid!="")) {
			clientid=clientid.trim();
			if (name != clientid ) {
				//console.debug("client '" + clientid + "' != clientfiche '"+name+"'.");
				selorder=false;
			}
		}
		
		if (selorder==true) {
			
			//var debuginfo=""; for (var i=0; i<fields.length; i++) { debuginfo+=i+": "+fields[i]+", ";} console.debug(debuginfo);

			var state 	= getTagInfo("text", 	fldstate); //state
			var state2 	= getTagInfo("text", 	fldstate2); //state2
			var date 	= getTagInfo("text", 	flddate); //date
			var mntvt 	= getTagInfo("number", 	fldvt); // vt
			var mnthon 	= getTagInfo("number", 	fldhon); // hon
			var mntachat= getTagInfo("number", 	fldachat); //achat
			var name	= getTagInfo("text", 	fldname); //nom
			
			// Replace decimal points amount to ','  ?
			
			// Translate state to uniformed code
			var Etats  		= new Array("All", "confirmationdecde",   "Abandonné", "Autres"); 
			// 9 : En cours, 50 : En cours à facturer, 0: annulé
			// 0: Supprimé, 1 : En cours, 2 : Clôturé, 3 : Abandonné, 4 : En préparation, 5 : commandes clôturées
			var StateCodes 	= new Array("All", "Completed", "Canceled", "Other");
			var idx = array_search(state, Etats);
			if (idx>=0) {
				state=StateCodes[idx];
			}
			if (state2=="0")
				state="Canceled";
			
			//console.debug("order : id "+id +", state "+ state +", name "+ name +", date "+ date +", mntvt "+ mntvt +", mntachat "+ mntachat);
			
			cl_order = new order(id, state, name, date, mntvt, mnthon, mntachat);
		}
	}
	
	return cl_order;
}


// Transform order from xml code into object
function getOrderXmlv1(xmlnode) {

	var id 		= getTagInfo("numerodossier", 	xmlnode);
	var state 	= getTagInfo("etat", 			xmlnode); //state
	var name 	= getTagInfo("nomprod", 		xmlnode); 
	var date 	= getTagInfo("dateconfirmcde", 	xmlnode); //date
	var mntvt 	= getTagInfo("montantventeht", 	xmlnode);
	var mnthon 	= getTagInfo("montanthonoraire",xmlnode);
	var mntachat= getTagInfo("totalachat", 		xmlnode);
	
	// Translate state to uniformed code
	/*var Etats  		= new Array("All", "Cloturé", "Abandonné", "Autres"); // 0, 9, 50, 0: Supprimé, 1:En cours, 2: Clôturé, 3: Abandonné, 4: En préparation, 5: commandes clôturées
	var StateCodes 	= new Array("All", "Completed", "Canceled", "Other");
	var idx 		= array_search(state, StateCodes);
	if (idx>=0) state=StateCodes[idx];
	*/
	var cl_order = new order(id, state, name, date, mntvt, mnthon, mntachat);
	
	return cl_order;
}


function getClientXml(xmlnode) {
	
	var Orders = new Array();
	var clientname= getTagInfo("name", xmlnode);
	var ordersxml = XMLtoArray(xmlnode, "order");	
	for (var ind=0; ind<ordersxml.length; ind++) {
		Orders[Orders.length]=getOrderXmlv1(ordersxml[ind]);
	}
	
	var Item=new Array(clientname, Orders);
	return Item; 	
}


function initorders() {
	
	ordersprevcontent=getNodeContent("clientorders");
	
	if (V4ClientAuth.Client != "*")
		showDOMNode("liborders");
	
	// Show first categorie
	showcat(1); 
}


var OrdersCatselected=0;

function showcat(ncat) {
	
	OrdersCatselected=ncat;
	var frdoc=window.document; //getFrameDoc("ifr1");
	var node=null;
	
	// Hide all tables
	for (var i=0; i<10; i++) {
		node=frdoc.getElementById("TableOrders_"+i);
		if (node!=undefined && node!=null) node.style.display="none";
	}
	
	// Show the selected table
	
	node= frdoc.getElementById("TableOrders_"+ncat);
	if (node!=undefined && node!=null) {
		
		node.style.display="block";
		
		// Hide lines outside period 
		var startdate= checkDateFld(getNodeValue("Orders_Since"), null);
		startdate=startdate.substr(2);
		var enddate	 = checkDateFld(getNodeValue("Orders_Till"), null);
		enddate=enddate.substr(2);
		if (startdate!="" || enddate!="") {
			node = frdoc.getElementById("Table_Orders_"+ncat);
			var lines = node.getElementsByTagName("tr");
			
			var showstart=false;
			var showend=true;
			for (var i=0; i<lines.length; i++ ) {
				
				var line=lines[(lines.length-i-1)];
				var lineref=line.getAttribute("name");
				
				if (!showstart)
					if (startdate=="") {
						showstart=true;
					}
					else if (lineref >= startdate  )
						showstart=true;
				
				if ( (showstart==true) && (showend==true) ) {
					if (enddate!="" )
						if ( enddate < lineref )
							showend=false;
				}	
				
				if ( ((showstart==true) && (showend==true)) ) {
					line.style.display="block";
				}
				else {
					line.style.display="none";
				}
			}

		}
		
		// Alternate colors
		node = frdoc.getElementById("Table_Orders_"+ncat);
		var lines = node.getElementsByTagName("tr");
		var togglevalue=false;
		for (var i=0; i<lines.length; i++ ) {
			if (lines[i].style.display!="none") {
				togglevalue=!togglevalue;
				lines[i].style.backgroundColor=(togglevalue)? "#f0f9f7": "";
			}
		}
		
		// Recalculate totals
		StateCodes = new Array("All", "Completed", "Canceled", "Other");
		calculateTotals(StateCodes[ncat], startdate, enddate);

	}
	
	
	// Menu
	for (var i=0; i<10; i++) {
		node = frdoc.getElementById("TitleOrders_"+i);
		if (node!=undefined && node!=null) {
			node.style.backgroundColor="";
			node.style.color="#335"; 
			node.style.border="";
		}
	}

	node = frdoc.getElementById("TitleOrders_"+ncat);
	if (node!=undefined && node!=null) {
		node.style.backgroundColor="#8AC";
		node.style.color="#000"; 
		node.style.border="thin solid #556";
	}
	
}


function filterOrders() { 	showcat(OrdersCatselected);}

function refreshclients() {	
	
	setNodeContent("clientlist"," Loading ...");	
	ldPageParam("./v4/getClients.php", null, null, "reloadClients", false);
}

function reloadClients () {	gotoAppli("V4_Consulte", "", "");} //window.parent., window.location.reload(); , window.self	window.top.frames["ifr1"].window.location.reload();


function showclientlist() { toggleCombo("client", true); }


function order(pid, pstate, pname, pdate, pmntvt, pmnthon, pmntachat) {
	
	this.id		= pid;
	this.state	= pstate;
	this.name	= pname;
	this.date	= pdate;
	this.mntvt	= moneyValue(pmntvt);
	this.mnthon	= moneyValue(pmnthon);	
	this.mntachat=moneyValue(pmntachat);
}

//order.prototype.getValue = function() {}
 
function calculateTotalOrders(data, cat, startdate, enddate ) {
	
	// data = array orders with values state, date, mntvte, mnthono, mntachat
	// cat : Completed,  Canceled,  Other
	var values=null;	
	var items=data;
	var nitems=items.length; //-1
	if (nitems>0) {
		
		var totalvente=0;
		var totalhons =0;
		var totalachat=0;
		var totalmarge=0;
		var ntotaled_items=0;
		var lastorder="";
		
		var item  = null;
			
		var showstart=false;
		var showend=true;
		for (var i=0; i<nitems; i++) {
			item = items[(nitems-i-1)];		
			
			if (item.state==cat) {
	
				//alert(item.state+" = " +cat+ ", start : "+startdate +", end : "+ enddate);
				var itemok=false;
				if (showstart==false)
					if (startdate=="") {
						showstart=true;
					}
					else if (item.date >= startdate  )
						showstart=true;
				
				if ( (showstart==true) && (showend==true) ) {
					if (enddate!="" )
						if ( enddate < item.date )
							showend=false;
				}	
				
				if ( (showstart==true) && (showend==true) ) 
					itemok=true;
	
				if (itemok == true) {
					ntotaled_items++;
					
					totalvente+=item.mntvt;
					totalhons +=item.mnthon;
					totalachat+=item.mntachat;
					//if ( (item.mntachat>0) && (item.mntvt>0) )
					totalmarge+=(item.mntvt-item.mntachat);
					lastorder=item.date;
					//console.debug("order implicated : "+itemok+ ", amount :" +item.mntvt);
				}
			}
		}
		var idp		 = (totalvente>0) ? ((totalmarge/totalvente) * 100) : 0 ;
		var cmdmoyen = (ntotaled_items>0) ? fmt_Number(totalvente/ntotaled_items, true) : "0";
		
		values=new Array();
		values["tvente"] 	= fmt_Number(totalvente, true);
		values["thons"] 	= fmt_Number(totalhons , true);
		values["tachats"] 	= fmt_Number(totalachat, true);
		values["marge"] 	= fmt_Number(totalmarge, true);
		values["idp"]		= ""+idp;
		values["sidp"]		= (idp>0) ? (" ("+fmt_Number(idp, true)+"%)") : "";
		values["norders"] 	= ""+ntotaled_items;
		values["cmdmoyen"]	= cmdmoyen;
		values["lastorder"] = ""+lastorder;
	}
	
	return values;
}


function calculateTotals(cat, startdate, enddate) {
	
	// Data has format : $statecode,$year$month$day,$mntvt,$mnthon,$mntachat|

	var totals=new Array();
	//var itemsstring=getNodeContent("V4Transactions");
	totals=calculateTotalOrders(orders, cat, startdate, enddate );
	setNodeContent("Total_mntvt",	totals["tvente"] );
	setNodeContent("Total_mnthon", 	totals["thons"]);
	setNodeContent("Total_mntachat",totals["tachats"]);
	
	var statinfo = "Marge :&nbsp;" + totals["marge"] + totals["sidp"]+"<br/>"+"Cmd moyenne : "+totals["cmdmoyen"];
	setNodeContent("Total_V4Stats", statinfo );
	//console.debug("Totals :"+ totals["tvente"] + " " + totals["thons"] + " " + totals["tachats"]+ " "+ statinfo);

}




function fmt_Number(pNum, zeroblanc) {
	
	if (zeroblanc!=undefined && zeroblanc==true && pNum==0 )
		return "";
	
	var num  = new Number(pNum);
	var snum = num.toFixed(2);
	snum=snum.replace(",", "");
	snum=snum.replace(".", ",");

	var fmtstr="";
	
	// thousands sep
	var posv=snum.indexOf(",");
	if (posv>0) {
		
		var wholenum=snum.substr(0, posv);
		var dec=snum.substr(posv);
		
		var len = wholenum.length;
		var car="";
		for (var i=0; i<len; i++) {
			
			car = wholenum.charAt(len-1-i);
			fmtstr=car+fmtstr;
			if ( ((i+1)%3==0) && ((i+1)!=len) ) 
				fmtstr="."+fmtstr;
		}	
		fmtstr+=dec;
	}
	else {
		fmtstr = snum;
	}
	
	return fmtstr;

}


/*
function submit_frm() {
	
	alert("submitfrm");
	document.getElementByID('TextBox1').value= parent.applilog;
	document.getElementByID('TextBox2').value= parent.applipw;

}

function submit_frm(pfrnode) {
	
	var frnode=document.getElementById(pfrnode);
	var frdoc=frnode.contentDocument;
	if (!frdoc) {
		var frwin=frnode.contentWindow;
		frdoc=frwin.document;
	}

	// fill
	var node=document.getElementById("Login_UserName");
	if (node=="undefined" || node==null)
		node=frdoc.getElementById("Login_UserName");
	node.value=applilog;
	
	frdoc.getElementById("Login_Password").value=applipw;
	node=document.getElementById("Login_UserName");
	if (node=="undefined" || node==null)
		node=frdoc.getElementById("Login_UserName");
	node.value=applilog;

	// Submit
	
	node=document.getElementById("Login_LoginButton");
	if (node=="undefined" || node==null)
		node=frdoc.getElementById("Login_LoginButton");
	node.click();
	
	//var node=frdoc.getElementById("form1");
	//if (node==undefined || node==null) 	node=document.getElementById("form1");
	//if (node!=undefined && node!=null) 	node.submit();
	
}
*/


