/* general scripts for blikk-html-pages - ah 20060209 ngrhldm24@schule.suedtirol.it */
/* revision 20070913 ngrhldm24@schule.suedtirol.it */
/* revision 20071010 ngrhldm24@schule.suedtirol.it */

// global _blikk object
var _blikk = {
	// member vars
	// script path
	scriptPath : '/blikk/scripts',
	// loaded scripts
	loadedScripts : Array(),
	// home server
	home_server : '',
	// environment
	environment : 'online',
	// server
	server : '',
	// requests on
	requestsallowed : true,
	
	// methods
	// get actual server
	getServer : function() {
		var url = new String(document.URL);
		var a = url.split('/');
		return a[2];
	},
	// load further scripts method
	loadScript : function(scrName) {
		var i;
		for (i=0; i<this.loadedScripts.length; i++) {
			if (this.loadedScripts[i] == scrName)
				return;
			}
		if (scrName.substring(0,7) == 'http://') {
			scrPath = scrName;
		} else {
			scrPath = this.scriptPath+'/'+scrName;
		}
		document.write('<sc'+'ript language="javascript" type="text/javascript" src="'+scrPath+'"></script>');
		this.loadedScripts[this.loadedScripts.length] = scrName;
	},
	// make parameter
	makeParameters : function() {
		var url = new String(document.URL);
		var a = url.split('/');
		//var backurl = this.encodeBackUrl(encodeURI(url.split('#')[0]));
		var backurl = this.encodeBackUrl(encodeURI(url));
		if (!language) {
			language = 'de';	// global var (no var prefix)
		}
		var pars = 'workspace=' + workspace +
						'&chapter=' + chapter +
						'&scope=' + scope +
						'&language=' + language;
		// worksite-var - for forum/blog auth
		try {	pars += '&worksite=' + worksite; } catch (e) {}
		// server adaption
		if (this.environment == 'home') {
			var server = a[2] + '/www';
		} else {
			var server = a[2];
		}
		pars += '&server=' + server +
					'&backurl=' + backurl;
		return pars;
	},
	// decodeURL: zerlegt eine URL mit GET-Paramtern und gibt js-objekt zurueck
	// object.url = url der adresse
	// object.parameter = '&' + parameter-Zeichenkette der adresse
	// object.par1 ... alle parameter
	// object.anchor = '#anchor'
	decodeURL : function(url) {
		// default URL
		if (!url) {
			url = new String(document.URL);
		}
		// return objekt
		var ret = new Object();
		// evtl. anchor abtrennen
		ret.anchor = '';
		if (url && url.indexOf('#') != -1) {
			ret.anchor = url.substr(url.indexOf('#'));
			url = url.substr(0,url.indexOf('#'));
		}
		// url-Teil ermitteln
		if (url.indexOf('?') != -1) {
			ret.url = url.substr(0,url.indexOf('?'));
			// restliche elemente
			var params = url.substr(url.indexOf('?')+1);
			var pars = params.split('&');
			ret.parameter = '&' + params;
			var parsteile = new Array();
			ret.parts = new Array();
			for (var i=0;i<pars.length;i++) {
				parsteile = pars[i].split('=');
				if (parsteile[0]) {
					ret.parts[parsteile[0]] = parsteile[1];
					eval('ret.' + parsteile[0] +' = parsteile[1];');
				}
			}
		} else {
			ret.parts = new Array();
			ret.parameter = '';
			ret.url = url;
		}
		return ret;
	},
	
	// ergaenzt bzw. ersetzt die in parobj uebergebenen parameter im query-string der url
	makeQueryString : function(parobj,url) {
		var decurl = this.decodeURL(url);
		var qparts = decurl.parts;
		// ueberschreiben bzw. dazugeben
		for (var parname in parobj) {
			qparts[parname] = parobj[parname];
		}
		// queryString neu kombinieren
		var qs = '';
		for (var pname in qparts) {
			if (qparts[pname] != '') {
				qs += pname + '=' +qparts[pname] + '&';
			}
		}
		if (qs != '') {
			return '?' + qs.substr(0,qs.lastIndexOf('&')) + decurl.anchor;
		} else {
			return '';
		}
	},
	
	// arrayizing variables
	// not workin on safari 3.0beta
	arrayize : function(obj) {
		if (obj.constructor.toString().indexOf("Array") == -1) {
			return new Array(obj);
		}
		return obj;
	},
	
	// in backurl ? durch .. und & durch --  und # durch .- ersetzen
	encodeBackUrl : function (url) {
		url = url.replace(/\?/,'..');
		url = url.replace(/#/,'.-');
		return url.replace(/&/g,'--');
	},
	
	// add Handler
	addHandler : function (handler,classname,handlingfunction,tagname) {
		var objs = $_class(classname,tagname);
		if (objs && objs.length > 0) {
			for (var i=0;i<objs.length;i++) {
				eval('objs[i].' + handler + '= handlingfunction');
			}
		}
	},

	// event blikk event-handler
	addOurHandler : function () {
		// add handler for popups
		this.addHandler('onclick','event_popup',this.doPopupHandler,'A');
		this.addHandler('onclick','event_popup',this.doPopupHandler,'AREA');
	},
	
	// browser Erkennung (taken from http://tinymce.moxiecode.com)
	getBrowser : function() {
		var t = this, d = document, w = window, na = navigator, ua = na.userAgent;
		t.isOpera = w.opera && opera.buildNumber;
		t.isWebKit = /WebKit/.test(ua);
		t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);
		t.isIE6 = t.isIE && /MSIE [56]/.test(ua);
		t.isGecko = !t.isWebKit && /Gecko/.test(ua);
		t.isMac = ua.indexOf('Mac') != -1;
		t.isAir = /adobeair/i.test(ua);
	}
		
}; // end blikk object

// server-path adjustment
_blikk.home_server = _blikk.getServer();
if (_blikk.home_server == 'localhost' || _blikk.home_server == 'ahspc' || _blikk.home_server == 'pinote') {
	_blikk.environment = 'home';
	_blikk.server = '/www';
	_blikk.scriptPath = '/www' + _blikk.scriptPath;
}

// loading further Scripts
_blikk.loadScript('layer.js');
_blikk.loadScript('blikkrequests.js');

// google-analytics (experimental)
if (_blikk.environment != 'home') {
	var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
	document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
	//_blikk.loadScript('http://www.google-analytics.com/urchin.js');
}

// Browser-Erkennung
_blikk.getBrowser();

// transparent-png-hack
if (_blikk.isIE6) {
	_blikk.loadScript('sleight.js');
}

// utility-functions -----------------------------------------------------------------------

// getElementById-Shortcut
function $_get(id) {
	return document.getElementById(id);
}

// get tag by name
function $_tag(tagname,index) {
	if (!index) { index = 0; }
	if (index == -1) { 
		return document.getElementsByTagName(tagname);
	}
	return document.getElementsByTagName(tagname)[index];
}

// get by classname
function $_class(classname,tagname) {
	var r = $_tag(tagname,-1);
	var result = new Array();
	var m = eval('/\\b' + classname + '\\b/');
	for (var i=0;i<r.length;i++) {
		if (r[i].className.match(m)) {
			result.push(r[i]);
		}
	}
	return result;
}

// setElementAttribut-Function
function $_set(value,id,attribute,hideifvoidid) {
	if (attribute == null || attribute == '') {
		attribute = 'innerHTML';
	}
	if ($_get(id)) {
		eval('$_get(id).' + attribute + ' = value;');
	}
	if (hideifvoidid != null && value == '') {
		$_get(hideifvoidid).style.visibility = 'hidden';
	}
}

// create uniqe id
function $_createUid() {
     var d = new Date();
     var uid =
          d.getFullYear() + '' +
          d.getMonth() + '' +
          d.getDate() + '' +
          d.getTime();
     return uid;
};
