/**
 * MULTIPLE ONLOAD / ONUNLOAD FUNCTIONS
 *
 * usage: window.onloadFunctions[window.onloadFunctions.length] = function() {
 *            ...your code... e.g. alert('mooo');
 *        };
 *
 */
document.domain = document.domain.split('.').slice(-2).join('.');

if (typeof window.onloadFunctions != 'object') {
	window.onloadOLD = window.onload;
	window.onload = function() { for (i in window.onloadFunctions) { window.onloadFunctions[i](); } };
	window.onloadFunctions = [];
	if (typeof window.onloadOLD == 'function') {
		window.onloadFunctions[window.onloadFunctions.length] = function() { window.onloadOLD(); };
	}
}
if (typeof window.onunloadFunctions != 'object') {
	window.onunloadOLD = window.onunload;
	window.onunload = function() { for (i in window.onunloadFunctions) { window.onunloadFunctions[i](); } };
	window.onunloadFunctions = [];
	if (typeof window.onunloadOLD == 'function') {
		window.onunloadFunctions[window.onunloadFunctions.length] = function() { window.onunloadOLD(); };
	}
}

if (typeof window.rpOnLoginFunctions != 'object') {
	window.RPOnLoginOLD = window.RPOnLogin;
	window.RPOnLogin = function() { for (i in window.rpOnLoginFunctions) { window.rpOnLoginFunctions[i](); } };
	window.rpOnLoginFunctions = [];
	if (typeof window.RPOnLoginOLD == 'function') {
		window.rpOnLoginFunctions[window.rpOnLoginFunctions.length] = function() { window.RPOnLoginOLD(); };
	}
}

function Page() {
	this.vars = new Array();
	for(i in pageEnv) {
		this.vars[i] = pageEnv[i];
	}
	
	this.setVar = function (name, value)
	{
		this.vars[name] = escape(value);
	}
	
	this.getVar = function(name)
	{ 
		return this.vars[name];
	}
	
	this.getGetParam = function(varname)
	{ 
		return this.getGetParamFromUrl(document.location.href,varname);
	}
	
	this.getGetParamFromUrl = function(url, varname)
	{ 
		var qs=url.substring(url.indexOf("?")+1);
		var varvalue = this.getQsFormatValue(varname,qs).replace(/\+/g," ");
		return (typeof decodeURIComponent == 'function') ? decodeURIComponent(varvalue) : varvalue;
	}
	
	this.getQsFormatValue = function(varname,haystack)
	{
		var qsArray = new Array();
		var qsRE = new RegExp("(^|&)(" + varname + ")\=([^&]*)(&|$)");
		qsArray = qsRE.exec(haystack);
		return ( qsArray!=null ) ? qsArray[3] : '';
	}
	
	this.replaceGetParamInUrl = function(url, varname, varvalue)
	{
		var url = new String(url);
		var qsRE = new RegExp("(\\\?|&)(" + varname + ")\=([^&]*)(&|$)");
		var found = url.search(qsRE);
		if (found == -1)
			url+= (url.indexOf('?')>-1?'&':'?')+varname+'='+this.escapeGetParamValue(varvalue);
		else 
			url = url.replace(qsRE,'$1$2='+this.escapeGetParamValue(varvalue)+'$4');
		return url;
	}
	
	this.removeGetParamInUrl = function(url, varname)
	{
		var qsRE = new RegExp("(\\\?|&)" + varname + "\=[^&]*?(&|$)");
		return url.replace(qsRE, '');
	}
	
	this.passthruGetParamsToUrl = function(url, params)
	{
		return this.passthruGetParamsFromUrlToUrl(document.location.href, url, params);
	}
	
	this.passthruGetParamsFromUrlToUrl = function(surl, durl, params)
	{
		for (i in params) {
			var sParamValue = this.getGetParamFromUrl(surl,params[i]);
			var dParamValue = this.getGetParamFromUrl(durl,params[i]);
			if (sParamValue && !dParamValue) {
				durl+= (durl.indexOf('?')>-1?'&':'?')+params[i]+'='+this.escapeGetParamValue(sParamValue);
			}
		}
		return durl;
	}
	
	this.escapeGetParamValue = function( varvalue )
	{
		return escape(varvalue).split('%2C').join(',');
	}
	
	
	this.openPopUp = function(params)
	{
		if (typeof params.width == 'undefined')  params.width  = 100;
		if (typeof params.height == 'undefined') params.height = 100;
		if (typeof params.center == 'undefined') params.center = true;
		if (typeof params.resize == 'undefined') params.resize = false;
		if (typeof params.scroll == 'undefined') params.scroll = true;
		if (typeof params.top == 'undefined')    params.top    = 100;
		if (typeof params.left == 'undefined')   params.left   = 100;
		if (typeof params.name == 'undefined')   params.name   = 'W'+params.width+'x'+params.height+'X'+params.top+'x'+params.left+'y'+(params.resize?'y':'n')+'X'+(params.center?'y':'n')+'X';
		// Update properties if comp. browser
		if (params.center && parseInt(navigator.appVersion) >= 4) {
			params.top = screen.availHeight /2 - params.height / 2;
			params.left = screen.availWidth / 2 - params.width / 2;
		}
		// Open the new window using top and left properties
		var remoteWindow = window.open(params.url, params.name, 'status=no,toolbar=no,menubar=no,location=no,scrollbars='+(params.scroll?'yes':'no')+',width=' + params.width + ',height=' + params.height + ',left=' + params.left + ',top=' + params.top + ',resizable='+(params.resize?'yes':'no,resize=no')+'');
		if (remoteWindow) remoteWindow.focus();
		return true;
	}
	
	

	this.addRTrackingToUrl = function(url, type)
	{
		// determine UrlType (part, ffteaser, fftoplist...)
		var urlProtocol = url.substring(0, url.indexOf('://'));
		// only add RTracking to http urls...
		if (urlProtocol != 'http') {
			return url;
		}
		var urlPath = url.substring(url.indexOf('://')+3);
		var urlDomain = urlPath.split('/')[0];
		var urlTypeVars = this.parseTypeVars(type);
		if (urlTypeVars == null) {
			return url;
		}
		var pagePath = this.getCurrentPagePath();
		if (pagePath) pagePath = pagePath.split('/');
		var editionCode = this.getVar('edition_code');
		switch (urlTypeVars.TYPE) {
			case 'navi':
				var partTracking = (pagePath[0]||'')+'/navi/'+urlTypeVars.NID+'.rx';
				var RTrackParams = '&p='+(pagePath[0]||'')
								+'&sp='+(pagePath[1]||'')
								+'&ssp='+(pagePath[2]||'')
								+'&gctry='+(editionCode||'')
								+'&viewer=na&sn=na&part=('+partTracking+')&area=navi&ltype=na';
				// return 'http://'+location.host+'/R/R.'+RTrackParams+'.R/'+urlPath;
                 return 'http://'+urlPath;


			case 'part':			
				var RTrackParams = '&p='+(pagePath[0]||'')
								+'&sp='+(pagePath[1]||'')
								+'&ssp='+(pagePath[2]||'')
								+'&gctry='+(editionCode||'')
								+'&viewer=na&sn=na&part=('+(urlTypeVars.PTID||'')+')&area=na&ltype=na';
				// return 'http://'+location.host+'/R/R.'+RTrackParams+'.R/'+urlPath;
				return 'http://'+urlPath;

			case 'ffteaser':
			case 'fftoplist':
			case 'snteaser':
				var RTrackParams = '&p='+(pagePath[0]||'')
								+'&sp='+(pagePath[1]||'')
								+'&ssp='+(pagePath[2]||'')
								+'&gctry='+(editionCode||'')
								+'&type='+urlTypeVars.TYPE
								+'&domain='+urlDomain;
				// return 'http://'+location.host+'/R/R.'+RTrackParams+'.R/'+urlPath;
				return 'http://'+urlPath;

		}
		return url;
	}
	
	return this;
}
page = new Page();





