// JavaScript Document




var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();









	// Add an event to an element
	function addEvent( obj, type, fn ) {
		if (obj.addEventListener) {
			obj.addEventListener( type, fn, false );
		} else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
			obj.attachEvent( "on"+type, obj[type+fn] );
		}
	}
	
	// Remove an event from an element
	function removeEvent( obj, type, fn ){
		if (obj.removeEventListener) {
			obj.removeEventListener( type, fn, false );
		} else if (obj.detachEvent) {
				obj.detachEvent( "on"+type, obj[type+fn] );
			obj[type+fn] = null;
			obj["e"+type+fn] = null;
		}
	}

	// Select a option (from a select box) by value
	function selectOption(element, wert) {
		for (var i=0; i<element.options.length; i++) {
			if (element.options[i].value == wert) {
				element.options[i].selected = true;		
			} else {
				element.options[i].selected = false;	
			}
		}
	}
	
	// Set a radio button by value	
	function setRadioChecked(name,value) {
		var radioList = document.getElementsByName(name);
		if(radioList.length>0){
			for(var i=0; i<radioList.length; ++i){
				if(radioList[i].value==value){
					radioList[i].checked=true;
					break;
				}
			}
		}
	}

	// Get a checked radio button
	function getRadioChecked(name) {
		var radioList = document.getElementsByName(name);
		if(radioList.length>0){
			for(var i=0; i<radioList.length; ++i){
//				if(radioList[i].value==value){
				if(radioList[i].checked) {
					return radioList[i].value;
					break;
				}
			}
		}
	}


	var iconOpenClose = new Array('_img/icon_folder_open.gif', '_img/icon_folder.gif');

	function closeBox(boxnames) {
//		$w(boxnames).concat('Data').each(Element).setStyle({display: 'none'});
		
		$w(boxnames).each(function(elem){
			$(elem+"Data").setStyle({display: 'none'});
			$(elem+"HeaderIconOpen").setStyle({display: 'none'});
			$(elem+"HeaderIconClose").setStyle({display: ''});
		})
		
//		$(boxname + "Data").setStyle({display: 'none'});
//		$(boxname + "HeaderIconOpen").setStyle({display: 'none'});
//		$(boxname + "HeaderIconClose").setStyle({display: ''});
	}

	function openBox(boxnames) {
		$w(boxnames).each(function(elem){
			$(elem+"Data").setStyle({display: ''});
			$(elem+"HeaderIconOpen").setStyle({display: ''});
			$(elem+"HeaderIconClose").setStyle({display: 'none'});
		})
//		$(boxname + "Data").setStyle({display: ''});
//		$(boxname + "HeaderIconOpen").setStyle({display: ''});
//		$(boxname + "HeaderIconClose").setStyle({display: 'none'});
	}

	// Open/Close Toggle for a div-box
	function toggleBox() {
		removeEvent(this, 'click', toggleBox);
		
		boxName = this.getAttribute('box') + "Data";
		headerIconName = this.getAttribute('box') + "HeaderIcon";
		new Element.toggle(headerIconName + 'Open');
		new Element.toggle(headerIconName + 'Close');
		new Effect.toggle($(boxName), 'slide', {queue:'front', afterFinish:addEvent(this, 'click', toggleBox)});
//		new Effect.toggle(box, 'slide');

/*
		headerIconName = this.getAttribute('box') + "HeaderIconOpen";
		headerIcon = $(headerIconName);
		iconOpenClose.reverse();
		headerIcon.src = iconOpenClose[0];
*/	
	}

	function eventListBox() {
//		new Element.toggle('eventList');
//		if ($('eventList').getStyle('display') == 'none') {
		if (!$('eventList').visible()) {
			if(BrowserDetect.browser == "Firefox") {
				new Effect.Appear('eventList', { duration: 0.5 });
			} else {
				hideAllSelect();
//				new Effect.BlindDown('eventList', { duration: 1.0 });
				new Effect.Appear('eventList', { duration: 0.0 });
			}			
			if(BrowserDetect.browser != "Firefox") {
				$('country').hide();
			}
		} else {
			if(BrowserDetect.browser == "Firefox") {
				new Effect.Fade('eventList', { duration: 0.5 });
			} else {
				showAllSelect();
//				new Effect.BlindUp('eventList', { duration: 1.0 });
				new Effect.Fade('eventList', { duration: 0.0 });
			}
			if(BrowserDetect.browser != "Firefox") {
				$('country').show();
			}
		}
//			new Effect.toggle($('eventList'), 'appear');//, {queue:'end', afterFinish:addEvent(this, 'click', toggleBox)});
	}


	function userListBox() {
//		new Element.toggle('eventList');
//		if ($('eventList').getStyle('display') == 'none') {
		if (!$('userList').visible()) {
			if(BrowserDetect.browser == "Firefox") {
				new Effect.Appear('userList', { duration: 0.5 });
			} else {
				hideAllSelect();
//				new Effect.BlindDown('eventList', { duration: 1.0 });
				new Effect.Appear('userList', { duration: 0.0 });
			}			
//			if(BrowserDetect.browser != "Firefox") {
//				$('country').hide();
//			}
		} else {
			if(BrowserDetect.browser == "Firefox") {
				new Effect.Fade('userList', { duration: 0.5 });
			} else {
				showAllSelect();
//				new Effect.BlindUp('eventList', { duration: 1.0 });
				new Effect.Fade('userList', { duration: 0.0 });
			}
//			if(BrowserDetect.browser != "Firefox") {
//				$('country').show();
//			}
		}
//			new Effect.toggle($('eventList'), 'appear');//, {queue:'end', afterFinish:addEvent(this, 'click', toggleBox)});
	}



	function dragBox() {
		new Draggable('eventList');		
	}

	// Format german date into MS SQL date (DD.MM.YYYY => MM/DD/YYYY)
	function dedate2mssql(string) {
		var token = string.split(".");
		return token[1] + "/" + token[0] + "/" + token[2];
	}

	// Format MS SQL date into german date (MM/DD/YYYY => DD.MM.YYYY)
	function mssql2dedate(string) {
		var token = string.split("/");
		return token[1] + "." + token[0] + "." + token[2];
	}


	// Is an objekt undefined?
	function isUndefined(obj) {
		if (obj == "undefined" || obj == null) return true
		else return false
	}


	function encode_utf8(rohtext) {
		// dient der Normalisierung des Zeilenumbruchs
		rohtext = rohtext.replace(/\r\n/g,"\n");
		var utftext = "";
		for(var n=0; n<rohtext.length; n++) {
			// ermitteln des Unicodes des  aktuellen Zeichens
			var c=rohtext.charCodeAt(n);
			// alle Zeichen von 0-127 => 1byte
			if (c<128) {
				utftext += String.fromCharCode(c);
			// alle Zeichen von 127 bis 2047 => 2byte
			} else if((c>127) && (c<2048)) {
				utftext += String.fromCharCode((c>>6)|192);
				utftext += String.fromCharCode((c&63)|128);
			} else {
				// alle Zeichen von 2048 bis 66536 => 3byte
				utftext += String.fromCharCode((c>>12)|224);
				utftext += String.fromCharCode(((c>>6)&63)|128);
				utftext += String.fromCharCode((c&63)|128);}
			}
		return utftext;
	}
	
	function decode_utf8_TEST(utftext) {
		var plaintext = ""; 
		var i=0; 
		var c=c1=c2=0;
		var out =""
		// while-Schleife, weil einige Zeichen uebersprungen werden
		while(i<utftext.length) {			
			c = utftext.charCodeAt(i);
			out += String.fromCharCode(c) + "=" + c + ",";
			if (c<128) {
				plaintext += String.fromCharCode(c);
				i++;
			} else if((c>191) && (c<224)) {
				c2 = utftext.charCodeAt(i+1);
				plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
				i+=2;
//			} else if (c==195) {
//			c2 = utftext.charCodeAt(i+1);
//				plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
//				i+=2;
			} else {
				c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
				plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
				i+=3;
			}
		}
		alert(out);
		return plaintext;
	}		

	function decode_utf8(utftext) {
		var plaintext = ""; 
		var i=0; 
		var c=c1=c2=0;
		// while-Schleife, weil einige Zeichen uebersprungen werden
		while(i<utftext.length) {			
			c = utftext.charCodeAt(i);
			if (c<128) {
				plaintext += String.fromCharCode(c);
				i++;
			} else if((c>191) && (c<224)) {
				c2 = utftext.charCodeAt(i+1);
				plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
				i+=2;
			} else {
				c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
				plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
				i+=3;
			}
		}
		return plaintext;
	}		


	// Make FCKEditor editable after hide/show
	function enableEdit(FCKID) {
		oEditor = FCKeditorAPI.GetInstance(FCKID);
		if (BrowserDetect.browser == "Firefox" && oEditor && oEditor.EditorDocument && oEditor.EditMode == FCK_EDITMODE_WYSIWYG) {
			oEditor.SwitchEditMode();
			oEditor.SwitchEditMode();
		}
	}

	// See http://binnyva.blogspot.com/2005/10/dump-function-javascript-equivalent-of.html
	function dump(arr,level) {
		var dumped_text = "";
		if(!level) level = 0;
		
		//The padding given at the beginning of the line.
		var level_padding = "";
		for(var j=0;j<level+1;j++) level_padding += "    ";
		
		if(typeof(arr) == 'object') { //Array/Hashes/Objects 
			for(var item in arr) {
				var value = arr[item];
				
				if(typeof(value) == 'object') { //If it is an array,
					dumped_text += level_padding + "'" + item + "' ...\n";
					dumped_text += dump(value,level+1);
				} else {
					dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
				}
			}
		} else { //Stings/Chars/Numbers etc.
			dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
		}
		return dumped_text;
	}


	function firstToUpper (word) {
		firstLetter = word.substring(1, 0);
		restOfWord = word.substring(1);
		return (firstLetter.toUpperCase()+restOfWord);
	}
	

	function hideAllSelect() {
		var bodytag = document.getElementsByTagName("body").item(0);
		var selects = bodytag.getElementsByTagName("select");		
		for (i = 0; i < selects.length; i++) {
			selects[i].hide();
		}
	}
	function showAllSelect() {
		var bodytag = document.getElementsByTagName("body").item(0);
		var selects = bodytag.getElementsByTagName("select");		
		for (i = 0; i < selects.length; i++) {
			selects[i].show();
		}
	}


	selecteddiv = 0;
	function selectdiv(id) {
		if (id != selecteddiv) {
			if (selecteddiv != 0)
				new Effect.Fade('div_' + selecteddiv);
			new Effect.Appear('div_' + id);
			selecteddiv = id;
		}
	}


	selectedpop = 0;
	function popup(id) {
		if (id != selectedpop) {
			if (selectedpop != 0)
				new Effect.Fade('pop_' + selectedpop);
			new Effect.Appear('pop_' + id, {afterFinish: function() {
				try {
					$('flashcontent_' + id).show(); 
				} catch (e) {}
			} });
			selectedpop = id;
		}
	}
	function popdown(id) {
		new Effect.Fade('pop_' + id, {delay: 0.1, beforeStart: function() { 
			try {
				$('flashcontent_' + id).hide(); 
			} catch (e) {}
		} });
		selectedpop = 0;
	}






	var parent = new Object();



	function addEvent( obj, type, fn ) {
		if (obj.addEventListener) {
			obj.addEventListener( type, fn, false );
		} else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
			obj.attachEvent( "on"+type, obj[type+fn] );
		} else {
			obj["on"+type] = obj["e"+type+fn];
		}
	}
	
	function removeEvent( obj, type, fn ){
		if (obj.removeEventListener) {
			obj.removeEventListener( type, fn, false );
		} else if (obj.detachEvent) {
			obj.detachEvent( "on"+type, obj[type+fn] );
			obj[type+fn] = null;
			obj["e"+type+fn] = null;
		} else {
			obj["on"+type] = null; 
		}
	}

	// Change the stars
	function setStars() {
		my_rating = this.getAttribute('value');
		my_articleID = this.getAttribute('articleID');
		for (var ratingstar = 1; ratingstar<=5; ratingstar++) {
//			this.src = "_img/star_" + ratingstar + "_off.gif";
//			document.getElementById(my_articleID + '_star_' + ratingstar).src = "_img/star_" + ratingstar + "_off.gif";
			if (my_rating >= ratingstar) document.getElementById(my_articleID + '_star_' + ratingstar).src = PATH_IMAGES + "star_" + ratingstar + "_on.gif";		
			else document.getElementById(my_articleID + '_star_' + ratingstar).src = PATH_IMAGES + "star_" + ratingstar + "_off.gif";		
		}
	}	

	// Unset all stars
	function unsetStars() {
		my_avg_rating = this.getAttribute('avg_value');
		my_avg_rating = my_avg_rating.replace(",",".");
		my_avg_rating = parseFloat(my_avg_rating);
		my_avg_rating = Math.round(my_avg_rating);
		my_articleID = this.getAttribute('articleID');
		for (var ratingstar = 1; ratingstar<=5; ratingstar++) {			
//			document.getElementById(my_articleID + '_star_' + ratingstar).src = "_img/star_" + ratingstar + "_off.gif";
			if (my_avg_rating >= ratingstar) document.getElementById(my_articleID + '_star_' + ratingstar).src = PATH_IMAGES + "star_" + ratingstar + "_on.gif";		
			else document.getElementById(my_articleID + '_star_' + ratingstar).src = PATH_IMAGES + "star_" + ratingstar + "_off.gif";
		}
	}	


	function rateArticle() {
		parent = this.parentNode;
		removeEvent(this, 'click', rateArticle);
		// Save the rating		
		my_rating = this.getAttribute('value');
		my_ratingtype = this.getAttribute('ratingtype');
		my_articleID = this.getAttribute('articleID');
		
		// Hide the Links
		Effect.Fade(parent, {queue:'front', afterFinish:function(){
			// Send thr rating
			sendRating(my_articleID, my_ratingtype, my_rating);	
		}});
	}
	
	function sendRating(articleID, ratingtype, rating) {	
		var args = "rand=" + Math.random(1000);
		args += "&ratingtype=" + ratingtype;
		args += "&articleID=" + articleID;
		args += "&rating=" + rating;
		new Ajax.Request(PATH_AJAX + 'rating.asp', {method: 'post', parameters:args, onComplete:ausgeben});	
	}
	

	function xmlvalue(array, xml1, xml2) {
		var ret = null;
		if (!isUndefined(array[xml2])) {
			ret = array[xml2]; //IE
		} else if (!isUndefined(array[xml1][xml2])) {
			ret = array[xml1][xml2]; //FF
		}
		return ret;
	}

	function ausgeben(t) {
		var xmlData = t.responseXML;
		if (xmlData != null) {
			var arr = xml2array(xmlData);
			ratingtype = xmlvalue(arr, 'response', 'ratingtype');
			articleID = xmlvalue(arr, 'response', 'articleID');
			rating = xmlvalue(arr, 'response', 'rating');

			message = '';
			stars = '';
			if (ratingtype == 'rating') {
				message = MSG_THANKSFORRATING + ' ' + MSG_AVGRATING + '<br>';
			// is a rating

				for (var i = 1; i <= 5; i++) {
					rating = Math.round(parseFloat(rating));
					stars += '<img src="' + PATH_IMAGES + 'star_' + i + '_' + ((i <= rating)?'on':'off') + '.gif" width="12" height="12" border="0" align="absmiddle" class="rating">';					
				}
			} else if (ratingtype == 'helpful') {
				if (rating == "yes") {
					message = MSG_HELPFULLYES;
				} else if (rating == "no") {
					message = MSG_HELPFULLNO;
				}
			} else if (ratingtype == 'offensive') {
				if (rating == "offensive") {					
					message = '<span style="color:#' + COLOR_PINK + ';">' + MSG_OFFENSIVECHECK + '</span>';
				}
			}
		}
		$(parent).update('<div class="copytext">' + message  +'</div>' + stars)
		Effect.Appear(parent);
	}



	function hover() {
		this.addClassName('link_hover');
	}
	function normal() {
		this.removeClassName('link_hover');
	}

	function encode4Ajax(id) {
		text = $(id).value.strip();
		text = text.replace(/\+/g, '&');
		text = encodeURIComponent(text);
		return text
	}
