{// Header
	var header=document.getElementById('header');
	Jade.DOM.Add(header,'div','logo');
	Jade.DOM.Add(header,'div','texto',null,Jade.Lang.Get('install_of'));
	Jade.DOM.Add(header,'div','wizard',null,Jade.Lang.Get('install_wizard'));
}
{// Body
	var gpBody=Jade.Objects.Container();
	gpBody.Location(0,0,600,400);
	gpBody.Add();
	
	var lblTitle=Jade.Objects.Text(Jade.Lang.Get('press_next'));
	lblTitle.Location(10,10,570,20);
	lblTitle.style.fontWeight='bold';
	lblTitle.style.fontSize='12px';
	lblTitle.Add(gpBody);
	var lblInfo=Jade.Objects.Text();
	lblInfo.Location(15,30,570,300);
	lblInfo.Add(gpBody);
	
	Jade.DOM.Add(gpBody,'div','divisor');
	var lblStatus=Jade.Objects.Text(Jade.Lang.Get('press_next'));
	lblStatus.Location(15,305,570,30);
	lblStatus.className+=' legend';
	lblStatus.text.style.bottom='0';
	lblStatus.Add(gpBody);

	var cmdPrevius=Jade.Objects.Button('« '+Jade.Lang.Get('previus'));
	cmdPrevius.Location(10,345,180,20);
	cmdPrevius.Add(gpBody);	
	var cmdNext=Jade.Objects.Button(Jade.Lang.Get('next')+' »');
	cmdNext.Location(195,345,180,20);
	cmdNext.Add(gpBody);
	var cmdFinish=Jade.Objects.Button(Jade.Lang.Get('finish'));
	cmdFinish.Location(380,345,210,20);
	cmdFinish.Add(gpBody);
	Jade.FX.Hide(cmdFinish);
	
	var cmdTry=Jade.Objects.Button(Jade.Lang.Get('try_again'));
	cmdTry.Location(410,345,180,20);
	cmdTry.SetStyle('special');
	cmdTry.Add(gpBody);
	
	var lblFoot=Jade.Objects.Text('Copyright © 2011 · PSD Software · '+Jade.Lang.Get("copyright"));
	lblFoot.Location(15,380,570,20);
	lblFoot.SetTextAlign('center');
	lblFoot.Add(gpBody);
	
	var secciones=[];
}
{// Easy construct
	function construct_container(step,top){
		secciones[step]=Jade.DOM.Add(gpBody,'div');
		secciones[step].style.position='absolute';
		secciones[step].style.left='30px';
		secciones[step].style.top=top+'px';
		
		secciones[step].add=function(name,x,y,width,height,type,text){
			var control = {};
			var control_type=true;
			switch(type){
				case 'text': case 'label':
					control = new Jade.Objects.Text(text);
					break;
				case 'textbox':
					control = new Jade.Objects.TextBox();
					break;
				case 'password':
					control = new Jade.Objects.TextBox('password')
					break;
				case 'combobox': case 'combo':
					control = new Jade.Objects.ComboBox();
					break;
				case 'group': case 'container':
					control = new Jade.Objects.Container();
					break;
				case 'checkbox':
					control = new Jade.Objects.CheckBox(text);
					break;
				case 'message':
					control = new Jade.Objects.Container();
					control.text = new Jade.Objects.Text(text);
					control.text.Location(10,10,width-20,height-20);
					control.text.Add(control);
					control.set_style=function(style){ this.SetStyle(style);	}
					control.set_text=function(texto){ this.text.SetText(texto) }
					control.show=function(){ Jade.FX.Show(this); }
					control.hide=function(){ Jade.FX.Hide(this); }
					break;
			}
			switch(name){
				case 'validator':
					control = new Jade.Objects.Validator();
					control._parent=this;
					control_type=false;
					control.add=function(controls,stament,labels){
						var fControls=[];
						if(typeof(controls)==typeof([])) {
							for(var i in controls){
								fControls.push(this._parent[controls[i]]);
							}
						}
						else { fControls=this._parent[controls]; }
						this.Add(fControls,stament,labels);
					}
					control.validate=function(){ return this.Validate(); };
					break;
			}
			if(control_type){
				control.Location(x,y,width,height);
				control.Add(this);
			}
			this[name] = control;
		}
	}

}
{// Step 1
	construct_container(1,120);
	
	secciones[1].add('lng',150,5,240,20,'combo');
	
	secciones[1].lng.SetStyle('lng');
	for(var i=0,iLen=Jade.Lang.languages.length;i<iLen;i++){
		var item=Jade.Lang.languages[i];
		secciones[1].lng.AddItem(item.name,item.code,item.code);
		if(Jade.Lang.language==item.code){ secciones[1].lng.SetSelectedIndex(i); }
	}
	secciones[1].lng.onchange = function() {
		Jade.Lang.SetLanguage(this.selectedKey);
		Jade.Redirect(window.location);
	}
	secciones[1].inicial = function() {
		cmdPrevius.SetEnabled(false);
	}
}
{// Step 3
	construct_container(3,80);
	secciones[3].error = false;
	secciones[3].inicial = function() {
		Jade.FX.Show(cmdTry);
		secciones[3].accion();
	}
	secciones[3].accion = function() {
		var ajax=Jade.Ajax();
		ajax.Run('ajax.check_enviroment.php');
		var text='';
		//PHP
		text+='<li class="'+Jade.iif(ajax.json.php,'ok','error')+'">';
		text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.php,'ok','error'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_php'),ajax.json.php_version)+'. ';
		if(!ajax.json.php){ text+=Jade.Strings.Format(Jade.Lang.Get('step_3_php_error'),ajax.json.php_minor)+'. '; }
		text+='</li>';
		//Mysql
		text+='<li class="'+Jade.iif(ajax.json.mysql,'ok','warn')+'">';
		text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.mysql,'ok','warn'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_extension_'+ajax.json.mysql),'\'mysql\'')+'. ';
		if(!ajax.json.mysql){ text+=' ('+Jade.Lang.Get('step_3_mysql')+')'; }
		text+='</li>';
		//Mssql
		text+='<li class="'+Jade.iif(ajax.json.mssql||ajax.json.sqlsrv,'ok','warn')+'">';
		text+=Jade.Lang.Get('step_3_'+((ajax.json.mssql||ajax.json.sqlsrv)?'ok':'warn'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_extension_'+(ajax.json.mssql||ajax.json.sqlsrv)),'\'mssql\'')+'. ';
		if(!ajax.json.mssql){ text+=' ('+Jade.Lang.Get('step_3_mssql')+')'; }
		text+='</li>';
		//Oracle
		text+='<li class="'+Jade.iif(ajax.json.oci,'ok','warn')+'">';
		text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.oci,'ok','warn'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_extension_'+ajax.json.oci),'\'oci8\'')+'. ';
		if(!ajax.json.oci){ text+=' ('+Jade.Lang.Get('step_3_oci')+')'; }
		text+='</li>';		
		//Memory
		text+='<li class="'+Jade.iif(ajax.json.memory,'ok','error')+'">';
		text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.memory,'ok','error'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_php_var'),'\'memory_limit\'',ajax.json.memory_limit)+'. ';
		if(!ajax.json.memory){ text+=Jade.Strings.Format(Jade.Lang.Get('step_3_php_var_fail'),'\'memory_limit\'',ajax.json.memory_suggested)+'. '; }
		text+='</li>';		
		//ZEND
		text+='<li class="'+Jade.iif(ajax.json.zend,'error','ok')+'">';
		text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.zend,'error','ok'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_php_var'),'\'zend.ze1_compatibility_mode\'',ajax.json.zend)+'. ';
		if(ajax.json.zend){
			text+=Jade.Strings.Format(Jade.Lang.Get('step_3_php_var_fail'),'\'zend.ze1_compatibility_mode\'','1')+'. '; 
		}
		text+='</li>';
		//Dirs
		//text+='<li class="'+Jade.iif(ajax.json.dir_main,'ok','error')+'">';
		//text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.dir_main,'ok','error'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_dir_'+ajax.json.dir_main),Jade.Lang.Get('step_3_main_dir'))+'. ';
		text+='<li class="'+Jade.iif(ajax.json.dir_config,'ok','error')+'">';
		text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.dir_config,'ok','error'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_dir_'+ajax.json.dir_config),'\'/config\'')+'. ';
		//text+='<li class="'+Jade.iif(ajax.json.dir_update,'ok','error')+'">';
		//text+=Jade.Lang.Get('step_3_'+Jade.iif(ajax.json.dir_update,'ok','error'))+': '+Jade.Strings.Format(Jade.Lang.Get('step_3_dir_'+ajax.json.dir_update),'\'/update\'')+'. ';
		//
		secciones[3].innerHTML=text;
		cmdNext.SetEnabled(Jade.iif(ajax.json.error_all,false,true));
		lblStatus.SetText(Jade.iif(ajax.json.error_all,Jade.Lang.Get('install_step_error'),Jade.Lang.Get('install_press_next')));
	}
}
{// Step 4
	construct_container(4,180);
	
	secciones[4].add('lbl_user',80,5,180,20,'text',Jade.Lang.Get('user')+':');
	secciones[4].add('user',260,0,200,20,'textbox');
	secciones[4].add('lbl_pass',80,35,180,20,'text',Jade.Lang.Get('pass')+':');
	secciones[4].add('pass',260,30,200,20,'password');
	secciones[4].add('lbl_pass',80,65,180,20,'text',Jade.Lang.Get('confirm_pass')+':');
	secciones[4].add('confirm_pass',260,60,200,20,'password');
	
	secciones[4].add('validator');
	secciones[4].validator.add('user','required',Jade.Lang.Get('user_name'));
	secciones[4].validator.add('pass','required',Jade.Lang.Get('pass'));
	secciones[4].validator.add('confirm_pass','required',Jade.Lang.Get('confirm_pass'));
	secciones[4].validator.add(['pass','confirm_pass'],'equal',[Jade.Lang.Get('pass'),Jade.Lang.Get('confirm_pass')]);
	
	secciones[4].inicial=function(){
		cmdNext.onclick=function(){
			if(secciones[4].validator.validate()){ MoveNext(); }
		}
	}
}
{// Step 5
	construct_container(5,130);
	
	secciones[5].add('lbl_type',80,5,180,20,'text',Jade.Lang.Get('db_type')+':');
	secciones[5].add('type',260,0,200,20,'combo');

	secciones[5].add('lbl_path',80,30,180,20,'text',Jade.Lang.Get('db_path')+':');
	secciones[5].add('path',260,25,200,20,'textbox');
	
	secciones[5].add('lbl_user',80,55,180,20,'text',Jade.Lang.Get('db_user')+':');
	secciones[5].add('user',260,50,200,20,'textbox');
	
	secciones[5].add('lbl_pass',80,80,180,20,'text',Jade.Lang.Get('db_pass')+':');
	secciones[5].add('pass',260,75,200,20,'password');
	
	secciones[5].add('lbl_name',80,105,180,20,'text',Jade.Lang.Get('db_name')+':');
	secciones[5].add('name',260,100,200,20,'textbox');
	
	secciones[5].add('status',0,125,540,45,'message');
	secciones[5].error=false;
	
	
	secciones[5].type.AddItem('MySQL Server','0');
	secciones[5].type.AddItem('Microsoft SQL Server','1');
	secciones[5].type.AddItem('Oracle Server','2');
	
	secciones[5].inicial = function() {
		Jade.FX.Show(cmdTry);
		secciones[5].status.hide();
		
		cmdNext.onclick=function(){
			secciones[5].accion();
			if(!secciones[5].error) { MoveNext(); }
		}
		secciones[5].name.SetText('ZKTime');
	}
	
	secciones[5].accion = function(){
		var ajax=new Jade.Ajax();
		ajax.AddParam('type',secciones[5].type.selectedKey);
		ajax.AddParam('path',secciones[5].path.GetText());
		ajax.AddParam('name',secciones[5].name.GetText());
		ajax.AddParam('user',secciones[5].user.GetText());
		ajax.AddParam('pass',secciones[5].pass.GetText());
		ajax.Run('ajax.check_db.php');
		if(ajax.json.error){
			secciones[5].status.set_style('red');
			secciones[5].status.show();
			secciones[5].status.set_text(Jade.Strings.Format(Jade.Lang.Get('db_error_'+ajax.json.error_id),"'"+secciones[5].name.GetText()+"'")+":<br>"+ajax.json.message);
			lblStatus.SetText(Jade.Lang.Get('install_step_error'));
			secciones[5].error = true;
		}
		else{
			secciones[5].status.set_style('green');
			secciones[5].status.show();
			secciones[5].status.set_text(Jade.Lang.Get('db_ok'));
			lblStatus.SetText(Jade.Lang.Get('install_press_next'));
			secciones[5].error = false;
		}
	}
}
{// Step 6
	construct_container(6,80);
	secciones[6].add('lbl_language',30,0,480,20,'text',Jade.Lang.Get('step_6_language')+':');
	secciones[6].add('lng',150,25,240,20,'combo');
	secciones[6].add('lbl_company',30,55,480,20,'text',Jade.Lang.Get('step_6_company')+':');
	secciones[6].add('company',150,80,240,20,'combo');
	secciones[6].add('lbl_show_company',30,110,480,60,'text',Jade.Lang.Get('step_6_show_company_msg')+':');
	secciones[6].add('show_company',150,170,420,60,'checkbox',Jade.Lang.Get('step_6_show_company'));
	
	secciones[6].lng.SetStyle('lng');
	for(var i=0; i<Jade.Lang.languages.length; i++){
		var item=Jade.Lang.languages[i];
		secciones[6].lng.AddItem(item.name,item.code,item.code);
		if(Jade.Lang.lng==item.code){ secciones[6].lng.SetSelectedIndex(i); }
	}
	secciones[6].show_company.SetCheck(true);
	
	secciones[6].inicial=function(){
		var ajax=Jade.Ajax();
		ajax.AddParam('type',secciones[5].type.selectedKey);
		ajax.AddParam('path',secciones[5].path.GetText());
		ajax.AddParam('name',secciones[5].name.GetText());
		ajax.AddParam('user',secciones[5].user.GetText());
		ajax.AddParam('pass',secciones[5].pass.GetText());
		
		ajax.AddParam('query',"SELECT Codigo, Valor FROM EMPRESA_CONFIGURACION WHERE LOWER(Nombre)=LOWER('descripcion') ORDER BY Codigo");
		ajax.Run('ajax.db_query.php');
		secciones[6].company.Clear();
		if($.isDefined(ajax.json)){
			for(var i=0, iLen=ajax.json.row.length;i<iLen;i++){
				var item=ajax.json.row[i];
				if(secciones[5].type.selectedKey=="2"){
					secciones[6].company.AddItem(item.CODIGO+' - '+item.VALOR, item.CODIGO);
				}
				else{
					secciones[6].company.AddItem(item.Codigo+' - '+item.Valor, item.Codigo);
				}
			}
		}
	}
}
{// Step 7
	construct_container(7,80);
	secciones[7].inicial=function(){
		Jade.FX.Show(cmdFinish);
		cmdPrevius.SetEnabled(false);
		cmdNext.SetEnabled(false);
		Jade.FX.Hide(lblStatus);
		
		var ajaxIni=new Jade.Ajax();
		ajaxIni.AddParam('file','../config/config.ini');
		var values=['PATH=','CSS_STYLE=default'];
		values.push('DB_TYPE='+secciones[5].type.selectedKey);
		values.push('DB_IP='+secciones[5].path.GetText());
		values.push('DB_NAME='+secciones[5].name.GetText());
		values.push('DB_USER='+secciones[5].user.GetText());
		values.push('DB_PASS='+secciones[5].pass.GetText());
		
		values.push('ADMIN_USER='+Jade.Encrypt.MD5(secciones[4].user.GetText()));
		values.push('ADMIN_PASS='+Jade.Encrypt.MD5(secciones[4].pass.GetText()));
		
		values.push('LANGUAGE_DEFAULT='+secciones[6].lng.selectedKey);
		values.push('COMPANY_SHOW='+Jade.iif(secciones[6].show_company.GetCheck(),1,0));
		values.push('COMPANY_DEFAULT='+secciones[6].company.selectedKey);
		values.push('DEBUG_MODE=0');
		
		ajaxIni.AddParamArray('values',values);
		ajaxIni.Run('ajax.write_ini.php')
	}
}
{ //Change step
	var seccion_actual=1;
	function MoveNext(){ ChangeStep(seccion_actual+1); }
	function MovePrevius(){ ChangeStep(seccion_actual-1); }
	cmdTry.onclick=function(){
		if(typeof(secciones[seccion_actual].accion)!="undefined"){ secciones[seccion_actual].accion(); };
	}
	cmdFinish.onclick=function(){
		Jade.Redirect('../');
	}
	function ShowStep(step){
		for(var i in secciones){
			Jade.FX.Hide(secciones[i]);
		}
		if(typeof(secciones[step])!="undefined"){
			Jade.FX.Show(secciones[step]);
			if(typeof(secciones[step].inicial)!="undefined"){ secciones[step].inicial(); };
		}
	}
	function ChangeStep(step){
		lblTitle.SetText((Jade.Lang.Get('step')+' '+step+': <font color="#0077FF">'+Jade.Lang.Get('install_title_step_'+step)+'</font>').toUpperCase());
		lblInfo.SetText(Jade.Lang.Get('install_step_'+step));

		lblStatus.SetText(Jade.Lang.Get('install_press_next'));
		cmdPrevius.onclick=MovePrevius;
		cmdNext.onclick=MoveNext;
		cmdPrevius.SetEnabled(true);
		cmdNext.SetEnabled(true);
		Jade.FX.Hide(cmdTry);

		ShowStep(step);
		seccion_actual=step;
	}
	ChangeStep(1);
}