var activeOnglet=1;
var activeOp=-1;
var updateClasses=true;
var updateFields=true;
var tables;
var db;
var host;
var user;
var pwd;
var status=new Array();
status[0]="Entrez les paramètres de connexion à la base";
status[1]="Sélectionnez la base de données";
status[2]="Sélectionnez les tables/classes à inclure";
status[3]="Vous pouvez cliquer sur l'onglet <b>Classes</b>";
status[4]="Sélectionnez les champs à inclure";
status[5]="Vous pouvez cliquer sur l'onglet <b>Paramètres</b>";
status[6]="Choisissez les options d'enregistrement et de génération";
status[7]="Cliquez sur <b>Générer</b> pour générer et enregistrer les fichiers";
status[8]="Cliquez sur le(s) fichier(s) généré(s) pour visualiser formulaire(s) ou liste(s)";
status[9]="Configuration sauvegardée";

status['error1']="<font color='red'>Opération impossible actuellement</font>";
updateStatusFile=function(){
	if((updateClasses==true)||(updateFields==true)){
		document.getElementById("msgInifile").innerHTML="modifié";
	}
}
showStatus=function(index){
	document.getElementById("s1").innerHTML=status[index];
	updateStatusFile();
}
updateck=function(id){
	var obj=document.getElementById(id);
	var objs=document.getElementById('s'+id);
	var objget=document.getElementById('get'+id);
	var objset=document.getElementById('set'+id);		
	if (obj!=undefined){
		if (objs.checked|objget.checked|objset.checked) obj.checked=true;
	}
	updateFields=true;
	showStatus(5);
}
checkAll=function(obj){
	var name=obj.name.substring(1);
	var checkBoxs=document.getElementsByName(name);
	name=name.substring(name.indexOf('ckField'));
	for (var i =0; i < checkBoxs.length; i++){
		checkBoxs[i].checked=obj.checked;
		updateck(name+"_"+i);
		}
}

activateOp=function(op){
	if (activeOp!=-1) document.getElementById("op"+activeOp).className='';
	try{
	document.getElementById("op"+op).className='selected';
	activeOp=op;}
	catch(ex){}
}
checkOp=function(op,check){
	if(check){
		document.getElementById("iop"+op).src="images/checked.gif";
	}
	else
	{
		document.getElementById("iop"+op).src="images/unchecked.gif";	
	}
	if (op!=5) checkOp(5,false);	
}
saveConfig=function(filename,nextFunction){
	showSrc();
	getHttp("msgInifile","saveConfig.php?inifile="+filename,nextFunction,indicator);
	showStatus(9);	
}
loadDb=function(nextFunction){
	host=document.getElementById("host").value;
	user=document.getElementById("user").value;
	pwd=document.getElementById("pwd").value;
	getHttp("database-div","db.php?host="+host+"&user="+user+"&pwd="+pwd,nextFunction,indicator);
	showStatus(1);
	return false;
}
loadtables=function(adb,nextFunction){
if(adb!=""){
	db=adb;
	getHttp("divtables","tables.php?db="+db+"&host="+host+"&user="+user+"&pwd="+pwd,nextFunction,indicator);
	//document.getElementById("base").value=db;
	checkOp(1,true);
	checkOp(2,false);
	checkOp(3,false);
	activateOp(1);
	showStatus(2);	
	document.getElementById("ckconnexion").checked=true;
	}
}
createClasses=function(save){
	for (var i=1;i<tables.length;i++){
		showResponse(i,save);
	}
}
showAllSrc=function(save,nextFunction){
var all="";
var params="";
	
	try{
		for (var i=1;i<tables.length;i++)
			all+=document.getElementById("src_"+tables[i]).value;
	}
	catch(e) 
    { }	
	params="all="+escape(all);
	params+="&dir="+escape(document.getElementById("dir").value);
	params+="&classfilename="+escape(document.getElementById("classfilename").value);
	params+="&kobjectfolder="+escape(document.getElementById("kobjectfolder").value);	
	if (save) {
		params+="&save=true";
		checkOp(5,true);
		showStatus(8);
	}
	params+="&connexion="+document.getElementById("ckconnexion").checked;	
	if (document.getElementById("ckconnexion").checked){
		params+="&host="+document.getElementById("host").value;
		params+="&user="+document.getElementById("user").value;
		params+="&pwd="+document.getElementById("pwd").value;
		params+="&base="+document.getElementById("db").value;
	}	
	postHttp("allSrc","allClasses.php",params,nextFunction,indicator);
	
	var div=document.getElementById("allSrc");
	if (document.getElementById("ckshow").checked){
		schowDiv(div,"show");
	}
	else
	{
		schowDiv(div,"hide");
	}	
	updateFields=false;
}
loadResponse=function(index,save,nextFunction){
	if (index<tables.length)
		showResponse(index,save,function(){loadResponse(index+1,save,nextFunction)});
	else
		if (nextFunction!=null) {try{ nextFunction();} catch(e){alert('no');}};
}
loadAllResponse=function(nextFunction,save){
	loadResponse(0,save,nextFunction);
}
save=function(){
	showAllSrc(false,function(){saveConfig(document.getElementById('inifile').value);});
}
force=function(file){
	getHttp('msgInifile','saveConfig.php?force=1&inifile='+file,null,indicator);
}
showSrc=function(){

	for (var i=1;i<tables.length;i++){
		if (document.getElementById("ckShowSrc").checked){		
				showResponse(i,false);
				schowDiv(document.getElementById("src"+i),"show");
		}
		else
			schowDiv(document.getElementById("src"+i),"hide");
	}
}
showOneSrc=function(index){
	if (document.getElementById("ckShowSrc").checked){		
		showResponse(index,false);
		schowDiv(document.getElementById("src"+index),"show");
	}
	else
		schowDiv(document.getElementById("src"+index),"hide");
}
showResponse=function(index,save,nextFunction){
	var params="db="+escape(document.getElementById("db").value);
	params+="&table="+tables[index];
	params+="&fields="+escape(getCheckedValues(document.getElementsByName("ckField"+index)));
	params+="&sfields="+escape(getCheckedValues(document.getElementsByName("sckField"+index)));
	params+="&getfields="+escape(getCheckedValues(document.getElementsByName("getckField"+index)));
	params+="&setfields="+escape(getCheckedValues(document.getElementsByName("setckField"+index)));
	var keyfields="";
	try{
		keyfields=escape(document.getElementById("keyfields"+index).value);
	}
	catch(e){}
	params+="&keyfields="+keyfields;
	params+="&dir="+escape(document.getElementById("dir").value);
	params+="&classfilename="+escape(document.getElementById("classfilename").value);
	params+="&kobjectfolder="+escape(document.getElementById("kobjectfolder").value);
	if (save) {
		params+="&save=true";
	}
	params+="&liste="+document.getElementById("cliste").checked;
	params+="&form="+document.getElementById("cform").checked;
	params+="&connexion="+document.getElementById("ckconnexion").checked;
	if (document.getElementById("ckconnexion").checked){
		params+="&host="+document.getElementById("host").value;
		params+="&user="+document.getElementById("user").value;
		params+="&pwd="+document.getElementById("pwd").value;
		params+="&base="+document.getElementById("db").value;
	}
	postHttp("src"+index,"response.php",params,nextFunction,indicator);
}
change=function(dir){
	getHttp("divdir","dir.php?dir="+dir,null,indicator);
}
checkFields=function(index,table){
	var retour='';
	var f;
	var fields=document.getElementsByName("ckField"+index);
	var Length = fields.length;
	var ok=true;
	var id=false;
	var containsId=false;
	if(Length == undefined)
	try{
		f= [fields.value];
		
		}
	catch(e){}
	else
	{
		f=new Array(Length);
		for(var i = 0; i < Length; i++) {
			f[i]=fields[i].value;
			if (checkaField(f[i])){
				ok=false;
				retour+='`'+f[i]+'` non conforme, ';
			}
			if (checkaFieldId(f[i])) id=true;
		}
	}
	if (id==false) 	retour+='`id` absent';
	if (!(ok&id)) document.getElementById("autocorrect"+index).innerHTML='<img  alt="" name="iop5" id="iop5" src="images/unchecked.gif" border="0">&nbsp'+retour+'&nbsp<a href="#" onclick="javascript:correctfields(\''+index+'\',\''+table+'\');">Corriger</a>';
	else document.getElementById("autocorrect"+index).innerHTML='<img  name="iop5" id="iop5" alt="" src="images/checked.gif" border="0">&nbsp;Table `'+table+'` vérifiée';
}
checkaFieldId=function(af){
var resultat = 	af.search(/^(id|ID)$/);
 return (resultat != -1);
}
checkaField=function(af){
	var resultat = 	af.search(/^(([0-9]|[A-Z]|[a-z]|[_-é])+)$/);
 	return (resultat == -1);
}

getFields=function(index,url,table,func)
{ 
	schowDiv(indicator,'show');
    var xhrequest; 
	var url;
    try {xhrequest = new XMLHttpRequest(); }                 
    catch(e) 
    {    
      xhrequest = new ActiveXObject("Microsoft.XMLHTTP");
    } 

    xhrequest.onreadystatechange  = function()
    { 
         if(xhrequest.readyState  == 4)
         {
         	schowDiv(indicator,'hide');        
              if(xhrequest.status  == 200){ 
				setInnerHTML(document.getElementById("divFields"+index), xhrequest.responseText);
				checkFields(index,table);
				showOneSrc(index);
				if (func!=null) {
					try{
						func(table,'ckField');
						func(table,'sckField');
						func(table,'getckField');
						func(table,'setckField');
					} catch(e){alert('no');}}
				 }
              else 
                 document.getElementById(id).innerHTML="Erreur " + xhrequest.status;
         }
    }; 
   xhrequest.open( "GET", url,  true); 
   xhrequest.send(null);
} 
correctfields=function(index,table)
{ 
	schowDiv(indicator,'show');
    var xhrequest; 
	var url="autocorrect.php?";
	var db=escape(document.getElementById("db").value);
	var params="db="+db;
	params+="&table="+table;	
	params+="&connexion="+document.getElementById("ckconnexion").checked;
	if (document.getElementById("ckconnexion").checked){
		params+="&host="+document.getElementById("host").value;
		params+="&user="+document.getElementById("user").value;
		params+="&pwd="+document.getElementById("pwd").value;
		params+="&base="+document.getElementById("db").value;
	}	
    try {xhrequest = new XMLHttpRequest(); }                 
    catch(e) 
    {    
      xhrequest = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    xhrequest.onreadystatechange  = function()
    { 
         if(xhrequest.readyState  == 4)
         {
              if(xhrequest.status  == 200){ 
					checkOp(3,false);
					checkOp(2,true);
					activateOp(2);
					getFields(index,'fields.php?db='+db+'&table='+table+'&num='+index,table);
				 }
         }
    }; 
   xhrequest.open( "GET", url+params,  true); 
   xhrequest.send(null);
}
showClassName=function(index,value){
showStatus(3);
updateClasses=true;
if (document.getElementById('radioTable'+index).checked)
	document.getElementById('className'+index).innerHTML='K'+value;
else
	document.getElementById('className'+index).innerHTML='';
}
selectItem=function(index){
try{	
	switch(index){
		case 1:
			document.getElementById('aOnglet1').click();
			document.getElementById('db').click();
			break;
		case 2:
			document.getElementById('aOnglet1').click();
			document.getElementById('radioTable0').click();
			break;
		case 3:
			document.getElementById('aOnglet2').click();
			document.getElementById('ckField1_0').click();
			break;
		case 4:
			document.getElementById('aOnglet3').click();
			document.getElementById('classfilename').blur();
			break;
		case 5:
			document.getElementById('aOnglet4').click();
			break;
		}
	}
	catch(ex){showStatus('error1');}	
}
showOnglet_=function(index){
tables=getCheckedValues(document.getElementsByName("radioTable")).split(",");
if (tables.length<2) index=1;
if (index!=activeOnglet)
{
	var div2=document.getElementById("onglet"+index);
	var div1=document.getElementById("onglet"+activeOnglet);
	document.getElementById("tab"+activeOnglet).className="";
	document.getElementById("tab"+index).className="current";
	schowDiv(div2,"show");
	schowDiv(div1,"hide");
	activeOnglet=index;}
	switch(index){
		case 2:
			showClasses();
			showStatus(4);
			break;
		case 3:
			showStatus(6);
			break;
		case 4:
			showStatus(7);
			//createClasses(false);showAllSrc();
			loadAllResponse(showAllSrc);
			break;
	}
}
showOnglet=function(index){
	showOnglet_(index);
}
showClasses=function(func){
if (updateClasses){
var str="<table>";
var db=escape(document.getElementById("db").value);
tables=getCheckedValues(document.getElementsByName("radioTable")).split(",");
for (var i=1;i<tables.length;i++){
	str+="<tr><td colspan='2'><label class='label' for='divFields"+i+"'>K"+tables[i]+"</label></td></tr>";
	str+="<tr><td><div class='editzone' name='divFields"+i+"' id='divFields"+i+"' style='width: 400px; height: 150px; overflow: auto'>&nbsp;</div></td><td rowspan='2'><div class='editzone' style='width:320px ;height:170px;display:none;overflow-y : auto;' name='src"+i+"' id='src"+i+"'></div></td></tr>";
	str+="<tr><td><div style='width: 400px' width='400px' class='message' name='autocorrect"+i+"' id='autocorrect"+i+"'>&nbsp;</div></td></tr>";
	}
str+="</table>";
document.getElementById('classes').innerHTML=str;
for (var i=1;i<tables.length;i++){
getFields(i,"fields.php?db="+db+"&host="+host+"&user="+user+"&pwd="+pwd+"&table="+tables[i]+"&num="+i,tables[i],func);}
}
updateClasses=false;
updateFields=true;
}
showCreatedFiles=function(){
	var dir=document.getElementById("dir").value;
	var classfilename=document.getElementById("classfilename").value;
	var kobjectfolder=document.getElementById("kobjectfolder").value;
	var str="";
	var cListe=document.getElementById("cliste").checked;
	var cForm=document.getElementById("cform").checked;
	for (var i=1;i<tables.length;i++){
		if (cListe)	str+="<a href='"+dir+"/listeK"+tables[i]+".php'>listeK"+tables[i]+".php</a><br/>";
		if (cForm)	str+="<a href='"+dir+"/formK"+tables[i]+".php'>formK"+tables[i]+".php</a><br/>";
		}
	str+="<a href='"+dir+"/"+classfilename+"'>"+classfilename+"</a><br/>";
	document.getElementById("files").innerHTML=str;
}
checkAllTables=function(){
	var tbl=document.getElementsByName("radioTable");
	for(var i=0;i<tbl.length;i++)
		document.getElementById("radioTable"+i).click();
}
ClipBoard=function(copytext)
{
var text=document.getElementById(copytext).innerText;
if(window.clipboardData) {
     window.clipboardData.setData('text',text);
     }
     else
      	alert("Si vous utilisez firefox, pour des raisons de sécurité, les scripts ne sont pas autorisés à communiquer avec le presse-papier :\n1. Saisir dans la barre d\'adresse : 'about:config'\n2. Changer signed.applets.codebase_principal_support = true\n");
}
pop_it=function(the_form) {
   my_form = eval(the_form)
   window.open("./wait.php", "popup", "height=440,width=640,menubar='no',toolbar='no',location='no',status='no',scrollbars='no'");
   my_form.target = "popup";
   my_form.submit();
}