/**
 *	Project : VRTStats
 *	Author	: Nico Heulsen, Korneel Ketelslegers
 *	Version	: 1.3 (11/06/2009 - 07:51)
 *	Email	: Nico.Heulsen@vrt.be, Korneel.Ketelslegers@vrt.be
 *	Usage 	:
 *
 *	This scripts implements nedstat and metriweb.
 *	To implemtent this is script on your website, just follow this steps below
 *	If you don't wanna use the metriweb, simply call the function with the keyword false, the same goes for nedstat.
 *	Page_prefix and _suffix are used where every page has a prefix and suffix, for example (prefix c_) c_ushuaia_afl6_groenegoud
 *	
 *	
 *	STEP1:	put the configuration javascript into your head-section of the html
 *	STEP2: 	put this javascriptfile into your head-section of the html
 *	STEP3:	modify the properties of the javascript.
 *	STEP4: 	call the function (vrtStats) at the bottom of the page, just before the end-tag of the body
 *	STEP5: 	define a tellernaam and keyword if possible (if these are empty the script will generate 
 *			a tellernaam and keyword based on the url).
 *
 *	Example:
 * 	--------
 *
 *	<script language="javascript" type="text/javascript">
 *	//<[!CDATA[
 *
 *		var tellernaam = "";
 *		var keyword = "";
 *		vrtstats(tellernaam, keyword);
 *
 *	//]]>
 *	</script>
 *
 *
 *	You can also use some other functions to implement sitestat. 
 *		- __vrtstats_get_tellernaam()
 *		- __vrtstats_get_keyword();
 *
 */



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////  EXTEND STRING OBJECT   ///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


String.prototype.ltrim = function (){ 
	return this.replace(/^ */,""); 
}

String.prototype.rtrim = function (){ 
	return this.replace(/ *$/,""); 
}

String.prototype.trim = function () { 
	return this.ltrim().rtrim(); 
}

String.prototype.contains = function (value){ 
	var result = this.indexOf(value);
	return result >= 0 ? true : false;s
}

String.prototype.startsWith = function(value){
	var len = value.length;
	return this.substr(0, len).toLowerCase() == value.toLowerCase() ? true : false;
}

String.prototype.endsWith = function(value){
	var len = value.length;
	return this.substr(this.length - len).toLowerCase() == value.toLowerCase() ? true : false;s
}

String.prototype.strip = function(value){
	var len = value.length;
	return this.length > len ? this.substr(len) : null; 
}

String.prototype.addURLSlash = function(){
	var len = this.len;
	return this.substr(len - 1) == "/" ? this : this + "/";
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////	        GENERAL         ///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




function vrtstats(tellernaam, keyword){
	try{
		// *** _e_errorpage needs to be defined in the 404.html & 505.html files for this to work ***
		if(typeof _e_errorpage != 'undefined'){
			var error = 0;
			if(_e_errorpage == 'error 404') error = 404;
			else if(_e_errorpage == 'error 500') error = 500;
			sitestat(SITESTAT_URL + '/' + KLANT_NAAM + '/' + SITE_NAAM + '/s?' + error + '&amp;ns_http_status=404');
		}else{
			if(tellernaam.toString() != 'false'){ 
				__vrtstats_set_sitestat(tellernaam); 
			}
			
			if(keyword.toString() != 'false'){ 
				__vrtstats_set_metriweb(keyword); 
			}
		}
	}
	catch(e){
	
	}
}


function __vrtstats_nutch(result_items, page_number, search_term){
	try{
		var tellernaam = SEARCHPAGE_PREFIX + page_number + '&amp;ns_search_term=' + search_term + '&amp;ns_search_result=' + result_items;
		
		var keyword = METRIWEB_PREFIX + '/' + METRIWEB_SEARCHPAGE;
		vrtstats(tellernaam, keyword);
	}
	catch(e){
	
	}
}






///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////	     VRT SITESTAT       ///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var VRTSTAT_TEMP_URL = '';
var VRTSTAT_TEMP_PAGE = '';


function __vrtstats_set_sitestat(tellernaam){
	try{
		var url = "";
		var tn = "";
		
		// add a trailing dot to the prefix if we have a prefix without trailing dot
		if(NEDSTAT_PREFIX != "" && !NEDSTAT_PREFIX.endsWith('.'))
			NEDSTAT_PREFIX += '.';
			
		if(tellernaam != ''){
			if(__vrtstats_is_valid_tellernaam(tellernaam)){
				tn = NEDSTAT_PREFIX + tellernaam;
				url = __vrtstats_get_sitestat_url(tn);
				sitestat(url);
			}
			else{
				//proberen de tellernaam te behouden..
				//clean tellernaam
				tn = NEDSTAT_PREFIX + __vrtstats_clean_up_url(tellernaam);
				
				if(__vrtstats_is_valid_tellernaam(tn)){
					url = __vrtstats_get_sitestat_url(tn);
					sitestat(url);	
				}
				else{
					tn = NEDSTAT_PREFIX + __vrtstats_get_tellernaam();
					url = __vrtstats_get_sitestat_url(tn);
					sitestat(url);	
				}
			}
		}
		else{
			tn = NEDSTAT_PREFIX + __vrtstats_get_tellernaam();
			url = __vrtstats_get_sitestat_url(tn);
			sitestat(url);
		}
		
		if(ENABLE_CLICKTHROUGH || ENABLE_CLICKOUT || ENABLE_CLICKDOC) {
			__vrtstats_add_href_counters(tn);
		}
		
	}
	catch(e){
		
	}
}


function __vrtstats_get_sitestat_url(tellernaam){
	try{
		var url = __vrtstats_get_default_sitestat_url();
		url += tellernaam + '&amp;';
		url += __vrtstats_get_custom_labels();
		
		return url;
	}
	catch(e){
		
	}
}

function __vrtstats_get_tellernaam(){
	try{
		__vrtstats_prepare_url();
		
		var tellernaam = VRTSTAT_TEMP_URL.replace(/\//gi, '.');
		
		// prevent counters like ".homepage"
		if(VRTSTAT_TEMP_URL != '' && !tellernaam.endsWith('.'))
			tellernaam += ".";
			
		tellernaam += VRTSTAT_TEMP_PAGE;
		
		// check if we're on a mailform page
		if(tellernaam.match('formId')){
			var formIdPos = tellernaam.indexOf('formId');
			tellernaam = MAILFORM_PREFIX + '.' + tellernaam.substring(formIdPos + 7, tellernaam.indexOf('&'));
		}
		
		if(__vrtstats_is_valid_tellernaam(tellernaam)){
			return tellernaam.trim();	
		}
		else{
			// we clean up the url the hard way, it's better than returning 'no_valid_tellernaam'
			return __vrtstats_clean_up_url_hard(tellernaam);
		}	
	}
	catch(e){
		
	}
}


function __vrtstats_prepare_url(){
	try{
		var _location = window.location.href;
		
		// only generate counters if we're within our own site
		// this is to prevent generating counters by cached pages in search engines, like the google cache
		if(_location.startsWith(WEBSITE_ROOT)){
			// remove the website root from the url
			var temp_url = _location.substr(WEBSITE_ROOT.length).toLowerCase();
			
			// split into a PAGE and URL portion
			__vrtstats_strip_url(temp_url);
			VRTSTAT_TEMP_URL = __vrtstats_clean_up_url(VRTSTAT_TEMP_URL);
			VRTSTAT_TEMP_PAGE = __vrtstats_clean_up_url(VRTSTAT_TEMP_PAGE);
			
			// check added for vrttaal.net
			// we use the <title/> tag to replace pages containing multiple consecutive digits like "na-z0006.shtml"
			if(WEBSITE_ROOT == "http://taal.vrt.be/taaldatabanken_master/" && /\d+/.test(VRTSTAT_TEMP_PAGE) && document.getElementsByTagName("title")){
				var pageTitle = document.getElementsByTagName("title");
				var title = pageTitle[0].innerHTML.toLowerCase();
				title = title.substr(title.indexOf("-")+2);
				title = __vrtstats_clean_up_url(title);
				title = title.replace(/[^a-z0-9\s]/g, "");				// remove anything but alphanumeric characters and spaces
				VRTSTAT_TEMP_PAGE = title.trim().replace(/\s+/g, "-");	// replace spaces with dashes
			}
			
			// check on tagSuffix for een.be, only site that uses this (tagSuffix is defined in the HTML pages)
			if(SITE_NAAM == "een-be" && typeof tagSuffix != 'undefined'){
				if(tagSuffix != '')
					VRTSTAT_TEMP_PAGE += tagSuffix.replace(/\//gi, '.').toLowerCase();
				else
					VRTSTAT_TEMP_PAGE += ".index";
			}
			
			// == "home" check was added for vrttaal.net
			if(VRTSTAT_TEMP_PAGE.indexOf("homepage") != -1 || VRTSTAT_TEMP_PAGE == "home"){
				VRTSTAT_TEMP_PAGE = "homepage";
				VRTSTAT_TEMP_URL = '';
			}
			
			// add page language to the tags, added for www.vrt.be but usefull for other sites as well
			// requires _e_pagelanguage to be set in the HTML pages
			if(typeof _e_pagelanguage != 'undefined'){
				if(_e_pagelanguage != '')
					VRTSTAT_TEMP_URL = _e_pagelanguage.toLowerCase() + '.' + VRTSTAT_TEMP_URL;
			}
		}		
	}
	catch(e){
		
	}
}

function __vrtstats_strip_url(url){
	try{
		if(IS_CE_WEBSITE == true){
			//als het een pagina in de Content Editor is 
			//strippen we het laatste deel eraf
			url = url.substr(0, url.lastIndexOf('/'));
			
			VRTSTAT_TEMP_PAGE = url.substr(url.lastIndexOf('/') + 1);
			VRTSTAT_TEMP_URL = url.substr(0, url.lastIndexOf('/'));
		}
		else{
			var temp_page = url.substr(url.lastIndexOf('/') + 1);
			
			VRTSTAT_TEMP_PAGE = temp_page.contains(".") ? temp_page.substr(0, temp_page.lastIndexOf('.')) : temp_page;
			VRTSTAT_TEMP_URL = url.substr(0, url.lastIndexOf('/'));
		}
		
		if(PAGE_PREFIX != '' && VRTSTAT_TEMP_PAGE.startsWith(PAGE_PREFIX)){
			// strip prefix
			VRTSTAT_TEMP_PAGE = VRTSTAT_TEMP_PAGE.substr(PAGE_PREFIX.length);

			// this is an EXCEPTION for the www.een.be website
			// they have a different way of naming their pages using a 4-letter abbreviation
			// we extract and use this abbreviation in the counter
			if(SITE_NAAM == "een-be" && VRTSTAT_TEMP_PAGE.indexOf("_") != -1)
				VRTSTAT_TEMP_PAGE = VRTSTAT_TEMP_PAGE.substring(0, VRTSTAT_TEMP_PAGE.indexOf("_"));
				
			// this is an EXCEPTION for the www.vrt.be website
			// they have a silly way of naming their pages reusing the section they're in in the page name
			// we remove this reuse of the section from the page name
			else if(SITE_NAAM == "vrtbe" && VRTSTAT_TEMP_PAGE.indexOf("_")){
				// take the rest of the string after the first occurence of '_'
				VRTSTAT_TEMP_PAGE = VRTSTAT_TEMP_PAGE.substr(VRTSTAT_TEMP_PAGE.indexOf("_") + 1);
			}
		}
			
		if(PAGE_SUFFIX != '' && VRTSTAT_TEMP_PAGE.endsWith(PAGE_SUFFIX)){
			VRTSTAT_TEMP_PAGE = VRTSTAT_TEMP_PAGE.substr(0, VRTSTAT_TEMP_PAGE.length - PAGE_SUFFIX.length);
		}
	}
	catch(e){
		
	}
}


function __vrtstats_is_valid_tellernaam(input){
	try{
		return /^[a-z0-9\-_\.]+$/.test(input.toLowerCase());
	}
	catch(e){
	
	}
}


function __vrtstats_clean_up_url(url){
	try{
		//omdat de replace van speciale chars niet mogelijk is
		//maken we er escaped chars van...  daarna unescapen
		//we de url terug.
		
		url = escape(url)
		
		url = url.replace(/%E0|%E1|%E2|%E3|%E4|%E5|%E6/g, 'a');	//à|á|â|ã|ä|å|æ
		url = url.replace(/%E7/g, 'c');							//ç
		url = url.replace(/%E8|%E9|%EA|%EB/g, 'e');				//è|é|ê|ë
		url = url.replace(/%EC|%ED|%EE|%EF/g, 'i');				//ì|í|î|ï
		url = url.replace(/%F1/g, 'n');							//ñ
		url = url.replace(/%F2|%F3|%F4|%F5|%F6|%F8/g, 'o');		//ò|ó|ô|õ|ö|ø		
		url = url.replace(/%F9|%FA|%FB|%FC/g, 'u');				//ù|ú|û|ü
		url = url.replace(/%FD|%FF/g, 'y');						//ý|ÿ
		
		url = unescape(url);

		return url;
	}
	catch(e){
		
	}
}

function __vrtstats_clean_up_url_hard(url){
	// als we geen correcte tellernaam hebben, cleanen we de url 'the hard way'
	// toegelaten karakters zijn 1234567890abcdefghijklmnopqrstuvwxyz-_.
	
	url = unescape(url).toLowerCase();
	return url.replace(/[^a-z0-9\-_\.]/g, "");
}


function __vrtstats_get_default_sitestat_url(){
	try{
		return SITESTAT_URL.addURLSlash() +  KLANT_NAAM.addURLSlash() + SITE_NAAM.addURLSlash() + "s?";
	}
	catch(e){
	
	}	
}


function __vrtstats_get_custom_labels(){
	try{
		var e = "";
		
		e += "marketing=" + CUST_MARKETING + "&amp;";
		e += "doelgroep=" + CUST_DOELGROEP + "&amp;"
		e += "category=" + CUST_CATEGORY + "&amp;"
		e += "behoefte=" + CUST_BEHOEFTE + "&amp;"
		e += "waar=" + CUST_WAAR + "&amp;"
		e += "productiehuis=" + CUST_PRODUCTIEHUIS + "&amp;"
		e += "mediatype=" + CUST_MEDIATYPE;
		
		return e;
	}
	catch(e){
	
	}
}


function __vrtstats_add_href_counters(teller){
	try{
		if(!document.getElementsByTagName) return;
		// get all anchors
		var anchors = document.getElementsByTagName('a');
		for(var i=0; i<anchors.length; i++) {
			// reset all
			var toURL = new String();
			var hrefValue = new String();
			var pdfFileName = new String();
			var onclick = new String();
			var onclickValue = new String();
			
			// get current achor
	  		var anchor = anchors[i];
	
			// used to prevent double handling of the same anchor
			// consider this link within the site 'domain.com': http://www.somesite.com/about/documents/contacting_us.pdf
			//   this link is a clickout and will be treated as such, but it is also a click on a PDF document 
			//   in wich case it would first be tagged as a clickout, and immediately afterwards it would be tagged as a
			//   pdf click.
			var stopChecking = false;
			
	  		if(anchor.getAttribute('href'))
			{
				hrefValue = anchor.getAttribute('href');
				onclickValue = anchor.getAttribute('onclick');
				
				// generate clickthorugh counters
				/*if(ENABLE_CLICKTHROUGH && !stopChecking){
					stopChecking = true;
					
					//to be implemented, good luck to the one who gets this task!
					
					onclick = '';
				}*/
				
				// generate clickout counters for links pointing outside of the site domain
				//
				// consider WEBSITE_DOMAIN being set to "domain.com" then the following links will be INTERNAL:
				//  'http://www.domain.com/some/page/in/site'
				//  'http://domain.com'
				//  '/some/page/in/site.html'
				//  '/'
				//  '#'
				//  'javascript:'
				if(ENABLE_CLICKOUT && !stopChecking && !__vrtstats_href_is_internal(hrefValue) && (onclickValue == '' || onclickValue == null)){
					stopChecking = true;
					toURL = hrefValue.replace(/http:\/\//gi, '');
					toURL = toURL.replace(/\./gi, '-');
					toURL = toURL.replace(/\//gi, '.');
					
					onclick = "ns_onclick(this,'','" + CLICKOUT_PREFIX + '.' + teller + '.' + CLICKOUT_INFIX + '.' + toURL + "','clickout');return false;";
				}
				
				// generate pdf counters
				if(ENABLE_CLICKDOC && !stopChecking && hrefValue.endsWith('.pdf') && (onclickValue == '' || onclickValue == null)){
					stopChecking = true;
					// extract pdf filename and make it lowercase
					pdfFileName = hrefValue.substring(hrefValue.lastIndexOf('/')+1).toLowerCase();
					// replace .pdf with -pdf
					pdfFileName = pdfFileName.replace(/^(.+)\.(pdf)$/i, '$1-$2');
					// clean the hard way
					pdfFileName = __vrtstats_clean_up_url_hard(pdfFileName);
					onclick = "ns_onclick(this,'','" + CLICKDOC_PREFIX + '.' + teller + '.' + CLICKDOC_INFIX + '.' + pdfFileName + "','pdf');return false;";
				}
				
				// change the href if necessary
				if(stopChecking)
					anchor.setAttribute('onclick', onclick);
			}
		}
	}
	catch(e){
		
	}
}

function __vrtstats_href_is_internal(href){
	try{
		var internal = true;
		if(href.startsWith('http://') && href.indexOf(WEBSITE_DOMAIN) == -1 && href.indexOf(SITESTAT_URL) == -1)
			internal = false;
			
		return internal;
	}
	catch(e){
		
	}
}


// *** DO NOT MODIFY THESE FUNCTIONS! ***

function sitestat(ns_l){
	ns_l+='&amp;ns__t='+(new Date()).getTime();ns_pixelUrl=ns_l; 
	ns_0=document.referrer; 
	ns_0=(ns_0.lastIndexOf('/')==ns_0.length-1)?ns_0.substring(ns_0.lastIndexOf('/'),0):ns_0; 
	if(ns_0.length>0)ns_l+='&amp;ns_referrer='+escape(ns_0); 
	if(document.images){ns_1=new Image();ns_1.src=ns_l;}else 
	document.write('<img src="'+ns_l+'" width="1" height="1" alt=""></img>');
}


function ns_onclick (a, url, name, type, winopt){
	var ns_l=SITESTAT_URL+'/'+KLANT_NAAM+'/'+SITE_NAAM+'/s?'; 
	ns_l+=name;ns_l+='&ns_type='+type+'&ns_action=view'; 
	ns_l+='&ns__t='+(new Date()).getTime();if(!url)url=a.href; 
	var ns_0=document.referrer;
	if(ns_0.lastIndexOf('/')==ns_0.length-1) 
	ns_0=ns_0.substring(ns_0.lastIndexOf('/'),0); 
	if (ns_0.length>0)ns_l+='&amp;ns_referrer='+escape(ns_0); 
	winopt=winopt||"";var 
	target=(a&&a.target&&a.target!="")?(a.target.substring(0,1)=="_")?a.target.substring(1 ):a.target:"self"; 
	var ns_i=new Image();if(target&&url){if(window[target]){window.ns_softclick_timer=function(target,url) 
	{return function(){ns_i.onload=ns_i.onerror=function(){return;}; 
	window[((window[target])?target:"self")].location.href=url;}}(target,url); 
	window.setTimeout('ns_softclick_timer()',5000);ns_i.onload=ns_i.onerror=window.ns_softclick_timer;}else{ 
	window.open(url,target,winopt);}}ns_i.src=ns_l;return false;
}





///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////	       METRIWEB         ///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function __vrtstats_set_metriweb(keyword){
	try{
		var _site = SITE_NAAM.substr(0, SITE_NAAM.length - 3);
		
		if(keyword != ''){
			metriwebTag(_site, keyword, LANGUAGE);
		}
		else{
			var _kw = __vrtstats_get_keyword();	
			metriwebTag(_site, _kw, LANGUAGE);
		}
	}
	catch(e){
	
	}
}


function __vrtstats_get_keyword(){
	try{
		__vrtstats_prepare_url();
		
		var charsplit = __vrtstats_calculate_charsplit();
		
		var keyword = METRIWEB_PREFIX;
		if(!keyword.endsWith('/')){
			keyword += '/';	
		}
		
		var spliturl= VRTSTAT_TEMP_URL.split('/');
		for(var s=0;s<spliturl.length;s++){
			keyword += spliturl[s].substr(0, charsplit) + '/';
		}
		
		keyword += VRTSTAT_TEMP_PAGE;
		
		if(keyword.length > 23){
			keyword = keyword.substr(0,23);	
		}
		
		return keyword.toUpperCase();
		
	}
	catch(e){

	}
}


function __vrtstats_calculate_charsplit(){
	try{
		var page_length = VRTSTAT_TEMP_PAGE.length;
		
		if(page_length > 10){ page_length = 10; }
		if(page_length == 0){ page_length = 1; }

		
		var devider = VRTSTAT_TEMP_URL.split('/').length;
		if(devider <= 0){ devider = 1; }
		
		var aantal_chars = 23 - (devider + METRIWEB_PREFIX.length + 1 + page_length + 1);
	
		return Math.floor(aantal_chars / devider);
	}
	catch(e){
		
	}
}