
function hideInputBg(field)
{
	ipField = document.getElementById(field);
	ipField.style.background = "#fff";
}

/* >> Standard Popup functions */
	function StandardPopup(Attrs){
		// @params IE and Gecko-Browser compatible window parameter attributes.
		this.params = ['left', 'top', 'location', 'menubar', 'resizable', 'scrollbars', 'status', 'toolbar', 'height', 'width'];
		this.href = Attrs.href ? Attrs.href : 'http://www.google.de'; // url to the popup content
		this.name = Attrs.name ? Attrs.name : 'standardPopup'; // standard window name
		this.height = Attrs.height ? Attrs.height : '550'; // standard height opened window
		this.width = Attrs.width ? Attrs.width : '650'; // standard width opened window
		this.left = Attrs.left ? Attrs.left : null; // window left position from the upper left corner of the client screen
		this.top = Attrs.top ? Attrs.top : null; // window top position from the top of the client screen
		this.locationbar = Attrs.location ? Attrs.location : 'no'; // ['yes', 'no'] display the locationbar
		this.menubar = Attrs.menubar ? Attrs.menubar : 'no'; // ['yes', 'no'] display the menubar
		this.resizable = Attrs.resizable ? Attrs.resizable : 'yes'; // ['yes', 'no'] allows the user to change the window size
		this.scrollbars = Attrs.scrollbars ? Attrs.scrollbars : 'yes'; // ['yes', 'no'] show scrollbars if necessary
		this.status = Attrs.status ? Attrs.status : 'no'; // ['yes', 'no'] show statusbar
		this.toolbar = Attrs.toolbar ? Attrs.toolbar : 'no'; // ['yes', 'no'] show toolbar
		this.wRef = null // window reference to make changes on the opened window
	}
	
	StandardPopup.prototype._formatParams = function()
	{
		var str = '\'';
		var objParam;
		for (var i = 0; i < this.params.length; ++i){
			objParam = this.params[i] == 'location' ? 'locationbar' : this.params[i];
			p = eval("this." + objParam);
			if (p){
				str += this.params[i] + '=' + p + ',';
			}
		}
		str = str.substring(0, str.length -1);
		str += '\'';
		return str;
	}
	
	StandardPopup.prototype.open = function(){
		var paraStr = this._formatParams();
		this.wRef = window.open(this.href, this.name, paraStr);
		if (this.wRef)
			this.wRef.focus();
		return false;
	}
/* << */


/* >> rss publisher */
	RSSPublisher = {
		publishers: false,
		register: function(args){
			this.append(args);
		},
		append: function(args){
			var RSSObj = new RSS();
			RSSObj.target = args.target;
			RSSObj.source = args.source;
			RSSObj.tags = args.tags;
			RSSObj.descLength = args.descLength;
			RSSObj.descLengthEnding = args.descLengthEnding
			RSSObj.pubDateFormat = args.pubDateFormat;
			RSSObj.refresh = args.refresh;
			RSSObj.itemsCount = args.itemsCount ? args.itemsCount : 5;
			RSSObj.staticTest = args.staticTest;
			if (args.acceptMimeTypes && typeof args.acceptMimeTypes == 'object'){
				RSSObj.acceptMimeTypesCgiStr = this.createMimeTypeCgiStr(args.acceptMimeTypes);
			}
			if (typeof this.publishers != 'boolean'){
				this.publishers.push(RSSObj);
			}else{
				this.publishers = [RSSObj];
			}
			RSSObj.getSource();
		},
		createMimeTypeCgiStr: function(mtList){
			var str = '&mimetypes=';
			for (var i = 0; i < mtList.length; ++i){
				str += encodeURIComponent(this.strTrim(mtList[i])) + ',';
			}
			return str.substring(0, str.length -1);
		},
		strTrim: function(str){
			var ccSpace = 32;
			var ps = 0;
			var pe = 0;
			var psLock = false;
			var peLock = false;
			for (var i = 0; i < str.length; ++i){
				if (str.charCodeAt(i) == ccSpace){
					if (! psLock) ps++;
					if (str.charCodeAt(str.length - 1 - i) == ccSpace){
						if (! peLock) pe++;
					}else{
						peLock = true;
					}
				}else{
					psLock = true;
					if (str.charCodeAt(str.length - 1 - i) == ccSpace){
						if (! peLock) pe++;
					}else{
						peLock = true;
					}
				}
			}
			var string = str.substring(ps, str.length);
			return string.substring(0, str.length - pe - ps);
		}
	}


	function RSS(){
		this.root = DIV(null);
		this.target = null;
		this.source = null;
		this.tags = ['title', 'description'];
		this.descLength = null;
		this.descLengthEnding = 32;
		this.pubDateFormat = 2;
		this.refresh = null;
		this.itemsCount = null;
		this.staticTest = false;
		this.acceptMimeTypesCgiStr = null;
		this.charCount = 0;
		this.stop = false;
	}
	
	RSS.prototype.getSource = function(){
		this.charCount = 0;
		this.stop = false;
		this.root.innerHTML = '';
		if (this.staticTest){
			var url = this.source;
		}else{
			var url = '/urlfetcher/?url=' + encodeURIComponent(this.source);
		}
		if (this.acceptMimeTypesCgiStr && ! this.staticTest) url += this.acceptMimeTypesCgiStr;
		var def = doSimpleXMLHttpRequest(url);
		def.addCallbacks(bind('handleSource', this), bind('handleSourceError', this));
		if (this.refresh) callLater(this.refresh, bind('getSource', this));
	}
	
	RSS.prototype.handleSource = function(def){
		var xmlElements = def.responseXML.documentElement;
		var items = xmlElements.getElementsByTagName('item');
		var count = items.length;
		if (this.itemsCount <= items.length) count = this.itemsCount;
		var tags = this.tags;
		for (var i = 0; i < count; ++i){
			var href = this.getLink(items[i]);
			for (var j = 0; j < tags.length; ++j){
				switch (tags[j]){
					case 'title':
						this.appendElement(this.getTitle(items[i], href));
						break;
					case 'description':
						this.appendElement(this.getDescription(items[i]));
						break;
					case 'pubDate':
						this.appendElement(this.getPubDate(items[i]));
						break;
				}
			}
		}
		this.publish();
	}
	
	RSS.prototype.handleSourceError = function(def){
		log(def.message);
		this.target.appendChild(DIV(null, 'Service ist voruebergehend nicht verfuegbar.'));
	}
	
	RSS.prototype.appendElement = function(elm){
		if (elm){
			var root = this.root;
			root.appendChild(elm);
			return true;
		}
		return false;
	}
	
	RSS.prototype.cloneXML2DOM = function(src, tar, igRoot, len, correctHyphen){
		for (var i = 0; i < src.childNodes.length; i++){
			var node = src.childNodes[i];
			switch (node.nodeType){
				case 1:
					if (! igRoot){
						var newNode = tar.appendChild(document.createElement(node.nodeName));
						for (var j = 0; j < node.attributes.length; j++){
							newNode.setAttribute(node.attributes[j].nodeName, node.attributes[j].nodeValue);
						}
						this.cloneXML2DOM(node, newNode, false, correctHyphen);
						break;
					}else{
						this.cloneXML2DOM(node, tar, false, correctHyphen);
						break;
					}
				case 3:
					if (len){
						var text = node.nodeValue;
						if (this.charCount + text.length < len){
							this.charCount += text.length;
						}else{
							var pos = 0;
							var t = '';
							while(1){
								t += text.substr(pos, 1);
								if (t.length + this.charCount >= len){
									var cCode = t.charCodeAt(t.length -1);
									if (cCode == this.descLengthEnding || pos == t.length){
										this.charCount += t.length;
										if (cCode == this.descLengthEnding){
											t += cCode == 32 ? '....' : ' ....';
											this.stop = true;
										}else{
											this.stop = false;
										}
										text = t;
										break;
									}
								}else if(text.length + this.charCount < len){
									var cCode = text.charCodeAt(text.length -1);
									this.charCount += text.length;
									text += cCode == 32 ? '....' : ' ....';
									this.stop = true;
									break;
								}
								pos++;
							}
						}
					}else{
						text = node.nodeValue;
					}
					if (correctHyphen) text = this.correctHyphenatedText(text);
					subNode = document.createTextNode(text);
				tar.appendChild(subNode);
			}
			if (this.stop){
				this.charCount = 0;
				break;
			}
		}
	}
	
	RSS.prototype.correctHyphenatedText = function(text){
		return text.replace(/-/g, '- ');
	}
	
	RSS.prototype.cloneContent = function(src, len, correctHyphen){
		var root = DIV(null);
		if (len){
			this.charCount = 0;
			this.stop = false;
		}
		this.cloneXML2DOM(src, root, false, len, correctHyphen);
		return root.childNodes;
	}

	RSS.prototype.getFirstNodeMatch = function(nName, parent, type){
		var n = parent.childNodes;
		var nName = nName.toLowerCase();
		type = type ? type : 1;
		for (var i = 0; i < n.length; ++i){
			if (n[i].nodeType == type && n[i].nodeName.toLowerCase() == nName){
				return n[i];
			}
		}
		return false;
	}
	
	RSS.prototype.getLink = function(item){
		var link = this.getFirstNodeMatch('link', item);
		if (link && link.childNodes.length > 0) return link.childNodes[0].nodeValue;
		return false;
	}
	
	RSS.prototype.getTitle = function(item, href){
		var title = this.getFirstNodeMatch('title', item);
		if (title && title.childNodes.length > 0){
			return Layout.getTitle(this.cloneContent(title, false, true), href);
		}
		return false;
	}
	
	RSS.prototype.getDescription = function(item){
		var description = this.getFirstNodeMatch('description', item);
		if (description && description.childNodes.length > 0) {
			return Layout.getDescription(this.cloneContent(description, this.descLength, true));
		}
		return false;
	}
	
	RSS.prototype.getPubDate = function(item){
		var pubDate = this.getFirstNodeMatch('pubDate', item);
		if (pubDate && pubDate.childNodes.length > 0) {
			var dateGMT = pubDate.childNodes[0].nodeValue;
			pubDate.childNodes[0].nodeValue = this.formatDate(dateGMT);
			return Layout.getPubDate(this.cloneContent(pubDate, false, false));
		}
		return false;
	}
	
	RSS.prototype.formatDate = function(dateStr){
		var date = toISODate(new Date(dateStr));
		var time = toISOTime(new Date(dateStr));
		date = date.split('-');
		if (this.pubDateFormat == 1 || this.pubDateFormat == 4){
			var y = (date[0] % 1000);
			date[0] = y < 10 ? '0' + y : y;
			date[1] = Math.abs(date[1]);
			date[2] = Math.abs(date[2]);
			if (this.pubDateFormat == 4) return date[1] + '/' + date[2] + '/' + date[0];
			return date[2] + '.' + date[1] + '.' + date[0];
		}else if(this.pubDateFormat == 2 || this.pubDateFormat == 5){
			if (this.pubDateFormat == 5) return date[1] + '/' + date[2] + '/' + date[0];
			return date[2] + '.' + date[1] + '.' + date[0];
		}else if(this.pubDateFormat == 3 || this.pubDateFormat == 6){
			if (this.pubDateFormat == 6) return date[1] + '/' + date[2] + '/' + date[0] + ' ' + time;
			return date[2] + '.' + date[1] + '.' + date[0] + ' ' + time;
		}else{
			if (this.pubDateFormat == 5) return date[1] + '/' + date[2] + '/' + date[0];
			return date[2] + '.' + date[1] + '.' + date[0];
		}
	}
	
	RSS.prototype.publish = function(){
		$(this.target).innerHTML ='';
		$(this.target).innerHTML = this.root.innerHTML;
	}
	
	Layout = {
		getTitle: function(t, href){
			if (href) t = A({'href': href, 'target': '_blank'}, t);
			return DIV(
				{'class': 'rssElementTitle'},
				H3(null, SPAN(null, t))
			);
		},
		getDescription: function(desc){
			return DIV(
				{'class': 'rssElementDesc'},
				DIV({'class': 'inner'}, desc)
			);
		},
		getPubDate: function(d){
			return DIV(
				{'class': 'rssElementPubDate'},
				SPAN(null, d)
			);
		}
	}
/* << */

