/**
 *	Common Entix Web Framework Functions
 *		Copyright 2007-2010 Entix (http://entix.nl/)
 *		[ Requires the MooTools framework (1.2.x+) ]
 */

function extUrls() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	var browser = navigator.appName;
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") {
			if (browser == "Microsoft Internet Explorer" || browser == "Netscape")
				anchor.target = "_blank";
			else
				anchor.onclick = "javascript:window.open('"+anchor.getAttribute("href")+"'); return false;";
		}
	}
}

function pageScroll(id) {
    document.getElementById(id).scrollTop+=10; // horizontal and vertical scroll increments
    scrolldelay = setTimeout('pageScroll(\''+id+'\')',100); // scrolls every 100 milliseconds
}

function stopScroll() {
	clearTimeout(scrolldelay);
}

function swapVisible(hide, show) {
	if ($(show)) {
		if ($(hide))
			new Fx.Reveal($(hide)).dissolve();
		(function(){new Fx.Reveal(this).reveal()}).delay(200, $(show));
	}
}

function errorField(field) {
	var parts = field.split(/(\d+)/);
	var name = parts[0];
	var num = parseInt(parts[1]);
	while (!$(field) && num < 32) {
		num++;
		field = name+num;
	}
	if ($(field)) {
		var row = $(field).getParent('td').getParent('tr');
		if ($(row))
			$(row).addClass('input_error');
	}
}

function getOpacity(elm) {
	var ret = 1;
	if (Browser.Engine.trident)
		ret = elm.getComputedStyle('filter').test(/opacity=([^)]*)/i || '') ? (parseFloat(RegExp.$1) / 100) : '';
	else
		ret = elm.getComputedStyle('opacity');
	
	return (ret === "" ? 1 : ret);
}

function setOpacity(oElm, iPerc) {
	if(Browser.Engine.trident)
		oElm.style.filter = "alpha(opacity="+iPerc+")";
	else
		oElm.style.opacity = (iPerc/100);
}

function addFormSubmitEvent(form) {
	var inputs = form.getElementsByTagName('input');
	for (var i=0;i < inputs.length;i++)
		addInputSubmitEvent(form, inputs[i]);
}

function addInputSubmitEvent(form, input) {
	input.onkeydown = function(e) {
		e = e || window.event;
		if (e.keyCode == 13) {
			form.submit();
			return false;
		}
	};
}

function inArray(needle, haystack) {
	var key = '';
	for (key in haystack) {
		if (haystack[key] == needle) {
			return true;
		}
	}
	return false;
}

function centerHeightCheck() {
	var mtop = $('container').getStyle('margin-top').toInt();
	var cheight = $('container').getSize().y;
	var avail = window.getSize().y;
	if (cheight > avail)
		mtop = avail * -0.5;
	else
		mtop = cheight * -0.5;
	$('container').setStyle('margin-top', mtop);
}

function classRenderCheck() {
	/*
	 * Syntax: RENDER[engine1_engine2-LTE-420]classname
	 *  only render for engines, divided by _
	 *	optional engine version numbers, -(LT,GT,LTE,GTE,EQ)-int
	 */
	// Get all elements starting with RENDER
	var elms = $(document.body).getElements('[class^=RENDER]');
	// Figure out current version
	var myver = getBrowserEngineVersion();
	for (var i=0; i<elms.length; i++) {
		var elm = elms[i];
		var pts = elm.className.split('[',2);
		if (pts[0] == 'RENDER') { // Syntax check
			var vars = pts[1].split(']',2);
			var engs = vars[0].split('_'); // Get array of rendering engine names (and versions)
			var clsn = vars[1]; // The classname
			for (var j=0; j<engs.length; j++) { // Loop target engines
				var eng = engs[j].split('-',3); // Split engine definition
				var engn = eng[0]; // Engine name
				var engc = eng[1]; // Comperator
				var engv = parseInt(eng[2]); // Version
				if (engn == Browser.Engine.name) { // Correct engine name
					if (isNaN(engv)) { // No version check, success
						elm.className = clsn;
						break;
					} else {
						if (engc == 'LT' && myver < engv || 
							engc == 'GT' && myver > engv ||
							engc == 'LTE' && myver <= engv ||
							engc == 'GTE' && myver >= engv ||
							engc == 'EQ' && myver == engv) {
							elm.className = clsn;
							break;
						}
					}
				}
			}
		}
	}
}

function getBrowserEngineVersion() {
	// Mootools doesn't check versions very good..
	var ver = Browser.Engine.version;
	if (Browser.Engine.presto)
		ver = parseInt(parseFloat(window.opera.version()) * 100);
	if (Browser.Engine.gecko)
		ver = parseInt(navigator.userAgent.replace(/^.*rv\:|\).*$/g,'').replace(/\./g,'').substr(0,3));
	if (Browser.Engine.webkit)
		ver = parseInt(navigator.userAgent.replace(/^.*WebKit\/| .*$/g,''));
	return ver;
}

/* onLoadEvent helper function */
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

/* page load entry (gets executed when page is loaded) */
addLoadEvent(function() {
	// check rendering engine specific classnames
	classRenderCheck();
	// check for centering height problems
	if ($('container') && $('container').getStyle('top').toInt() > 0 && $('container').getStyle('margin-top').toInt() < 0) {
		centerHeightCheck();
		var timer;
		window.addEvent('resize', function(){
			$clear(timer);
			timer = (function(){
				centerHeightCheck();
			}).delay(50);
		});
	}
	// make <a rel="external" work
	extUrls();
	// Gallery loader
	if(window.loadCheckForShot){loadCheckForShot();}
	// IE Enter submit form
	if(navigator.userAgent.indexOf("MSIE") != -1 && $('enter_submit_form')) {
		addFormSubmitEvent($('enter_submit_form'));
	}
})
