var gYdlAttrDtcCfg = [{"name":"yl","dt":"QUERYSTRING","pa":"yodleLocal","sa":null,"dk":"yl7","dkv":null},{"name":"paid","dt":"QUERYSTRING","pa":"paid","sa":null,"dk":"provider","dkv":null},{"name":"unpaid","dt":"URL","pa":"unpaid","sa":null,"dk":null,"dkv":null}];

var ydlVisitTypeCookieTTL = 14; // days
var ydlVisitTypeCookieName = 'vt';
var ydlPUT = 'p';
var ydlUUT = 'u';

function matchURL(detectionKey) {
	if(detectionKey == null) return true;
	var urlParts = window.location.pathname.split('/');
	if(urlParts && urlParts.length > 0) {
		if(urlParts[1] == detectionKey) return true;
	}
	return false;
}

function matchQueryString(detectionKey, detectionKeyValue) {
	if(detectionKey == null) return true;
	var queryString = window.location.search;
	if(queryString && queryString.length > 0) {
		queryString = queryString.substr(1);
		var pairs = queryString.split('&');
		if(pairs && pairs.length > 0) {
			for(var i=0; i<pairs.length; i++) {
				var keyVal = pairs[i].split('=');
				if(keyVal && keyVal.length == 2) {
					if(keyVal[0] == detectionKey) {
						if(detectionKeyValue == null) return true;
						if(keyVal[1] == detectionKeyValue) return true;
					}
				}
			}
		}
	}
	return false;
}


function createCookie(name,value,days,path,domain,secure) {
	var cookie_string = name + "=" + escape(value);
	if(days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		cookie_string += "; expires="+date.toGMTString();
	}
	if(path)   cookie_string += "; path=" + escape ( path );
	if(domain) cookie_string += "; domain=" + escape ( domain );
	if(secure) cookie_string += "; secure";
	document.cookie = cookie_string;
}


function readCookie (name) {
  var results = document.cookie.match ( '(^|;) ?' + name + '=([^;]*)(;|$)' );
  if ( results ) return ( unescape ( results[2] ) );
  else return null;
}

function getBaseDomain(){
	var domainParts = document.domain.split(/\./);
	if(domainParts.length > 1) {
	    return(domainParts[domainParts.length-2] + "." +  domainParts[domainParts.length-1]);
	} else {
	    return(document.domain);
	}
}

function detectVisitType() {
	var matched = matchQueryString('provider', null);
	if(matched) return ydlPUT;
	return ydlUUT;
}


function detect(clientId, replaceAll, destNumber) {
	if((typeof(gYdlAttrDtcCfg) != "undefined") && (gYdlAttrDtcCfg != null)) {
		var attrCfg = { };
		var ydlOSCookieName = 'yodle.os.attrib';
		var cookieAttribBucket = readCookie(ydlOSCookieName);
		
		var matched = false;
		for(var i=0; i<gYdlAttrDtcCfg.length; i++) {
			var cfg = gYdlAttrDtcCfg[i];
			if(cfg.dt == 'QUERYSTRING') matched = matchQueryString(cfg.dk, cfg.dkv);
			else if(cfg.dt == 'URL') matched = matchURL(cfg.dk);
			if(matched) {
				attrCfg = cfg;
				break;
			}
		}
		
		if(matched) {
			if(cookieAttribBucket == null || (cookieAttribBucket == 'unpaid' && attrCfg.name != 'unpaid')) {
				createCookie(ydlOSCookieName, attrCfg.name, 14, '/', '.' + getBaseDomain());
			} else {
				attrCfg.name = cookieAttribBucket;
				attrCfg = setAttribsFromBucket(attrCfg.name, attrCfg);			
			}
		} else {
			if(cookieAttribBucket != null) {
				attrCfg.name = cookieAttribBucket;
				attrCfg = setAttribsFromBucket(attrCfg.name, attrCfg);	
			}
		}
		
		if(attrCfg.name != null && (typeof(clientId) != "undefined")) 
			getDataFromServer('OSPhnNumScriptLoad', 'http://labs.natpal.com/onesite/phonenumbers', clientId, attrCfg.name, attrCfg.dkv, replaceAll, destNumber);
	}
}

function setAttribsFromBucket(bucket, defaults) {
	var cfg = findCfgByName(bucket);
	if(cfg != null) {
		return cfg;
	}
	else {
		return defaults;
	}
}

function findCfgByName(name) {
	for(var i=0; i<gYdlAttrDtcCfg.length; i++) {
		var cfg = gYdlAttrDtcCfg[i];
		if(cfg.name == name) return cfg; 
	}
	return null;
}

function getDataFromServer(id, url, clientId, attribBucket, attrValue, replaceAll, destNumber) {
	var oScript = null;

	// Fetch the element pointed to by the id. If it exists, we destroy it so we can create a new one.
	oScript = document.getElementById(id);

	// Point at the script tag, if it exists
	var head = document.getElementsByTagName("head").item(0);
	// Destroy the tag, if it exists
	if (oScript) {
		// Destroy object
		head.removeChild(oScript);
	}
	// Create the new script tag
	oScript = document.createElement("script");

	url += '?clientId=' + clientId + '&bucket=' + attribBucket;
	if(attrValue != null) url += '&val=' + attrValue;
	url += '&all=' + replaceAll;
	if(destNumber != null) url += '&destNumber=' + destNumber;
	
	// Setup the src attribute of the script tag
	oScript.setAttribute("src", url);

	// Set the id attribute of the script tag
	oScript.setAttribute("id",id);

	// Create the new script tag which causes the proxy to be called
	head.appendChild(oScript);
	// Asynchronous script tag properties -- a proprietary IE "feature"
	if (oScript.readyState) { // IE
		if (oScript.readyState == "loaded") {
			oScript.onreadystatechange = null;
		} else {
			oScript.onreadystatechange = function CheckAgain() { if (oScript.readyState == "loaded") { oScript.onreadystatechange = null; } };
		}
	}
}

function replaceTextInDoc(node, regExp, newText) {
    if(!node) return;
    
    if(node.nodeType && (node.nodeType == 3) && (node.parentNode.nodeName !== 'SCRIPT')) /*Node.TEXT_NODE*/ {
    	if(regExp.test(node.nodeValue)) {
    		node.nodeValue = node.nodeValue.replace(regExp, newText);
            return;
        }
    }

    for(var child = node.firstChild; child != null; child = child.nextSibling) {
            replaceTextInDoc(child, regExp, newText);
    }
}

function swapPhoneNumbers(newNumbers) {
	if(newNumbers != null && (typeof(gYdlCTCNumbers) != "undefined")) {
		for(var numberType in gYdlCTCNumbers) {
			var newNumber = newNumbers[numberType];
			if(newNumber && newNumber.length>=10) 
				//swapPhoneNumber(gYdlCTCNumbers[numberType], formatPhoneNumber(newNumber));
				swapPhoneNumber(numberType, gYdlCTCNumbers[numberType], formatPhoneNumber(newNumber));
		}
	}
}

function swapPhoneNumber(id, oldNumber, newNumber) {
	var spans = document.getElementsByTagName('span');
	if(typeof(spans) == 'undefined' || typeof(spans[0]) == 'undefined' || spans == null) {
		addLoadEvent(function() {swapPhoneNumber(id, oldNumber, newNumber);} );
		return;
	}

	var re = new RegExp(oldNumber, 'g');
	for(var i=0; i<spans.length; i++) {
		if(spans[i].id == id) spans[i].innerHTML = spans[i].innerHTML.replace(re, newNumber);
	}
	
	document.title = document.title.replace(re, newNumber);
}

function swapAllPhoneNumbers(newNumbers, oldNumber) {
	if(newNumbers != null) {
		var newNumber = newNumbers['default'];
		if(newNumber == null || typeof(newNumber) == 'undefined') {
			for(var numberType in newNumbers) {
				newNumber = newNumbers[numberType];
				break;
			}
		}
		
		var re = new RegExp(oldNumber, 'g');
		replaceTextInDoc(document.body, re, formatPhoneNumber(newNumber));
		document.title = document.title.replace(re, formatPhoneNumber(newNumber));
	}
}

function formatPhoneNumber(number) {
	if(!number || number.length != 10) return number;
	return number.substr(0,3) + '-' + number.substr(3,3) + '-' +  number.substr(6,4);
}

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
	    window.onload = func;
	} else {
	   window.onload = function() {
	     if (oldonload) oldonload();
	     func();
	   }
	}
}
detect(30707, false, 'null');