// JavaScript Document
function findAndReplace(searchText, replacement, searchNode) {
    if (!searchText || typeof replacement === 'undefined') {
        // Throw error here if you want...
        return;
    }
    var regex = typeof searchText === 'string' ?
                new RegExp(searchText, 'g') : searchText,
        childNodes = (searchNode || document.body).childNodes,
        cnLength = childNodes.length,
        excludes = 'html,head,style,title,link,meta,script,object,iframe';
    while (cnLength--) {
        var currentNode = childNodes[cnLength];
        if (currentNode.nodeType === 1 &&
            (excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
            arguments.callee(searchText, replacement, currentNode);
        }
        if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) {
            continue;
        }
        var parent = currentNode.parentNode || currentNode.parent,
            frag = (function(){
                var html = currentNode.data.replace(regex, replacement),
                    wrap = document.createElement('div'),
                    frag = document.createDocumentFragment();
                wrap.innerHTML = html;
                while (wrap.firstChild) {
                    frag.appendChild(wrap.firstChild);
                }
                return frag;
            })();
        parent.insertBefore(frag, currentNode);
        parent.removeChild(currentNode);
    }
}

function IsNumeric(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	
	
	for (i = 0; i < sText.length && IsNumber == true; i++) { 
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}



function replaceAll (numToInsert,numberFormat,numToExclude){
	var fullExpression = "";
	var iteration=new Array();
	
	iteration[0] = addExclude("\\(\\d{3}\\).\\d{3}.\\d{4}",numToExclude);
	iteration[1] = addExclude("\\d{3}.\\d{3}.\\d{4}",numToExclude);
	iteration[2] = addExclude("\\d{3}.\\d{7}",numToExclude);
	iteration[3] = addExclude("\\(\\d{3}\\)\\d{3}.\\d{4}",numToExclude);
	iteration[4] = addExclude("\\(\\d{3}\\)\\d{7}",numToExclude);
	iteration[5] = addExclude("\\(\\d{3}\\).\\d{7}",numToExclude);	
	iteration[6] = addExclude("\\(.\\d{3}.\\).\\d{7}",numToExclude);
	iteration[7] = addExclude("\\(.\\d{3}.\\)\\d{7}",numToExclude);
	iteration[8] = addExclude("\\(.\\d{3}.\\)\\d{3}.\\d{4}",numToExclude);
	iteration[9] = addExclude("\\(.\\d{3}.\\).\\d{3}.\\d{4}",numToExclude);

	var iCount = iteration.length - 1;
	for (i=0;i<=iCount;i++){
		if (i == 0){
			fullExpression = iteration[i];			
		}else{
			fullExpression = fullExpression + "|" + iteration[i];
		}
	}
	
	input = new RegExp(fullExpression,"gi"); 
	if (numberFormat){
		output = formatnumber(numToInsert,numberFormat);
	}else{
		output = numToInsert;		
	}
// 	if (numToExclude){
//	 	var numCheck = numToExclude.search(",");
// 		if (numCheck != -1){
// 			excludeSplit = numToExclude.split(",");
//			var eCount = excludeSplit.length - 1;
//			for (e=0;e<=eCount;e++){
// 				replaceSingleRegex(trim(excludeSplit[e]),'xxxyyyzzz'+e);	
// 			}
// 		}else{
// 			replaceSingleRegex(numToExclude,'xxxyyyzzz0');	
// 		}
// 	}
 	
	document.body.innerHTML = document.body.innerHTML.replace(input,output); 

// 	if (numToExclude){
//	 	var numCheck = numToExclude.search(",");
// 		if (numCheck != -1){
// 			excludeSplit = numToExclude.split(",");
//			var eCount = excludeSplit.length - 1;
//			for (e=0;e<=eCount;e++){
// 				replaceSingle('xxxyyyzzz'+e,formatnumber(trim(excludeSplit[e]),numberFormat));	
// 			}
// 		}else{
// 			replaceSingle('xxxyyyzzz0',formatnumber(numToExclude,numberFormat));	
// 		}
// 	}
}

function replaceSingle (numToFind, numToInsert){
	fullExpression = regexEscape(numToFind);
	input = new RegExp(fullExpression,"gi"); 
	output = numToInsert;
	document.body.innerHTML = document.body.innerHTML.replace(input,output); 
}

function replaceSingleRegex (numToFindS, numToInsertS){
	var fullExpressionS = "";
	var iterationS=new Array();
	var areaCode = numToFindS.substring(0,3);
	var exchange = numToFindS.substring(3,6);
	var remain = numToFindS.substring(6,10);
	var exchangeCombo = exchange + remain;
	//alert (areaCode);
	//alert (exchange);
	//alert (remain);
	//alert (exchangeCombo);
	iterationS[0] = "\\("+areaCode+"\\)."+exchange+"."+remain;
	iterationS[1] = areaCode+"."+exchange+"."+remain;
	iterationS[2] = areaCode+"."+exchangeCombo;
	iterationS[3] = "\\("+areaCode+"\\)"+exchange+"."+remain;
	iterationS[4] = "\\("+areaCode+"\\)"+exchangeCombo;
	iterationS[5] = "\\("+areaCode+"\\)."+exchangeCombo;	
	iterationS[6] = "\\(."+areaCode+".\\)."+exchangeCombo;
	iterationS[7] = "\\(."+areaCode+".\\)"+exchangeCombo;
	iterationS[8] = "\\(."+areaCode+".\\)"+exchange+"."+remain;
	iterationS[9] = "\\(."+areaCode+".\\)."+exchange+"."+remain;

	var iCountS = iterationS.length - 1;
	for (i=0;i<=iCountS;i++){
		if (i == 0){
			fullExpressionS = iterationS[i];			
		}else{
			fullExpressionS = fullExpressionS + "|" + iterationS[i];
		}
	}
	//alert(fullExpression);
	inputS = new RegExp(fullExpressionS,"gi"); 
	outputS = numToInsertS;
//	if (numToExclude){
//		replaceAll('xxxyyyxxx1');	
//	}
	document.body.innerHTML = document.body.innerHTML.replace(inputS,outputS); 
}

function regexEscape (safesearch){
	bs=String.fromCharCode(92);  
	unsafe=bs+".+*?[^]$(){}=!<>¦:";  
	for (i=0;i<unsafe.length;++i){  
		safesearch=safesearch.replace(new RegExp("\\"+unsafe.charAt(i),"g"),bs+unsafe.charAt(i)); 
	}
	return safesearch;
}

function getURLVariable( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function addExclude (incomingRegex, numExclude){
	//alert(incomingRegex);
	//alert(numExclude);
	var outgoingRegex = "";
	var preEx = "(?!";
	var postEx = "\\b)";
	
	if (numExclude){
		excludeSplit = numExclude.split(",");
		
		var eCount = excludeSplit.length - 1;
	
		for (e=0;e<=eCount;e++){
			exNumber = trim(excludeSplit[e]);
			var areaCode = exNumber.substring(0,3);
			var exchange = exNumber.substring(3,6);
			var remain = exNumber.substring(6,10);
			var exchangeCombo = exchange + remain;
			switch(incomingRegex){
				case "\\(\\d{3}\\).\\d{3}.\\d{4}":
					outgoingRegex = outgoingRegex + preEx+"\\("+areaCode+"\\)."+exchange+"."+remain+postEx;
					break;
				case "\\d{3}.\\d{3}.\\d{4}":
					outgoingRegex = outgoingRegex + preEx+areaCode+"."+exchange+"."+remain+postEx;
					break;
				case "\\d{3}.\\d{7}":
					outgoingRegex = outgoingRegex + preEx+areaCode+"."+exchangeCombo+postEx;
					break;
				case "\\(\\d{3}\\)\\d{3}.\\d{4}":
					outgoingRegex = outgoingRegex + preEx+"\\("+areaCode+"\\)"+exchange+"."+remain+postEx;
					break;	
				case "\\(\\d{3}\\)\\d{7}":
					outgoingRegex = outgoingRegex + preEx+"\\("+areaCode+"\\)"+exchangeCombo+postEx;
					break;
				case "\\(\\d{3}\\).\\d{7}":
					outgoingRegex = outgoingRegex + preEx+"\\("+areaCode+"\\)."+exchangeCombo+postEx;
					break;
				case "\\(.\\d{3}.\\).\\d{7}":
					outgoingRegex = outgoingRegex + preEx+"\\(."+areaCode+".\\)."+exchangeCombo+postEx;
					break;
				case "\\(.\\d{3}.\\)\\d{7}":
					outgoingRegex = outgoingRegex + preEx+"\\(."+areaCode+".\\)"+exchangeCombo+postEx;
					break;
				case "\\(.\\d{3}.\\)\\d{3}.\\d{4}":
					outgoingRegex = outgoingRegex + preEx+"\\(."+areaCode+".\\)"+exchange+"."+remain+postEx;
					break;
				case "\\(.\\d{3}.\\).\\d{3}.\\d{4}":
					outgoingRegex = outgoingRegex + preEx+"\\(."+areaCode+".\\)."+exchange+"."+remain+postEx;
					break;
				default: outgoingRegex="";
			}
		}
	}
	return(outgoingRegex+incomingRegex);
}

function mm_action_replace () {
	if (typeof customer_number_format == 'undefined')
		customer_number_format='2';
	if (typeof exclude_numbers == 'undefined')
		exclude_numbers='';
	if (tnarray[0].length==10)
		replaceAll(tnarray[0],customer_number_format,exclude_numbers);
}
