var Installer = Class.create({
	actionFile: '',

	installCore: function() {
		var actionURL = this.getActionFile();
		var parameters = { command:'installCore' };
		var reloadPage = this.getActionFile();
		system.getMessageManager().showMessage('Instalando núcleo del sistema...',{color:'blue'});
		system.getActionManager().executeAndReloadContent(actionURL,parameters,reloadPage);
	},
	
	updateSystem: function() {
		var resultContainer = $('updateContainer');
		var actionFile = system.getLibraryPath() + 'plasticbriqFramework/install/_update_database.php';
		resultContainer.innerHTML = '';
		$('startUpdateButtonContainer').innerHTML = '';

		new Ajax.Request(actionFile,{
			method:'post',
			parameters:{command:'startSystemUpdate',style:system.getCurrentStyle()},
			onSuccess: function(transport) {
				resultContainer.innerHTML = transport.responseText;
				system.evalAllScripts('updateContainer');
			}
		});
	},

	updateModule: function(moduleName,statusContainer) {
		var actionFile = system.getLibraryPath() + 'plasticbriqFramework/install/_update_database.php';
		new Ajax.Request(actionFile,{
			method:'post',
			parameters:{command:'updateModule',style:system.getCurrentStyle(),moduleName:moduleName},
			onSuccess:function(transport) {
				if( transport.responseText=='OK' ) {
					$(statusContainer).innerHTML = 'Módulo actualizado con éxito';
					$(statusContainer).setStyle({color:'green'});
				}
				else {
					$(statusContainer).innerHTML = transport.responseText;
					$(statusContainer).setStyle({color:'red'});
				}
			}
		});
	},

	testDatabaseConfig: function() {
		var params = $('installDatabase').serialize(true);
		params.command = 'testDatabase';
		params.style = system.getCurrentStyle();
		new Ajax.Request(system.getLibraryPath() + 'plasticbriqFramework/install/_database.php',{
			method:'post',
			parameters:params,
			onSuccess:function(transport) {
				if( transport.responseText=='OK' ) {
					system.getMessageManager().showMessage('La configuración de la base de datos parece funcionar bien.',{color:'green'});
				}
				else {
					system.getMessageManager().showMessage(transport.responseText,{color:'red'});
				}
			}
		});
	},

	installModule: function(moduleName,statusContainer,itemContainer) {
		$(statusContainer).innerHTML = 'Instalando módulo ' + moduleName + '...';
		$(statusContainer).setStyle({color:'blue'});
		$(moduleName + '_action').innerHTML = '-';
		$(moduleName + '_action').setAttribute('onclick','');
		$(moduleName + '_action').setStyle({cursor:'default'});
		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters:{command:'installModule',style:system.getCurrentStyle(),moduleName:moduleName},
			onSuccess:function(transport) {
				$(itemContainer).innerHTML = transport.responseText;
				installer.reloadExtensionList();
			}
		});
	},
	
	uninstallModule: function(moduleName,statusContainer,itemContainer) {
		$(statusContainer).innerHTML = 'ATENCIÓN: Se perderán todos los datos del módulo ¿está seguro?';
		$(statusContainer).setStyle({color:'orange'});
		$(moduleName + '_action').innerHTML = 'Confirmar';
		$(moduleName + '_action').setAttribute('onclick',"installer.uninstallModuleConfirmation('" + 
													moduleName + "','" +
													statusContainer + "','" +
													itemContainer + "')");
	},
	
	uninstallModuleConfirmation: function(moduleName,statusContainer,itemContainer) {
		$(statusContainer).innerHTML = 'Desinstalando módulo ' + moduleName + '...';
		$(statusContainer).setStyle({color:'blue'});
		$(moduleName + '_action').innerHTML = '-';
		$(moduleName + '_action').setAttribute('onclick','');
		$(moduleName + '_action').setStyle({cursor:'default'});
		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters:{command:'uninstallModule',style:system.getCurrentStyle(),moduleName:moduleName},
			onSuccess:function(transport) {
				$(itemContainer).innerHTML = transport.responseText;
				installer.reloadExtensionList();
			}
		});
	},
	
	installExtension: function(moduleName,extensionName,statusContainer,itemContainer) {
		$(statusContainer).innerHTML = 'Instalando extensión ' + extensionName + '...';
		$(statusContainer).setStyle({color:'blue'});
		$(moduleName + '_' + extensionName + '_action').innerHTML = '-';
		$(moduleName + '_' + extensionName + '_action').setAttribute('onclick','');
		$(moduleName + '_' + extensionName + '_action').setStyle({cursor:'default'});
		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters:{command:'installExtension',style:system.getCurrentStyle(),moduleName:moduleName,extensionName:extensionName},
			onSuccess:function(transport) {
				$(itemContainer).innerHTML = transport.responseText;
			}
		});
	},
	
	uninstallExtension: function(moduleName,extensionName,statusContainer,itemContainer) {
		$(statusContainer).innerHTML = 'Desinstalando extensión ' + extensionName + '...';
		$(statusContainer).setStyle({color:'blue'});
		$(moduleName + '_' + extensionName + '_action').innerHTML = '-';
		$(moduleName + '_' + extensionName + '_action').setAttribute('onclick','');
		$(moduleName + '_' + extensionName + '_action').setStyle({cursor:'default'});
		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters:{command:'uninstallExtension',style:system.getCurrentStyle(),moduleName:moduleName,extensionName:extensionName},
			onSuccess:function(transport) {
				$(itemContainer).innerHTML = transport.responseText;
			}
		});
	},

	reloadExtensionList: function() {
		var container = $('installerExtensionContainer');
		new Ajax.Request(this.getActionFile(),{
			method:'post',
			parameters:{command:'reloadExtensionList',style:system.getCurrentStyle()},
			onSuccess:function(transport) {
				container.innerHTML = transport.responseText;
			}
		});
	},

	getActionFile: function() {
		if( this.actionFile=='' ) {
			this.actionFile = system.getLibraryPath() + 'plasticbriqFramework/install/_module_install.php';
		}
		return this.actionFile;
	}
});

var installer = new Installer();
