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/,' ');
	},
	get2array : function () {
		var ret = {};
		if (window.location.search) {
			var temp = window.location.search.substr(1).split('&');
			var i = temp.length;
			while(i--) if (temp[i]) {
				try {
					var tmp = temp[i].replace(/\+/g, "%20").split('=');
					var key = decodeURIComponent(tmp[0]).toLowerCase();
					if (typeof ret[key] == 'undefined' && typeof tmp[1] != 'undefined') ret[key] = decodeURIComponent(tmp[1]);
				} catch(e) {
					// incorrect parameter is not saved in cookie
				}
			}
		}
		return ret;
	}	
}

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 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 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
*/

/*block for set 'pid', 'bmid', 'rckw', 'rcmt', 'ad',  'kid', 'aid' vars*/
(function(){

	if (typeof brand_prefix == "undefined") {
		var brand_prefix = "UK";
	}
	var domain='.ringcentral.co.uk';
	var arr_param = ['pid', 'bmid', 'rckw', 'rcmt', 'ad',  'kid', 'aid'];
	var pid = GetParamsManager.is_set('pid');
	var bmid = GetParamsManager.is_set('bmid');

    var partnerid = GetParamsManager.is_set('partnerid');
    if(partnerid){
        CookiesManager.setCookie('gw_partnerid', partnerid, '', '/', domain);
		}
    var safid = GetParamsManager.is_set('safid');
    if(safid){
        CookiesManager.setCookie('gw_safid', safid, '', '/', domain);
		}


	
	// 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\."				: ["^hook_query=", "FS_EXCITE"],
		"altavista\."			: ["^q=", "FS_ALTAVIS"],
		"looksmart\."			: ["^key=", "FS_LOOKSMA"],
		"lycos\."					: ["^query=", "FS_LYCOS"],
		"mamma\."					: ["^q=", "FS_MAMMA"],
		"metacrawler\."		: ["^q=", "FS_METACRA"],
		"hotbot\."				: ["^query=", "FS_HOTBOT"],
		"webcrawler"			: ["^hook_query=", "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) {
	  if(query ==null) return "";	
		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-4063 get search key value for gw_rckw cookie
	function get_GW_RCKW (host, query) {
	  if(query ==null) return "";	
		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 "";
	}

	function DelPreviousParam(){
		for (var i = 0; i < arr_param.length; i++) {
			CookiesManager.delCookie('gw_'+arr_param[i],'/',domain);
		}
	}

	function SetParam(){/* set param 'rckw', 'rcmt', 'ad',  'kid', 'aid' */
		var param = GetParamsManager.get2array();
		for (var i = 2; i < arr_param.length; i++) {
		  if(typeof param[arr_param[i]] != 'undefined' &&  param[arr_param[i]].toString().length>0){
				var name = 'gw_' + arr_param[i];
				CookiesManager.setCookie(name, param[arr_param[i]], 30, '/', domain);
			}
		}
	}

	function BeginSetParam(){
		DelPreviousParam();
		SetParam();
		if(pid && !bmid){
			CookiesManager.setCookie('gw_bmid', escape(pid), 30, '/', domain);
		}else{
			CookiesManager.setCookie('gw_bmid', escape(bmid), 30, '/', domain);
			if(!!pid){CookiesManager.setCookie('gw_pid', escape(pid), 30, '/', domain);}
		}
	}
	var rr_host,rr_query;
	if(!(!!pid || !!bmid)){ /*set pid from referrer*/
		var rr = window.document.referrer;	
		if(!!rr){
			var rr_host = rr.match(/(http|https):\/\/(?:www\.)?([^\/]+)/)[2];
			var rr_query = rr.split("?")[1] || "";
/*  hook search */            
            var re = /results\/Web\/([^\/]+)\//i;
            var found = rr.match(re);
            if(found!=null){
              rr_query+='&hook_query='+found[1];
            } 			
			pid = get_GW_PID(rr_host, rr_query);
			pid = pid == "" ? null : pid;	
		}
	}

	if(!!pid || !!bmid){
		BeginSetParam();/*chahge Param*/
		var gw_rckw = get_GW_RCKW(rr_host, rr_query);
		if(gw_rckw != ""){
			CookiesManager.setCookie("gw_rckw", escape(gw_rckw), 30, '/', domain);
		}
	}

	if(bmid == 'CJZLKR0808_01'){
		CookiesManager.setCookie('trial30', 'true');
	}
	
	//Set cookie CID
	// GW-7906
	if( !CookiesManager.getCookie('gw_bmid') && !CookiesManager.getCookie('gw_partnerid')){
		CookiesManager.setCookie('gw_cid', 'DIRECT', 30, '/', domain);	
	}else if(GetParamsManager.is_set('rckw') && GetParamsManager.is_set('rcmt')){
		CookiesManager.setCookie('gw_cid', 'SEM', 30, '/', domain);		
	}else if(typeof(GetParamsManager.is_set('afn')) == 'string'){
		CookiesManager.setCookie('gw_cid', 'AFF', 30, '/', domain);		
	}else{
    if(GetParamsManager.is_set('cid')){
      var tmp_array_key = ['PARTNER', 'RETARGET', 'REFERRAL', 'MEDIA', 'RESELLER','OTHER','SERVPROV','SOCIAL','LEADGEN','AFF','SEM'];
      var tmp_value_key=GetParamsManager.is_set('cid').toUpperCase();
      for(var p in tmp_array_key) {
        if(tmp_value_key == tmp_array_key[p]){
      		CookiesManager.setCookie('gw_cid', tmp_array_key[p], 30, '/', domain);		
        }
      }
    }
  }
    
    
    //GW-5054
    var spid = GetParamsManager.is_set('spid');
    if(spid)
    {
        CookiesManager.setCookie('gw_spid', escape(spid), 30, '/', domain);
    }	
	
})();

(function(){
    // gw-4293
    var today = new Date();
    
    if (CookiesManager.getCookie('gw_new_visitor') == null) {
        CookiesManager.setCookie('gw_new_visitor', today.toString() , 30, '/', '.ringcentral.co.uk');
    } else {
        var gw_new_visitor = CookiesManager.getCookie('gw_new_visitor');
        var enterDay = new Date(gw_new_visitor);
        var one_day = 1000*60*60*24;
        var difference = today.getTime() - enterDay.getTime();
        if (gw_new_visitor != 'false' && difference > one_day) {
            var time = 30 - Math.ceil(difference)/one_day;
            CookiesManager.setCookie('gw_new_visitor', 'false' , time, '/', '.ringcentral.co.uk');
        }
    }
})();

    //GW-6315
(function(){
    var domain='.ringcentral.co.uk';
    var param = GetParamsManager.get2array();
    if (typeof param['sid'] != 'undefined') {
        CookiesManager.setCookie('gw_sid', param['sid'], '', '/', domain);
    }
    if(typeof param['siteid'] != 'undefined'){ 
      CookiesManager.setCookie('gw_sid', param['siteid'], '', '/', domain);
    }
})();

