var SiteLayoutEditor = new Class.create({
	reloadURLList: function() {
		new Ajax.Request(system.getLibraryPath() + 'web/_siteLayout.php',{
			method:'post',
			parameters:{command:'reloadURLList',style:system.getCurrentStyle()},
			onSuccess:function(transport) {
				$('websiteList').innerHTML = transport.responseText;
			}
		});
	},
	
	saveSiteConfig: function() {
		var params = $('sitePreferences').serialize(true);
		params.command = 'saveSiteConfig';
		params.style = system.getCurrentStyle();
		new Ajax.Request(system.getLibraryPath() + 'web/_siteLayout.php',{
			method:'post',
			parameters:params,
			onSuccess:function(transport) {
				if( transport.responseText=='OK' ) {
					web.getLayoutEditor().reloadURLList();
				}
				else {
					system.getMessageManager().show(transport.responseText,{color:'red'});
				}
			}
		});
	}
});

var ACLPageSelector = new Class.create({
	actionFile:'',

	getTypeWithTableName: function(tableName) {
		switch(tableName) {
			case 'web_site':
				return 'site';
			case 'web_section':
				return 'section';
			case 'web_page':
				return 'page';
		}
	},

	addUser: function(tableName,id) {
		var user = $('denyUserList').value;
		var type = this.getTypeWithTableName(tableName);
		if( user ) {
			new Ajax.Request(this.getActionFile(),{
				method:'post',
				parameters:{command:'addUser',tableName:tableName,id:id,userId:user},
				onSuccess: function(transport) {
					web.getACLPageSelector().showACL(type,id);
				}
			});
		}
	},
	
	removeUser: function(tableName,id) {
		var user = $('grantUserList').value;
		var type = this.getTypeWithTableName(tableName);
		if( user ) {
			new Ajax.Request(this.getActionFile(),{
				method:'post',
				parameters:{command:'removeUser',tableName:tableName,id:id,userId:user},
				onSuccess: function(transport) {
					web.getACLPageSelector().showACL(type,id);
				}
			});
		}
	},
	
	addGroup: function(tableName,id) {
		var group = $('denyGroupList').value;
		var type = this.getTypeWithTableName(tableName);
		if( group ) {
			new Ajax.Request(this.getActionFile(),{
				method:'post',
				parameters:{command:'addGroup',tableName:tableName,id:id,groupId:group},
				onSuccess: function(transport) {
					web.getACLPageSelector().showACL(type,id);
				}
			});
		}
	},
	
	removeGroup: function(tableName,id) {
		var group = $('grantGroupList').value;
		var type = this.getTypeWithTableName(tableName);
		if( group ) {
			new Ajax.Request(this.getActionFile(),{
				method:'post',
				parameters:{command:'removeGroup',tableName:tableName,id:id,groupId:group},
				onSuccess: function(transport) {
					web.getACLPageSelector().showACL(type,id);
				}
			});
		}
	},
	
	changeAccessType: function(itemType,id) {
		var newType = $('access_type').value;
		var actionFile = this.getActionFile();
		new Ajax.Request(actionFile,{
			method:'post',
			parameters:{command:'changeAccessType',newType:newType,itemType:itemType,id:id},
			onSuccess:function(transport) {
				new Ajax.Request(actionFile,{
					method:'post',
					parameters:{command:'printACL',style:system.getCurrentStyle(),type:itemType,id:id},
					onSuccess:function(transport) {
						$('aclContainer').innerHTML = transport.responseText;
						switch( itemType ) {
							case 'site':
								web.getACLPageSelector().reloadSiteList();
								break;
							case 'section':
								web.getACLPageSelector().reloadSectionList();
								break;
							case 'page':
								web.getACLPageSelector().reloadPageList();
								break;
						}
					}
				});
			}
		});
	},

	showACL: function(type,id) {
		new Ajax.Request(this.getActionFile(),{
			method:'post',
			parameters:{command:'printACL',style:system.getCurrentStyle(),type:type,id:id},
			onSuccess:function(transport) {
				$('aclContainer').innerHTML = transport.responseText;
			}
		});
	},

	reloadSiteList: function() {
		var siteContainer = 'ACLPageSelectorSiteContainer';
		var sectionContainer = 'ACLPageSelectorSectionContainer';
		var pageContainer = 'ACLPageSelectorPageContainer';

		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters: { command:'loadSiteList' },
			onSuccess: function(transport) {
				$(siteContainer).innerHTML = transport.responseText;
				$(sectionContainer).innerHTML = '<select id="ACLPageSelectorSection" size="7" onchange="" style="width:100%;"></select>';
				$(pageContainer).innerHTML = '<select id="ACLPageSelectorPage" size="7" onchange="" style="width:100%;"></select>';
			}
		});
	},
	
	reloadSectionList: function() {
		var sectionContainer = 'ACLPageSelectorSectionContainer';
		var pageContainer = 'ACLPageSelectorPageContainer';
		var siteId = $('ACLPageSelectorSite').value;

		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters: { command:'loadSectionList', siteId:siteId },
			onSuccess: function(transport) {
				$(sectionContainer).innerHTML = transport.responseText;
				$(pageContainer).innerHTML = '<select id="ACLPageSelectorPage" size="7" onchange="" style="width:100%;"></select>';
			}
		});
	},
	
	reloadPageList: function() {
		var sectionId = $('ACLPageSelectorSection').value;

		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters: { command:'loadPageList', sectionId:sectionId },
			onSuccess: function(transport) {
				$('ACLPageSelectorPageContainer').innerHTML = transport.responseText;
			}
		});
	},

	onSiteSelected: function() {
		var sectionContainer = 'ACLPageSelectorSectionContainer';
		var pageContainer = 'ACLPageSelectorPageContainer';
		var siteId = $('ACLPageSelectorSite').value;

		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters: { command:'loadSectionList', siteId:siteId },
			onSuccess: function(transport) {
				$(sectionContainer).innerHTML = transport.responseText;
				$(pageContainer).innerHTML = '<select id="ACLPageSelectorPage" size="7" onchange="" style="width:100%;"></select>';
				web.getACLPageSelector().showACL('site',siteId);
			}
		});
	},
	
	onSectionSelected: function() {
		var sectionId = $('ACLPageSelectorSection').value;

		new Ajax.Request(this.getActionFile(), {
			method:'post',
			parameters: { command:'loadPageList', sectionId:sectionId },
			onSuccess: function(transport) {
				$('ACLPageSelectorPageContainer').innerHTML = transport.responseText;
				web.getACLPageSelector().showACL('section',sectionId);
			}
		});
	},
	
	onPageSelected: function() {
		var pageId = $('ACLPageSelectorPage').value;
		this.showACL('page',pageId);
	},
	
	getActionFile: function() {
		if( this.actionFile=='' ) {
			this.actionFile = system.getLibraryPath() + 'web/_accessControl.php';
		}
		return this.actionFile;
	}
});

var WebModule = new Class.create({
	ACLPageSelector: null,
	layoutEditor: null,

	initialize: function() {
		this.ACLPageSelector = new ACLPageSelector();
		this.layoutEditor = new SiteLayoutEditor();
	},
	
	getACLPageSelector: function() {
		return this.ACLPageSelector;
	},
	
	getLayoutEditor: function() {
		return this.layoutEditor;
	}
});

var web = new WebModule();