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;

    },
    attachCookie : function(cookieName, str){
        var value = CookiesManager.getCookie(cookieName);
        var re = new RegExp("(&|\\\?)"+cookieName+"=");
        if(value && !str.match(re)){
            str += '&' + cookieName + '=' + value;
        }
        return str;
    },

    delCookie : function( name, path, domain ) {
        document.cookie = name + "=" +
        ( ( path ) ? ";path=" + path : "") +
        ( ( domain ) ? ";domain=" + domain : "" ) +
        ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
    },

    delAlienCookies : function(cookies, write) {

        var src = window.location.protocol + '//' + window.location.host +'/inc/php/clearc.php?' + cookies.join('&');
        cookies.push((new Date())*1);
        if ( write && write == true ) {
            document.write('<iframe style="display:none;" src="'+ src + '"></iframe>');
        } else {
            var ifr = document.createElement('iframe');
            ifr.style.display = 'none';
            ifr.src = src;
            document.body.appendChild(ifr);
        }
    }
}


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;
}
/*block for set 'pid', 'bmid', 'rckw', 'rcmt', 'ad',  'kid', 'aid' vars*/

(function(){

    if (typeof brand_prefix == "undefined") {
        var brand_prefix = "XF";
    }
    var domain='.extremefax.com';
    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);
        }
    }

	//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', spid, 30, '/', domain);
	}

})();

/* block for set 'adgrpid', 'oid', 'product', 'afn', 'sid', 'office_phone', 'oppid' vars*/
(function(){

    var domain='.extremefax.com';
    var param = GetParamsManager.get2array();
    var get_param = ['adgrpid', 'oid', 'product', 'afn', 'sid', 'office_phone', 'oppid'];

    for(var p in get_param) {
        if (typeof param[get_param[p]] != 'undefined' ) {
            var name = get_param[p];
            if(  name == 'adgrpid'
                || name == 'afn'
                || name == 'sid'
                || name == 'oppid')
                {
                name = 'gw_' + name;
            }

            if(name == 'gw_oppid' && /https/i.test(window.location.protocol)) {
                CookiesManager.setCookie(name, param[get_param[p]], '', '/', domain, true);
            }else{
                CookiesManager.setCookie(name, param[get_param[p]], '', '/', domain);
            }

            if(name == 'product') {
                name = name + '_tags';
                var cValue = (param[get_param[p]].toLowerCase() == 'mobile') ? 'online' : param[get_param[p]];
                switch(cValue) {
                    case 'office':
                    case 'online':
                    case 'fax':
                        CookiesManager.setCookie(name, cValue, '', '/', domain);
                        break;
                }
            }
        }
    }
    //GW-6315
    if(typeof param['siteid'] != 'undefined'){ 
      CookiesManager.setCookie('gw_sid', param['siteid'], '', '/', domain);
    }    
})();


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('gw_afn_to_offer_tests', 'cj', '', '/', '.extremefax.com');
}

if(ref_full.match(/^\/aff\//)) {
    CookiesManager.setCookie('gw_afn_to_offer_tests', 'aff', '', '/', '.extremefax.com');
}


if(ref_full.match(/^\/az\//)) {
    CookiesManager.setCookie('gw_afn_to_offer_tests', 'az', '', '/', '.extremefax.com');
}

if(CookiesManager.getCookie('gw_afn')) {

    CookiesManager.setCookie('gw_afn_to_offer_tests', CookiesManager.getCookie('gw_afn'), '', '/', '.extremefax.com');

    var hasAfnCookie = true;
}

var bmid = GetParamsManager.is_set('bmid');

if( bmid == 'CJZLKR0808_01') {
    CookiesManager.setCookie('trial30', 'true','','/','.extremefax.com');
}

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);
}
                
/* begin GW-536 */

function getProductionTag(url) {
    var _productTags = {
        '/fax/default.asp'                            : 'fax',
        '/fax/emailfax.asp'                           : 'fax',
        '/office/business-phone-service.html'         : 'office',
        '/office/business-voip-phone.html'            : 'office',
        '/office/index.html'                          : 'office',
        '/office/internet-business-phone-system.html' : 'office',
        '/office/online-business-phone-system.html'   : 'office',
        '/office/phone-system.html'                   : 'office',
        '/office/small-business-phone-system.html'    : 'office',
        '/office/virtual-business-phone-service.html' : 'office',
        '/office/virtual-business-phone-system.html'  : 'office',
        '/office/virtual-pbx-phone-system.html'       : 'office',
        '/business-toll-free.dhtml'                  : 'online',
        '/features/real-time-control/overview.html'  : 'online',
        '/lp/800-business-number.asp'                : 'online',
        '/lp/800numbers.asp'                         : 'online',
        '/lp/800numbers-yh-a.asp'                    : 'online',
        '/lp/800service.asp'                         : 'online',
        '/lp/866-business-number.asp'                : 'online',
        '/lp/877-business-number.asp'                : 'online',
        '/lp/auto-attendant.asp'                     : 'online',
        '/lp/call-forwarding.asp'                    : 'online',
        '/lp/callscreening.asp'                      : 'online',
        '/lp/call-screening.asp'                     : 'online',
        '/lp/digitalline-voip.html'                  : 'online',
        '/lp/digitalline-voip-home.html'             : 'online',
        '/lp/local-numbers.asp'                      : 'online',
        '/lp/small-business-phone.html'              : 'online',
        '/lp/toll-free-numbers.asp'                  : 'online',
        '/lp/toll-free-numbers-yh-a.asp'             : 'online',
        '/lp/unified-communications.asp'             : 'online',
        '/lp/vanitynumber.asp'                       : 'online',
        '/lp/virtual-pbx.asp'                        : 'online',
        '/lp/virtualphonenumber.asp'                 : 'online',
        '/lp/virtual-phone-service.html'             : 'online',
        '/lp/virtual-phone-system.html'              : 'online',
        '/lp/voicemail.asp'                          : 'online'
    };

    var _regex = new RegExp('^\/features\/local-numbers\/area-code-(201|202|203|205|206|208|209|210|212|213|214|216|217|218|219|224|225|228|229|231|234|239|240|248|251|252|253|254|256|260|262|267|269|270|276|281|301|302|303|304|305|307|309|310|312|313|314|315|316|317|318|321|323|325|330|334|336|337|339|347|352|360|361|386|401|402|404|405|406|407|408|409|410|412|413|414|415|417|419|423|424|425|432|434|435|440|443|469|478|479|480|484|501|502|503|504|505|507|508|509|510|512|513|516|517|518|520|530|540|541|559|561|562|567|570|571|573|575|580|585|586|601|603|605|606|607|608|609|610|612|614|615|616|617|618|619|620|623|626|630|631|636|646|650|651|661|662|678|682|701|702|703|704|706|707|708|712|713|714|715|716|717|718|719|720|724|727|731|732|734|740|754|757|760|763|765|769|770|772|773|775|785|786|801|802|803|804|805|806|810|812|813|814|815|816|817|818|828|830|831|832|843|845|847|850|856|858|859|860|862|863|864|865|870|901|903|904|906|908|909|913|914|915|916|918|919|920|925|928|936|937|940|949|951|952|954|956|970|971|973|979|989)\.html', 'i');

    if (typeof _productTags[url] == 'string') {
        return _productTags[url];
    } else if (_regex.test(url)) {
        return 'online';
    } else {
        return false;
    }
}

var _productTag = getProductionTag(window.location.pathname);

//if(ProductTags[pathname])
if(_productTag && !CookiesManager.getCookie('product_tags')) {
    CookiesManager.setCookie('product_tags', _productTag, 30,'/','.extremefax.com');
}


(function(){
    // gw-4294
    var today = new Date();
    
    if (CookiesManager.getCookie('gw_new_visitor') == null) {
        CookiesManager.setCookie('gw_new_visitor', today.toString() , 30, '/', '.extremefax.com');
    } 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, '/', '.extremefax.com');
        }
    }
})();

