/**
 * Parse parameters from url, found corresponding Search engine or Ad provider,
 * and save to cookie.
 *
 * @author jeffreytang
 */
function SeadCookieHandler() {
};

SeadCookieHandler.prototype.cookieName = "lastSead";

	// search engine or ad
SeadCookieHandler.prototype.paramOfSead = {
	google : ["source", "keyword", "type", "lang", "gclid"],
	baidu : ["unknownParam"]
};

SeadCookieHandler.prototype.saveSeadParamToCookie = function() {
	var foundSead = this.findSeadByURL();
	if (foundSead) {
		var result = this.createParamedUrlBySead(foundSead);
		createCookie(this.cookieName, result);
	}
};

SeadCookieHandler.prototype.readSeadParamFromCookie = function() {
	var value = readCookie(this.cookieName);
	return value ? value : "";
};

SeadCookieHandler.prototype.createParamedUrlBySead = function() {
	var sead = this.findSeadByURL();

	if (sead) {
		var result = "";
	
		var tmpArray = [];
		for (var i=0; i<this.paramOfSead[sead].length; i++) {
			var paramName = this.paramOfSead[sead][i];
			var value = this.getParamValueFromURL(paramName);
			tmpArray[tmpArray.length] = paramName + "=" + value;
		}
		result = tmpArray.join("&");
		return result;
	}
	else {
		return null;
	}
};

/*
 * found the search agent which provided by the url, according to it's spec
 */
SeadCookieHandler.prototype.findSeadByURL = function(url) {
	var newUrl = url ? url : document.URL;

	var foundSead = null;
	for (var sead in this.paramOfSead) {
		for (var i=0; i<this.paramOfSead[sead].length; i++) {
			var paramName = this.paramOfSead[sead][i];
			if (newUrl.indexOf(paramName) < 0) {
				foundSead = null;
				break;
			}
			foundSead = sead;
		}
		if (foundSead) {
			break;
		}
	}
	return foundSead;
};

SeadCookieHandler.prototype.getParamValueFromURL = function(name, url) {
	var testUrl = url ? url : document.URL;
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( testUrl );
	if( results == null )
		return "";
	else
		return results[1];
};

new SeadCookieHandler().saveSeadParamToCookie();
