var TextMultiple = Object.extend({}, TextMultiple || {});

(function() {
	var self = TextMultiple;

	/**
	 *
	 * @param {Object}|{String} e
	 */
	self.getElement = function(v) {
		if (Object.isString(v)) {
			return {element: $$('*[rel="' + v + '"]')[0], name: v};
		} else if (Object.isFunction(v.element)) {
			return {element: v.element(), name: (v.element().rel ? v.element().rel : '')};
		} else if (Object.isElement(v)) {
			return {element: v, name: (v.rel ? v.rel : '')};
		}
	}

	/**
	 *
	 * @param {Object}|{String} e
	 */
	self.changeCaption = function(e) {
		if(Object.isElement(e)) {
			var element = e;
			var name = e.readAttribute('rel');
		} else {
			var result = self.getElement(e);
			var element = result.element;
			var name = result.name;
			
			if(!element.hasClassName("caption")) {
				element = element.up('.caption');
				name = element.rel;
			}
		}

		var container = null;

		if (! Object.isElement(element) || element.hasClassName('current') || element.hasClassName('new')) {
			return false;
		}

		if($('container_caption')) {
			$('container_caption').select('.caption').each(function(captionLink) {
				var container = null;
				if (captionLink.hasClassName('current')) {
					captionLink.removeClassName('current');
					if (container = $(captionLink.rel)) {
						container.hide();
					}
				}
			});
		}
		element.addClassName('current');
		if (container = $(name)) {
			container.setStyle({'display':'block'}).addClassName('current');
			container.hasClassName('hidden') ? container.removeClassName('hidden') : '';
		}
		return true;
	}

	document.observe('dom:loaded', function() {
		if(!$('container_caption')) {
			return;
		}
		$('container_caption').select('.caption').each(function(captionLink) {
			captionLink.observe('click', self.changeCaption);
			if (captionLink.match('a')) {
				captionLink.href = '#';
				captionLink.onclick = function() {
					return false;
				};
			}
		});
	});
})();
