// PATENT PENDING
function _vs_popup(url, wid, ht){
var win;
ht = ht || 600;
wid = wid || 650;
win = window.open(url, 'VSPOPUP', "toolbar=no,status=no,location=no,menubar=no,"+
"resizable=yes,scrollbars=yes,height=" + ht + ",width=" + wid, 'yes');
win.opener = self;
win.focus();
win.location = url;
}
var pat = '(\\(?)(\\d*)(\\d{3})((?:[\\s\\)\\.\\-]|%20)*)(\\d{3})((?:[\\s\\.\\-]|%20)*)(\\d{4})(\\d*)';
var apat = 'tel:' + pat;
var _vskw;
var _vsrkpd = {
number_regexp: new RegExp(pat),
anchor_number_regexp: new RegExp(apat),
dbg: document.URL.match(/\?.*_vsdebug/),
esc: function(txt){
if(typeof encodeURIComponent=="function"){
return encodeURIComponent(txt)
}else{
return escape(txt)
}
},
unesc: function(txt){
if(typeof decodeURIComponent=="function"){
return decodeURIComponent(txt)
}else{
return unescape(txt)
}
},
arg: function(p, v){
if( v ){
return p + '=' + this.esc(v) + ';';
}else{
return '';
}
},
'_debugtxt': '',
debug: function(m){
this._debugtxt = this._debugtxt + m + "\n";
},
alert: function(m){
if( this.dbg ){
if (typeof console != 'undefined' && typeof console.log == 'function') {
console.log(m);
} else {
alert(m);
}
}
},
set_cookie: function(name, val, exp){
var ck = name + "=" + this.esc( val ) + ";path=/";
if(exp){
var now = new Date();
exp = new Date( now.getTime() + (exp * 1000));
ck = ck + ";expires=" + exp.toGMTString();
}
document.cookie = ck;
},
get_cookie: function(n){
var c = document.cookie;
var s = c.indexOf( n + '=' );
if( s == -1 ) return null;
if( s && c.charAt(s-1) != ' ' ) return null;
var e = c.indexOf(';', s);
if( e == -1 ) e = c.length;
return this.unesc(c.substring( s + n.length + 1, e ));
},
get_number_data: function(){
var n = 'rkpd_' + vs_account_id;
var d = this.get_cookie(n);
var ignck = document.URL.match(/\?.*_vsignck/);
if( ! vs_account_id ){
// misconfigured. user did not set the account id
return ;
}
// get kw from cookie
var kw_cookie = 'kw_' + vs_account_id;
var prev_kw = this.get_cookie(kw_cookie);
var new_kw;
if (_vskw || '' != '') {
new_kw = _vskw || '';
// if we don't have a keyword cookie, or if the current keyword is
// different than the old one, set the cookie and re-fetch data
if ((!prev_kw) || (new_kw && new_kw != prev_kw)) {
d = null;
ignck = 1;
this.set_cookie(kw_cookie, new_kw, 86400 * 365);
}
}
if( d && !ignck ){
this.debug( "cookie[" + n + "]: " + d);
eval(d); // json-cookie
this.rewrite_document();
}else{
// fetch data
var url = "https://web.archive.org/web/20120819160454/http://phonewizard.milestoneinternet.com/euinc/getnumdata.js?"
+ this.arg('var', '_vsrkpd.d')
+ this.arg('acc', window.vs_account_id)
+ this.arg('cky', n)
+ this.arg('ign', (ignck ? 1 : 0))
+ this.arg('ref', document.referrer)
+ this.arg('url', document.URL);
if (typeof vs_ref_override != 'undefined' && vs_ref_override) url += this.arg('ref_ovrd', vs_ref_override);
// if the keyword is being overridden by _vskw, pass it
// if there's no keyword in the url but there was one in the cookie, pass it
if (_vskw)
url += this.arg('keyword', _vskw)
else if ((prev_kw) && (!new_kw))
url += this.arg('keyword', prev_kw);
this.debug( "no cookie[" + n + "] fetch: " + url);
document.write('');
// next script will run rewrite_document
}
},
rewrite_number: function(m, rltext, strip) {
// (, x, 111, ), 555, -, 1234, x
var numfull = '' + m[1] + m[2] + m[3] + m[4] + m[5] + m[6] + m[7] + m[8];
if( m[2] != '' || m[8] != '' ){
this.debug( "not a number: " + numfull );
return null;
}
var num = '' + m[3] + m[5] + m[7];
var pd = this.d;
var rw,lk,na,nb,nc,rwtxt;
var nr = pd.length;
var i;
for(i=0; i " + rw);
}else{
pd[i].ctcp = 1; // no number, force ctc
this.debug("rewriting: " + numfull + " => click-to-call");
}
rwtxt = '';
if (rltext && pd[i].txtl) rwtxt += pd[i].txtl;
if (rw) rwtxt += rw;
if (rltext && pd[i].txtr) rwtxt += pd[i].txtr;
if( ! rwtxt ){
// provide default text if none
rwtxt = 'Click-To-Call';
}
if( pd[i].ctcp ){
lk = 'https://web.archive.org/web/20120819160454/http://phonewizard.milestoneinternet.com/euinc/ctc/callformpop?cmp=' + pd[i].cmp;
}
return { text: rwtxt, href: lk, cmp: pd[i].cmp };
}
}
return null;
},
rewrite_anchor_node: function(node) {
var txt = node.href;
var m = this.anchor_number_regexp.exec(txt);
if (!m) return; // no match
var rw = this.rewrite_number(m, false, true);
if (!rw) return; // number unchanged
node.href = 'tel:' + this.esc(rw.text);
},
rewrite_text_node: function(node){
var txt = node.nodeValue;
var m = this.number_regexp.exec(txt);
if( !m ) return; // no match
var rw = this.rewrite_number(m, true, false);
// split into 3 nodes => text, number, text
var n2 = node.splitText( m.index );
var n3 = n2.splitText( m[0].length );
if( ! rw ) return; // number unchanged
n2.nodeValue = rw.text;
if( ! rw.href ) return; // no ctc
var a = document.createElement('A');
node.parentNode.replaceChild(a, n2);
a.appendChild(n2);
a.href = '#';
a.className = 'vsctcnumber';
if( this.dbg ){
a.title = 'cmp:' + rw.cmp;
}else{
a.title = 'Click To Call';
}
a.onclick = function(){ _vs_popup( rw.href, 300,200 ); };
// ...
},
replace_all_numbers: function(node){
if( ! node ) return;
// skip certain types?
if( node.nodeName == 'SCRIPT' || node.nodeName == 'STYLE' ) return;
// handle special spans?
if( node.className == 'vsnotnumber' ) return;
// rewrite this node text
if( node.nodeName == '#text' ){
this.rewrite_text_node( node );
}
// rewrite tags, possibly added by mobile devices
if (node.nodeName == 'A') {
this.rewrite_anchor_node(node);
}
// walk children nodes
var nn, i;
for(i=0; i