/**
 * Functions Forum
 *
 * @copyright 	copyright (c) 2008 by GMX GmbH
 * @author 		matthias kurte
 */



// Init advisor-Namespace
var advisor = new Object;



// Start initial Functions
poma.addLoadEvent(function() {
	advisor.init();
});



// Intitial Function
advisor.init = function() {

}



// nickselector
advisor.avail = {
	// check Availability
	checkNick: function(url) {
		var myReq = false;
		poma.dom.$id("agb-box").style.display = "none";
		poma.dom.$id("avail-form-control").style.display = "none";
		poma.dom.$id("successBox").style.display = "none";
		poma.dom.$id("warningBox").style.display = "none";
		poma.dom.$id("errorBox").style.display = "none";
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			myReq = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			try {
				myReq = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					myReq = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		if (!myReq) {
			poma.dom.$tag("li", poma.dom.$id("errorBox")).innerHTML = "Ein Fehler ist aufgetreten:\nKann keine XMLHTTP-Instanz erzeugen";
			advisor.oc.open("errorBox");
			return false;
		}
		myReq.onreadystatechange = function() {advisor.avail.requestDone(myReq);};
		myReq.open("GET", url+"?nickName="+poma.dom.$id("nick").value, true);
		myReq.send(null);
	},
	requestDone: function(req) {
		// only if req is "loaded"
		if (req.readyState == 4) {
			// only if "OK"
			if (req.status == 200 || req.status == 304) {
				var results = req.responseText; // var results can be used on screen, when technical response is needed for e.g. bugfixing
				if ("true" == results.trim()) {
					advisor.oc.open("successBox");
					var btn = poma.dom.$id('avail-check-btn');
					if (btn.src.indexOf('-inactive') == -1) {
						btn.src = poma.scrollbox.prototype.convertFilePath(btn.src);
					}
					// alternatively, this is also possible: advisor.oc.splashOpen('splash-alert','success',poma.dom.$id('successBox').innerHTML);
					poma.dom.$id("agb-box").style.display = "block";
					poma.dom.$id("avail-form-control").style.display = "block";
				} else {
					advisor.oc.open("warningBox");
				}
			} else {
				poma.dom.$tag("li", poma.dom.$id("errorBox")).innerHTML = "Ein Fehler ist aufgetreten:\n" +  req.statusText;
				advisor.oc.open("errorBox");
			}
		}
	}
}


/* RATE FOR LIVE VERSION */
advisor.rate = {
	// check Availability
	rate: function(url) {
		//http://meinungen.gmx.net/forum-gmx/rate/117926?rate=up
		var myReq = false;
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			myReq = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			try {
				myReq = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					myReq = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		if (url.indexOf("rateId")>-1) {
			var splitted = url.split("?");
            var params = splitted[1].split("&");
            var postIdParam = params[0].split("=");
			var rateParam = params[1].split("=");
		} else {
			var splitted = url.split("/rate/");
            var params = splitted[1].split("?");
			var postIdParam = ['rateId'];
			postIdParam[1] = params[0];
			var rateData = params[1].split("=");
            var rateParam = rateData;
		}
		myReq.onreadystatechange = function() {advisor.rate.requestDone(myReq, postIdParam, rateParam);};
		myReq.open("GET", url, true);
		myReq.send(null);
    },
	requestDone: function(req, postIdParam, rateParam) {
		// only if req is "loaded"
		if (req.readyState == 4) {
			// only if "OK"
            if (req.status == 200 || req.status == 304) {
				var results = req.responseText; // var results can be used on screen, when technical response is needed for e.g. bugfixing
                var splittedresult = results.split(":");
                var topIdName = "top"+postIdParam[1];
                var flopIdName = "flop"+postIdParam[1];
                var topIdHref = "votetop"+postIdParam[1];
                var flopIdHref = "voteflop"+postIdParam[1];
				var alreadyvotedAdviceName = "advice-alreadyvoted"+postIdParam[1];
				if(poma.dom.$id(topIdName).innerHTML != splittedresult[0] || poma.dom.$id(flopIdName).innerHTML != splittedresult[1]) {
					poma.dom.$id(topIdName).innerHTML=splittedresult[0];
					poma.dom.$id(flopIdName).innerHTML=splittedresult[1];
					if(rateParam[1] == "up") {
						poma.dom.$id(topIdHref).className = "already-voted";
					} else if(rateParam[1] == "down") {
						poma.dom.$id(flopIdHref).className = "already-voted";
					}
				} else {
					poma.dom.$id(alreadyvotedAdviceName).style.visibility = "visible";
				}
			} else {
                alert("Es ist ein Fehler aufgetreten. Bitte versuchen Sie es zu einem anderen Zeitpunkt erneut.")
            }
		}
	}
}



// open-/close-Functions
advisor.tools = {

	// switch the top tool
	switchTabTool: function(showDiv, hideDiv, showClass, hideClass) {

		// switch divs
		poma.dom.$id(showDiv).style.display = "block";
		poma.dom.$id(hideDiv).style.display = "none";

		// switch classes
		poma.dom.$id("tab-" + showDiv).className = showClass;
		poma.dom.$id("tab-" + hideDiv).className = hideClass;
		poma.dom.$id("link-" + showDiv).className = "active";
		poma.dom.$id("link-" + hideDiv).className = "";
	},

	showAnswerElement: function(showElement, questionBtn, questionBtnSrc) {
		poma.dom.$id(questionBtn).src = questionBtnSrc;
		advisor.oc.open(showElement,"","text");
	},

	hideAnswerElement: function(hideElement, questionBtn, questionBtnSrc) {
		poma.dom.$id(questionBtn).src = questionBtnSrc;
		advisor.oc.close(hideElement);
	},

	showHideComments: function(commentsDiv, commentsImg) {
		if(poma.dom.$id(commentsDiv).style.display == "none") {
			advisor.oc.open(poma.dom.$id(commentsDiv));
			poma.dom.$id(commentsImg).src = "../../../web.de-img/portal/advisor/icon-up.gif";
		} else {
			advisor.oc.close(poma.dom.$id(commentsDiv));
			poma.dom.$id(commentsImg).src = "../../../web.de-img/portal/advisor/icon-down.gif"; 
		}
		
	},

	buildCategoryDiv: function(divId, categoryNames, categoryIds) {
		for(var i=0; i<categoryNames.length; i++) {
			poma.dom.appendTags(poma.dom.$id(divId), [
			   {'li': {
				   'children': [
					   {'a': {
						   'id': categoryIds[i],
						   'href': 'javascript:advisor.tools.buildSubCategoryDiv(\'select-subcat\', categories[\'subcatnames\']['+ categoryIds[i] +'], categories[\'subcatnames\']['+ categoryIds[i] +'][\'ids\'], '+ categoryIds[i] +'); advisor.tools.setActiveCat(categories[\'catnames\'][\'ids\'], '+ categoryIds[i] +');',
						   '#text': categoryNames[i]
					   }}
				   ]
			   }}
			]);
		}
	},

	buildSubCategoryDiv: function(divId, categoryNames, categoryIds, actId) {
		// remove old subcats
		if(poma.dom.$id(divId).firstChild) {
			while(poma.dom.$id(divId).firstChild) {
				poma.dom.$id(divId).removeChild(poma.dom.$id(divId).firstChild)
			}
		}
		//add new subcats
		for(var i=0; i<categoryNames.length; i++) {
			poma.dom.appendTags(poma.dom.$id(divId), [
			   {'li': {
				   'children': [
					   {'a': {
						   'id': categoryIds[i],
						   'href': 'javascript:advisor.tools.setActiveSubCat(categories[\'subcatnames\']['+ actId +'][\'ids\'], '+ categoryIds[i] +')',
						   '#text': categoryNames[i]
					   }}
				   ]
			   }}
			]);
		}
		poma.dom.$id('subcategory').style.visibility = "visible";
		poma.dom.$id(divId).style.display = "block";
	},

	setActiveCat: function(categoryIds, id) {
		for(var i=0; i<categoryIds.length; i++) {
			poma.dom.$id(categoryIds[i]).className = "";
		}
		poma.dom.$id(id).className = "selected";
		poma.dom.$id("sel-category").innerHTML = poma.dom.$id(id).innerHTML;
		poma.dom.$id("sel-subcategory").innerHTML = "&gt; <em>Bitte w&auml;hlen Sie eine Unterrubrik.</em>";
	},

	setActiveSubCat: function(categoryIds, id) {
		for(var i=0; i<categoryIds.length; i++) {
			poma.dom.$id(categoryIds[i]).className = "";
		}
		poma.dom.$id(id).className = "selected";
		poma.dom.$id("sel-subcategory").innerHTML = "&gt; " + poma.dom.$id(id).innerHTML;
		poma.dom.$id("topicId").value = id;
	},

	preSelectCat: function(categoryId, subcategoryId) {
		advisor.tools.buildSubCategoryDiv('select-subcat', categories['subcatnames'][categoryId], categories['subcatnames'][categoryId]['ids'], categoryId);
		advisor.tools.setActiveCat(categories['catnames']['ids'], categoryId);
		advisor.tools.setActiveCat(categories['subcatnames'][categoryId]['ids'], subcategoryId);
		advisor.tools.setActiveSubCat(subcategoryId);
	}
}

// open-/close-Functions
advisor.oc = {
	working: new Array,
	// open with Blind-FX
	open: function(openId,closeId,focusId,splashOpenCnt) {
		if (!this.working[openId]) {
		    this.working[openId] = true;
			if (closeId) Effect.BlindUp(closeId);
			Effect.BlindDown(openId, {afterFinish:function() {
				advisor.oc.working[openId] = false;
				advisor.form.focusEl(focusId);
				if (splashOpenCnt) advisor.oc.splashOpenCnt();
			}});
		}
		counter.countPI(); // Count Pi
	},
	// close with Blind-FX
	close: function(closeId,openId,fieldsClr,focusId) {
		if (!this.working[closeId]) {
		    this.working[closeId] = true;
			if (fieldsClr) advisor.form.clearFields(fieldsClr);
			if (openId) Effect.BlindDown(openId);
			Effect.BlindUp(closeId, {afterFinish:function() {
				advisor.oc.working[closeId] = false;
				advisor.form.focusEl(focusId);
			}});
		}
	},
	// open from right with Blind-FX
	openRight: function(openId,closeId,focusId) {
		if (!this.working[openId]) {
		    this.working[openId] = true;
			Effect.BlindLeft(closeId);
			Effect.BlindRight(openId, {afterFinish:function() {
				advisor.oc.working[openId] = false;
				advisor.form.focusEl(focusId);
			}});
		}
		counter.countPI(); // Count Pi
	},

	// open without Blind-FX
	openSt: function(openId,closeId,focusId) {
		if (closeId) poma.dom.$id(closeId).style.display = 'none';
		if (openId) poma.dom.$id(openId).style.display = 'block';
		if (focusId) { // unfortunately no afterFinish-state available here
			this.timer = window.setTimeout(function() {
				advisor.form.focusEl(focusId);
				this.timer = null;
			}, 150);
		}
		counter.countPI(); // Count Pi
	},
	// close without Blind-FX
	closeSt: function(closeId,openId,fieldsClr) {
		if (fieldsClr) advisor.form.clearFields(fieldsClr);
		if (openId) poma.dom.$id(openId).style.display = 'block';
		if (closeId) poma.dom.$id(closeId).style.display = 'none';
	},

	// Open Splash-Screen
	// splashType: 'splash-alert' or 'splash-loading' which are the div's ids; alertType: 'error', 'warning' or 'success'
	splashOpen: function(splashType,alertType,txt) {
		if (poma.useragent.isIe('6')) {
			// only for IE6, cause he doesnt interpret height: 100%
			this.splashMain = poma.dom.$id('splash-main');
			this.splashMain.style.height = poma.dom.$id('forum-main').scrollHeight + 13;
			if (poma.dom.$tag('select')) {
				var el;
				for (var i=0; i<poma.dom.$tag('select').length; i++) {
					el = poma.dom.$tag('select')[i];
					if (el) el.style.visibility = 'hidden';
				}
			}
		}
		this.focusId = '';
		this.splashType = splashType;
		switch(splashType) {
			case 'splash-alert':
				this.splashAlert = poma.dom.$id('splash-alert');
				var cN = this.splashAlert.className.split(' ');
				this.splashAlert.className = cN[0] + ' ' + alertType;
				this.splashAlertTxt = poma.dom.$id('splash-alert-txt');
				this.splashAlertTxt.innerHTML = txt;
				this.focusId = 'splash-btn-ok';
				break;
			case 'splash-loading':
				break;
			default:
				break;
		}
		this.open('splash-main','','',true);
	},
	// Additional Function that opens the Content of the Splash-Screen on afterFinish
	splashOpenCnt: function() {
		this.openSt(this.splashType,'',this.focusId);
	},
	// Close Splash-Screen
	splashClose: function(focusId) {
		if (poma.useragent.isIe('6')) {
			if (poma.dom.$tag('select')) {
				var el;
				for (var i=0; i<poma.dom.$tag('select').length; i++) {
					el = poma.dom.$tag('select')[i];
					if (el) el.style.visibility = 'visible';
				}
			}
		}
		this.closeSt(this.splashType);
		this.close('splash-main','','',focusId);
	}
}

// Login Area Hide and Show Divs
advisor.logintoptool = {
	hide: function(hideDiv) {
		poma.dom.$id(hideDiv).className = "off";
	},

	show: function(showDiv, focusId) {
		poma.dom.$id(showDiv).className = "expanded-div";
		if(focusId) {
			poma.dom.$id(focusId).focus();
		}
		counter.countPI(); // Count Pi
	},

	hideandshow: function(hideDiv, showDiv, focusId) {
		poma.dom.$id(hideDiv).className = "off";
		poma.dom.$id(showDiv).className = "expanded-div";
		if(focusId) {
			poma.dom.$id(focusId).focus();
		}
		counter.countPI(); // Count Pi
	}
}

// Form-Functions
advisor.form = {
	// Validate one or more Field(s) -- Parameter fields is an Array containing the ids of the Input-Fields
	validateFields: function(fields,fieldlabel,deactivate) {
		if (this.fields) { // if the Parameters are set by some other function (e.g. setViolation())
			fields = this.fields;
			fieldlabel = this.fieldlabel;
		}
		var el, val, txt;
		for (var i=0; i<fields.length; i++) {
			el = poma.dom.$id(fields[i]);
			el.blur();
			val = this.trim(el.value);
			if (val == '' || val == ' ' || val == '0' || (el.type == 'checkbox' && !el.checked) ) {
				if (fieldlabel) {
					switch(el.type) {
						case 'checkbox': // Checkbox
							txt = forumValidateFieldsTextChckbx.replace("@@forumValidateFieldsFieldname@@", fieldlabel[i]);
							break;
						case 'select-one': // Select
							txt = forumValidateFieldsTextSlct.replace("@@forumValidateFieldsFieldname@@", fieldlabel[i]);
							break;
						default: // Text, Textarea
							txt = forumValidateFieldsTextTxtfld.replace("@@forumValidateFieldsFieldname@@", fieldlabel[i]);
							break;
					}
				} else {
					txt = forumValidateFieldsTextDef;
				}
				advisor.oc.splashOpen('splash-alert','error',txt);
				this.elId = el.id;
				return false;
			} else {
				if (deactivate) {
					var btn = poma.dom.$id(deactivate);
					btn.disabled = true;
					/*
					*if (btn.src.indexOf('-inactive') == -1) {
					*	btn.src = poma.scrollbox.prototype.convertFilePath(btn.src);
					*}
					*/
				}
			}
		}
	},
	// Function on OK-Button
	btnOk: function() {
		advisor.oc.splashClose(this.elId);
	},
	// Focus Element of validateFields (internal)
	focusEl: function(focusId) {
		if (focusId) {
			poma.dom.$id(focusId).focus();
		}
	},
	// Fields to get cleared
	clearFields: function(fieldsClr) {
		if (fieldsClr) {
			for (var i=0; i<fieldsClr.length; i++) {
				poma.dom.$id(fieldsClr[i]).value = '';
			}
		}
	},
	// Set validateField-Array and focus Textarea
	setViolation: function(val) {
		if (val == 'violation-3') { // fill fields-Array for validateFields()
			this.fields = ['subject','text'];
			this.fieldlabel = ['Art des Versto&szlig;es','Begr&uuml;ndung'];
			poma.dom.$id('text').focus();
		} else {
			this.fields = ['subject'];
		}
	},
	// Maxlength-Function for Textareas
	maxLength: function(field,value,maxlength) {
		if (maxlength != '') {
			if (parseInt(value.length) > parseInt(maxlength)) {
				field.value = value.substring(0, maxlength);
			}
		}
	},
	// Submit a Form onkeyup - IE only
	submitOnKeyUp: function(field) {
		if (poma.useragent.inName('msie', false)) {
			var evt = this.getKeyCode(field.event);
			if (evt == 13) {
				var form = field.parentNode;
				var resp = form.onsubmit();
				if (resp == undefined) {
					form.submit();
				}
			}
		}
	},
	// internal Crossbrowser-Function that returns the keyCode
	getKeyCode: function(event) {
		event = event || window.event;
		return event.keyCode;
	},
	// Trim a String, replace Whitespaces (internal)
	trim: function(str) {
		return str.replace(/(^\s+)([^\s]*)(\s+$)/, '$2');
	},
	//Set Partnerdata
	setPartnerdata: function(inputId, partnerData) {
	    poma.dom.$id(inputId).value = partnerData;
	}
}

advisor.split = {
	cutText: function(div, cnt) {

		var ret = poma.dom.$id(div).innerHTML;
		poma.dom.$id('teaser-alt-link-open').style.display = "block";
		poma.dom.$id('teaser-alt-link-close').style.display = "none";

		if (cnt < ret.length) {
			if (ret.charAt(cnt) != ' ') {
				ret = ret.substr(0, cnt);
				ret = ret.substr(0, ret.lastIndexOf(' '));
			}	else {
				ret = ret.substr(0, cnt);
			}
			var lastpos = ret.length-1;
			if (ret.charAt(lastpos) != '.') {
				// Last Character isn't a dot. We got to add 3 dots.
				ret += '...';
			} else {
				if(ret.charAt(lastpos - 1).toString().search(/^-?[0-9]+$/) == true) {
					// Last Character is a dot, before that comes an integer Character. We got to add 2 dots.
					ret += '..';
				}
			}
		} else {
				ret = ret.substr(0, cnt);
				poma.dom.$id('teaser-alt-link-open').style.display = "none";
				poma.dom.$id('teaser-alt-link-close').style.display = "none";
		}

		poma.dom.$id(div).innerHTML = ret + ' ';
	},

	showText: function(div, text) {
		var newtext = unescape(text);
		poma.dom.$id(div).innerHTML = newtext + ' ';
		poma.dom.$id('teaser-alt-link-open').style.display = "none";
		poma.dom.$id('teaser-alt-link-close').style.display = "block";
		counter.countPI(); // Count Pi
	}

}


// Glider Functions for the Questions of the Day!

Glider = Class.create();
Object.extend(Object.extend(Glider.prototype, Abstract.prototype), {
	initialize: function(wrapper, options){
	    this.scrolling  = false;
	    this.wrapper    = $(wrapper);
	    this.scroller   = this.wrapper.down('div.qcontent');
	    this.sections   = this.wrapper.getElementsBySelector('div.qwrapper');
	    this.options    = Object.extend({ duration: 1.0, frequency: 3 }, options || {});

	    this.sections.each( function(section, index) {
	      section._index = index;
	    });

	    this.events = {
	      click: this.click.bind(this)
	    };

	    if(this.sections.length > 1) {
			this.addObservers();
				if(this.options.initialSection) this.moveTo(this.options.initialSection, this.scroller, { duration:this.options.duration });  // initialSection should be the id of the section you want to show up on load
				if(this.options.autoGlide) this.start();
		}
	  },

  addObservers: function() {
    var controls = this.wrapper.getElementsBySelector('div.controls a');
    controls.invoke('observe', 'click', this.events.click);
  },

  click: function(event) {
		this.stop();
    var element = Event.findElement(event, 'a');
    if (this.scrolling) this.scrolling.cancel();

    this.moveTo(element.href.split("#")[1], this.scroller, { duration:this.options.duration });
    Event.stop(event);
  },

	moveTo: function(element, container, options){
			this.current = $(element);

			Position.prepare();
	    var containerOffset = Position.cumulativeOffset(container),
	     elementOffset = Position.cumulativeOffset($(element));

		  this.scrolling 	= new Effect.SmoothScroll(container,
				{duration:options.duration, x:(elementOffset[0]-containerOffset[0]), y:(elementOffset[1]-containerOffset[1])});
		  return false;
		},

  next: function(){
    if(this.sections.length > 1) {
		if (this.current) {
			var currentIndex = this.current._index;
      		var nextIndex = (this.sections.length - 1 == currentIndex) ? 0 : currentIndex + 1;
		} else var nextIndex = 1;

		this.moveTo(this.sections[nextIndex], this.scroller, {
    	  duration: this.options.duration
    	});
	}
  },

  previous: function(){
	if(this.sections.length > 1) {
		if (this.current) {
		  var currentIndex = this.current._index;
		  var prevIndex = (currentIndex == 0) ? this.sections.length - 1 :
		   currentIndex - 1;
		} else var prevIndex = this.sections.length - 1;

		this.moveTo(this.sections[prevIndex], this.scroller, {
		  duration: this.options.duration
		});
	}
  },

	stop: function()
	{
		clearTimeout(this.timer);
	},

	start: function()
	{
		this.periodicallyUpdate();
	},

	periodicallyUpdate: function()
	{
		if (this.timer != null) {
			clearTimeout(this.timer);
			this.next();
		}
		this.timer = setTimeout(this.periodicallyUpdate.bind(this), this.options.frequency*1000);
	}

});

Effect.SmoothScroll = Class.create();
Object.extend(Object.extend(Effect.SmoothScroll.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'absolute'
    } , arguments[1] || {}  );
    this.start(options);
  },
  setup: function() {
    if (this.options.continuous && !this.element._ext ) {
      this.element.cleanWhitespace();
      this.element._ext=true;
      this.element.appendChild(this.element.firstChild);
    }

    this.originalLeft=this.element.scrollLeft;
    this.originalTop=this.element.scrollTop;

    if(this.options.mode == 'absolute') {
      this.options.x -= this.originalLeft;
      this.options.y -= this.originalTop;
    }
  },
  update: function(position) {
    this.element.scrollLeft = this.options.x * position + this.originalLeft;
    this.element.scrollTop  = this.options.y * position + this.originalTop;
  }
});

function google_ad_request_done(google_ads) {
  var adsRelatedLink = '';
  var adsRelatedSpecialLink = '';
  var banned_words = new Array();
  var ads = 0;
  if (google_ads.length>0) {
    if (google_ads[0].type == 'text') {
      for(i = 0; ( i < google_ads.length ); ++i) {
        text_ad = google_ads[i].line1 + " " +google_ads[i].line2 + " " +google_ads[i].line3 + " " +google_ads[i].visible_url;
        text_ad = text_ad.toUpperCase();
        for (e = 0; e < banned_words.length; ++e) {
          var pos=text_ad.indexOf(banned_words[e].toUpperCase());
          if (pos > 0) {
            var visible_ad = "no";
          }
        }
        if (visible_ad != "no") {
          var sc_adsense_event = 'event5';
          adsRelatedLink += '<div class="google-ad" onclick="window.open(\"' + google_ads[i].url + '\");" onmouseover="window.status=\"' + google_ads[i].visible_url + '\"">';
          adsRelatedLink += '<span class="title">' + google_ads[i].line1 +'</span><br />';
          adsRelatedLink += '<span class="text">' + google_ads[i].line2 +'<br />'+ google_ads[i].line3 + "</span>";
          adsRelatedLink += '<span class="link">' + google_ads[i].visible_url + '</span>';
          adsRelatedLink += '</div>';
          ++ads;
        } else {
          visible_ad = "si";
        }
      }
    }
    adsRelatedLink += '<div class="clear-b"></div>';
    document.write(adsRelatedLink);
  }
}