var CookiesManager = {
	setCookie : function (name, value, expires, path, domain, secure) {
		name = name.toLowerCase();
		if(!path){
			path = '/';
		}
		if(typeof expires != 'number'){
			expires = '';
		}else{
			var expires_date = new Date( (new Date()).getTime() + (expires*24*60*60*1000) );
			expires = ' expires=' + expires_date.toGMTString() + ';';
		}
		var d = (domain) ? ';domain=' + domain : '';
		var s = ( secure ) ? ";secure" : "";
		document.cookie = name + "=" + value + ";" + expires + " Path=" + path + d + s;
	},
	getCookie : function (name){
		var c = document.cookie;
        var matches = c.match(new RegExp("(?:^|; )" + name + "=([^;]*)", "i"));
		return (matches ? decodeURIComponent(matches[1]) : null);
	},

	delCookie : function( name, path, domain ) {
		document.cookie = name + "=" +
			( ( path ) ? ";path=" + path : "") +
			( ( domain ) ? ";domain=" + domain : "" ) +
			";expires=Thu, 01-Jan-1970 00:00:01 GMT";
	},

	attachCookie : function(cookieName, str){
		var value = CookiesManager.getCookie(cookieName);
		var re = new RegExp("(&|\\\?)"+cookieName+"=");
		if(value && !str.match(re)){
			str += '&' + cookieName + '=' + value;
		}
		return str;
	}
}


var GetParamsManager = {
	is_set : function( varName ){
		var regexS = "[?&]"+varName+"=([^&#]*)";
		var regex = new RegExp( regexS ,'i');
		var tmpURL = window.location.href;
		var results = regex.exec( tmpURL );
		if( results == null )
			return null;
		else
			return results[1].replace(/%20/,' ');
	}
}

function inArray (arr, val)
{
	if(arr)
	{
		for(var i = 0, l = arr.length; i < l; i++)
		{
			if(arr[i] == val)
			{
				return i;
			}
		}
	}
	return -1;
}

var oid = GetParamsManager.is_set('oid');
if(oid){
	CookiesManager.setCookie('oid', oid, '', '/', '.ringcentral.co.uk');
}

var oppid = GetParamsManager.is_set('oppid');
if(oppid) {
	CookiesManager.setCookie('gw_oppid', oppid, '', '/', '.ringcentral.co.uk', /https/i.test(window.location.protocol));
}

var pid = GetParamsManager.is_set('pid');
if(pid){
	var d = new Date();
	d.setDate(d.getDate() + 90);
	CookiesManager.setCookie('gw_pid', pid, d.toString(), '/', '.ringcentral.co.uk');
}


var afn = GetParamsManager.is_set('afn');
if(afn)
{
	CookiesManager.setCookie('gw_afn', afn);
}

var nead_cookie_afn = [
	'/cj/toll-free-numbers.asp',
	'/cj/toll-free-numbersb.asp',
	'/cj/toll-free-numbersb_sp.asp',
	'/cj/toll-free-numbers10p.html',
	'/cj/toll-free-numbers30b.asp',
	'/cj/toll-free-numbersZLKR30.asp',
	'/cj/virtual-phone-system.html',
	'/cj/virtual-phone-systemsf30.html',
	'/cj/virtual-pbx-new.asp',
	'/cj/faxandphone.html',
	'/cj/voicemail.asp',
	'/cj/vanitynumber.asp',
	'/cj/call-forwarding.asp',
	'/cj/digitalline-voip.html',
	'/cj/local-numbers/area-codes.html',
	'/cj/fax.asp',
	'/cj/fax30.asp',
	'/cj/fax.asp',
	'/cj/office-everywhere-phone-fax.asp',
	'/'
];



var ref_full = window.location.pathname;// + window.location.search;


/*if(inArray (nead_cookie_afn, ref_full) != -1)
{
	CookiesManager.setCookie('afn', 'cj');
}


if(ref_full.match(/^\/az\//))
{
	CookiesManager.setCookie('afn', 'az');
}*/

if(CookiesManager.getCookie('afn'))
{
	var hasAfnCookie = true;
}

var bmid = GetParamsManager.is_set('bmid');
if(bmid)
{
	CookiesManager.setCookie('gw_bmid', bmid);
}
if(bmid == 'CJZLKR0808_01')
{
	CookiesManager.setCookie('trial30', 'true');
}


var adgrpid = GetParamsManager.is_set('adgrpid');
if(adgrpid)
{
	CookiesManager.setCookie('gw_adgrpid', adgrpid);
}

var p = GetParamsManager.is_set('p');
if(p)
{
	CookiesManager.setCookie('p', p);
}



var o = GetParamsManager.is_set('o');
if(o)
{
	CookiesManager.setCookie('o', o, 1/64);
}

/*
*	Check whether page has been opened from some search engine and
*	in case of true result set according cookies of gw_pid and gw_engine_referrer
*/
(function(){

	if (typeof brand_prefix == "undefined") {
		var brand_prefix = "RC";
	}

	// List of search engins
	var SearchEnginesKnownRules = {
		"google\."				 : ["(p|q)=", "FS_GOOGLE"],
		"images\.google\."		 : ["(p|q)=", "FS_GOOGLE"],
		"yahoo\."				 : ["p=", "FS_YAHOO"],
		"search\.aol\.co"		 : ["q=", "FS_AOL"],
		"msn\."					 : ["q=", "FS_MSN"],
		"(^|\.)ask\.com"		 : ["q=", "FS_ASKJEEV"],
		"search\.earthlink\.net" : ["q=", "FS_EARTHLI"],
		"overture\.com"			 : ["keywords=", "FS_OVERTUR"],
		"netscape\."			 : ["(search|q)=", "FS_NETSCAP"],
		"search\.com"		     : ["q=", "FS_SEARCHC"],
		"(^|\.)go\.com"			 : ["qt=", "FS_GOCOM"],
		"excite\."				 : ["_iceurl=", "FS_EXCITE"],
		"altavista\."			 : ["q=", "FS_ALTAVIS"],
		"looksmart\."			 : ["key=", "FS_LOOKSMA"],
		"lycos\."				 : ["query=", "FS_LYCOS"],
		"mamma\."				 : ["q=", "FS_MAMMA"],
		"metacrawler\."			 : ["_iceurl=", "FS_METACRA"],
		"hotbot\."				 : ["query=", "FS_HOTBOT"],
		"webcrawler"			 : ["(_iceurl|searchtext)=", "FS_WEBCRAW"],
        "bing\."                 : ["q=", "FS_BING"]
	};

	// List of search paramenter names
	var WordsToExtractSearchUrl = ["ask","claus","general","key","kw","keyword","keywords","mt","p","q",
									"qr","qt","query","search","searchText","string","su","txtsearch","w"];


	// Get value of gw_pid by host name and(or) search parameter name
	function get_GW_PID(host, query) {
		var keywords = query.split("&") || [];
		for (var pattern in SearchEnginesKnownRules) {
			if (!!pattern) {
				var reg1 = new RegExp(pattern, "i");
				if (reg1.test(host)) {
					var pat = SearchEnginesKnownRules[pattern][0];
					var reg2 = new RegExp(pat, "i");
					for (var i = 0; i < keywords.length; i++) {
						var keyword = keywords[i];
						if (reg2.test(keyword)) {
							return (SearchEnginesKnownRules[pattern][1]).replace("_", brand_prefix + "_");
						}
					}
				}
			}
		}

		// get gw_pid value in case of unknown search engine
		for (var pattern in WordsToExtractSearchUrl) {
			for (var i = 0; i < keywords.length; i++) {
				var keyword = keywords[i] || '';
				var keyval = keyword.split("=");
				if (keyval[0].toLowerCase() == WordsToExtractSearchUrl[pattern]) {
					return "FS" + brand_prefix + "_OTHERS";
				}
			}
		}

		return "";
	}
	// gw-4065 get search key value for gw_rckw cookie
	function get_GW_RCKW (host, query) {
		var keywords = query.split("&") || [];
		for (var pattern in SearchEnginesKnownRules) {
			if (!!pattern) {
				var reg1 = new RegExp(pattern, "i");
				if (reg1.test(host)) {
					var pat = SearchEnginesKnownRules[pattern][0];
					var reg2 = new RegExp(pat, "i");
					for (var i = 0; i < keywords.length; i++) {
						var keyword = keywords[i];
						if (reg2.exec(keyword)) {
							return keyword.split("=")[1];
						}
					}
				}
			}
		}
		// get key word value in case of unknown search engine
		for (var pattern in WordsToExtractSearchUrl) {
			for (var i = 0; i < keywords.length; i++) {
				var keyword = keywords[i] || '';
				var keyval = keyword.split("=");
				if (keyval[0].toLowerCase() == WordsToExtractSearchUrl[pattern]) {
					return keyval[1];
				}
			}
		}
		return "";
	}	
	// "gw_pid" cookie for search engine can be set if there is no request parameter of "pid"
	// in actual page url
	if (GetParamsManager.is_set('pid') == null) {
		var rr = window.document.referrer;
		if (!!rr) {
			var rr_host = rr.match(/(http|https):\/\/(?:www\.)?([^\/]+)/)[2];
			var rr_query = rr.split("?")[1] || "";

			var pid = get_GW_PID(rr_host, rr_query);

			if (pid != "") {
				CookiesManager.setCookie("gw_pid", pid, '', '/', '.ringcentral.co.uk');
				var gw_rckw = get_GW_RCKW(rr_host, rr_query);
				if(gw_rckw != ""){
					CookiesManager.setCookie("gw_rckw", escape(gw_rckw), '', '/', '.ringcentral.co.uk');
				}
			}
		}
	}
})();
