/*

Copyright 2008-2013 Clipperz Srl

This file is part of Clipperz, the online password manager.
For further information about its features and functionalities please
refer to http://www.clipperz.com.

* Clipperz is free software: you can redistribute it and/or modify it
  under the terms of the GNU Affero General Public License as published
  by the Free Software Foundation, either version 3 of the License, or 
  (at your option) any later version.

* Clipperz is distributed in the hope that it will be useful, but 
  WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the GNU Affero General Public License for more details.

* You should have received a copy of the GNU Affero General Public
  License along with Clipperz. If not, see http://www.gnu.org/licenses/.

*/

if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
if (typeof(Clipperz.YUI) == 'undefined') { Clipperz.YUI = {}; }


Clipperz.YUI.Drawer = function(anElement, aRegion) {
	this._status = 'slideIn';
	
	this._element = YAHOO.ext.Element.get(anElement);
	this._region = aRegion || null;

	this._collapsedElement = this.element().getChildrenByClassName("drawer-collapsed")[0];
	this._contentElement = this.element().getChildrenByClassName("drawer-content")[0];

	
	this._wholeCollapedElement = this.enhanceCollapsedElement();
	this._wholeCollapedElement.setWidth(this.region().element().getWidth());
	this._wholeCollapedElement.setHeight(this.region().element().getHeight());
	
	this._contentWrapper = this.enhanceContentElement();
	this._contentElementActor = new YAHOO.ext.Actor(this.contentWrapper().dom);
	this.contentElementActor().hide();
	
	this._contentWidth = 200;
};

YAHOO.extendX(Clipperz.YUI.Drawer, YAHOO.ext.util.Observable, {

	'element': function() {
		return this._element;
	},

	//-----------------------------------------------------

	'status': function() {
		return this._status;
	},
	
	'setStatus': function(aValue) {
		this._status = aValue;
	},
	
	//-----------------------------------------------------

	'collapsedElement': function() {
		return this._collapsedElement;
	},

	//-----------------------------------------------------

	'contentElement': function() {
		return this._contentElement;
	},
	
	//-----------------------------------------------------

	'contentElementActor': function() {
		return this._contentElementActor;
	},
	
	//-----------------------------------------------------

	'contentWrapper': function() {
		return this._contentWrapper;
	},
	
	//-----------------------------------------------------

	'contentWidth': function() {
		return this._contentWidth;
	},

	//-----------------------------------------------------

	'region': function() {
		return this._region;
	},
	
	//-----------------------------------------------------

	'enhanceCollapsedElement': function() {
		var	wrapper;
		var link;
		
		wrapper = this.collapsedElement().wrap({tag:'div', cls:'drawer-collapsedElement-wrapper', children:[
			{tag:'div', cls:'drawer-pin-button', children:[
				{tag:'a', cls:'drawer-pin-button', href:"#", children:[
					{tag:'img', src:'./images/directLogins/drawer/mm-expand.gif'}
				]}
			]}
		]});
		
		link = wrapper.getChildrenByClassName('drawer-pin-button', 'a')[0];
		MochiKit.Signal.connect(link.dom, 'onclick', this, 'pinDrawer');
		
		this.collapsedElement().setHeight('100%');
		this.collapsedElement().setStyle('cursor', 'pointer');
		MochiKit.Signal.connect(this.collapsedElement().dom, 'onclick', this, 'showDrawer');
		
		return wrapper;
	},

	//-----------------------------------------------------

	'enhanceContentElement': function() {
		var wrapper;
		
		wrapper = this.contentElement().wrap({tag:'div', cls:'drawer-content-wrapper', children:[
			{tag:'div', cls:'drawer-content-header', html:'direct login', style:'width:100%;'}
		]});
		
		MochiKit.Signal.connect(wrapper.dom, 'onclick', this, 'hideDrawer');
		return wrapper;
	},

	//-----------------------------------------------------

	'pinDrawer': function() {
		alert("pin drawer");
	},

	//-----------------------------------------------------

	'showDrawer': function() {
		if (this.status() == 'slideIn') {
			var actor;

			this.setStatus('slidingOut');
			actor = this.contentElementActor();
			actor.setHeight(this.region().element().getHeight());
		
			actor.startCapture(true);
			actor.alignTo(this.element(), 'tr');
			actor.blindShow('left', this.contentWidth(), .35);
			actor.play(this.onSlideOut.createDelegate(this));
		}
	},
	
	//-----------------------------------------------------

	'onSlideOut': function() {
		this.setStatus('slideOut');
MochiKit.Logging.logDebug(">>> onSlideOut");
//		alert("done");
	},

	//-----------------------------------------------------
/*
	'showContentElement': function() {
		var top, left, width, height;

MochiKit.Logging.logDebug(">>> showContentElement");


		top = this.element().getTop(true);
		left = this.element().getRight();
		width = this.contentWidth();
		height = this.element().getHeight();

		this.contentWrapper().setStyle('position', 'absolute');
		this.contentWrapper().setStyle('overflow', 'none');
		this.contentWrapper().setStyle('visibility', 'visible');
		this.contentWrapper().setStyle('z-index', '10');

		this.contentWrapper().setLeft(left);
		this.contentWrapper().setTop(top);
		this.contentWrapper().setHeight(height);
		this.contentWrapper().setWidth(width);

		this.contentWrapper().show();
	},
*/	
	//-----------------------------------------------------

	'hideDrawer': function() {
		if (this.status() == 'slideOut') {
			var actor;

			this.setStatus('slidingIn');

			actor = this.contentElementActor();
			actor.setHeight(this.region().element().getHeight());
		
			actor.startCapture(true);
			actor.alignTo(this.element(), 'tr');
			actor.blindHide('left', .35);
			actor.setVisible(false);
			actor.play(this.onSlideIn.createDelegate(this));
		}
	},
	
	//-----------------------------------------------------

	'onSlideIn': function() {
		this.setStatus('slideIn');
MochiKit.Logging.logDebug(">>> onSlideIn");
//		alert("done");
	},

	//-----------------------------------------------------
	
	'hideContentElement': function() {
		this.contentWrapper().hide();
	},
	
	//-----------------------------------------------------
	//-----------------------------------------------------

	//-----------------------------------------------------
	__syntaxFix__: '__syntaxFix__'
});