var __wsgaConfObject = {
	//Check that this works with your shop's currency settings
	removecurrency: function(priceWithCurrencyLabels){
	  var noLabel = priceWithCurrencyLabels.replace(" €", ""); 
	  return noLabel.replace(",", ".");
    },
	pageTitles: { 
	           3:'/tuotteet',
	           4:'/ostoskori',  
	           5:'/tilauslomake',
	           6:'/overridelater',
	           7:'/rekisterointilomake',
	           8:'/tilaustiedot',
	           9:'/tuote',
	           10:'/etusivu',
	           11:'/rekisterointitiedot',
	           12:'/rekisterointivahvistus',
	           13:'/tilaushistoria/tilaukset',
	           14:'/tilaushistoria/tilaus',
	           15:'/tallennettuostoskori',
	           16:'/pikatilaus',
	           17:'/pikatilaustiedot',
	           19:'/salasananpalautus',
	           20:'/hakutulokset',
	           21:'/toivelista',
	           22:'/salasanapalautettu'
	           },
	           themeTitles: 
	           {},
	//comment this if you don't want theme based logging , otherwise write your theme names here
	/*{
		1:'/julkinen',
		2:'/others',
		3:'/others',
		4:'/kirjautunut',
		5:'/others',
		6:'/others',
		7:'/others',
		8:'/others',
		9:'/others',
		10:'/others'
	}*/
	
	freepageTitle : '/vapaasivu',
	orderSuccessTitle : '/tilausonnistui',
	orderCancelledTitle : '/tilausperuutettu', 
	orderFailedTitle : '/tilauskeskeytetty', 
	advancedSearchTitle : '/erikoishaku',
	basicSearchTitle : '/pikahaku',
	offsiteTitle : '/offsite'
	
};	

function wsga_buildtitle(wspage){
    //start building pretty title
 	var wsgaTitle="";
 	
 	//add theme
 	if(__wsgaConfObject.themeTitles && __wsgaConfObject.themeTitles[wspage.theme])
 	  wsgaTitle+=__wsgaConfObject.themeTitles[wspage.theme];
 	  
 	//page specific reporting 	
  	if(wspage.pageId==3){ //productlisting page
  		wsgaTitle+=__wsgaConfObject.pageTitles[wspage.pageId]+'/'+wsga_clean(wspage.groupPath);
     	return wsgaTitle;
  	}else if(wspage.pageId==6){ //payment return page
  		var orderResult = wspage.getPaymentResult();
  		if(orderResult=="success"){
  		  //add listener to mark transaction 
  		  wspage.markTransaction();
  		  wsgaTitle+=__wsgaConfObject.orderSuccessTitle;
     	  return wsgaTitle;
  		}else if(orderResult=="cancel"){
  		  wsgaTitle+=__wsgaConfObject.orderCancelledTitle;
     	  return wsgaTitle;
  		}else if(orderResult=="fail"){
  		  wsgaTitle+=__wsgaConfObject.orderFailedTitle;
     	  return wsgaTitle;
  		}else{
  		  return;
  		}
  	}else if(wspage.pageId==9){ //single product page
  	 	//product based grouping
  	 	wspage.markGrouping(wspage.productName);
  	 	wsgaTitle+=__wsgaConfObject.pageTitles[wspage.pageId]+'/'+wsga_clean(wspage.productItemCode)+'/'+wsga_clean(wspage.productName);
     	return wsgaTitle;
     	
  	}else if(__wsgaConfObject.pageTitles[wspage.pageId]){ //some known default page
  		wsgaTitle+=__wsgaConfObject.pageTitles[wspage.pageId];
     	return wsgaTitle;
     	
  	}else if(wspage.pageId>=100){ //freepage
  		var pgn = wsga_clean(wspage.pageName);
	 	if(pgn!="")
	 	    return(wsgaTitle+__wsgaConfObject.freepageTitle + '/'+pgn);
	 	else
	 	  	return;
	 	  	
  	}else if(wspage.pageId==""){ //empty (means file include) -> try to get file name from parameters
	 	 var untrustedPageIDParameter = wsga_parametermap(wspage.url)["pageID"]; 
	 	 var cleanedPageIdParameter = wsga_clean(untrustedPageIDParameter);
	 	 if(cleanedPageIdParameter!=""){
           wsgaTitle += __wsgaConfObject.freepageTitle+"/"+cleanedPageIdParameter;
	 	   return wsgaTitle;
	 	 }else{
	 	   return
	 	 }
  	}	
}

function wsga_buildpagemeta(){
    var pageMetas = document.getElementById("wsgametadata").value.split(";=;");    
    var tmpId=pageMetas[1];
	var pageObj =  {	theme:pageMetas[0],
						pageId:tmpId, 
  	 					pageName:pageMetas[2],
  	 					groupName:pageMetas[3],
					 	groupPath:pageMetas[4], 
 		  				productItemCode:pageMetas[5],
 		  				productName:pageMetas[6],
						getPaymentResult: function(){ 
  	                      var inputElem = document.getElementById("wsgapayresult");
  	                      if(inputElem)
  	                        return inputElem.value;
  	                      else
  	                        return;
						},
						markTransaction: function(){
 		  					//wsga_addListener(document, 'load',  wsga_setuptransaction);
 		  					setTimeout("wsga_setuptransaction()", 500);
 		  					},
 		  				markGrouping: function(param){
  	 						__utmSetVar(wsga_clean(param));
  	 					},
  	 					url:document.location.href
  	 	};
	return pageObj;
}

// function that builds the page title to suitable form and reports it to google analytics
function wsga(){
    //add a listener for exit and search links
    var links = document.getElementsByTagName("a");
    for(var i=0; i<links.length;i++){
      wsga_addListener(links[i], 'click', wsga_linkclickhandler);
    }
    
    //add a listener for search forms
    var forms = document.getElementsByTagName("form");
    for(var i=0; i<forms.length;i++){
      wsga_addListener(forms[i], 'submit', wsga_submithandler);
    }
    
     //get title (also calls page object to perform transaction tracking and grouping if appropriate)
    var pageObj = wsga_buildpagemeta();
    var title = wsga_buildtitle( pageObj );
    wsga_report(title);
    
 }
 
 function wsga_report(r){
 	wsga_log("urchinTracker('"+r+"');");
 	if(!r)
 	  urchinTracker();
    else
 	  urchinTracker(r);
 }

function wsga_setuptransaction(){
	var ta = document.getElementById("utmtrans");
	ta.value = wsga_cleanTransactionInfo(ta.value);
	wsga_log("transaction reporting:"+ta.value+"");
	__utmSetTrans();
}
function wsga_cleanTransactionInfo(transactionInfo){
	var result ="";
	var lines = transactionInfo.split("UTM:");
	var orderId="";
	for(var i=0; i<lines.length; i++){
		var line = lines[i].split("|");
		if(line[0]=="T"){
			orderId=line[1];
			line[4]=__wsgaConfObject.removecurrency(line[4]); //VAT total sum
			line[5]=__wsgaConfObject.removecurrency(line[5]); //delivery cost
			result+="UTM:"+line.join("|");
		}else if(line[0]=="I"){
			line[1]=orderId;
			line[5]=__wsgaConfObject.removecurrency(line[5]); //product unit price
			result+="UTM:"+line.join("|");	
		}
	}
   return result;
}

//searchform tracking
function wsga_submithandler(evt){
	var form = (window.event) ? evt.srcElement : evt.target;
	var params={};
	for(var i=0; i<form.elements.length; i++){
		params[form.elements[i].name]=form.elements[i].value;
	}
	//check for product searchform, if it is a search, title is found
	var wsgaTitle= wsga_search_title(params);
    if(wsgaTitle){
		wsga_report(wsgaTitle);
	}
}

//offsite and search link tracking
function wsga_linkclickhandler(evt){
	//unfortunately the clicked event target isn't always the link element in all browsers, it can be some childElement inside the link
	var tg = (window.event) ? evt.srcElement : evt.target;
	while(tg && tg.tagName!="A" && tg.tagName!="BODY"){
		tg=tg.parentNode;
	}
	if(tg.tagName=="A"){
		//external link tracking
		if(tg.href.indexOf(document.location.host) == -1 && tg.href.indexOf("javascript:") == -1){
			var url = wsga_clean(tg.href);
			var txt = wsga_clean(tg.innerHTML);
			var wsgaTitle = __wsgaConfObject.offsiteTitle+'/' + txt + '-' + url;			
			wsga_report(wsgaTitle);
		}
		//Workspace product search link tracking
		var wsgaTitle= wsga_search_title(wsga_parametermap(tg.href));
		if(wsgaTitle){
			wsgaTitle+='/'+wsga_clean(tg.innerHTML); //TODO: might this contain some extra notation?
		    wsga_report(wsgaTitle);
		}
	}
}

//deciphers search parameters to titles, if not a search -> nothing is returned		
function wsga_search_title(params){ 
	if(params["action"]=="search"){
		var keywords = params["searchPattern"];
		var cleaned=wsga_clean(keywords);
		return __wsgaConfObject.basicSearchTitle+"/"+cleaned;
	}else if(params["action"]=="advancedsearch"){
		var wsgaTitle = __wsgaConfObject.advancedSearchTitle+"/"; 
		var searchAttrs = params["advancedsearch.attributes"].split(",");
		for(var i=0; i<searchAttrs.length; i++){
			var searchAtt = searchAttrs[i];
			var val = params["advancedsearch."+searchAtt];
			if(searchAtt!="" && val && val!=""){
			  wsgaTitle+=""+wsga_clean(searchAtt)+"="+wsga_clean(val)+"&";
			}
		}
		wsgaTitle=wsgaTitle.substring(0, wsgaTitle.length-1);
		return wsgaTitle;
	}
}

// Cross-browser implementation of element.addEventListener()
function wsga_addListener(element, type, expression, bubbling){
  var bubbling = bubbling || false;
  if(window.addEventListener)    { // Standard
     element.addEventListener(type, expression, bubbling);
     return true;
  } else if(window.attachEvent) { // IE
     element.attachEvent('on' + type, expression);
     return true;
  } else 
     return false;
}
// remove illegal characters and transform scands to ao
function wsga_clean(str){
	if(!str)
	  return "";
	//trim first
    var str2 = str.replace(/^\s+/, '');
    str2 = str2.replace(/\s+$/, '');
	str2 = str2.replace(/[ ]/g, "_");
	str2 = str2.replace(/[ä|Ä]/g, "a");
	str2 = str2.replace(/[ö|Ö]/g, "o");
	str2 = str2.replace(/[å|Å]/g, "o");
	return str2.replace(/[^a-z|A-Z|0-9|\-|\/]/g, "_");
}

//parse parameters from given url
function wsga_parametermap(url){
	var end = url.length;
	if(url.indexOf("#")!=-1)
	  end=url.indexOf("#");
	var parameterString = url.substring(url.indexOf('?')+1, end);
    var parameterTokens = parameterString.split("&");
	var map = {};
    for (i = 0; i < parameterTokens.length; i++){
    	var pair = parameterTokens[i].split("=");
    	if(pair[0] && pair[1]){
		    map[pair[0]] = pair[1];
    	}
	}
	return map;
}
function wsga_log(message){
	
}

