// INFO popup builder
var PopupBuilder = {
	run: function() {
	},
	show: function(id) {
	},
	hide: function() {
	}
};


//INFO tip builder
var TipBuilder = {
	run: function() {
		$each($$('div[class=foto-tip]'), function(element){
			var id = element.get('id');
			element.set('id', id + 'OLD');
			var tip = new StickyWin.PointyTip(element.get('alt'), element.get('html'), {
				id: id,
				className: 'foto-tip',
				point: 'up',
				showNow: false,
				destroyOnClose: false,
				closeOnEsc: true,
				inject: {
					target: element,
					where: 'after'
				}
			});
			element.dispose();
		});
	},
	show: function(id, relativeTo) {
		this.hideAll();
		var tip = $(id).retrieve('StickyWin');
		tip.position({
			relativeTo: relativeTo
		});
		$each($(tip).getElements('input, select, textarea'), function(element) {
			if(element.get('type') == 'radio' || element.get('type') == 'checkbox') {
				element.set('checked', '');
			}
			else if(element.get('type') == 'hidden' || element.get('type') == 'submit' || element.get('type') == 'button') {
			}
			else {
				element.set('value', '');
			}
		});
		tip.show();
	},
	hide: function(id) {
		$(id).retrieve('StickyWin').hide();
	},
	hideAll: function() {
		$$('div.StickyWinInstance').hide();
	}
};


// INFO rounded shapes auto-builder
var RoundedShapeBuilder = {
	run: function() {
		if (!document.getElementById || !document.createElement || !document.appendChild) return false;
		var firstElement, secondElement, oOuter, oI1, oI2, tempId, i, j, firstElements, secondElements, regexp, rightTabs = Array();
		firstElements = $(document).getElements('div[class*=foto-shape]');
		regexp = new RegExp("^([\\w+\\s]*)(foto-shape(-(left|right|top|bottom)tab(s?))?)(-over)?([\\s\\w+]*)$");
		for (i=0; i<firstElements.length; i++) {
			firstElement = firstElements[i];
			if (regexp.test(firstElement.className)) {
				firstElement.firstPosition = RegExp.$4;
				firstElement.isLeaf = (RegExp.$3=='');
				if(firstElement.isLeaf) {
					secondElements = new Array(firstElement);
				}
				else {
					if(firstElement.firstPosition == 'top' || firstElement.firstPosition == 'bottom') {
						RoundedShapeBuilder.insertClear(firstElement);
					}
					secondElements = firstElement.getElements('div[class*=foto-shape]');
				}
				for (j=0; j<secondElements.length; j++) {
					secondElements[j].firstPosition = firstElement.firstPosition;
					secondElement = secondElements[j];
					if (regexp.test(secondElement.className)) {
						oOuter = document.createElement('div');
						oOuter.className = secondElement.className;
						oOuter.beforeClasses = RegExp.$1;
						oOuter.currentClass = RegExp.$2;
						oOuter.secondPosition = RegExp.$4;
						oOuter.wasOver = (RegExp.$6=='-over');
						oOuter.afterClasses = RegExp.$7;
						if (secondElement.getAttribute("id")) {
							tempId = secondElement.id;
							secondElement.removeAttribute('id');
							oOuter.setAttribute('id', '');
							oOuter.id = tempId;
						}
						secondElement.className = 'foto-shape-content';
						secondElement.parentNode.replaceChild(oOuter, secondElement);
						oI1 = document.createElement('div');
						oI1.className = 'foto-shape-middle';
						oOuter.appendChild(oI1);
						oI2 = document.createElement('div');
						oI2.className = 'foto-shape-innermiddle';
						oI1.appendChild(oI2);
						oI2.appendChild(secondElement);
						if(secondElement.firstPosition != 'bottom') {
							RoundedShapeBuilder.insertTop(oOuter);
						}
						if(secondElement.firstPosition != 'top') {
							RoundedShapeBuilder.insertBottom(oOuter);
						}
						if(!secondElement.isLeaf && oOuter.getElementsByTagName('a').length > 0) {
							RoundedShapeBuilder.addHighlightEvent(oOuter);
						}
						if(oOuter.secondPosition == 'right') {
							rightTabs.push(oOuter.dispose());
						}
					}
				}
				if(rightTabs.length!=0) {
					rightTabs.reverse();
					for(var k=0;k < rightTabs.length;k++) {
						rightTabs[k].inject(firstElement.getElement('div[class=foto-clear]'), 'before');
					}
					rightTabs.length = 0;
				}
			}
		}
	},
	insertTop: function(obj) {
		var oOuter, oInner;
		oOuter=document.createElement("div");
		oOuter.className="foto-shape-top";
	    oInner=document.createElement("div");
	    oOuter.appendChild(oInner);
		obj.insertBefore(oOuter,obj.firstChild);
	},
	insertBottom: function(obj) {
		var oOuter, oInner;
		oOuter=document.createElement("div");
		oOuter.className="foto-shape-bottom";
	    oInner=document.createElement("div");
	    oOuter.appendChild(oInner);
		obj.appendChild(oOuter);
	},
	insertClear: function(obj) {
		var firstElement;
		firstElement=document.createElement("div");
		firstElement.className="foto-clear";
		obj.appendChild(firstElement);
	},
	addHighlightEvent: function(obj) {
		function supportHighlightEvent() {
			obj.set('class', obj.beforeClasses + obj.currentClass + (obj.wasOver?'':'-over') + obj.afterClasses);
			obj.wasOver = !obj.wasOver;
		};
		obj.addEvent('mouseover', supportHighlightEvent);
		obj.addEvent('mouseout', supportHighlightEvent);
	}
};


// INFO make status div auto-hidden and nicely positioned
function foto_display_status() {
	var target = $('menu-content');
	if(!target) {
		target = $('header-content');
	}
	if(!target) {
		target = $('foto-content');
	}
	if(target) {
		var status = $('foto-status');
		status.dispose().inject(target, 'after');
		if($defined(status)) {
			var collapse = $('collapse').dispose();
			var isCollapsed = false;
			collapse.addEvent('click', function() {
				$clear(timer);
				if(isCollapsed) {
					collapse.getElement('img').set('src', collapse.getElement('img').get('src').replace('more', 'less'));
					status.getElements('div.foto-shape-content DIV').reveal();
				}
				else {
					collapse.getElement('img').set('src', collapse.getElement('img').get('src').replace('less', 'more'));
					status.getElements('div.foto-shape-content div').dissolve();
					collapse.reveal();
				}
				isCollapsed = !isCollapsed;
			});
			if($chk(status.getElement('DIV.foto-shape-content').get('html').trim())) {
				status.reveal();
			}
			collapse.inject(status.getElement('div.foto-shape-content'), 'top').reveal();
			function delayed() {
				collapse.fireEvent('click');
			};
			timer = delayed.delay(30000, status);
		}
	}
}


// INFO focus hilighting for input fields
function foto_show_focus() {
	$each($$(
		'input',
		'select',
		'textarea'
	), function(e) {new InputFocus(e);});
}


// INFO open external links in an other tab
function foto_external_links(source) {
	if(source != null) {
		$(source).getElements('a').each(function(link) {
			link.addEvent('click', function() {
				var href = link.get('href');
				if(href != null) {
					var currentdir = foto_dirname(location.href);
					var extension = href.substr(href.length - 4, href.length);
					if((href.substr(0, currentdir.length) == currentdir && (extension != '.bmp'
						&& extension != '.gif'
						&& extension != '.jpg'
						&& extension != '.png'
						)) || href.substr(0, 4) != 'http') {
						location.href = href;
					}
					else {
						window.open(href);
						return false;
					}
				}
			});
		});
	}
}





window.addEvent('domready', function() {
	RoundedShapeBuilder.run();
	PopupBuilder.run();
	TipBuilder.run();
	foto_display_status();
	foto_show_focus();
	foto_external_links($('foto'));
});

