document.documentElement.className += ' js';

var waitFor = function (symbol, callback) {
	return function () {
		var target = this, args = arguments;
		if (window[symbol]) {
			callback.apply(this, arguments);
			return;
		}
		var steps = 0;
		var interval = setInterval(function () {
			if (window[symbol] || ++steps > 150) {
				clearInterval(interval);
			}
			if (window[symbol]) {
				callback.apply(target, args);
			}
		}, 100);
	};
}; 

var globalLanguage = null;
var global_cache = {
	defaultLanguage: null,
	currentLanguage: null,
	useWindowedFlash: null,
	useEtracker: null,
	languages: null,
	cookieLifeTime: 365,
	languageCookieName: 'PREFLANG',
	project: null,
	et_areas: [], et_url: null, et_pagename: '', et_area_default: null, et_area_append: '', et_lpage: '', et_sub:'', et_subid: '',
	et_escape: function (str) {
		return str.replace(/(\/)/g, '//').replace(/,/g, ';');
	},
	add_et_area: function (area, noProject, isDef) {
		var i = this.et_areas.push([area, noProject]);
		if (isDef) {
			this.et_area_default = i - 1;
		}
		return area;
	},
	get_et_areas: function(project) {
		var areas = this.et_areas, area = null, result = [];
		project = project || '';
		for (var i = 0, length = areas.length; i < length; ++i) {
			area = areas[i][0];
			if (i == this.et_area_default && this.et_area_append) {
				area += this.et_area_append;
			}
			if (!areas[i][1]) {
				area = project + '/' + area;
			}
			result.push(area);
		}
		return result.join(',');
	},
	execute_on_ready: function () {
		var stack = [], num = 0, hasRun = false, jQuery = null;
		function add(fn, data) {
			if (hasRun) {
				fn.call(document, jQuery, ++num, data);
			} else {
				num = stack.push({fn:fn, data:data});
			}
		}
		add.execute = function ($) {
			var fn;
			jQuery = $;
			hasRun = true;
			while (fn = stack.pop()) {
				fn.fn.call(document, $, num, fn.data);
			}
		};
		return add;
	}(),
	track_event: waitFor('clickTracker', function (text) {
		text = this.project + '|' + location.pathname + '|' + text;
		clickTracker(escape(html_entity_decode(text))); // defined in tracking code at bottom
	}),
	flash_players: {}, // filled by flash-plugin
		
	track_event_start: waitFor('ET_Event', function (category, object, action, tags) {
		if (this.useEtracker) {
			ET_Event.eventStart(category, object, action, tags);
		}
	}),

	track_stage_event: function (category, object, action) {
		this.track_event_start(category, object, action, '');
	},
	
	get_file_path: function (file) {
		var parts = /^(?:http|https):\/\/[^\/]*(\/.*)$/.exec(file);
		return (parts && parts[1]) || file;	
	},
	
	track_layer_event: function (obj, action) {
		this.track_event_start(this.project, this.get_file_path(obj), action, '');
	},		
	
	track_search_event: function (name, query) {
		this.track_event_start('Search', name, 'SearchSubmit');
	},
	setCookie: function (name, value, expires) {
		expires = expires || this.cookieLifeTime;
		var host = location.hostname.replace(/^www\./, '.');
		document.cookie = name + '=' + value + '; domain=' + host + '; path=/; expires=' + new Date(new Date().getTime() + expires * 86400000);
	},
	getCookie: function (name) {
		var parts = new RegExp(name + '=([^;]+);?').exec(document.cookie);
		return (parts && parts[1]) || '';
	},
	delCookie: function (name) {
		this.setCookie(name, '', -1);
	},
	doLanguageRedirect: function () {
		if (navigator.cookieEnabled === false || location.search != '' || location.hash != '') {
			// only if cookies are globally disabled, ignore this
			return;
		}
		var pageLanguage = globalLanguage.toLowerCase();
		var cookieLanguage = this.getCookie(this.languageCookieName);
		var browserLanguage = (navigator.language || navigator.browserLanguage || '').substring(0,2);
		if (cookieLanguage) {
			if (pageLanguage != cookieLanguage) {
				// cookie set, but wrong language
				if (this.languages[cookieLanguage]) {
					// go to language specified by cookie
					location = this.languages[cookieLanguage];
				} else {
					// reset cookie to default language of this page, go to default language
					this.setCookie(this.languageCookieName, this.defaultLanguage);
					if (pageLanguage != this.defaultLanguage) {
						location = this.languages[this.defaultLanguage];
					}
				}
			}
		} else if (browserLanguage) {
			if (pageLanguage != browserLanguage) {
				if (this.languages[browserLanguage]) {
					// a version of this page fits the user's preferred language		
					location = this.languages[browserLanguage];
				} else {
					// language does not match this user's preferences, go to default
					if (pageLanguage != this.defaultLanguage) {
						location = this.languages[this.defaultLanguage];
					}
				}
			}
		}
	}
	
};

// called by jwplayer on load
function playerReady(info) {
	var playerData = global_cache.flash_players[info.id];
	if (playerData.htmlOptions.flashvars.autostart) {
		info.newstate = 'AUTOSTART';
		handlePlayerEvent(info);
	}
	document.getElementById(info.id).addModelListener('STATE', 'handlePlayerEvent');
}
// generic handler to be called on state changes of jwplayer 
function handlePlayerEvent(info) {
	var playerData = global_cache.flash_players[info.id];
	var filmUrl = playerData.htmlOptions.flashvars.file;
	var filmHeadline = playerData.pluginOptions.playerHeadline;
	var eventData = filmHeadline + '|' + filmUrl;
	switch (info.newstate) {
		case 'AUTOSTART':
		case 'PLAYING': 
			global_cache.track_event('FLASH PLAYING STARTED|' + eventData);
			break;
	}
}
// html entity decode				
var html_entity_decode = function html_entity_decode() {
	var ta=document.createElement("textarea");
	return function (str) {
		ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
		return ta.value;
	};
}();

// if in iframe then redirect links to parent frame
if (parent && parent.Shadowbox && window.frameElement) {
	document.documentElement.className += ' inIframe';
	global_cache.execute_on_ready(function ($) {
		$(document).click(function (e) {
			var el = $(e.target);
			var href = el.attr('href') || el.parents('[href]').eq(0).attr('href');
			var fullHref = el.get(0).href || ((el.parents('[href]').length) && el.parents('[href]').get(0).href);
			if (href) {
				if (/^http/.test(href)) {
					open(href); 
					return false;
				} else if (/^#|^$/.test(href)) {
					// anchors open in same frame
				} else {
					parent.location = fullHref; // open fully qualified href!
					return false;
				}
			}
		});
	});
}

// convinience-function
// returns NOT TRANSLATED, if given key is not present
function translate(keyString){
	return (window.transl && transl[keyString]) || 'NOT TRANSLATED';
}
