/*
 * Asynchronously grab the search results.
 */
function full_search(vanity, prefixes, category, industry, orderBy, displayMode, parentUri, seeAll, page, exact_search, exact_prefix)
{
	
	// build the URL for the async call
    var url = build_url(vanity, industry, category, prefixes, "full", orderBy, displayMode, parentUri, seeAll, page, exact_search, exact_prefix);
    // show the waiting message
    show_waiting(false);
    	
    // store these search items
    g_Term = (category != "generic_8XX") ? vanity : "8X";
    g_Category = category;
    g_Areas = prefixes;
    g_orderBy = orderBy;
    g_displayMode = displayMode;
    g_parentUri = parentUri;
    g_seeAll = seeAll;
	g_page = page;
	g_exact_search = exact_search;
	g_exact_prefix = exact_prefix;
    	
    // send the request asynchronously
    g_xmlHttp = getXmlHttpObjectEx();
    g_xmlHttp.onreadystatechange = search_results;
    g_xmlHttp.open("GET", url, true);
    g_xmlHttp.send(null);
}

function full_search_split(vanity, prefixes, category, industry, orderBy, displayMode, parentUri, seeAll, page, split)
{
	
	// build the URL for the async call
    var url = build_url(vanity, industry, category, prefixes, "full", orderBy, displayMode, parentUri, seeAll, page, '', '');
	url += "&split=" + split;
		
    // show the waiting message
    show_waiting(false);
    
    // store these search items
    g_Term = (category != "generic_8XX") ? vanity : "8X";
    g_Category = category;
    g_Areas = prefixes;
    g_orderBy = orderBy;
    g_displayMode = displayMode;
    g_parentUri = parentUri;
    g_seeAll = seeAll;
	g_page = page;
    
	// alert(url);
	
    // send the request asynchronously
    g_xmlHttp = getXmlHttpObjectEx();
    g_xmlHttp.onreadystatechange = search_results;
    g_xmlHttp.open("GET", url, true);
    g_xmlHttp.send(null);
}

/*
 * Handle the returned results from the async call.
 */
var g_FullSearchTimer = null;
function search_results()
{
    if(g_xmlHttp.readyState == 4 || g_xmlHttp.readyState == "complete")
    {
        // figure out if we're still waiting for a response
        var waiting = g_xmlHttp.responseText.indexOf("--waiting--") != -1;
        
        // put up any results if it's our first try or we're done
        if(g_xmlHttp.responseText && ((g_FullSearchTimer == null) || !waiting))
        {
            document.getElementById("async_area").innerHTML = g_xmlHttp.responseText;
        
            // stop the waiting timer
            if(!waiting)
            {
                clearInterval(g_WaitTimer);
                g_WaitTimer = null;
        
                // now remove the waiting message all together
                if (document.getElementById("waiting") != null) document.getElementById("waiting").style.display = "none";
            }
        }
        
        // either clear the full search timer or do it again
        g_FullSearchTimer = waiting ? setTimeout("full_async_search()", 1000) : null;
    }
}

/*
 * Do a search every time they enter any character
 * in the keyword box.
 */
var FULL_WAIT_TIME = 1000;  // 3 seconds to wait
var g_StartFullTimer = null;
var g_xmlHttpActive = null;
var g_Term = null;
var g_Category = null;
var g_Areas = null;
var g_orderBy = null;
var g_displayMode = null;
var g_parentUri = null;
var g_seeAll = null;
var g_page = null;
var g_exact_search = null;
var g_exact_prefix = null;

function active_search(term, form, do_full)
{
    // if not indicated, we're doing a full search after some time
    if(do_full == null) do_full = true;
    
    // must have 3 or more, no industry, and a vanity selection
    if((term.length > 2) && (form.industry.value == 0) && form.vanity_premium)
    {
        //
        // Bit of a Hack:
        // If do_full is false, it's coming from pricing -
        // don't reset category.
        //
        if(do_full)
        {
            // always cancel any pending full search
            if(g_FullSearchTimer)
            {
                clearTimeout(g_FullSearchTimer);
                g_FullSearchTimer = null;
            }
        
            var el = document.getElementById("vanity_premium");
            el.checked = true;
        }
        
        // create an array for each area code wanted
        var areas = new Array();
        var i = 0;
        var tmp = document.getElementById("area" + i);
        while(tmp)
        {
            if(tmp.checked == true)
            {
                areas[i] = tmp.value;
            }
            
            // get the next one
            i++;
            tmp = document.getElementById("area" + i);
        }
        
        // figure out what the radio button is set to
        var cat_value = "vanity_premium";
        for(var j=0; j<form.num_category.length; j++)
        {
            if(form.num_category[j].checked == true)
            {
                cat_value = form.num_category[j].value;
            }
        }
        
        // build the URL for the async call
        var url = build_url(term, "0", cat_value, areas, do_full ? "active" : "price");
        
        // show the waiting message
        if(do_full) show_waiting(true);
        
        // send the request asynchronously
        g_xmlHttpActive = getXmlHttpObjectEx();
        g_xmlHttpActive.onreadystatechange = active_results;
        g_xmlHttpActive.open("GET", url, true);
        g_xmlHttpActive.send(null);
        
        // start the timer to do full search
        g_Term = term;
        g_Category = "vanity_premium";
        g_Areas = areas;
        if(g_StartFullTimer)
        {
            clearTimeout(g_StartFullTimer);
        }
        if(do_full) g_StartFullTimer = setTimeout("full_async_search()", FULL_WAIT_TIME);
    }
}

function active_results()
{
    if(g_xmlHttpActive.readyState == 4 || g_xmlHttpActive.readyState == "complete")
    {   
        // just put the response in the async area
        document.getElementById("async_area").innerHTML = g_xmlHttpActive.responseText;
    }
}



/*
 * Bit of a hack to get parameters passed to the timer.
 */
function full_async_search()
{
    full_search(g_Term, g_Areas, g_Category, "0",g_orderBy,g_displayMode,g_parentUri,g_seeAll, g_page, g_exact_search, g_exact_prefix);
}

/*
 * Build the URL for an asynchronous search.
 */
function build_url(vanity, industry, category, prefix, type, orderBy, displayMode, parentUri, seeAll, page, exact_search, exact_prefix)
{
    // if the search type is generic 8XX, change the vanity
    if(category == "generic_8XX") vanity = "8X";
    // figure out the low and high price restrictions
    //var low_price = document.side_search.price_low.value;
    //var high_price = document.side_search.price_high.value;
	
	var hangovers = document.side_search.hangovers.value;

    var url = "search_async_gad.php?";
    url += "search_string=" + vanity;
    url += "&num_category=" + category;
    url += "&industry=" + industry;
    
    for(var i=0; i<prefix.length; i++)
    {
        url += "&prefix[]=" + prefix[i];
    }
	
	if (page == undefined || page <= 0) page = 1;
	else if (page == undefined) alert ("page is undefined");
    
    //url += "&search_type=" + type;
    //url += "&price_low=" + low_price;
    //url += "&price_high=" + high_price;
    url += "&orderBy=" + orderBy;
    url += "&displayMode=" + displayMode;
    url += "&parentUri=" + parentUri;
    url += "&seeAll=" + seeAll;
	url += "&search_page=" + page;
	url += "&exact_search=" + exact_search;
	url += "&exact_prefix=" + exact_prefix;
		
	// Add any filter information
	url += "&hangovers=" + hangovers;
	
	for(var i=1; i<=5; i++)
    {
        if (document.getElementById('number_type' + i).checked == true)
			url += "&number_type[]=" + document.getElementById('number_type' + i).value;
    }
    return url;
}

function industry_change(form)
{
    // change the type of search to premium vanity
    var el = document.getElementById("vanity_premium");
    el.checked = true;
    
    // now submit the form
    form.submit();
}

/*
 * Show the appropriate waiting message on the screen.
 */
var g_WaitTimer = null;
function show_waiting(more)
{
    if(!g_WaitTimer && document.getElementById("waiting") != null)
    {
        var spct = document.getElementById("spct").innerHTML;
        // make sure the message is appropriate inside			
        document.getElementById("waiting").innerHTML = "This may take several seconds. We're searching through " + spct + " numbers to find the top results for your request <span id='please_wait'>.</span>";
                    
        // display the searching menu if we're not already
        document.getElementById("waiting").style.display = "block";
        g_WaitTimer = setInterval("waiting()", 500);
    }
}

/*
 * A function that makes the periods keep going on a
 * waiting message.
 */
var g_Dots = 1;
var MAX_DOTS = 8;
function waiting()
{
    var el = document.getElementById("please_wait");
    if(el)
    {
        // increase the number of dots by one
        g_Dots++;
        
        if(g_Dots == MAX_DOTS + 1)
        {
            g_Dots = 1;
        }
        
        // create the dots string
        var str = "";
        for(var i=0; i<g_Dots; i++)
        {
            str += " . ";
        }
        
        // now make those dots visible
        el.innerHTML = str;
    }
}

/*
 * Update the price range display when a slider is moved.
 */
function slider_changed(e, ui)
{
    // get the upper and lower values
    var lower = $("#pricing").slider("value", 0);
    var higher = $("#pricing").slider("value", 1);
    
    // update the displayed price
    $("#range")[0].innerHTML = "$" + (Math.floor(lower)).toFixed(0) + " - $" + (Math.floor(higher)).toFixed(0) + " / month";
}

/*
 * Resubmit the form after a user stops moving one of the
 * slider handles.
 */
function slider_stopped(e, ui)
{
    // get the upper and lower values
    var lower = $("#pricing").slider("value", 0);
    var higher = $("#pricing").slider("value", 1);
    
    // get rid of the decimal places
    lower = (Math.floor(lower)).toFixed(0);
    higher = (Math.floor(higher)).toFixed(0);
    
    // update the form hidden prices
    //$("#price_low").val(lower);
    //$("#price_high").val(higher);
    
    // submit the form for a search
    active_search(document.side_search.search_string.value, document.side_search, false);
}

function changed_num_category(to_cat, nosubmit) {
    if(to_cat == "vanity_premium")    {
        
        // if vanity, all checkboxes enabled
        document.side_search.area0.disabled=false;
        document.side_search.area1.disabled=false;
        document.side_search.area2.disabled=false;
        document.side_search.area3.disabled=false;

        // if  vanity, all checkboxes active
        document.getElementById("800BoxContainer").className="tight";
        document.getElementById("866BoxContainer").className="tight";
        document.getElementById("877BoxContainer").className="tight";
        document.getElementById("888BoxContainer").className="tight";
        document.getElementById("855BoxContainer").className="tight";

        // if vanity, text input box enabled 
        document.side_search.search_string.disabled=false;
        document.getElementById("search_submit_button").disabled=false;

        // if vanity keyword not grey
       // document.getElementById("keywordContainer").className="tight";
                
        // if vanity, industry box enabled
        document.side_search.industry.disabled=false;

        // if vanity industry not grey
        // document.getElementById("industryContainer").className="tight";

        //disable showAll
        document.side_search.showAll.disabled=true;        
        
        
        //If switching TO vanity, reset orderBy to empty
        document.side_search.orderBy.value='';        

        // Example numbers change
        // document.getElementById("exampleNumbers").innerHTML = "800 - RISK - FREE<br>800 - CASH - NOW";
       
        //document.side_search.price_low.value = g_VANITY_PREMIUM_MIN;
        //document.side_search.price_high.value = g_VANITY_PREMIUM_MAX;
    }
    else if(to_cat == "num_premium")
    {
        // if premium numeric, all checkboxes enabled
        document.side_search.area0.disabled=false;
        document.side_search.area1.disabled=false;
        document.side_search.area2.disabled=false;
        document.side_search.area3.disabled=false;

        // if  premium numeric, all checkboxes active
        document.getElementById("800BoxContainer").className="tight";
        document.getElementById("866BoxContainer").className="tight";
        document.getElementById("877BoxContainer").className="tight";
        document.getElementById("888BoxContainer").className="tight";
        document.getElementById("855BoxContainer").className="tight";

        // if premium numeric, text box disabled        
        document.side_search.search_string.disabled=true;

        // if premium numeric, text box grey
        // document.getElementById("keywordContainer").className="hideMe";

        // if premium numeric, industry box disabled
        document.side_search.industry.disabled=true;
        // if premium numeric, industry box disabled
        // document.getElementById("industryContainer").className="hideMe";

        // Example numbers change
        // document.getElementById("exampleNumbers").innerHTML = "800 - 411 - 1111<br>866 - 351 - 5000";
        
        //disable showAll
        document.side_search.showAll.disabled=true;        

        //If switching TO vanity, reset orderBy to empty
        document.side_search.orderBy.value='';        




        //document.side_search.price_low.value = g_NUM_PREMIUM_MIN;;
        //document.side_search.price_high.value = g_NUM_PREMIUM_MAX;
    }
   if (nosubmit == 'submit'){
   
    if ((to_cat == "vanity_premium") && (document.side_search.search_string.value.length <= 2 ) && document.side_search.industry == '0'){

            document.getElementById("searchFeedback").innerHTML = "Please enter a search keyword that is more than two characters";
            return false;

        } else {

        document.side_search.submit();
        return true;


    }

}

}

function checkSearchForm() {
//    alert(document.side_search.industry.selectedIndex);
    if ((document.getElementById("vanity_premium").checked == true)  && 
        ((document.side_search.search_string.value.length == 1) || (document.side_search.search_string.value.length == 2) && document.side_search.industry.value != '0')
        ) {
                document.getElementById("searchFeedback").innerHTML = "Please enter a search keyword at least three characters long";
                return false;

    
        } else {
        
         document.side_search.submit();
        return true;

        
        }
        
        

}

function show_more_options() {
	var radio_buttons = document.side_search.num_category;
	var selected_form;
	
	for (i = 0; i<radio_buttons.length; i++)
	{
		if (radio_buttons[i].checked == true) selected_form = radio_buttons[i].value;
	}
	switch( selected_form )
	{
			case "vanity_premium":
			document.getElementById('advanced_vanity_options_box').style.display = "block";
			document.getElementById('show_hide_options').innerHTML = "<a href=\"javascript:close_options();\">- Close options</a><input type=\"hidden\" id=\"show_options\" name=\"show_options\" value=\"true\">";
			break;
			case "num_premium":
			document.getElementById('advanced_numeric_options_box').style.display = "block";
			document.getElementById('show_hide_options').innerHTML = "<a href=\"javascript:close_options();\">- Close options</a><input type=\"hidden\" id=\"show_options\" name=\"show_options\" value=\"true\">";			
			break;
	}
}
function close_options() {
	
	document.getElementById('advanced_vanity_options_box').style.display = "none";
	document.getElementById('advanced_numeric_options_box').style.display = "none";
	document.getElementById('show_hide_options').innerHTML = "<a href=\"javascript:show_more_options();\">+ Advanced options</a><input type=\"hidden\" id=\"show_options\" name=\"show_options\" value=\"false\">";

	
	}

function switch_options( new_option ) {
	switch(new_option)
	{
			case "vanity":
			if (document.side_search.show_options.value == "true")  document.getElementById('advanced_vanity_options_box').style.display = "block";
			document.getElementById('advanced_numeric_options_box').style.display = "none";
			
			// These filters are not applicable to keyword searches
			document.getElementById('number_type1').checked = false;
			document.getElementById('number_type2').checked = false;
			document.getElementById('number_type3').checked = false;
			document.getElementById('number_type4').checked = false;
			document.getElementById('number_type5').checked = false;

			break;
			
			case "numeric":
			document.getElementById('advanced_vanity_options_box').style.display = "none";
			if (document.side_search.show_options.value == "true") document.getElementById('advanced_numeric_options_box').style.display = "block";
			break;
	}
}

function reset_radio()
{
	for(var i = 0; i < 2; i++) {
		document.side_search.num_category[i].checked = false;
		if(document.side_search.num_category[i].value == "vanity_premium") {
			document.side_search.num_category[i].checked = true;
		}
	}
}

function reset_industry()
{
	var ind_select = document.side_search.industry;
	
	for (i = 0; i < ind_select.length; i++)
	{
		if (ind_select.options[i].value == "0") {ind_select.selectedIndex = i; break;}
	}
}

function toggle_help(number)
{
	var expand_id_name = "faq" + number + "_expand";
	var question_id_name = "ans" + number;
	
	var current_state = document.getElementById("faq" + number + "_state");
	
	if (current_state.value == 1) 
	{
		current_state.value = 0;
		document.getElementById(question_id_name).style.display = "none";
		document.getElementById(expand_id_name).innerHTML = "+";
	}
	else
	{
		current_state.value = 1;
		document.getElementById(question_id_name).style.display = "block";
		document.getElementById(expand_id_name).innerHTML = "-";		
	}
}
