/*
 * Used to capitalize the first letter of each word
 * in a string.
 */
String.prototype.toProperCase = function() {
    return this.toLowerCase().replace(/\w+/g,function(s){
        return s.charAt(0).toUpperCase() + s.substr(1);
    })
}

//      
// Create an XMLHttpRequest object for an async operation.
//      
var g_xmlHttp = null; 
function getXmlHttpObjectEx()
{           
    var objXMLHttp = null;
        
    if(window.XMLHttpRequest)
    {   
        objXMLHttp = new XMLHttpRequest();
    }       
    else if(window.ActiveXObject)
    {   
        objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }       
        
    return objXMLHttp;
}

function display_errors(form_name, errors)
{
    // see if we already have an error div
    var el_div = document.getElementById("errors");
    if(el_div == null)
    {
        // create the div
        el_div = document.createElement("div");
        el_div.setAttribute("id", "errors");
        
        // add it right before the form
        var el_form = document.getElementById(form_name);
        el_form.parentNode.insertBefore(el_div, el_form);
    }
    
    // create the html code for the error(s)
    var str = "<em>Please fix the following errors and resubmit:</em>";
    str += "<p>" + errors + "</p>";
    
    // now display the errors
    el_div.innerHTML = str;
}

function validate_data_presence(form, required)
{
    var errors = "";
    for(var i=0; i<required.length; i++)
    {
        if(!form[required[i]] || form[required[i]].value == "")
        {
            errors += "<img src=\"/images/error-x-mark.gif\" />".required[i].replace(/_/g, " ").toProperCase() + " is required.<br />";
        }
    }
    
    return errors;
}

function validate_zip(number)
{
    var errors = "";
    
    // bail out if we don't have a number
    if(number == null || number.value == "")
    {
        return errors;
    }
    
    // make sure we have exactly 5 digits
    var reg = new RegExp(/(^\d{5}$|^[A-Za-z]\d[A-Za-z]\d[A-Za-z]\d$)/);
    if(!reg.test(number.value))
    {
        errors = "Invalid zip code.<br />";
    }
    
    return errors;
}

function validate_emails(email_orig, email_confirm, errors)
{
    var errors = "";
    var have_orig = email_orig && (email_orig.value != "");
    var have_confirm = email_confirm && (email_confirm.value != "");
    var valid = true;
    
    // make sure we have the emails
    if(have_orig && !validate_email_format(email_orig.value))
    {
        errors += "Email is invalid<br />";
        valid = false;
    }
    
    // make sure we have the emails
    if(have_confirm && !validate_email_format(email_confirm.value))
    {
        errors += "Confirmation email is invalid.<br />";
        valid = false;
    }
    
    // make sure both emails are the same
    if(have_orig && have_confirm && valid && (email_orig.value != email_confirm.value))
    {
        errors += "Emails do not match.<br />";
    }
    
    return errors;
}

function validate_email_format(email)
{
    var reg = new RegExp(/(^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,3})$)/);
    return reg.test(email);
}

/*
 * Used for the automatic telephone entry system.
 */
function num_entered(my_id, next_id, num_to_enter)
{
    // get the box
    var el = document.getElementById(my_id);
    
    // make sure a number was entered
    while(isNaN(el.value) || (el.value.indexOf(" ") != -1))
    {
        // remove the last character entered
        el.value = el.value.substring(0, el.value.length - 1);
    }
    
    // if all digits are entered, we're done
    if((el.value.length == num_to_enter) && (next_id))
    {
        document.getElementById(next_id).focus();
    }
}

function textarea_length(my_id, limit)
{
	var el = document.getElementById(my_id);
	
	if ( el.value.length > limit ) el.value = el.value.substring(0, limit );
}

/*
 * Used for the action take from  number entered on index page.
 */
 


function index_whereto(form,button)
{
	

 var e1 = document.getElementById("search2");
 var s_num = e1.value;
 
 var tfprefix = false;

 

	

 
var num1 = document.getElementById("phone_1");
var num2 = document.getElementById("phone_2");
var num3 = document.getElementById("phone_3");

if (num1.value != "")
{
	s_num = num1.value + '' + num2.value + '' + num3.value;
}



var reg = /[^A-Za-z0-9]/g; 
s_num =  s_num.replace(reg, '');
var numlen = s_num.length;

var prefix = s_num.substr(0,3);

if(button == 'default')
{
//test from numbers only or chars
	/*
	if (s_num.match(/^\d+$/)){
		//numbers only 
		
		if (s_num[0] == '1')
		{
			s_num = s_num.substr(1);
			numlen--;
			prefix = s_num.substr(0,3);
		}
		
 		switch(numlen){
 			case 7:
 			case 10:
 				//let do 7 numbers first
 				if(numlen == 7 ){
 					//add prefix 800
 					s_num = '800'+s_num;
 					
					form.method = 'POST';
 					form.action='toll-free-reverse-lookup/'+s_num;
 				}
 				
 				//10 numbers
 				//800,888,877,866
 				if(numlen == 10 ){
 		
 					switch(prefix){
 						case '800':
 						case '888':
 						case '877':
 						case '866':
							form.method = 'POST';
 							form.action='toll-free-reverse-lookup/'+s_num;
 					
 					break;
 				
 					default:
						form.action="search-for-available-toll-free-vanity-numbers.html";
					break;
					
 					}//end switch
				}//end ==10
 				
 				num1.value = s_num.substr(0,3);
 				num2.value = s_num.substr(3,3);
 				num3.value = s_num.substr(6);
 				
 			break;
 			
 			default:
 			
 				form.action="search-for-available-toll-free-vanity-numbers.html";
 			break;
		}//ens switch numlen
        
 	
 		
	}
	else
	{
		form.method="GET";	
		form.action="search-for-available-toll-free-vanity-numbers.html";
		form.submit();
		 
	}
    */
    	form.method="GET";	
		form.action="search-for-available-toll-free-vanity-numbers.html";
 		form.submit();
}
else if (button == 'available')
{
	form.action="search-for-available-toll-free-vanity-numbers.html";
	form.submit();
}
else // i.e., a reverse lookup
{
	if(numlen < 7)
	{
		alert("You must input at least 7 numbers or letters for a reverse lookup.");
		return;
	}
	
	s_num = alphareplace(s_num);
	
	// Remove a leading 1, if present and consider the prefix to be the 3 digits after the 1
	while (s_num[0] == '1')
		{
			s_num = s_num.substr(1);
			numlen--;
			prefix = s_num.substr(0,3);
		}

	
	prefix = alphareplace(prefix);

	switch(prefix){
 						case '800':
 						case '888':
 						case '877':
 						case '866':
 							tfprefix = true;
 					
 					break;
						default:
							tfprefix = false;
	}

	if(numlen < 10 || tfprefix == false)
	{
		s_num = '800'+s_num;
	}
	
	// once the prefix is applied, only the first 10 digits are valid.
	s_num = s_num.substr(0,10);

	num1.value = s_num.substr(0,3);
 	num2.value = s_num.substr(3,3);
 	num3.value = s_num.substr(6);
	form.method = 'POST';
	form.action='toll-free-reverse-lookup/'+s_num;
	form.submit();
	
}

	    
}//end function


// Function to set default when enter is pressed
function submitenter(myfield,e)
{
var keycode;
if (window.event) keycode = window.event.keyCode;
else if (e) keycode = e.which;
else return true;

if (keycode == 13)
   {
   index_whereto(myfield.form,'default');
   return false;
   }
else
   return true;
}



function alphareplace(number)
{
	number = number.replace(/a/gi,'2');
	number = number.replace(/b/gi,'2');
	number = number.replace(/c/gi,'2');
	number = number.replace(/d/gi,'3');
	number = number.replace(/e/gi,'3');
	number = number.replace(/f/gi,'3');
	number = number.replace(/g/gi,'4');
	number = number.replace(/h/gi,'4');
	number = number.replace(/i/gi,'4');
	number = number.replace(/j/gi,'5');
	number = number.replace(/k/gi,'5');
	number = number.replace(/l/gi,'5');
	number = number.replace(/m/gi,'6');
	number = number.replace(/n/gi,'6');
	number = number.replace(/o/gi,'6');
	number = number.replace(/p/gi,'7');
	number = number.replace(/q/gi,'7');
	number = number.replace(/r/gi,'7');
	number = number.replace(/s/gi,'7');
	number = number.replace(/t/gi,'8');
	number = number.replace(/u/gi,'8');
	number = number.replace(/v/gi,'8');
	number = number.replace(/w/gi,'9');
	number = number.replace(/x/gi,'9');
	number = number.replace(/y/gi,'9');
	number = number.replace(/z/gi,'9');

	return number;
}
