if (typeof Base == 'undefined') Base = {};
if (typeof Base.UserAgent == 'undefined') Base.UserAgent = {};

/**
* Verweis auf den Flash-Film, mit dem kommuniziert werden soll.
*/
Base.UserAgent.instance = null;

/**
* Gibt den Typ und die Version des Brwosers an.
*/
Base.UserAgent.info = null;

/**
* Gibt die aktuelle Breite und Höhe des Viewports an.
*/
Base.UserAgent.viewportWidth = 0;
Base.UserAgent.viewportHeight = 0;

/**
* Animationsparameter.
*/
Base.UserAgent.scrollFrom = 0;
Base.UserAgent.scrollDest = 0;
Base.UserAgent.scrollOffset = 1;
Base.UserAgent.scrollCollapse = false;



/**
* Legt die SWF-Objekt-Instanz an.
*/
Base.UserAgent.setInstance = function(swfID)
{
	Base.UserAgent.instance = document.getElementById(swfID);
}


/**
* Setzt die Breite des Flashfilms.
*/
Base.UserAgent.setFlashWidth = function(n)
{
	if (!Base.UserAgent.instance) return;
	Base.UserAgent.instance.width = n;
}


/**
* Setzt die Höhe des Flashfilms.
*/
Base.UserAgent.setFlashHeight = function(n)
{
	if (!Base.UserAgent.instance) return;
	Base.UserAgent.instance.height = n;
}


/**
* Sendet die aktuelle Größe des Viewports an Flash.
*/
Base.UserAgent.getCurrentViewportSize = function()
{
	Base.UserAgent.info = Base.UserAgent.getBrowserInfo();
	Base.UserAgent.viewportWidth  = Base.UserAgent.getViewportWidth();
	Base.UserAgent.viewportHeight = Base.UserAgent.getViewportHeight();
	
	window.setInterval('Base.UserAgent.onCheckResize();', 10);
	return Base.UserAgent.viewportWidth + 'x' + Base.UserAgent.viewportHeight;
}


/**
* Scrollt zu einer bestimmten Position.
*/
Base.UserAgent.doScrollTo = function(n)
{
	Base.UserAgent.scrollFrom = Base.UserAgent.getScrollPosition();
	Base.UserAgent.scrollDest = n;
	Base.UserAgent.scrollOffset = 0;
	Base.UserAgent.scrollCollapse = false;
}


/**
* Scrollt nach oben und setzt dann die Höhe des Flash-Films auf 100%.
*/
Base.UserAgent.doCollapse = function(n)
{
	Base.UserAgent.doScrollTo(0);
	Base.UserAgent.scrollCollapse = true;
}


/**
* Tritt auf, wenn sich die Browsergröße geändert hat.
*/
Base.UserAgent.onViewportResize = function(w, h)
{
	Base.UserAgent.viewportWidth  = w;
	Base.UserAgent.viewportHeight = h;
	
	if (!Base.UserAgent.instance) return;
	Base.UserAgent.instance.onViewportResize(w, h);
}


/**
* Prüft, ob sich die Browsergröße geändert hat.
*/
Base.UserAgent.onCheckResize = function()
{
	var w = Base.UserAgent.getViewportWidth();
	var h = Base.UserAgent.getViewportHeight();
	if (w != Base.UserAgent.viewportWidth || h != Base.UserAgent.viewportHeight) Base.UserAgent.onViewportResize(w, h);
	
	if (Base.UserAgent.scrollOffset < 1)
	{
		Base.UserAgent.scrollOffset += 0.05;
		var t = 1 - ((Math.cos(Base.UserAgent.scrollOffset * Math.PI) + 1) / 2);
		window.scrollTo(0, (Base.UserAgent.scrollFrom + (Base.UserAgent.scrollDest - Base.UserAgent.scrollFrom) * t));
		if (Base.UserAgent.scrollOffset >= 1 && Base.UserAgent.scrollCollapse) Base.UserAgent.setFlashHeight('100%');
	}
}


/**
* Prüft, welchen Brwoser der Benutzer verwendet.
*/
Base.UserAgent.getBrowserInfo = function()
{
	var o = {ie:0, opera:0, gecko:0, webkit: 0, mobile: null, air: 0};
	var ua = navigator.userAgent, m;

    if ((/KHTML/).test(ua)) o.webkit = 1;
	m = ua.match(/AppleWebKit\/([^\s]*)/);
    if (m && m[1])
	{
		o.webkit = parseFloat(m[1]);
		if (/ Mobile\//.test(ua)) o.mobile = "Apple";
		else {
			m = ua.match(/NokiaN[^\/]*/);
			if (m) o.mobile = m[0];
		}

		m = ua.match(/AdobeAIR\/([^\s]*)/);
		if (m) o.air = m[0];
	}
	
    if (!o.webkit)
	{
		m = ua.match(/Opera[\s\/]([^\s]*)/);
		if (m && m[1]) {
			o.opera = parseFloat(m[1]);
			m = ua.match(/Opera Mini[^;]*/);
			if (m) o.mobile = m[0];
		} else {
			m = ua.match(/MSIE\s([^;]*)/);
			if (m&&m[1]) o.ie = parseFloat(m[1]);
			else {
				m = ua.match(/Gecko\/([^\s]*)/);
				if (m) {
					o.gecko = 1;
					m = ua.match(/rv:([^\s\)]*)/);
					if (m&&m[1]) o.gecko=parseFloat(m[1]);
				}
			}
		}
	}
    return o;
}


/**
* Gibt die aktuelle Scrollposition an.
*/
Base.UserAgent.getScrollPosition = function()
{
	return window.pageYOffset ? window.pageYOffset : document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body ? document.body.scrollTop : 0;
}


/**
* Gibt die Breite des Sichtfeldes des Brwosers an.
*/
Base.UserAgent.getViewportHeight = function()
{
	var height = self.innerHeight;
	var mode = document.compatMode;
	if ((mode || Base.UserAgent.info.ie) && !Base.UserAgent.info.opera) height = (mode == 'CSS1Compat') ?
			document.documentElement.clientHeight :
			document.body.clientHeight;
	
	return height;
}


/**
* Gibt die Höhe des Sichtfeldes des Brwosers an.
*/
Base.UserAgent.getViewportWidth = function()
{
	var width = self.innerWidth;
	var mode = document.compatMode;
	if (mode || Base.UserAgent.info.ie) width = (mode == 'CSS1Compat') ?
			document.documentElement.clientWidth :
			document.body.clientWidth;
	
	return width;
}

