var EXANIMO = EXANIMO || {};
(function()
{
EXANIMO.managers = EXANIMO.managers || {};
var _initialized = false;
var _checkInterval;
var _method;
var _swf;
var _oldStateID;
var _preventPageRefresh = false;
var _iframeID = 'EXANIMO-managers-StateManager-iFrame';
var _e;
function _self()
{
return EXANIMO.managers.StateManager;
}
var _method = navigator.appName.indexOf('Microsoft Internet') != -1 ? 'IFRAME' : navigator.userAgent.indexOf('Safari') != -1 ? 'LINK' : 'HASH';
function _getStateID()
{
return document.location.href.split('#')[1] || _self().defaultStateID;
};
function _getSWF()
{
var tags = ['object', 'embed'];
for (var i = 0; i < tags.length; i++)
{
var a = document.getElementsByTagName(tags[i]);
for (var j = 0; j < a.length; j++)
{
if (a[j].dispatchStateChangeEvents)
{
return a[j];
}
}
}
};
function _dispatchEvent(stateID, manual)
{
stateID = stateID || _self().defaultStateID;
if (!_swf)
{
//
// AJAX mode
//
_e = {id: stateID};
var f;
// If a handler is set, call it.
if (f = _self().onstatechange)
{
_e.type = 'stateChange';
f(_e);
}
if (manual)
{
if (f = _self().onstateset)
{
_e.type = 'stateSet';
f(_e);
}
}
else
{
if (f = _self().onstaterevisit)
{
_e.type = 'stateRevisit';
f(_e);
}
}
_e = null;
}
else if (!manual)
{
//
// SWF mode
//
//alert(stateID);
_swf.dispatchStateChangeEvents(stateID);
}
};
var _setHash = (function()
{
switch(_method)
{
case 'HASH':
return function(stateID)
{
document.location.hash = stateID == _self().defaultStateID ? '#' : stateID;
_oldStateID = stateID;
};
case 'IFRAME':
return function(stateID)
{
_preventPageRefresh = true;
var iframe = document.getElementById(_iframeID);
frames[_iframeID].document.open();
frames[_iframeID].document.write('');
frames[_iframeID].document.close();
};
case 'LINK':
return function(stateID)
{
_preventPageRefresh = true;
var a = document.createElement('a');
a.setAttribute('href', stateID == _self().defaultStateID ? '#' : '#' + stateID);
var evt = document.createEvent('MouseEvents');
evt.initEvent('click', true, true);
a.dispatchEvent(evt);
document.location.EXANIMO.managers.StateManager.stateList.push(stateID);
};
}
})();
EXANIMO.managers.StateManager = {
CHECK_RATE: 500,
onstatechange: null,
onstateset: null,
onstaterevisit: null,
DEFAULT_STATE: 'defaultState',
defaultStateID: 'defaultState',
initialize: function(swf)
{
if (_initialized) return;
_initialized = true;
_swf = swf == true ? _getSWF() : swf;
switch(_method)
{
case 'HASH':
_oldStateID = _getStateID() == _self().defaultStateID ? _self().defaultStateID : null;
var checkForHashChange = function()
{
var stateID = _getStateID();
if (stateID != _oldStateID)
{
_oldStateID = stateID;
_dispatchEvent(stateID);
}
}
_checkInterval = setInterval(checkForHashChange, _self().CHECK_RATE);
break;
case 'IFRAME':
_preventPageRefresh = true;
var iframe = document.createElement('iframe');
iframe.setAttribute('src', 'about:blank');
iframe.setAttribute('name', _iframeID);
iframe.setAttribute('id', _iframeID);
iframe.style.visibility = 'hidden';
iframe.style.width = '0';
iframe.style.height = '0';
iframe.style.position = 'absolute';
iframe.style.overflow = 'hidden';
document.body.appendChild(iframe);
var stateID = _getStateID();
if (stateID != _self().defaultStateID)
{
setTimeout(
function()
{
_dispatchEvent(stateID)
},
0
);
}
frames[_iframeID].document.open();
if (stateID)
frames[_iframeID].document.write('');
else
frames[_iframeID].document.write('');
frames[_iframeID].document.close();
break;
case 'LINK':
document.location.EXANIMO = document.location.EXANIMO || {};
document.location.EXANIMO.managers = document.location.EXANIMO.managers || {};
document.location.EXANIMO.managers.StateManager = document.location.EXANIMO.managers.StateManager || {};
var loc = document.location.EXANIMO.managers.StateManager;
window.onunload = function()
{
loc.oldHistoryLength = -1;
}
if (loc.deepLink && loc.deepLink != _self().defaultStateID)
{
loc.oldHistoryLength = -1;
loc.deepLink = null;
}
if (typeof loc.stateList == 'undefined')
{
loc.stateList = [_getStateID() || _self().defaultStateID];
loc.deepLink = loc.stateList[0];
loc.offset = history.length - 1;
while (loc.offset)
{
loc.stateList.unshift(null);
loc.offset--;
}
delete loc.offset;
loc.oldHistoryLength = document.location.hash ? -1 : history.length;
}
var checkForHistoryLengthChange = function()
{
var loc = document.location.EXANIMO.managers.StateManager;
if (_preventPageRefresh)
{
_preventPageRefresh = false;
loc.oldHistoryLength = history.length;
return;
}
if (history.length != loc.oldHistoryLength)
{
var stateID = loc.stateList[history.length - 1];
_dispatchEvent(stateID)
loc.oldHistoryLength = history.length;
}
}
_checkInterval = setInterval(checkForHistoryLengthChange, _self().CHECK_RATE);
break;
}
},
setState: function(stateID, title)
{
_self().setTitle('GESUNDHEIT UND WELLNESS 2010');
if (_e) return;
_setHash(stateID);
_dispatchEvent(stateID, true);
},
setTitle: function(title)
{
window.document.title = title || ' ';
},
_updateIFrame: function(stateID)
{
if (!_preventPageRefresh)
{
_dispatchEvent(stateID);
}
_preventPageRefresh = false;
}
}
})();