var Widgets = {
	apply: function(scope) {
		Widgets.firstLast(scope);
		Widgets.rounded(scope);
		Widgets.buttons(scope);
		Widgets.boxes(scope);
		Widgets.awesomeForms(scope);
		Widgets.altrow();
	},

	firstLast: function(scope) {
		$ES('.auto-first-last', scope).each(function(el) {
			if (el.getTag() == 'table') {
				$ES('tr', el).each(Widgets.markFirstLast);
				$ES('tbody', el).each(Widgets.markFirstLast);
			} else {
				Widgets.markFirstLast(el);
			}
		});
	},

	markFirstLast: function(el) {
		var children = el.getChildren();
		if (!children[0]) {
			return false;
		}

		children[0].addClass('first');
		children[children.length - 1].addClass('last');

		return true;
	},

	rounded: function(scope) {
		var els = $ES('.rounded', scope);
//		for (i = 1; i < 5; i++) {
//			els.extend($ES('.rounded' + i, scope));
//		}

		els.each(function(el) {
			var rounded, last;
			var corners = Widgets._corners(el);

			corners.each(function(c) {
				var corner = new Element('div', {'class': c});
				if (!rounded) {
					rounded = corner;
				} else {
					last.adopt(corner);
				}
				last = corner;
			});

			var content = el.getChildren();
			if (content.length) {
				last.adopt(content);
			} else {
				last.setText(el.getText());
				el.setText('');
			}

			rounded.injectInside(el);

			Widgets.copyStyle(['padding-top', 'padding-right', 'padding-bottom', 'padding-left'], el, last);
		});
	},

	_corners: function(el) {
		var corners = ['tl', 'tr', 'bl', 'br'];

		if (el.hasClass('rounded-l')) {
			corners = ['tl', 'bl'];
		} else if (el.hasClass('rounded-r')) {
			corners = ['tr', 'br'];
		} else if (el.hasClass('rounded-t')) {
			corners = ['tl', 'tr'];
		} else if (el.hasClass('rounded-b')) {
			corners = ['bl', 'br'];
		}

		return corners;
	},

	boxes: function(scope) {
		var corners = ['lt', 'rt', 'rb', 'lb'];
		$ES('.white-box', scope).each(function(el) {
			corners.each(function(corner) {
				new Element('div', {'class': corner}).adopt(
					new Element('b')
				).injectInside(el);
			});
		});

		var els = [];
		for (i = 2; i <= 4; i++) {
			els.extend($ES('.rounded' + i, scope));
		}

		els.each(function(el) {
			var corners2 = Widgets._corners(el);
			corners2.each(function(corner) {
				new Element('div', {'class': corner}).adopt(
					new Element('b')
				).injectInside(el);
			});
		});
	},

	buttons: function(scope) {
		$ES('input.btn', scope).each(function(el) {
			if (el.getParent().getParent().hasClass('btn-m')) {
				return false;
			}

			offset = 8;
			pos = el.getCoordinates();
			width = pos.width + offset * 2 + 5;

			cls = el.className.split(' ').filter(function(el) {
				return el.contains('btn-');
			}).join(' ');

			el.addClass('btn-domready');

			if (el.getStyle('background-image') == 'none') {
				el.setStyle('background', 'none');
			}

			floating = (el.getStyle('float') == 'right' || el.hasClass('right')) ? 'right' : 'left';
			el.setStyle('float', 'left');

			var wrapper = new Element('div', {'class': 'btn-wrapper ' + cls})
				.injectAfter(el)
				.setStyles({'width': width, 'float': floating})
				.adopt(new Element('div', {'class': 'btn-l'}))
				.adopt(new Element('div', {'class': 'btn-m'}).setStyles({'width': pos.width}).adopt(new Element('div').adopt(el)))
				.adopt(new Element('div', {'class': 'btn-r'}));

			$E('.btn-l', wrapper).fix();
			$E('.btn-m', wrapper).fix();
			$E('.btn-r', wrapper).fix();

			return true;
		});
	},

	awesomeForms: function(scope) {
		var textboxes = $$('.awesome input.text').extend($$('.awesome textarea'));

		textboxes.each(function(input) {
			input.label = input.getPrevious();

			input.awesomeEvent = function(e) {
				e = new Event(e);

				var empty = e.target.value.trim() == '' ? true : false;
				var label = e.target.label;
				var div = label.getParent();

				switch (e.type) {
					case 'focus':
						if (empty) {
							label.addClass('focus');
						}
						div.addClass('focus');
					break;

					case 'blur':
						if (empty) {
							label.removeClass('focus').removeClass('hastext');
						}
						div.removeClass('focus');
					break;
					
					case 'keypress':
						label.addClass('hastext');
					break;
				}
			};

			input.addEvents({'focus': input.awesomeEvent, 'blur': input.awesomeEvent, 'keypress': input.awesomeEvent});

			if (input.value.trim() != '') {
				input.label.addClass('hastext');
			}
		});
	},

	altrow: function() {
		$$('table.altrow').each(function(el) {
			var inverse = el.hasClass('inverse');
			$ES('tbody tr', el).each(function(tr, idx) {
				var altrow = (inverse) ? idx % 2 == 0 : idx % 2 != 0;
				if (altrow) {
					tr.addClass('altrow');
				}
			});
		});
	},

	copyStyle: function(style, from, to) {
		style = $type(style) == 'array' ? style : [style];
		style.each(function(s) {
			to.setStyle(s, from.getStyle(s));
			from.setStyle(s, '0');
		});
	}
}

window.addEvent('domready', Widgets.apply.create({delay: 50}));
