ISHAM.namespace('ISHAM.util.dom');

ISHAM.util.dom.PanelSetup = new Class({
	Implements: [Options, Events],
	options: {
		classes: { 
			activePageClass: 'page-active',
			previousPageClass: 'page-previous',
			pageContainerClass: 'page-container',
			scrollContainerClass: 'scroll-container',
			rowClass: 'row'
		},
		ids: { 
			postFrame: 'post-frame'
		}
	},
	
	initialize: function(options) {
		
		this.setOptions(options);
		
		this._attachListeners();
		this._findElements();
		this._setInitial();
		
	},
	
	
		//----------------------------------------------------------------------
		// PROPERTIES
		//----------------------------------------------------------------------
	
	nextPage: [],
	nextPageElements: [],
	
	pageContainer: null,
	pageFrame: null,
	
	previousPage: null,
	
		//----------------------------------------------------------------------
		// PRIVATE METHODS
		//----------------------------------------------------------------------
		
		
	_attachListeners: function() {
		window.addEvent('panelRequestComplete', this._findNewElements.bindWithEvent(this));
	},
	
	_cleanUp: function() {
		
		ISHAM.PanelSetup.pageContainer[0].getElement('div.' + ISHAM.PanelSetup.options.classes.previousPageClass).dispose();
		new Fx.Scroll(ISHAM.PanelSetup.pageFrame[0]).set(0,0);
		
		window.fireEvent('panelSetupComplete');
	},
	
	_createElements: function(nextPageElement) {
		
		this.pageContainer[0].getElement('div.' + this.options.classes.activePageClass).addClass(this.options.classes.previousPageClass);
		this.pageContainer[0].getElement('div.' + this.options.classes.activePageClass).removeClass(this.options.classes.activePageClass);
		
		nextPageElement.addClass(this.options.classes.activePageClass);
		
		this.pageContainer[0].grab(nextPageElement);
		
		this._scrollToNew();
		
	},
	
	_findElements: function() {
		this.pageContainer = $$('div.' + this.options.classes.scrollContainerClass);
		this.pageFrame = $$('div.' + this.options.classes.rowClass);
	},
		
	_findNewElements: function(newPage) {
		this.nextPage = newPage.getElement('div.' + this.options.classes.pageContainerClass);
		//this.nextPageElements = $(this.nextPage).getElements('div');
				
		this._createElements(this.nextPage);
	},
	
	_scrollToNew: function() {
		new Fx.Scroll(this.pageFrame[0], {
			duration: 500,
			transition: Fx.Transitions.Quart.easeInOut,
			onComplete: this._cleanUp
		}).start(1005,0);
	},
	
	_setInitial: function() {
		this.pageContainer[0].getElement('div.' + this.options.classes.pageContainerClass).addClass(this.options.classes.activePageClass);
	}	

	
});