/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is the the SEOPosition library.
 *
 * The Initial Developer of the Original Code is
 * Andy Edmonds <andyed@gmail.com>
 *
 * Portions created by the Initial Developer are Copyright (C) 2008
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 * Jim MacKay <jim@jagvent.com> ; Generalized, Added More SEs, Google TLD,3LD,Images,Page,Position
 * ***** END LICENSE BLOCK ***** */

var seoposition = {
		ref:  document.referrer.toString(),
		init: function () {

				/* Google Page */
				this.ssGetPageNum ("SEO Google Page",".google.","q=","start=",0,10);
				
				/* Google Position */
				this.ssGetPosition ("SEO Google Position",".google.com/url","q=","cd=");

				/* Yahoo */
				this.ssGetPageNum ("SEO Yahoo Page",".yahoo.","p=","b=",1,10);
				
				/* MSN */
				this.ssGetPageNum ("SEO MSN Page",".msn.","q=","first=",1,10);
				
				/* Live */
				this.ssGetPageNum ("SEO Live Page",".live.","q=","first=",1,10);
				
				/* Bing */
				this.ssGetPageNum ("SEO Bing Page",".bing.","q=","first=",1,10);
				
				/* AOL */
				this.ssGetPageNum ("SEO AOL Page",".aol.","query=","page=",1,1);		

				/* Google TLD */
				this.ssGetTld ("SEO Google TLD",".google.","q=","start=",0,10);

				/* Google 3LD */
				this.ssGet3ld ("SEO Google Site",".google.");
			
				/* Google Images */
				this.ssGetGoogleImages ("SEO Google Images","images.google.");
			
		}
}


// source = engine name for report
// domain = 2nd Level of Domain; i.e. "images.google." including the "."

seoposition.ssGetGoogleImages = function(source,domain) {
    	if(seoposition.ref.indexOf(domain) > -1) {  
		var ssImageNum = seoposition.ssGetParam("start",seoposition.ref);
		var ssKeyword = unescape(seoposition.ssGetParam("prev",seoposition.ref));
		ssKeyword = unescape(seoposition.ssGetParam("q",ssKeyword));
		ssKeyword = ssKeyword.replace(/\+/g, " ");
		if(pageTracker != 'undefined')  {
			pageTracker._trackEvent(source, ssKeyword, document.location.pathname, parseInt(ssImageNum));
		}
	}
}



// source = engine name for report
// domain = 2nd Level of Domain; i.e. ".google." including the "."

seoposition.ssGet3ld = function(source,domain) {
    	if(seoposition.ref.indexOf(domain) > -1) {  
		var ss3ld = seoposition.ref.slice(seoposition.ref.indexOf("//") + 2, seoposition.ref.indexOf(domain) + domain.length - 1);
		if(pageTracker != 'undefined')  pageTracker._trackEvent(source, ss3ld, document.location.pathname, 1);		
	}
}
		

// source = engine name for report
// domain = 2nd Level of Domain; i.e. ".google." including the "."
// qParam = query parameter name for the engine
// pParam = page parameter name for the engine
// offset & divisor are used to calculate page properly
//  so {page reported} = 1 + ( {pParam Value} - {offset} ) / {divisor}

seoposition.ssGetTld = function(source,domain,qParam,pParam,offset,divisor) {
    	if(seoposition.ref.indexOf(domain) > -1) {  
		var ssTld = seoposition.ref.substring(seoposition.ref.indexOf(domain) + domain.length - 1);
		ssTld = ssTld.substring(0,ssTld.indexOf("/"));
		var ssPage = seoposition.ssCalcPageNum(pParam,offset,divisor);
		if(pageTracker != 'undefined')  pageTracker._trackEvent(source, ssTld, document.location.pathname, ssPage);
	}
}



// source = engine name for report
// qParam = query parameter name for the engine
// pParam = page parameter name for the engine
// offset & divisor are used to calculate page properly
//  so {page reported} = 1 + ( {pParam Value} - {offset} ) / {divisor}

seoposition.ssGetPageNum = function (source,domain,qParam,pParam,offset,divisor) {
    	if(seoposition.ref.indexOf(domain) > -1  && seoposition.ref.indexOf(qParam) > -1 ) {
		var page = seoposition.ssCalcPageNum(pParam,offset,divisor);
		if(pageTracker != 'undefined') pageTracker._trackEvent(source, "Page" + page, document.location.pathname, page);
	}
}



// source = engine name for report
// qParam = query parameter name for the engine
// pParam = page parameter name for the engine
//  so {position reported} = {pParam Value}

seoposition.ssGetPosition = function (source,domain,qParam,pParam) {
    	if(seoposition.ref.indexOf(domain) > -1  && seoposition.ref.indexOf(qParam) && seoposition.ref.indexOf(pParam) > -1 ) {
		var position = seoposition.ssGetParam(pParam,seoposition.ref) * 1;
		var position_text = "Position-" + ((position < 10)?"0":"") + position;
		if(pageTracker != 'undefined')  pageTracker._trackEvent(source, position_text, document.location.pathname, position);
	}
}



// pParam = page parameter name for the engine
// offset & divisor are used to calculate page properly
//  so {page returned} = 1 + ( {pParam Value} - {offset} ) / {divisor}

seoposition.ssCalcPageNum = function (pParam,offset,divisor) {
	if(seoposition.ref.indexOf(pParam) > -1) {
		if(seoposition.ref.split("?").length) {					
			return 1+(seoposition.ssGetParam(pParam,seoposition.ref)-offset)/divisor;
		} 
	} else {
			return 1;
	}
}





// ssGetParam retreives a parameter value from a string

seoposition.ssGetParam = function (sParam,sString) {
	var arParams = sString.split("?")[1];							
	arParams = arParams.split("&");
	for(var i=0;i<arParams.length;i++) {
		if(arParams[i].indexOf(sParam) > -1 ) {
			return arParams[i].split("=")[1];
		}
	}
}


seoposition.init();