/*///////////////////////////////////////////////////////////////
Author: Ark Rozycki 11/27/2006
Purpose: core javascript engine that drives the sliders
			used in diamond search
 
///////////////////////////////////////////////////////////////*/


var price_left_pixel_start = 30;
var price_right_pixel_start = 526;

var min_slider_pixels = 30;
var max_slider_pixels = 526;

var min_slide_for_left_element = 30;
var min_slide_for_right_element = 54;

var max_slide_for_left_element = 504;
var max_slide_for_right_element = 526;

var size_of_container_div = 570;
/////////////////////////////////////////

var cur_element_left = "";
var cur_element = "";
var opps_element;
var cur_mouse_position_X = "";
var cur_opaque_div = "";
var cur_element_direction = "";
var cur_element_type = "";

var tmp_price;
var value_price_left = "100000";
var value_price_right = "0";

var tmp_carat;
var value_carat_left = "6.5";
var value_carat_right = "0.16";

var tmp_color;
var value_color_left = "1";
var value_color_right = "10";

var tmp_clarity;
var value_clarity_left = "1";
var value_clarity_right = "9";

var req;
var latestDiamondResults;

var newValuesSet = false;
var element_padding;

var request_in_queue = false;
var mid_process = false;
var loading_message_cnt = 0;




///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function bubbleHandling(bubbletype, element_type)
{
	document.getElementById("slider_results_price").innerHTML = "";
	document.getElementById("slider_results_carat").innerHTML = "";
	document.getElementById("slider_results_color").innerHTML = "";
	document.getElementById("slider_results_clarity").innerHTML = "";
	document.getElementById("slider_results_shape").innerHTML = "";
		
	//alert("getAjaxVal = '" + getAjaxVal('shape') + "'");
		
	if(getAjaxVal('shape') != '')
	{
		//alert("in if");
		var result_bubble = document.getElementById("result_bubble_main");
		
		
		switch(bubbletype)
		{
			case "load":
						//result_bubble.innerHTML = "loading <img src='/images/ds_loading_dots.gif'>";
						document.getElementById("slider_results_" + element_type).innerHTML = "<div style=\"padding: 3px 5px 0px 0px; font-family:Arial; font-size:13pt; color:#fff; font-weight:bold;\">searching for diamonds <img src='/images/ds_loading_dots_grey.gif'></div>";
						loading_message_cnt++;
					//	window.status = "true";
						//showTheBubble(element_type);
						break;
			case "results":
					
						//result_bubble.innerHTML = latestDiamondResults + " <span style=\"font-size:10pt\" > diamonds found</span>";
						document.getElementById("slider_results_" + cur_element_type).innerHTML = "<div style=\"top:4px; right:10px; padding: 4px 5px 0px 0px; float:left;\"><a href=\"javascript:RunSearch();\" onClick=\"\" class=\"agold\"><img src=\"/images/ds_see_results.gif\" border=\"0\" onmouseover=\"this.src=\'/images/ds_see_results_over.gif\';\" onmouseout=\"this.src=\'/images/ds_see_results.gif\';\"></a></div><div style=\"padding: 3px 5px 0px 0px; font-family:Arial; font-size:13pt; color:#fff; font-weight:bold;\">" + latestDiamondResults + " <span style=\"font-size:10pt; \" > diamonds found</span></div>";
						document.getElementById("innerHTMLResults").value = document.getElementById("slider_results_" + cur_element_type).innerHTML;
						document.getElementById("innerHTMLResults_element").value = cur_element_type;
						loading_message_cnt = 0;
						//window.status = "false";
						break;
		}
	}
}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function checkboxthis(item)
{
	if(document.getElementById(item).checked)
		document.getElementById(item).checked = "";
	else
		document.getElementById(item).checked = "checked";
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function e_mousedown(element_type, event, this_element, element_left, opaque_div, element_direction, opposite_element_id)
{
	//hide the results bubble, and display it in the proper location
	bubbleHandling('load', element_type);
	opps_element = opposite_element_id;
	cur_element_type = element_type;
	var tmp_opposite_left = new String(document.getElementById(opposite_element_id).style.left);
	tmp_opposite_left = parseInt(tmp_opposite_left.replace("px", ""));
	
	//alert(tmp_opposite_left);
	
	element_padding = (element_type == "clarity" || element_type == "color") ? 50 : 20;

	min_slider_pixels = (element_direction == "left") ? min_slide_for_left_element : tmp_opposite_left + element_padding;
	max_slider_pixels = (element_direction == "left") ? tmp_opposite_left - element_padding : max_slide_for_right_element;
	
	cur_element = this_element;
	cur_element_left = parseInt(element_left.replace("px",""));
	//alert(element_left);
	
	cur_mouse_position_X = new String(event.clientX);
	//alert(mousedown_X);
	
	cur_mouse_position_X = parseInt(cur_mouse_position_X.replace("px", ""));
	
	cur_opaque_div = opaque_div;
	cur_element_direction = element_direction;
	
	document.onmousemove = e_mousemove;

}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function e_shape_mouseup()
{
	setValues();
	cur_element_type = "shape";
	//getAjaxTotal(url);
	request_in_queue = true;
	
	unhide_sliders();
	
	
}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function unhide_sliders()
{
	if(document.getElementById("main_price_div").style.display == "none")
	{
		document.getElementById("main_price_div").style.display = "";
		document.getElementById("main_carat_div").style.display = "";
		document.getElementById("main_color_div").style.display = "";
		document.getElementById("main_clarity_div").style.display = "";
		document.getElementById("step2note").style.display = "";		
	}
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function e_mouseup()
{
	if(cur_element != "")
	{
		document.onmousemove = "";
		snapToPosition();
		
		setValues();
		
		//bubbleHandling("results", "")
		
		//getAjaxTotal();
		request_in_queue = true;
	}
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function setValues()
{
	switch(cur_element_type)
	{
		case "price":
						if(cur_element_direction == "left")
							value_price_left = tmp_price;
						else
							value_price_right = tmp_price;
						break;
		
		case "carat":
						if(cur_element_direction == "left")
							value_carat_left = tmp_carat;
						else
							value_carat_right = tmp_carat;
						break;
		
		case "color":
						if(cur_element_direction == "left")
							value_color_left = tmp_color;
						else
							value_color_right = tmp_color;
						break;
						
		case "clarity":
						if(cur_element_direction == "left")
							value_clarity_left = tmp_clarity;
						else
							value_clarity_right = tmp_clarity;
						break;						
	}
	//window.status = cur_element_type + " " + cur_element_direction;
	
	document.getElementById("tmp_div_price_left").innerHTML = value_price_left;
	document.getElementById("tmp_div_price_right").innerHTML = value_price_right;
	
	document.getElementById("tmp_div_carat_left").innerHTML = value_carat_left;
	document.getElementById("tmp_div_carat_right").innerHTML = value_carat_right;
	
	document.getElementById("tmp_div_color_left").innerHTML = value_color_left;
	document.getElementById("tmp_div_color_right").innerHTML = value_color_right;
	
	document.getElementById("tmp_div_clarity_left").innerHTML = value_clarity_left;
	document.getElementById("tmp_div_clarity_right").innerHTML = value_clarity_right;
	
	newValuesSet = true;
	
}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function snapToPosition()
{
	var snapPoints;
	var int_cur_element_left;
	var finalSnapPoint;
	var snapPointsLetters;
	//this is where any code that requires a snapping action to occur exists
	switch(cur_element_type)
	{
		case "color":
					int_cur_element_left = (cur_element_direction == "left") ? parseInt(cur_element_left) + 20 : parseInt(cur_element_left);
					//alert(cur_element_left);
					snapPoints =  new Array(55, 95, 145, 195, 245, 295, 345, 395, 445, 495, 545);
					snapPointsLetters = new Array(63, 113, 163, 213, 263, 313, 363, 413, 463, 513);
					var snap_letters = new Array("D", "E", "F", "G", "H", "I", "J", "K", "L", "M");
					var snap_letters_int = new Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10");
					for(var j = 0; j < snapPointsLetters.length; j++)
					{
						if(int_cur_element_left >= snapPoints[j] && int_cur_element_left <= snapPointsLetters[j])
						{
							tmp_color = (cur_element_direction == "left") ? snap_letters_int[j] : snap_letters_int[j-1] ;
							finalSnapPoint = snapPoints[j];

							break;
						}
						else
							if(int_cur_element_left > snapPointsLetters[j] && int_cur_element_left < snapPoints[j+1])
							{
								tmp_color = (cur_element_direction == "left") ? snap_letters_int[j+1] : snap_letters_int[j] ;
								finalSnapPoint = snapPoints[j+1];
			
							break;
							}	
					}
					
					//window.status = finalSnapPoint;	
					if(cur_element_direction == "left" && finalSnapPoint == 545)
						finalSnapPoint = 495;
				
					if(cur_element_direction == "left" && isNaN(finalSnapPoint))
						finalSnapPoint = 55;
						
					if(cur_element_direction != "left" && finalSnapPoint == 55)
						finalSnapPoint = 95;
						
					if(cur_element_direction != "left" && isNaN(finalSnapPoint))
						finalSnapPoint = 545;
						
					//window.status = cur_element_left;
					var tmpSnap = finalSnapPoint -20;
					//window.status = tmpSnap;
					if(isNaN(tmpSnap) || tmpSnap < 30)
						tmpSnap = "30";
					
					cur_element.style.left = tmpSnap;
					
					if(cur_element_direction == "left")
						document.getElementById("txtcolor_hi_left").value = tmpSnap;
					else
						document.getElementById("txtcolor_lo_left").value = tmpSnap;
					
					break;
		
		case "clarity":
					int_cur_element_left = (cur_element_direction == "left") ? parseInt(cur_element_left) + 20 : parseInt(cur_element_left);
					//alert(cur_element_left);
					//snapPoints =  new Array(55, 80, 120, 185, 245,  300, 300, 400, 450, 490, 536);
					snapPoints =  new Array(30, 77, 122, 181, 244,  298, 350, 400, 444, 487, 536);
					snapPointsLetters = new Array(59, 98, 150, 214, 271, 326, 375, 425, 467, 508);
					var snap_letters = new Array("F", "IF", "VVS1", "VVS2", "VS1", "VS2", "SI1", "SI2", "I1", "I2");
					var snap_letters_int = new Array("1", "1", "2", "3", "4", "5", "6", "7", "8", "9");
					
					for(var j = 0; j < snapPointsLetters.length; j++)
					{
						if(int_cur_element_left >= snapPoints[j] && int_cur_element_left <= snapPointsLetters[j])
						{
							tmp_clarity = (cur_element_direction == "left") ? snap_letters_int[j] : snap_letters_int[j-1] ;
							finalSnapPoint = snapPoints[j];
							break;
						}
						else
							if(int_cur_element_left > snapPointsLetters[j] && int_cur_element_left < snapPoints[j+1])
							{
								tmp_clarity = (cur_element_direction == "left") ? snap_letters_int[j+1] : snap_letters_int[j] ;
								finalSnapPoint = snapPoints[j+1];
								break;
							}
							else
							{
								finalSnapPoint = snapPoints[snapPoints.length];
							}
					}

					if(cur_element_direction == "left" && finalSnapPoint == 536)
						finalSnapPoint = 487;
						
					if(cur_element_direction == "left" && isNaN(finalSnapPoint))
						finalSnapPoint = 30;
						
					if(cur_element_direction != "left" && finalSnapPoint == 30)
						finalSnapPoint = 77;
						
					if(cur_element_direction != "left" && isNaN(finalSnapPoint))
						finalSnapPoint = 536;
						
					var tmpSnap = finalSnapPoint -10;
					//window.status = tmpSnap;
					if(isNaN(tmpSnap) || tmpSnap < 30)
						tmpSnap = "30";
					
					cur_element.style.left = tmpSnap;
					
					if(cur_element_direction == "left")
						document.getElementById("txtclarity_hi_left").value = tmpSnap;
					else
						document.getElementById("txtclarity_lo_left").value = tmpSnap;
					break;
					
		case	"carat":
					var tmp_slider_left = rppx(document.getElementById("carat_left").style.left);
					var tmp_slider_right = rppx(document.getElementById("carat_right").style.left);
						
					if(cur_element_direction == "left")
					{
						
						if(tmp_slider_right >= tmp_slider_left && tmp_slider_right <= (parseInt(tmp_slider_left) + 20) )
						{
							//left slider has overlapped push it back some
							document.getElementById("carat_left").style.left = parseInt(tmp_slider_left) - 20;
						}
						
						document.getElementById("txtweight_hi_left").value = rppx(document.getElementById("carat_left").style.left);
					}
					else
					{
						tmp_slider_left = parseInt(tmp_slider_left) + 20;
						if(tmp_slider_left >= tmp_slider_right && tmp_slider_left <= (parseInt(tmp_slider_right) + 20) )
						{
							//left slider has overlapped push it back some
							document.getElementById("carat_right").style.left = parseInt(tmp_slider_right) + 20;
						}
						
						document.getElementById("txtweight_lo_left").value = rppx(document.getElementById("carat_right").style.left);
					}
		
		
		
		
					
					
		case	"price":
					var tmp_slider_left = rppx(document.getElementById("price_left").style.left);
					var tmp_slider_right = rppx(document.getElementById("price_right").style.left);
						
					if(cur_element_direction == "left")
					{
						
						if(tmp_slider_right >= tmp_slider_left && tmp_slider_right <= (parseInt(tmp_slider_left) + 20) )
						{
							//left slider has overlapped push it back some
							document.getElementById("price_left").style.left = parseInt(tmp_slider_left) - 20;
						}
						
						document.getElementById("txtprice_hi_left").value = rppx(document.getElementById("price_left").style.left);
					}
					else
					{
						tmp_slider_left = parseInt(tmp_slider_left) + 20;
						if(tmp_slider_left >= tmp_slider_right && tmp_slider_left <= (parseInt(tmp_slider_right) + 20) )
						{
							//left slider has overlapped push it back some
							document.getElementById("price_right").style.left = parseInt(tmp_slider_right) + 20;
						}
						
						document.getElementById("txtprice_lo_left").value = rppx(document.getElementById("price_right").style.left);
					}
					break;
					
		default:
					break;
		
	}
	
	resize_opaqueDIV();
}


function rppx(item)
{
	return item.replace("px", "");
}

function getElementPosition(elemID) {
    var offsetTrail = document.getElementById(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 && 
        typeof document.body.leftMargin != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
    }
    return {left:offsetLeft, top:offsetTop};
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function e_mousemove(event)
{
	var cur_left = get_current_clientX(event);
	var maindivLeft = parseInt(getElementPosition("main_"+ cur_element_type +"_div").left);
	//window.status = (maindivLeft +30) + "|" + (maindivLeft +546) + "|" + cur_left;
	if( (cur_left > (maindivLeft + 30)) && (cur_left < (maindivLeft + 546))  )
	{
	
		var lefty;
		
		if(cur_left > cur_mouse_position_X)
		{
			//cur_left = cur_left - cur_mouse_position_X;
			lefty = (cur_element_left + (get_current_clientX(event) - cur_mouse_position_X));
			lefty = (cur_element_left < min_slider_pixels ) ? min_slider_pixels : lefty;
			lefty = (cur_element_left > max_slider_pixels ) ? max_slider_pixels : lefty;
			if(lefty < 30)
				lefty = 30;
			if(lefty > 526)
				lefty = 526;
				//window.status = (maindivLeft +30) + "|" + (maindivLeft +546) + "|" + cur_left + "|" + lefty;
			cur_element.style.left = lefty;
			cur_element_left = lefty;
		}
		else
		{
			//cur_left = cur_mouse_position_X - cur_left;
			lefty = (cur_element_left + (get_current_clientX(event) - cur_mouse_position_X));
			lefty = (cur_element_left < min_slider_pixels ) ? min_slider_pixels : lefty;
			lefty = (cur_element_left > max_slider_pixels ) ? max_slider_pixels : lefty;
			if(lefty < 30)
				lefty = 30;
			if(lefty > 526)
				lefty = 526;
			//	window.status = (maindivLeft +30) + "|" + (maindivLeft +546) + "|" + cur_left + "|" + lefty;
			cur_element.style.left = lefty;
			cur_element_left = lefty;
		}
		
	
	cur_mouse_position_X = cur_left;
	
	resize_opaqueDIV();
	}
	else
		e_mouseup();
}

///////////////////////////////////////////////////////////////
function get_current_clientX(event)
{
	var cur_left = (document.all) ? new String(window.event.clientX) : new String(event.clientX);
	return parseInt(cur_left.replace("px", ""));
	
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function resize_opaqueDIV()
{
	if(cur_element_type != "shape")
	{
		var tmp_left = new String(cur_element.style.left);
		tmp_left = parseInt(tmp_left.replace("px", ""));
		switch(cur_element_direction)
		{
			case "right":
							var tmp_start_left = parseInt(cur_element.style.left) + 19;
							document.getElementById(cur_opaque_div).style.left = tmp_start_left + "px";
							document.getElementById(cur_opaque_div).style.width = (size_of_container_div - tmp_start_left) + "px";
							break;
						
			case "left":
							document.getElementById(cur_opaque_div).style.width = tmp_left + "px";
							break;
		}

		moveUnderbar();
		
		//gets the values for underneath the slider
		document.getElementById(cur_element_type + "_" + cur_element_direction + "_underbar").innerHTML = getUnderSliderValue(cur_element_type, cur_element_direction);
	}
}


///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function moveUnderbar()
{
	if(cur_element_type != "shape")
	{
		var opposite_element_direction = ( cur_element_direction == "left") ? "right" : "left";
		var opposite_element_left = parseInt(document.getElementById(opps_element).style.left);
		
		if(cur_element_type != "color" && cur_element_type != "clarity" && cur_element_type != "shape")
		{
			var left_side_tip = document.getElementById(cur_element_type + "_left_underbar").style.left;
			var right_side_tip = document.getElementById(cur_element_type + "_right_underbar").style.left;
			left_side_tip = parseInt(left_side_tip.replace("px", "")) + 45;
			right_side_tip = parseInt(right_side_tip.replace("px", ""));
		}
		var gap_between_bars;
		if(cur_element_direction == "left")
			gap_between_bars = opposite_element_left - parseInt(cur_element.style.left) - 19;
		else
			gap_between_bars = parseInt(cur_element.style.left) - opposite_element_left - 19;
			
		// = right_side_tip - left_side_tip;
		//window.status=gap_between_bars;
		
		if(gap_between_bars > 21)
			document.getElementById(cur_element_type + "_" + cur_element_direction + "_underbar").style.left = ( cur_element_direction == "left") ? parseInt(cur_element.style.left) - 16 : parseInt(cur_element.style.left) - 12;
		else
		{
			document.getElementById(cur_element_type + "_left_underbar").style.left = ( cur_element_direction == "left" ) ? parseInt(cur_element.style.left) - 12 - (21 - gap_between_bars) : parseInt(opposite_element_left) - 12 - (21 - gap_between_bars);
			document.getElementById(cur_element_type + "_right_underbar").style.left = ( cur_element_direction == "right" ) ? parseInt(cur_element.style.left) - 12 + (21 - gap_between_bars) : parseInt(opposite_element_left) - 12 + (21 - gap_between_bars);	
		}
	}

}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function sleepy(){}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function sleep_mousemove(){}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function getUnderSliderValue(cur_element_type, cur_element_direction)
{
	switch(cur_element_type)
	{
		case "price":
		
				cur_element_left = parseInt(cur_element_left)
				var which_quadrant = (cur_element_direction == "left") ? parseFloat(cur_element_left - 30) / 500 : parseFloat(cur_element_left + 19 - 30) / 500;
			
			
				var which_quadrant_start;
				var quadrant_start;
				var quadrant_end;
				if(which_quadrant < 0.25)
				{
					which_quadrant = 600;
					which_quadrant_start = 100000;
					quadrant_start = price_left_pixel_start;
					quadrant_end = 160;
				}
				else
					if(which_quadrant < 0.5)
					{
						which_quadrant = 100;
						which_quadrant_start = 20000;
						quadrant_start = 160;
						quadrant_end = 285;
					}
					else
						if(which_quadrant < 0.75)
						{
							which_quadrant = 50;
							which_quadrant_start = 7500;
							quadrant_start = 285;
							quadrant_end = 410;
						}
						else
						{
							which_quadrant = 10;
							which_quadrant_start = 1250;
							quadrant_start = 410;
							quadrant_end = 530;
						}
				//window.status = which_quadrant + " " + cur_element_left + " " + quadrant_start + " " + quadrant_end;
			
				if(cur_element_direction == "left")
				{
					tmp_price = which_quadrant_start - ((cur_element_left - quadrant_start) * parseInt(which_quadrant));
					return formatCurrency(tmp_price);
				}
				else
				{
					var tmp_return = which_quadrant_start - ((cur_element_left + 19  - quadrant_start) * parseInt(which_quadrant))
					if(tmp_return < 0)
					{
						tmp_price = 0;
						return formatCurrency(0);
					}
					else
					{
						tmp_price = tmp_return;
						return formatCurrency(tmp_return);
					}
					//return formatCurrency( ((quadrant_end) -  (cur_element_left+19)) * which_quadrant );
				}
				break;
					
		case "carat":
				var arr_carat = new Array("6 1/2", "6", "5 1/2", "5", "4 3/4", "4 1/2", "4 1/4", "4", "3 3/4", "3 1/2", "3 1/4", "3", "2 3/4", "2 1/2", "2 1/4", "2", "1 3/4", "1 1/2", "1 1/4", "1", "3/4", "1/2", "1/3", "1/4", "1/6");
				var arr_carat_decimal = new Array("6.5", "6", "5.5", "5", "4.75", "4.5", "4.25", "4", "3.75", "3.5", "3.25", "3", "2.75", "2.5", "2.25", "2", "1.75", "1.5", "1.25", "1", "0.75", "0.5", "0.33", "0.25", "0.16");
				
				var which_quadrant = (cur_element_direction == "left") ? parseFloat(cur_element_left - 30) / 500 : parseFloat(parseInt(cur_element_left) + 19 - 30) / 500;
				which_quadrant = parseInt((which_quadrant * 100) / 4);
				
				
					
				which_quadrant = (which_quadrant > 24) ? 24 : which_quadrant;

				//window.status = which_quadrant + " " + cur_element_left + " " + quadrant_start + " " + quadrant_end;
				tmp_carat = arr_carat_decimal[which_quadrant];
				
				return arr_carat[which_quadrant] + " ct.";
			
				break;
		default:
				return "";
	}

}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function formatCurrency(num) 
{
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num );
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function startup()
{

	//alert("Launching AJAX");
	loading_message_cnt++;
	
	if(request_in_queue)
		getAjaxTotal();
	
	setTimeout("startup()", 1500);
	
	
}

///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
function showTheBubble(element_type)
{
	var result_bubble = document.getElementById("result_bubble");
	
	result_bubble.style.display = "none";

	document.getElementById("slider_results_price").innerHTML = "";
	document.getElementById("slider_results_carat").innerHTML = "";
	document.getElementById("slider_results_color").innerHTML = "";
	document.getElementById("slider_results_clarity").innerHTML = "";
	document.getElementById("slider_results_shape").innerHTML = "";

	switch(element_type)
	{
		case "price":
					//result_bubble.style.top = (document.all) ? "102" : "75";
					//result_bubble.style.left = "180";
					document.getElementById("slider_results_price").innerHTML = result_bubble.innerHTML;
				break;
			
		case "carat":
					//result_bubble.style.top = (document.all) ? "215" : "190";
					//result_bubble.style.left = "180";
					document.getElementById("slider_results_carat").innerHTML = result_bubble.innerHTML;
				break;
	
		case "color":
					//result_bubble.style.top = (document.all) ? "323" : "298";
					//result_bubble.style.left = "180";
					document.getElementById("slider_results_color").innerHTML = result_bubble.innerHTML;
				break;
			
		case "clarity":
					//result_bubble.style.top = (document.all) ? "438" : "408";
					//result_bubble.style.left = "180";
					document.getElementById("slider_results_clarity").innerHTML = result_bubble.innerHTML;
				break;
				
		case "shape":
					//result_bubble.style.top = "-30";
					//result_bubble.style.left = "180";
					document.getElementById("slider_results_shape").innerHTML = result_bubble.innerHTML;
					
				break;
	}

	result_bubble.style.display = "";
}




function getAjaxTotal() 
{
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) 
    {
    	try 
    	{
			req = new XMLHttpRequest();
        } 
        catch(e) 
        {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } 
    else 
		if(window.ActiveXObject) 
		{
       		try 
       		{
        		req = new ActiveXObject("Msxml2.XMLHTTP");
      		} 
      		catch(e) 
      		{
        		try 
        		{
          			req = new ActiveXObject("Microsoft.XMLHTTP");
        		} 
        		catch(e) 
        		{
          			req = false;
        		}
			}
		}
	
	if(req) 
	{
		
		if (!mid_process)
		{
			if (getAjaxVal('shape') != '')
			{
			mid_process = true;
			req.onreadystatechange = processReqChange;
			req.open("POST", url, true);
			//alert(url);
			//if(value_price_left == "100000")
			//	value_price_left = "500000";
			
			var form_data = "txtshape=" + getAjaxVal('shape') + 
						"&txtweight_hi=" + value_carat_left + 
						"&txtweight_lo=" + value_carat_right + 
						"&txtcolor_hi=" + value_color_left + 
						"&txtcolor_lo=" + value_color_right + 
						"&txtclarity_hi=" + value_clarity_left + 
						"&txtclarity_lo=" + value_clarity_right + 
						"&txtprice_lo=" + value_price_right + 
						"&txtprice_hi=" + value_price_left;
			//alert(form_data);
			req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			req.send(form_data);
			request_in_queue = false;
			}
		}
		mid_process = false;
	}
}

function getAjaxVal(whichval)
{
	var something_to_return = "";
	switch(whichval)
	{
		case "shape":
				var shape_field = document.diamondsearch.txtshapes;
				
				for(var i=0; i < shape_field.length; i++)
				{
					//alert(shape_field[i].checked);
					if(shape_field[i].checked == true)
						if(something_to_return == "")
							something_to_return = shape_field[i].value;
						else
							something_to_return += "," + shape_field[i].value;
				}
				//alert(something_to_return);
				break;
				
		case "weight":
				
				break;
		
		case "color":
				
				break;
		
		case "clarity":
				
				break;
		
		
	}
	return something_to_return;
}


function processReqChange() 
{
	
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            // ...processing statements go here...
           //alert(req.responseText);
			var return_value = req.responseText;
        //   document.getElementById("ajax_response").innerHTML = return_value;
           var tmp_value = return_value.split("|");
           latestDiamondResults = addCommas(tmp_value[0]);
           bubbleHandling("results", "");
           request_in_queue = false;
		
        } else {
           // alert("There was a problem retrieving the XML data:\n" +
           //     req.statusText);
        }
    }
}


function RunSearch()
{
	document.getElementById("txtshape").value		= getAjaxVal('shape');
	document.getElementById("txtweight_hi").value	= value_carat_left;
	document.getElementById("txtweight_lo").value	= value_carat_right;
	document.getElementById("txtcolor_hi").value	= value_color_left;
	document.getElementById("txtcolor_lo").value	= value_color_right; 
	document.getElementById("txtclarity_hi").value	= value_clarity_left; 
	document.getElementById("txtclarity_lo").value	= value_clarity_right; 
	document.getElementById("txtprice_lo").value	= value_price_right;
	document.getElementById("txtprice_hi").value	= value_price_left;
	document.getElementById("previous_search").value	= "true";
	//alert(document.getElementById("txtshape").value);
	if(getAjaxVal('shape') != "")		//
	{
		window.location.href = document.toresultspage.action + "&sr="+document.getElementById("txtshape").value+
									"|"+document.getElementById("txtweight_hi").value+
									"|"+document.getElementById("txtweight_lo").value+
									"|"+document.getElementById("txtweight_hi_left").value+
									"|"+document.getElementById("txtweight_lo_left").value+
									"|"+document.getElementById("txtcolor_hi").value+
									"|"+document.getElementById("txtcolor_lo").value+
									"|"+document.getElementById("txtcolor_hi_left").value+
									"|"+document.getElementById("txtcolor_lo_left").value+
									"|"+document.getElementById("txtclarity_hi").value+
									"|"+document.getElementById("txtclarity_lo").value+
									"|"+document.getElementById("txtclarity_hi_left").value+
									"|"+document.getElementById("txtclarity_lo_left").value+
									"|"+document.getElementById("txtprice_lo").value+
									"|"+document.getElementById("txtprice_hi").value+
									"|"+document.getElementById("txtprice_hi_left").value+
									"|"+document.getElementById("txtprice_lo_left").value+
									"|"+document.getElementById("clicklink").value+
									"|"+document.getElementById("previous_search").value+
									//"&innerHTMLResults="+document.getElementById("innerHTMLResults").value;
									"&Pg=1&innerHTMLResults_element="+document.getElementById("innerHTMLResults_element").value + "&x=" + document.getElementById("x").value + "&fromsearch=y";
		//document.toresultspage.submit();
	}
	else
		alert("Please select at least one diamond shape.");
}


function alignSliders()
{

	
	value_carat_left = document.getElementById("txtweight_hi").value;
	value_carat_right = document.getElementById("txtweight_lo").value;
	value_color_left = document.getElementById("txtcolor_hi").value;
	value_color_right = document.getElementById("txtcolor_lo").value; 
	value_clarity_left = document.getElementById("txtclarity_hi").value; 
	value_clarity_right = document.getElementById("txtclarity_lo").value; 
	value_price_right = document.getElementById("txtprice_lo").value;
	value_price_left = document.getElementById("txtprice_hi").value;

	//setup Color LEFT
	setGlobals(document.getElementById("color_left"), "color", "left", "right", "color_right", "color_left_fade");
	//window.status = document.getElementById("txtcolor_hi_left").value;
	if(isNaN(document.getElementById("txtcolor_hi_left").value))
		document.getElementById("color_left").style.left = "30";
	else
		document.getElementById("color_left").style.left = (document.getElementById("txtcolor_hi_left").value != "")  ? document.getElementById("txtcolor_hi_left").value : "30";
	resize_opaqueDIV();
	
	//setup Color RIGHT
	setGlobals(document.getElementById("color_right"), "color", "right", "left", "color_left", "color_right_fade");
	document.getElementById("color_right").style.left = (document.getElementById("txtcolor_lo_left").value != "") ? document.getElementById("txtcolor_lo_left").value : "526";
	resize_opaqueDIV();
	
	//setup Clarity LEFT
	setGlobals(document.getElementById("clarity_left"), "clarity", "left", "right", "clarity_right", "clarity_left_fade");
	document.getElementById("clarity_left").style.left = (document.getElementById("txtclarity_hi_left").value != "") ? document.getElementById("txtclarity_hi_left").value : "30";
	resize_opaqueDIV();
	
	//setup Clarity RIGHT
	setGlobals(document.getElementById("clarity_right"), "clarity", "right", "left", "clarity_left", "clarity_right_fade");
	document.getElementById("clarity_right").style.left = (document.getElementById("txtclarity_lo_left").value != "") ? document.getElementById("txtclarity_lo_left").value : "526";
	resize_opaqueDIV();
	
	//alert(document.getElementById("txtweight_hi_left").value);
	//setup Carat LEFT
	setGlobals(document.getElementById("carat_left"), "carat", "left", "right", "carat_right", "carat_left_fade");
	document.getElementById("carat_left").style.left = (document.getElementById("txtweight_hi_left").value != "") ? document.getElementById("txtweight_hi_left").value : "30";
	cur_element_left = (document.getElementById("txtweight_hi_left").value != "") ? document.getElementById("txtweight_hi_left").value : "30";
	resize_opaqueDIV();
	
	//setup Carat RIGHT
	setGlobals(document.getElementById("carat_right"), "carat", "right", "left", "carat_left", "carat_right_fade");
	document.getElementById("carat_right").style.left = (document.getElementById("txtweight_lo_left").value != "") ? document.getElementById("txtweight_lo_left").value : "526";
	cur_element_left = (document.getElementById("txtweight_lo_left").value != "") ? document.getElementById("txtweight_lo_left").value : "526";
	resize_opaqueDIV();
	
	//setup Price LEFT
	setGlobals(document.getElementById("price_left"), "price", "left", "right", "price_right", "price_left_fade");
	document.getElementById("price_left").style.left = (document.getElementById("txtprice_hi_left").value != "") ? document.getElementById("txtprice_hi_left").value : "30";
	cur_element_left = (document.getElementById("txtprice_hi_left").value != "") ? document.getElementById("txtprice_hi_left").value : "30";
	resize_opaqueDIV();
	
	//setup Price RIGHT
	setGlobals(document.getElementById("price_right"), "price", "right", "left", "price_left", "price_right_fade");
	document.getElementById("price_right").style.left = (document.getElementById("txtprice_lo_left").value != "") ? document.getElementById("txtprice_lo_left").value : "526";
	cur_element_left = (document.getElementById("txtprice_lo_left").value != "") ? document.getElementById("txtprice_lo_left").value : "526";
	resize_opaqueDIV();
	
	if(document.getElementById("innerHTMLResults_element").value != "false")
		document.getElementById("slider_results_" + document.getElementById("innerHTMLResults_element").value).innerHTML = document.getElementById("innerHTMLResults").value;
	
	if(document.getElementById("clicklink").value == "true")
	{
		var shape_field = document.diamondsearch.txtshapes;
		var txtshape_tmp = 	document.getElementById("txtshape").value;
		var arr_txtshape = txtshape_tmp.split(',');
		
		for(var i=0; i < shape_field.length; i++)
		{
			//alert(shape_field[i].checked);
			if(doesShapeMatch(shape_field[i].value, arr_txtshape))
				shape_field[i].checked = true;
		}
		cur_element_type = "shape";
		request_in_queue = true;
	}
	
}

function doesShapeMatch(val, arr)
{
	for(var i =0; i < arr.length; i++)
	{
		//alert(val + ' - ' + arr[i]);
		if(val == arr[i])
			return true;
		if(val == '1,8')
		{
			if(arr[i] == '1')
				return true;
		}
		if(val == '9,12')
		{
			if(arr[i] == '9')
				return true;
		}
	}
	return false;
}
function setGlobals(a,b,c,d,e,f)
{
	cur_element = a;
	cur_element_type = b;
	cur_element_direction = c;
	opposite_element_direction = d;
	opps_element = e;
	cur_opaque_div = f;
	
	
}

