// PAGE HANDLING (PROPIETARY)
// (c) Jörg Schilling, Wiesbaden, 2010
// Version 1.0
var page;
if (!page) page = {};
page.$PREVIEW_DAYS = 90;
page.$TO_FILTER = 'filterable';
page.$FILTER = 'filter';
page.$FRAME = 'main';
page.$TOP = {
	offset: 413,
    gap: 200,
    affix: '27px',
    reverse: function() { return this.offset + 'px'; },
    cue: function() { return this.offset - this.gap; }
};
String.prototype.pre = function() {
	var i = parseInt(this);
	return (i > 9) ? i : '0' + this;
}
page.browser = function() {
	return (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? new Number(RegExp.$1) : 99;
};
page.getY = function(obj) {
	return (obj.offsetParent ? obj.offsetTop + page.getY(obj.offsetParent) : obj.y ? obj.y : 0);
};
page.getWidth = function() {
	var _w = 0; 
	if (typeof(window.innerWidth) == 'number' ) { 
		_w = window.innerWidth; 
	} else if (document.documentElement && document.documentElement.clientWidth) { 
		_w = document.documentElement.clientWidth; 
	} else if (document.body && document.body.clientWidth) { 
		_w = document.body.clientWidth; 
	} 
	return _w; 
};
page.querySearch = function() {
	var str = location.href.split('?')[1];
    if (!str) return;
    str = unescape(str);
    var $C = document.getElementById('canvas');
    var __buf = $C.innerHTML;
   	__buf = __buf.replace(new RegExp(str, 'g'), '<span class="marker">' +  str + '</span>');
    __buf = __buf.replace(new RegExp(str.toUpperCase(), 'g'), '<span class="marker">' +  str.toUpperCase() + '</span>');
    __buf = __buf.replace(new RegExp(str.toLowerCase(), 'g'), '<span class="marker">' +  str.toLowerCase() + '</span>');

    //var __pos = __buf.indexOf('<span class="marker">');
    //__buf = __buf.substring(0, __pos) + '<a id="wt" name="wt"></a>' + __buf.substr(__pos);
    $C.innerHTML = __buf;
};
page.fixElementByCSS = function(obj) {
    var buf = document.getElementById(obj);
    if (page.browser() < 7) {
        buf.style.position = 'absolute';
        document.onmousewheel = function() {
            buf.style.top = (document.getElementById(page.$FRAME).scrollTop + 340) + 'px';
        }
    } else buf.style.position = 'fixed';
};
page.fixElement = function() {
	var __top = this.scrollTop || document.getElementById(page.$FRAME).scrollTop;
    var __filter = document.getElementById(page.$FILTER);
	if (__top > page.$TOP.cue()) {
    	__filter.style.top = page.$TOP.affix;
        __filter.style.backgroundImage = 'url(../img/frame.png)';
    }
    if (__top < page.$TOP.cue()) {
		__filter.style.top = page.getY(document.getElementById(page.$TO_FILTER)) + 'px';
        __filter.style.background = 'none';
    }
};
page.preLoad = function(args) {
    var path = '../img/';
    var buf = new Image();
    for (var i = page.preLoad.arguments.length; i >= 0; i--) {
        buf = new Image();
        buf.src = path + page.preLoad.arguments[i];
    }
};
page.init = function() {
    var images = document.getElementsByTagName('img');
    for (var i = 0, buf; buf = images[i]; i++) {
    	var hover = buf.getAttribute('hover');
        if (hover) page.addHover(buf, hover);
        var check = buf.getAttribute('check');
        if (check) page.addEventHandler(document.getElementById(buf.id), 'click', page.checkItem);
    }
};
page.addHover = function(obj, url) {
	var baseUrl = obj.src;
    (new Image()).src = url;
    obj.onmouseover = function() { obj.src = url; }
    obj.onmouseout = function() { obj.src = baseUrl; }
};
page.addEventHandler = function(__OBJ, __EVT, __HANDLE) {
	if (document.addEventListener) {
    	__OBJ.addEventListener(__EVT, __HANDLE, false);
    } else if (document.attachEvent) {
    	//__OBJ.setCapture();
        __OBJ.attachEvent(('on' + __EVT), __HANDLE);
    } else {
    	__OBJ[('on' + __EVT)] = __HANDLE;
    }
};
page.addFilter = function(parent, target) {
	if (null != page.$FILTER) return;
    page.$TO_FILTER = target || 'filterable';
    page.$FILTER = parent || 'filter';
    var __O = document.getElementById(page.$FILTER).getElementsByTagName('input');
	for (var i = 0, cb; cb = __O[i]; i++) {
    	if (cb.type != 'checkbox') continue;
        if (cb.value > 0) {
        	cb.onclick = function() { page.filter(this); return false; };
            cb.checked = true;
        } else {
            cb.onclick = function() { page.subfilter(this); return false; };
            cb.checked = false;
        }
    }
};
page.filter = function(filter, value, checked) {
    var __T = document.getElementById(page.$TO_FILTER).getElementsByTagName('table');
    var __R = (document.getElementById('c0').getAttribute('check') == '0') ? false : true;
   	for (var i = 0, buf; buf = __T[i]; i++) {
    	if (buf.getAttribute(filter) == value) {
        	var __recent = (buf.getAttribute('recent') == 'true') ? true : false;
        	buf.style.display = ((checked) && ((!__recent) || (__R))) ? 'block' : 'none';
        }
	}
};
page.recent = function(filter, value, checked) {
	var __T = document.getElementById(page.$TO_FILTER).getElementsByTagName('table');
    for (var i = 0, buf; buf = __T[i]; i++) {
    	if (buf.getAttribute(filter) == value) {
        	buf.style.display = (checked) ? 'block' : 'none';
        }
	}
};
page.findRecent = function() {
	var __T = document.getElementById(page.$TO_FILTER).getElementsByTagName('table');
    var __D = new Date;
    for (var i = 0, buf; buf = __T[i]; i++) {
	    var __d = buf.id.substr(3).split('-');
    	var __start = new Date(parseInt(__d[0], 10), parseInt(__d[1], 10) - 1, parseInt(__d[2], 10));
        var __recent = 'false';
        if (__start.getTime() < __D.getTime()) {
        	__recent = 'true';
            buf.className += ' recent';
        	buf.style.display = 'none';
        }
        buf.setAttribute('recent', __recent);
	}
};
page.findCurrent = function() {
	var __T = document.getElementById(page.$TO_FILTER).getElementsByTagName('table');
    var __D = new Date;
    for (var i = 0, buf; buf = __T[i]; i++) {
	    var __d = buf.id.substr(3).split('-');
    	var __start = new Date(parseInt(__d[0], 10), parseInt(__d[1], 10) - 1, parseInt(__d[2], 10));
        var __ms = __start.getTime();
        if (__ms <= (__D.getTime() + page.$PREVIEW_DAYS * 24 * 3600 * 1000) && __ms >= __D.getTime()) {
        	buf.style.display = 'block';
		} else {
        	buf.style.display = 'none';
		}
    }
    document.getElementById('preview').innerHTML = page.addDate(page.$PREVIEW_DAYS);
};
page.checkItem = function(e) {
	e = e || window.event;
	var obj = e.target || e.srcElement;
	var __state = [1, 0];
    var __checked = __state[parseInt(obj.getAttribute('check'))];
    var __value = obj.getAttribute('condition');
    obj.setAttribute('check', __checked);
    obj.src = __replace(__checked);
    if (__value) {
    	__state = [false, true];
        page[obj.getAttribute('method')](obj.getAttribute('param'), __value, __state[__checked]);
    } else {
    	page[obj.getAttribute('method')](obj);
    }
    function __replace(val) {
       	var buf = obj.src;
		return buf.substring(0, buf.lastIndexOf('/') + 1) + obj.className + val + buf.substr(buf.lastIndexOf('.'));
    }
};
page.print = function(obj) {
	var repl = (obj.getAttribute('check') == '1') ? ' print' : '';
    while (obj.parentNode) {
    	obj = obj.parentNode;
        if (obj.tagName == 'table') {
        	var buf = obj.className.split(' ');
            obj.className = buf[0] + repl;
        }
    }
};
page.loadXml = function(url) {
	var _doc = null;
    try {
		_doc = document.implementation.createDocument('', '', null);
	} catch(ex) {
		try {
	    	_doc = new ActiveXObject('Microsoft.XMLDOM');
	    } catch(ex) {
	    	alert(ex.message);
	    }
	}
	_doc.async = false;
	_doc.load(url);
	return _doc;
};
page.transformXml = function(xmlfile, xslfile, div) {
	var xml = page.loadXml(xmlfile);
    var xsl = page.loadXml(xslfile);
    if (page.browser() >= 99) {
	    p = new XSLTProcessor();
    	p.importStylesheet(xsl);
	    _xml = p.transformToFragment(xml, document);
    	document.getElementsByTagName(div)[0].appendChild(_xml);
    } else {
    	document.getElementsByTagName(div)[0].appendChild(xml.transformNode(xsl));
        //document.write(xml.transformNode(xsl));
    }
};
page.teaser = function(wrapper) {
	document.getElementById(wrapper).style.backgroundImage = 'url(\'../img/' + wrapper + '-teaser.png\')';		
};
page.today = function() {
	var d = new Date;
    var days = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'];
    var months = ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'];
    document.getElementById('date').appendChild(document.createTextNode([days[d.getDay()], ', ', d.getDate(), '. ', months[d.getMonth()], ' ', d.getFullYear()].join('')));
};
page.addDate = function(days) {
    var d = new Date();
    d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000));
    return [(d.getDay()).toString().pre(), '.', (d.getMonth() + 1).toString().pre(), '.', d.getFullYear()].join('');
};
page.formatDate = function(d) {
	var buf = d.split('-');
    return [buf[2], buf[1], buf[0]].join('.');
};
page.shortDate = function(obj) {
	var d = new Date;
	document.getElementById(obj).setAttribute('current', [d.getFullYear(), '-', (d.getMonth() + 1).toString().pre(), '-', (d.getDay()).toString().pre()].join(''));
};
page.gallery = function() {
    var gal = new jsx.Gallery('../img/karibik/');
    gal.register(1, 'jsx-gallery');
    document.getElementById('canvas').style.height = screen.availHeight + 'px';
};
page.initialize = function(oversized) {
	pageLoad(page.init);
    pageLoad(page.today);
};
