/*
	Last published on : 15-Dec-11 11:35
	Location          : \commercial\selfassist\cms\selfassist\static\js
	Filename          : selfassist-internal.js
*/
var initSelfAssistHelper = function(){
	window.sahelper = new SelfAssistHelper();
}

var bFirstEntryInputfield = true;

var SelfAssistHelper = function(){
	this.parentNode = YAHOO.util.Dom.get('klm-doc');
	this.layOver = new Overlay(this.parentNode, {id: "xlink-overlay", speed: .3, opacity: .8, animate: true});
	this.searchTerm = '';
	this.locale = "nl_en";
	if(top.sa){
		this.locale = top.sa.country + '_' + top.sa.lang;
		if (this.searchTerm != top.sa.defaultSearchTerm) {
			this.searchTerm = top.sa.searchTerm;
		}
	}
	this.initRedirectLinks();
	this.initExtLinks();
	this.initSearchBox();
	this.initBanners();
	bFirstEntryInputfield = true;
}

SelfAssistHelper.prototype.initBanners = function(){
	var banners = YAHOO.util.Dom.getElementsByClassName("trigger");
	if (banners.length > 0) {
		YAHOO.util.Event.addListener(banners, "mouseover", function() {
			YAHOO.util.Dom.addClass(this, "hover");
		});
		YAHOO.util.Event.addListener(banners, "mouseout", function() {
			YAHOO.util.Dom.removeClass(this, "hover");
		});
	}
	var links = YAHOO.util.Dom.getElementsByClassName('sa-banner-link', 'a');
	var helper = this;
	var popup_enabled = false;
	if(YAHOO.util.Cookie){
		if(YAHOO.util.Cookie.get("popup") != null && YAHOO.util.Cookie.get("popup") == '1' && YAHOO.util.Dom.get('sa-error') == null){
		  	popup_enabled = true;
		}
	}
	YAHOO.util.Event.addListener(links, 'click', function(e){
			if(popup_enabled && this.attributes.getNamedItem('external')){
				YAHOO.util.Event.preventDefault(e);
				return helper.showLinkWarning(this);
			}
	});
}

SelfAssistHelper.prototype.initRedirectLinks = function(){
	var links = YAHOO.util.Dom.getElementsByClassName('sa_redirect', 'a');
	var helper = this;
	var popup_enabled = false;
	if(YAHOO.util.Cookie){
		if(YAHOO.util.Cookie.get("popup") != null && YAHOO.util.Cookie.get("popup") == '1' && YAHOO.util.Dom.get('sa-error') == null){
		  	popup_enabled = true;
		}
	}
	for(i = 0; i < links.length; i++){
		var link = links[i];
		this.addLinkIcon(link);
		if(popup_enabled ){
			link.onclick = function(){
				return helper.showLinkWarning(this);
			}
			this.showLinkWarning(link);
		}else{
			link.target = "_top";
			if(top)
				top.document.location = link.href;
			else
				window.document.location = link.href;
		}
	}
}

// add icon to external links in q-go content when _blank or _new has been set
SelfAssistHelper.prototype.initExtLinks = function(){
	var links = this.getLinks();
	var helper = this;
	var popup_enabled = false;
	if(YAHOO.util.Cookie){
		if(YAHOO.util.Cookie.get("popup") != null && YAHOO.util.Cookie.get("popup") == '1' && YAHOO.util.Dom.get('sa-error') == null){
	  		popup_enabled = true;
		}
	}
	var self = document.location.href;
	if (self.indexOf('?') >= 0) self = self.substr(0, self.indexOf('?'));
		self = self.substr(0, self.lastIndexOf('/'));
	for(i = 0; i < links.length; i++){
		var link = links[i];
		var href = link.href;
		var target = link.target;
		if(href.substr(0, self.length) == self)
			continue;
		if(!link.className.match('btn') && this.trim(link.innerHTML) != ''){
			if(target == '_blank' || target == '_new') {
				this.addLinkIcon(link);
			}
			if(popup_enabled){
				link.onclick = function(){
					return helper.showLinkWarning(this);
				}
			}else{
				if(target == null || target == '_self' || target == ''){ link.target = '_top'; }			}
		}else if(target == null || target == '_self' || target == ''){
			link.target = '_top';
		}
	}
}

SelfAssistHelper.prototype.initSearchBox = function(){
	var oSearchBox = YAHOO.util.Dom.get('sa-ask-question-input');
	var oSearchButton = YAHOO.util.Dom.get('sa-ask-question-button');
	this.defaultSearchTerm = null;
	
	if(oSearchBox){
		oSearchBox.title = oSearchBox.value;
		this.defaultSearchTerm = oSearchBox.value;
		YAHOO.util.Event.addListener(oSearchBox, "keyup", this.onSubmitHandler, oSearchBox);
		YAHOO.util.Event.addListener(oSearchBox, "focus", this.inputFocus, oSearchBox);
		YAHOO.util.Event.addListener(oSearchBox, "blur", this.inputBlur, oSearchBox);
	}
	if(oSearchButton){
		YAHOO.util.Event.addListener(oSearchButton, "click", this.onSubmitHandler, oSearchBox);
	}
}

SelfAssistHelper.prototype.ask = function(query){
	if(query == this.searchTerm)
		query = '';
	else if(query == ''){
		// this.searchTerm = ''; 20110121 CB: additional query is empty, resubmit with current query
	}else if(query.indexOf(this.searchTerm + ' ') == 0){
		this.searchTerm = query;
		query = '';
	}
	var currentQuery = this.searchTerm;
	if(query != ''){
		this.searchTerm = currentQuery + ' ' + query;
	}
	var IsSAAvailable = false;
	var uri = null;

	//Check if there is a top frame and if that frame has loaded the Self Assist Class
	if(top){
		if(top.sa){
			IsSAAvailable = true;
		}
	}
	if(this.trim(this.searchTerm) != this.trim(this.defaultSearchTerm) && this.trim(this.searchTerm) != ''){
		uri = 'ask.htm';
		parameters = '&query=' + encodeURIComponent(this.searchTerm);
		if (this.origHandle && this.origHandle != undefined)
			parameters += '&origHandle=' + encodeURIComponent(this.origHandle);
	}else{
		uri = 'start.htm';
		parameters = '';
	}

	//Load uri in SelfAssist or current frame.
	if(IsSAAvailable){
		top.sa.loadUri(uri, parameters)
	}else{
		window.document.location = uri + parameters;
	}
}

SelfAssistHelper.prototype.parseUrl = function(url){
	return substr(url.lastIndexOf('/'));
}

SelfAssistHelper.prototype.addLinkIcon = function(element){
	if ((!YAHOO.util.Dom.get('sa-error')) && (!YAHOO.util.Dom.get('previewtable'))){
		var oSpan = document.createElement('span');
		oSpan.innerHTML = '&nbsp;';
		YAHOO.util.Dom.addClass(oSpan, 'external-link');
		YAHOO.util.Dom.insertAfter(oSpan, element);
	}
}

SelfAssistHelper.prototype.getLinks = function(){
	return YAHOO.util.Selector.query('#sa-result .article a');
}

SelfAssistHelper.prototype.showLinkWarning = function(element){
	this.layOver.show();
	var helper = this;
	YAHOO.util.Dom.replaceClass('sa-extlink-warning', 'closed', 'open');
	var btnYes = YAHOO.util.Dom.get('sa-extlink-yes');
	var btnNo = YAHOO.util.Dom.get('sa-extlink-no');
	var url = element.href
	btnYes.onclick = function(){
		window.open(url);
		helper.hideLinkWarning();
		return false;
	}
	btnNo.onclick = function(){
		if(top.document.location){
			top.document.location = url;
		}else{
			document.location.href = url;
		}
		return false;
	}
	return false;
}

SelfAssistHelper.prototype.hideLinkWarning = function(){
	this.layOver.hide();
	YAHOO.util.Dom.replaceClass('sa-extlink-warning', 'open', 'closed');
	return false;
}

SelfAssistHelper.prototype.trim = function(value){
	value = value.replace(/^\s+/,'');
	value = value.replace(/\s+$/,'');
	return value;
}

/* EVENTHANDLERS */
SelfAssistHelper.prototype.onSubmitHandler = function(e, obj){
	if((e.type == 'keyup' && e.keyCode == 13) || (e.type == 'click')){
		var strAdditionalAskTerm = "";
		if ( ! bFirstEntryInputfield ) {
			strAdditionalAskTerm = obj.value;
		}
		window.sahelper.ask(strAdditionalAskTerm);
	}
	return false;
}

SelfAssistHelper.prototype.inputFocus = function(e , obj) {
	obj.value = "";
	obj.style.color = "#003145";
	bFirstEntryInputfield = false;
}

SelfAssistHelper.prototype.inputBlur = function(e, obj) {
	if(obj.value == obj.title || window.sahelper.trim(obj.value) == ''){
		obj.value = obj.title;
		obj.style.color = "";
		bFirstEntryInputfield = true;
	}
}

SelfAssistHelper.prototype.onSADropdownChange = function(el, qid) {
	var aid = el.value;
	var a1 = YAHOO.util.Dom.get('a1-' + qid);
	var a2 = YAHOO.util.Dom.get('a2-' + qid);

	this.renderUri(a1, aid);
	this.renderUri(a2, aid);

	// measure click
	var i = el.selectedIndex;
	YAHOO.klm.qgo.analytics.measureItem(el.options[i], 'clicked');

	window.location = a1.href;
}

SelfAssistHelper.prototype.renderUri = function(aElement, aid){
	var url = aElement.href;
	var urlArr = url.split('?');
	var querystring = urlArr[1];
	var qsArr = querystring.split('&');
	var iCount = 0;
	url = urlArr[0] + '?';

	for(i = 0; i < qsArr.length; i++){
		var keyValuePair = qsArr[i].split('=');
		if(keyValuePair[0] != 'aid'){
			if(iCount > 0){
				url = url + '&';
			}
			url = url + keyValuePair[0] + '=' + keyValuePair[1];
			iCount = iCount + 1;
		}
	}

	aElement.href = url + '&aid=' + aid;
} 

/* Javascript for Feedback */
var firstFocus = true;

var handleSuccess = function(o) {
	var feedbackForm = document.getElementById('feedbackForm');
	feedbackForm.style.display = "none";

	var feedbackErrors = document.getElementById('feedbackErrors');
	feedbackErrors.style.display = "none";

	var confirmationContainer = document.getElementById('confirmationContainer');
	confirmationContainer.style.display = "block";

	YAHOO.klm.qgo.analytics.measure('Offered','Confirmation_container','OK page','');


};

var handleFailure = function(o) {
	var feedbackForm = document.getElementById('feedbackForm');
	feedbackForm.style.display = "block";

	var feedbackErrors = document.getElementById('feedbackErrors');
	feedbackErrors.innerHTML = "<p class='error'>" + o.statusText + "</p>";
	feedbackErrors.style.display = "block";

	var confirmationContainer = document.getElementById('confirmationContainer');
	confirmationContainer.style.display = "none";
};

function validateInput(btnChecked) {
	var txtAreaFilledIn = true; // Empty text is fine as well, so always set to true!
	
	var oTextArea=document.getElementById('comment');
	var curlength= (is_ie || is_opera) ? oTextArea.value.replace(/\n/g, "").length : oTextArea.value.length;
	if ( ( ! firstFocus ) && (curlength > 0) ) {
		txtAreaFilledIn = true;
	}
	if ( btnChecked && txtAreaFilledIn) {
		return true;
	} else {
		showErrorMessage(btnChecked, txtAreaFilledIn);
	}
};

function showErrorMessage(btnChecked, txtAreaFilledIn) {
	var errorDiv = document.getElementById('feedbackErrors');
	var msgErrorIncompleteInformation = document.getElementById('msgIncompleteInformation');
	var msgRatingMandatory = document.getElementById('msgRatingMandatory');
	var errorMsg = "<p class='error'>" + msgErrorIncompleteInformation.innerHTML + "</p>";
	errorMsg += "<ul>";
	if ( ! btnChecked ) {
		errorMsg += "<li>" + msgRatingMandatory.innerHTML + "</li>";
	}
	errorMsg += "</ul>";
	errorDiv.innerHTML = errorMsg;

	errorDiv.style.display = "block";
}

function sendFeedback() {
	//Rewrite for the IE name / Id bug
	var language = '';
	var inputElements = document.getElementsByTagName('input');
	for ( var jj = 0; jj < inputElements.length; jj++ ) {
		var elem = inputElements[jj];
		if ( elem.id === "language" ) {
			language = elem.value;
		}
	}
	var country = YAHOO.util.Dom.get('country').value;
	var handle = YAHOO.util.Dom.get('handle').value;
	var aid = YAHOO.util.Dom.get('aid').value;
	var qid = YAHOO.util.Dom.get('qid').value;
	var cats = YAHOO.util.Dom.get('cats').value;
	var clicktype = YAHOO.util.Dom.get('clicktype').value;
	var referrer = YAHOO.util.Dom.get('referrer').value;
	var ratingOptions = document.getElementById('ratingOptions');
   	var comment = YAHOO.util.Dom.get('comment').value;    
   	var prefilled = YAHOO.util.Dom.get('comment').parentNode.getAttribute('data-title');

   	if (comment === prefilled) { comment = ''; }

	var rating;
	var radioBtns = YAHOO.util.Dom.getElementsByClassName('radio', 'input', ratingOptions);
	var btnChecked = false;
	for ( var ii = 0; ii < radioBtns.length; ii++ ) {
		var btn = radioBtns[ii];
		if (btn.checked == true) {
			btnChecked = true;
			rating = btn.value;
		}
	}
	
	var validInput = validateInput(rating != null);
	if ( validInput ) {
		AjaxFacade.sendFeedback(language, country, handle, aid, qid, cats, clicktype, referrer, rating, comment, {
			callback: handleSuccess,
			exceptionHandling: handleFailure    
		});
	}
};

function initTxtArea(){ };

function entryTxtArea(){ };

function doGetCaretPosition (ctrl) {
	var CaretPos = 0;	// IE Support
	if (document.selection) {
		ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;
	return (CaretPos);
};

function setCaretPosition(ctrl, pos) {
	if(ctrl.setSelectionRange)	{
		ctrl.focus();
		ctrl.setSelectionRange(pos, pos);
	}
	else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
};

function textareamaxlength() {
	var oTextArea=document.getElementById('comment');
	if (oTextArea ) {
		var maxlength=oTextArea.getAttribute('maxlength');
		var curlength= (is_ie || is_opera) ? oTextArea.value.replace(/\n/g, "").length : oTextArea.value.length;
		var curpos=doGetCaretPosition(oTextArea);
		document.getElementById("count").value = (curlength > maxlength) ? 0 : maxlength-curlength;
		if (maxlength!= null && parseInt(curlength) > parseInt(maxlength)) {
			oTextArea.value=oTextArea.value.substring(0, maxlength);
			setCaretPosition(oTextArea, curpos);
		}
	}
};

function initMSG2() {
	var oTextArea=document.getElementById('comment');
	if (oTextArea!=null) {
		YAHOO.util.Event.addListener(oTextArea, 'keyup', textareamaxlength);
		YAHOO.util.Event.addListener(oTextArea, 'change', textareamaxlength);
		YAHOO.util.Event.addListener(oTextArea, 'click', textareamaxlength);
		textareamaxlength();
	}
	firstFocus = true;
	YAHOO.util.Dom.addClass(document.getElementById('showFeedback'), 'hidden');
};

YAHOO.util.Event.onContentReady('comment', initMSG2);























	 
// create namespace for Q-go application
YAHOO.namespace('klm.qgo');

	YAHOO.klm.qgo.analytics = function () {

		/* Setup configuration */
		var Dom = YAHOO.util.Dom;
		var Event = YAHOO.util.Event;
		var Selector = YAHOO.util.Selector;

		getQuerystring = function (key,url) {

			key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
			var regex = new RegExp("[\\?&]"+key+"=([^&#]*)");
			var qs = regex.exec(url);
			if(qs == null) { return ''; } else { return qs[1]; }
		}

		measure = function (a,b,c,d) {

			var app = Dom.get('qgo');
			var title = app.getAttribute('data-title');
		
			if (window.Metron && typeof Metron === 'function') {

				metron = new Metron();

				metron.measureVariable('z_application', 'Q-go'); 
				metron.measureVariable('z_country', country); 
				metron.measureVariable('z_language', lang);
				metron.measureVariable('ti', title); 

				if (a !== '') {	metron.measureVariable('z_event', a); }
				if (b !== '') {	metron.measureVariable('z_eventtype', b); }
				if (c !== '') {	metron.measureVariable('z_eventplace', c); }
				if (d !== '') {	metron.measureVariable('z_eventvalue', d); }

				metron.measuresCommit();
			}
		};



		measureItem = function (e, val) {

			var app = Dom.get('qgo');

			var a = val; // clicked or offered items
			var b = e.getAttribute('data-mi-type') || getQuerystring('question', e.href);
			var c = e.getAttribute('data-mi-place') || app.getAttribute('data-mi-place');
			var d = e.getAttribute('data-mi-value') || '';
			
			measure(a,b,c,d);

		}


		// aanname dat de eventplace alleen per pagina verschillend is, niet per container
		measureOnload = function (obj) {
			var app = Dom.get('qgo');
			var typeList = '';
			var valueList = '';

			var a = 'Offered';
			var c = app.getAttribute('data-mi-place');
			var b, d;

			// measure onload event
			for (var i = 0; i < obj.length; i++) {
				
				var item = obj[i];
						
				var b = item.getAttribute('data-mi-type') || getQuerystring('question', item.href);				typeList += b + ';';
				var d = item.getAttribute('data-mi-value') || '';
				valueList += d + ';';				
				
				
			}

			// if we have something to offer then pass it to Metron
			if (d) {
				measure(a,typeList,c,valueList);
			}

		}

		// public - Set event delegation for clicked measured events
		init = function () {
			var app = Dom.get('qgo');

			// Delegation for clicked events
			/* DOESN'T FREAKING WORK WITH OLD SCOOL 2.6
			Event.delegate(app, "click", function(e){
				measureItem(this, 'clicked');
					
					// stop bubling because we run this in test mode, after debugging we can remove this line
					e.preventDefault();
					e.stopPropagation();

				}, "a.js-mi");
			*/
			// INSTEAD OF DELEGATION SET UNIQUE EVENT LISTENERS
			var items = Selector.query('#qgo .js-mi');
			Event.addListener(items, 'click', function(e){
				measureItem(this, 'clicked');
					

			});

		}


		return {
			measure: measure,
			measureItem: measureItem,
			measureOnload: measureOnload,
			init: init
			}
		

	
	}();

	
	// Load Q-Go measuring information
	YAHOO.util.Event.onDOMReady( function() {
	
		// initialize Q-go analytics
		YAHOO.klm.qgo.analytics.init();
		
		// measure onload events
		YAHOO.klm.qgo.analytics.measureOnload(YAHOO.util.Selector.query('.js-mi-load'));

	});

