var Core = {
	
	init : function() {
		Panels.init();
		Core.content.init();
	},
	
	content : {
		origSize : null,
		offset : 20,
		
		init : function() {
			Core.content.origSize = $('mCenter').getSize().size.y;
			Core.content.resize();
		},
		
		resize : function() {
			var leftH = $('mLeft').getSize().size.y;
			var rightH = $('mRight').getSize().size.y;
			var centerH = $('mCenter').getSize().size.y;
			
			var maxH = Math.max( leftH, rightH ) + Core.content.offset;
			var main = $$('div#mCenter div.main')[0];
			
			var tH = $$('div#mCenter div.top')[0].getSize().size.y;
			var bH = $$('div#mCenter div.bottom')[0].getSize().size.y;

			if( maxH <= Core.content.origSize ) {
				if( centerH > Core.content.origSize )  {
					main.style.height = (Core.content.origSize - bH - tH) + 'px';
					return 1; 
				}
			}
			else {
				main.style.height = (maxH - bH - tH) + 'px';
				return 2;
			}
			return false;
		}
	},
	
	socialize: function(a, b) {
		var r = new Ajax('/xmlrpc/socialize.php', { method: 'get' });
		r.request('url=' + a + '&target=' + b);
	}
	
};

var Panels = {
	names : [	'sub1', 'sub2', 'sub3', 'sub8', 'sub7', 'sub5', 'sub4', 'sub6', 'sub11', 'sub12', 'sub13' ],
	statuses : [],
	
	init : function() {
		Panels.names.each( 
			function( n ) { 
				Panels.statuses[ Panels.statuses.length ] = null; 
			} 
		);
		
		$$('img.btnOpenClose').each(
			function( img ) {
				img.addEvent( 'click', Panels.toggle );
			}
		);
	},
	
	toggle : function( e ) {
		var e = new Event(e);
		var img = e.target;
		var id = img.id.replace('img', '');
		var foot = $( 'foot' + id );
		var sub = $( 'sub' + id );

		if( sub )	{
			sub.style.display = sub.style.display == 'none' ? 'block' : 'none';
		}
		if( img ) {
			img.src = img.src.indexOf( 'minus' ) >= 0 ? img.src.replace( 'minus', 'plus' ) : img.src.replace( 'plus', 'minus' );
		}
		if( foot ) {
			foot.style.display = foot.style.display == 'none' ? 'block' : 'none';
		}

		Cookie.set( 'boxes', Panels.storeState(), {duration: 1} );
		Core.content.resize();
			
	},
	
	storeState : function() {
		cnt = 0;
		Panels.names.each( 
			function( n ) { 
				n = $(n);
				if( !n ) {
					Panels.statuses[cnt] = null;
				}
				else {
					Panels.statuses[cnt] = (n.style.display == 'block') ? 1 : 0;
				}
				cnt++;
			} 
		);

		return Panels.statuses.toString();
	}
};

Element.extend({
	hide: function() {
		return this.setStyle('display', 'none');
	},
	show: function() {
		return this.setStyle('display', '');
	},
	toggle: function() {
		return (this.style.display == 'none') ? this.show() : this.hide();
	},
	
	setMaxLength: function(limit, event) {
		if( !$defined(limit) ) { return true; }
		if( this.nodeName.toLowerCase() != 'textarea' ) { return true; }
		
		event = new Event(event);
		if( !$defined(event) ) { return true; }

		if( event.alt || event.meta || event.control || event.shift ) {
			return true;
		}

		switch( event.key ) {
			case 'up':
			case 'down':
			case 'left':
			case 'right': 
			case 'backspace':
			case 'delete': 
			case 'esc':
				return true;
		}
		
		return this.value.length < limit; 
	},
	
	bindWithCounter: function( el, limit, event ) {
		if( !$defined(el) ) { return; }
		if( this.nodeName.toLowerCase() != 'textarea' ) { return true; }

		el.readonly = 'readonly';
		var ret = this.setMaxLength(limit, event);
		
		if( ret ) {
			this.addEvent('keyup', (function() {var v = limit - this.value.length; el.value = v < 0 ? 0 : v;}).bind(this));
		}
		
		return ret;
	}
});

var Registry = {
	Set: function(namespace, value) {
		if( Registry.Has(namespace) ) { return null; }
		
		Registry[namespace] = value;
		return value;
	},
	
	Get: function(namespace) {
	return $defined(Registry[namespace]) ? Registry[namespace] : null;
		
	},
	
	Has: function(namespace) {
		return $defined(Registry[namespace]);
	}
};

var Events = {
	onMouseOver: function(e) {
		if( !e ) return;
		$(e).addClass('hover');
	},
	
	onMouseOut: function(e) {
		if( !e ) return;
		$(e).removeClass('hover');
	},
	
	quickSearchOpener: function(e) {
		var q = $(e.parentNode).getElement('.quickSearch');
		if( q.hidden ) {
			new Fx.Styles(q, {duration: 500}).start({height: 0});
			q.hidden = false;
		}
		else {
			new Fx.Styles(q, {duration: 500}).start({height: 25});
			q.hidden = true;
		}
		 
		return false;
	},
	
	quickSearch: function(e) {
		if( !e.action || !e.q || !e.q.value ) { return true; }
		var q = e.q.value.toLowerCase().replace(/[^a-z0-9]+/g, '+').replace(/^\+/g, '').replace(/\+$/g, '');
		var ds, de = '';
		if( e.evDateStart && e.evDateStart.value ) {
			var	ds = e.evDateStart.value;
		}
		if( e.evDateEnd && e.evDateEnd.value && ds ) {
			var	de = e.evDateEnd.value;
		}
		
		document.location = e.action + '?q=' + q + (ds ? '&ds=' + ds : '') + (de ? '&de=' + de : '');

		return false;
	},
	
	validateReminderDate: function( form ) {
		$(form).getElements('div.flash_error').each(function(e) { e.remove(); });
		if( form['delete'] && form['delete'].value == 'delete' ) { return true; }
		
		if( !form.date.value ) { 
			new Element('div', {'class': 'flash_error'}).setText('Please pick a date for your reminder').injectTop( $(form) );
			return false; 
		}

		var rd = new Date(form.date.value), now = new Date();
		now.setHours(0); now.setMinutes(0); now.setSeconds(0);
		
		if( rd <= now ) {
			new Element('div', {'class': 'flash_error'}).setText('Please pick a date that is in the future').injectTop( $(form) );
			return false;
		}
		
		return true;
	},
	
	deleteReminder: function( form ) {
		$(form).adopt( new Element('input', {type: 'hidden', value: 'delete', 'name': 'delete'}) );
		$(form).submit();
		return false;
	}
};
 
window.addEvent( 'load', Core.init );
