
if (typeof console == 'undefined')
{
    console = new Object();
    console.log = function(){};
}

var scroll_page_height = 3600;
var cantidad_paginas = 0;
var ROWS_RETURNED_FROM_SERVICE = 150;
var cached_html = '';
var last_result_container_height = '';
var last_scroll_top = 0;
var last_page_loading = 1;
var pagina_anterior = 1;
var is_big_scroll = false;
var scroll_page_size = 3137;
var loading_pages = [1];
var current_compare_number = 0;
var timeout_load_page = null;
var scroll_offset = 0;
var scroll_delta = 0;
var bloqued_scroll = false;
var delta_scroll = 0;
var change_filter = false;
var last_scroll = 0;
var blocked = false;
var page_in_progress = false;
var timeout_show_detail = null;
var hideDetail = null;
var in_detail_row = false;
var last_prd_show = 0;
var last_operation = '';
window.ignore_scroll_event = false;

var shapes_ids = ['button_Heart',
				'button_Round',
				'button_Princess',
				'button_Emerald',
				'button_Asscher',
				'button_Marquise',
				'button_Oval',
				'button_Radiant',
				'button_Pear',
				'button_Cushion'];

				
easeInQuart = function (t, b, c, d) {
	return c*(t/=d)*t*t*t + b;
};

easeInLineal = function (t, b, c, d) {
	return c*t/d + b;
};

calcPriceSlideValue = function (val,min_price,max_price){
    var ret = easeInQuart(val,min_price,max_price,150);
    if (ret > max_price)
    {
        ret = max_price;
    }
    else if (ret < min_price)
    {
        ret = min_price;
    }
    return Math.floor(ret);
}


calcCaratSlideValue = function (val,min_carat,max_carat){

	if (val == 1)
	{
		var ret = min_carat;
	}
	else if (val == 150)
	{
		var ret = max_carat;
	}
	else if (val > 1 && val <= 75)
	{
		var ret = min_carat + (0.01 * val);
	}
	else
	{
		var ret = easeInLineal(val,min_carat,max_carat,150);
	}
    if (ret > max_carat)
    {
        ret = max_carat;
    }
    else if (ret < min_carat)
    {
        ret = min_carat;
    }
	console.log ('val=' + val +' ret=' + ret);
    return ret;
}

/**
* Me devuelve el indice de precio para utilizarlo en el slider.
**/
function getPriceSliderIndex(price,min_price,max_price)
{
	if (price <= min_price)
	{
		return 1; 
	}
	else if (price >= max_price)
	{
		return 150;
	}
	else
	{
		var return_index = 1;
		for (var index=1; index < 150; index++)
		{
			var min_range = calcPriceSlideValue(index,min_price,max_price);
			var max_range = calcPriceSlideValue(index + 1,min_price,max_price);
			if (price >= min_range && price <= max_range)
			{
				//check deltas, return minor delta.
				if (price == min_range)
				{
					return_index = index;
				}
				else if (price == max_range)
				{
					return_index = index + 1;
				}
				else 
				{
					var delta1 = Math.abs(min_range - price);
					var delta2 = Math.abs(max_range - price);
					
					if (Math.min(delta1,delta2) == delta1)
					{
						return_index = index;
					}
					else
					{
						return_index = index + 1;
					}
				}
				break;
			}
		}
		
		return return_index;
	}
}

function getCaratSliderIndex(carat,min_carat,max_carat)
{
	if (carat <= min_carat)
	{
		return 1; 
	}
	else if (carat >= max_carat)
	{
		return 150;
	}
	else
	{
		var return_index = 1;
		for (var index=1; index < 150; index++)
		{
			var min_range = calcCaratSlideValue(index,min_carat,max_carat);
			var max_range = calcCaratSlideValue(index + 1,min_carat,max_carat);
			if (carat >= min_range && carat <= max_range)
			{
				//check deltas, return minor delta.
				if (carat == min_range)
				{
					return_index = index;
				}
				else if (carat == max_range)
				{
					return_index = index + 1;
				}
				else 
				{
					var delta1 = Math.abs(min_range - carat);
					var delta2 = Math.abs(max_range - carat);
					
					if (Math.min(delta1,delta2) == delta1)
					{
						return_index = index;
					}
					else
					{
						return_index = index + 1;
					}
				}
				break;
			}
		}
		
		return return_index;
	}
}
				
//var current_shape = 'Round'; //default shape value;

function preResetGridData(){
	last_page_loading = 1;
	last_result_container_height = '';
	last_scroll_top = 0;
	last_page_loading = 1;
	timeout_load_page = null;
	scroll_offset= 0;
	scroll_delta = 0;
	bloqued_scroll = false;
	delta_scroll = 0;
	last_scroll = 0;
	
	//set main_results_container scroll to zero
	//set scroll_div scroll to zero
	$('#main_results_container').scrollTop(0);
	$('#scroll_div').scrollTop(0);
}

function getPageHeight()
{
	return 3603;
}

function alertDebug()
{
	var msg = '';
	
	msg += 'main_results_container scroll: ' + $('#main_results_container').scrollTop() + '\n';
	msg += 'main_results_container max scroll: ' + $('#main_results_container')[0].scrollHeight + '\n';
	msg += 'main_results_container real max scroll: ' + (parseInt($('#main_results_container')[0].scrollHeight) - 466) + '\n';
	msg += 'main_results_container offset height: ' + $('#main_results_container')[0].offsetHeight + '\n';
	msg += 'results_container offset height: ' + $('#results_container')[0].offsetHeight + '\n';
	
	msg += '\n\nscroll_div scroll: ' + $('#scroll_div').scrollTop() + '\n';
	msg += 'max scroll div_scroll: ' + $('#scroll_div')[0].scrollHeight + '\n';
	msg += 'div_scroll offsetHeight: ' + $('#scroll_div')[0].offsetHeight + '\n';
	msg += 'fake_container offsetHeight: ' + $('#fake_container')[0].offsetHeight + '\n';
	
	msg += '\n\ncantidad_paginas: ' + $('#cantidad_paginas').val() + '\n';
	msg += 'pagina_actual: ' + $('#response_page').val() + '\n';
	
	alert(msg);
}

function postResetGridData(){
	// Original
	//$('#fake_container').css('height',(($('#cantidad_resultados').val() * getRowHeight()) + 3)  + 'px');
	var cantidad_paginas = $('#cantidad_paginas').val();
	if (cantidad_paginas > 1)
	{
		$('#fake_container').css('height',(($('#cantidad_resultados').val() * getRowHeight()) + 3)  + 'px');
	}
	else
	{
		$('#fake_container').css('height',(($('#cantidad_resultados').val() * getRowHeight()) + 3) + 'px');
	}
	
	/*if (parseInt($('#pagina_anterior').val()) == 2
		&& parseInt($('#scroll_div').scrollTop()) != 0)
	{
		$('#main_results_container').scrollTop($('#main_results_container')[0].scrollHeight);
	}
	else
	{
		setTimeout(function()
		{
			$('#scroll_div').scrollTop(0);
			$('#main_results_container').scrollTop(0);
		},200);
	}*/

	change_filter = false;
}

function getGridHeight(){
	var ret = $('#main_results_container').css('height');
	return parseInt(ret);
}

function getRowHeight(){
	return 24;
}
				
function selectShape2(shape_name)
{
	//block accidental grid updates.
	blocked = true;

	var el = null;
	for (var i=0; i < shapes_ids.length; i++)
	{
		el = $('#'+shapes_ids[i])[0];
		//unselect all options.
		el.className = el.className.replace(/_sel/,'');
	}
	//alert($('#button_' + shape_name).length);
	//el = $('#button_' + shape_name)[0];
	
	el = $('#button_' + shape_name)[0];
	el.className = el.className + '_sel';
	//alert(el.className);
	current_shape = shape_name;
	
	change_filter = true;
	
	var index_shape = current_shape.toLowerCase();
	
	
	minPrice = Math.round(range_shapes[index_shape]['min']['price']);
	maxPrice = Math.round(range_shapes[index_shape]['max']['price']);
	
	window.current_min_price = minPrice;
	window.current_max_price = maxPrice;
	
	minCarat = parseFloat(range_shapes[index_shape]['min']['carat']);
	maxCarat = parseFloat(range_shapes[index_shape]['max']['carat']);
	
	window.current_min_carat = minCarat;
	window.current_max_carat = maxCarat;
	
	minPriceFormat = range_shapes[index_shape]['min']['price_format'];
	maxPriceFormat = range_shapes[index_shape]['max']['price_format'];
	
	/*$('#sliderPrice').slider('option', 'min', minPrice);
	$('#sliderPrice').slider('option', 'max', maxPrice);
	setPriceValue(minPrice,'min');
	setPriceValue(maxPrice,'max');*/
	
	$('#sliderPrice').slider('option', 'min', 1);
	$('#sliderPrice').slider('option', 'max', 150);
	
	
	setPriceValue(1,'min');
	setPriceValue(150,'max');
	
	$('#dmd_proce_min').attr('value',minPriceFormat);
	$('#dmd_proce_max').attr('value',maxPriceFormat);
	
	$('#sliderCarat').slider('option','min',1);
	$('#sliderCarat').slider('option','max',150);
	
	$('#sliderCarat').slider('values',0,1);
	$('#sliderCarat').slider('values',1,150);

	minCarat = '' + minCarat;
	maxCarat = '' + maxCarat;
	
	if (minCarat.indexOf('.') != -1)
	{
		var tmp_split = minCarat.split('.')[1];
		if (tmp_split.length < 2)
		{
			minCarat += '0';
		}
	}
	else
	{
		minCarat += '.00';
	}
	
	if (maxCarat.indexOf('.') != -1)
	{
		var tmp_split = maxCarat.split('.')[1];
		if (tmp_split.length < 2)
		{
			maxCarat += '0';
		}
	}
	else
	{
		maxCarat += '.00';
	}
	
	$('#dmd_carat_min').attr('value', minCarat);
	$('#dmd_carat_max').attr('value',maxCarat);
	
	//update ring image.
	//todo: pasar esto a development.
	if (typeof shapes_rings_images != 'undefined' 
		&& typeof shapes_rings_images[shape_name.toLowerCase()] != 'undefined')
	{
		$('#dynamic_ring_image').attr('src',shapes_rings_images[shape_name.toLowerCase()]);
	}
	
	//unblock updates.
	blocked = false;
}
function selectShape(shape_name)
{
	//block accidental grid updates.
	blocked = true;
	
	var el = null;
	for (var i=0; i < shapes_ids.length; i++)
	{
		el = $('#'+shapes_ids[i])[0];
		//unselect all options.
		el.className = el.className.replace(/_sel/,'');
	}
	
	el = $('#button_' + shape_name)[0];
	el.className = el.className + '_sel';
	current_shape = shape_name;
	
	change_filter = true;
	
	var index_shape = current_shape.toLowerCase();
	
	
	minPrice = Math.round(range_shapes[index_shape]['min']['price']);
	maxPrice = Math.round(range_shapes[index_shape]['max']['price']);
	
	window.current_min_price = minPrice;
	window.current_max_price = maxPrice;
	
	minCarat = parseFloat(range_shapes[index_shape]['min']['carat']);
	maxCarat = parseFloat(range_shapes[index_shape]['max']['carat']);
	
	window.current_min_carat = minCarat;
	window.current_max_carat = maxCarat;
	
	minPriceFormat = range_shapes[index_shape]['min']['price_format'];
	maxPriceFormat = range_shapes[index_shape]['max']['price_format'];
	
	/*$('#sliderPrice').slider('option', 'min', minPrice);
	$('#sliderPrice').slider('option', 'max', maxPrice);
	setPriceValue(minPrice,'min');
	setPriceValue(maxPrice,'max');*/
	
	$('#sliderPrice').slider('option', 'min', 1);
	$('#sliderPrice').slider('option', 'max', 150);
	
	
	setPriceValue(1,'min');
	setPriceValue(150,'max');
	
	$('#dmd_proce_min').attr('value',minPriceFormat);
	$('#dmd_proce_max').attr('value',maxPriceFormat);
	
	$('#sliderCarat').slider('option','min',1);
	$('#sliderCarat').slider('option','max',150);
	
	$('#sliderCarat').slider('values',0,1);
	$('#sliderCarat').slider('values',1,150);

	minCarat = '' + minCarat;
	maxCarat = '' + maxCarat;
	
	if (minCarat.indexOf('.') != -1)
	{
		var tmp_split = minCarat.split('.')[1];
		if (tmp_split.length < 2)
		{
			minCarat += '0';
		}
	}
	else
	{
		minCarat += '.00';
	}
	
	if (maxCarat.indexOf('.') != -1)
	{
		var tmp_split = maxCarat.split('.')[1];
		if (tmp_split.length < 2)
		{
			maxCarat += '0';
		}
	}
	else
	{
		maxCarat += '.00';
	}
	
	$('#dmd_carat_min').attr('value', minCarat);
	$('#dmd_carat_max').attr('value',maxCarat);
	
	//update ring image.
	//todo: pasar esto a development.
	if (typeof shapes_rings_images != 'undefined' 
		&& typeof shapes_rings_images[shape_name.toLowerCase()] != 'undefined')
	{
		$('#dynamic_ring_image').attr('src',shapes_rings_images[shape_name.toLowerCase()]);
	}
	
	//unblock updates.
	blocked = false;
	showUpdateResultsLogin();
	updateResults();
}

function showUpdateResultsLogin(){
	var el = $('#main_results_container')[0];
	var pos = findPos(el);
	var left = pos[0]+250;
	$('#updateResultLogin').css({display:'block','left':left});
}

function hideUpdateResultsLoading()
{
	$('#updateResultLogin').css({display:'none'});
}

function getPageScrollOffset(response_page){
	var offset = (24 * 150 * (response_page - 1));
	return offset;
}

/**
	actualiza la lista de resultados.
**/
function updateResults(){
	if (page_in_progress)
	{
		return;
	}
	if (change_filter)
	{
		preResetGridData();
	}
	
	page_in_progress = true;
	
	//get price values.
	var priceValues = $('#sliderPrice').slider('values');
	var queryString = 'minPrice=' + priceValues[0] + '&maxPrice=' + priceValues[1];
	//get carat values
	var caratValues = $('#sliderCarat').slider('values');
	queryString += '&caratMin=' + caratValues[0] + '&caratMax=' + caratValues[1];
	//get color values.
	queryString += '&minColor=' + handleLeftColorNum + '&maxColor=' + handleRightColorNum;
	//get cut values
	queryString += '&minCut=' + handleLeftcutNum + '&maxCut=' + handleRightcutNum;
	//get clarity values.
	queryString += '&minClarity=' + handleLeftclarityNum + '&maxClarity=' + handleRightclarityNum;
	
	window.location.href="#/minPrice="+window.current_min_price+"&maxPrice="+window.current_max_price+"&maxCarat="+window.current_max_carat+"&minCarat="+window.current_min_carat+"&minColor="+handleLeftColorNum+"&maxColor="+handleRightColorNum+"&minCut="+handleLeftcutNum+"&maxCut="+handleRightcutNum+"&minClarity="+handleLeftclarityNum+"&maxClarity="+handleRightclarityNum+"&shape="+current_shape;
	
	params = {	/*minPrice      : priceValues[0],*/
				minPrice      : window.current_min_price,
				/*maxPrice      : priceValues[1],*/
				maxPrice      : window.current_max_price,
				/*minCarat      : caratValues[0],
				maxCarat      : caratValues[1],*/
				minCarat      : window.current_min_carat,
				maxCarat      : window.current_max_carat,
				minColor      : handleLeftColorNum,
				maxColor      : handleRightColorNum,
				minCut        : handleLeftcutNum,
				maxCut        : handleRightcutNum,
				minClarity    : handleLeftclarityNum,
				maxClarity    : handleRightclarityNum,
				shape         : current_shape,
				page          : last_page_loading,
				previous_page : pagina_anterior
			};
	
	if (is_big_scroll)
	{
		params.is_big_scroll = 'true';
	}
	
	$.post("get_search_results.php", params,
	  function(data){
//		console.log('se ejecuta el response data');
		hideUpdateResultsLoading();
		$('#results_container')[0].innerHTML = data;
		var cantidad_resultados = $('#cantidad_resultados').val();
		cantidad_paginas    = $('#cantidad_paginas').val();
		var response_page = parseInt($('#response_page').val());
		var pagina_anterior = parseInt($('#pagina_anterior').val());
		
		var max_scroll = $('#main_results_container')[0].scrollHeight;
		
		if (change_filter)
		{
			//el cambio de filtro puede darse tambien, por estar cargando la
			//pagina 1 de un listado, en caso de que la pagina anterior
			//sea == 2 y que el fake scroll no este en cero, hago el scroll
			//real hasta el maximo posible
			postResetGridData();
		}
		else
		{
			//alert('despues del update');
			//alert('pagina anterior: ' + $('#pagina_anterior').val() + ' pagina actual: ' + $('#response_page').val());
			
			var is_big_scroll = $('#is_big_scroll');
					
			if (is_big_scroll)
			{
				is_big_scroll  = is_big_scroll.val();
			}
			else
			{
				is_big_scroll = 'false';
			}
			
			if (is_big_scroll != 'true')
			{
				//checkeo el caso en que el usuario utiliza el big scroll
				//pero no carga ni la pagina anterior ni la pagina siguiente.
				if ((response_page != (pagina_anterior - 1)) 
					&& (response_page != (pagina_anterior + 1)))
				{
					is_big_scroll = 'true';
				}
				else if (0 == $('#scroll_div').scrollTop())
				{
					is_big_scroll = 'true';
				}
			}
			
			if (is_big_scroll == 'true')
			{
//				alert('is big scroll');
//				console.log('big scroll baby');
				//el usuario esta usando la barra de scroll, en lugar de utilizar la flecha.
				if (response_page == cantidad_paginas)
				{
					$('#main_results_container').scrollTop(3135);
				}
				else
				{
//					alert('is big scroll');
					$('#main_results_container').scrollTop(0);
				}
			}
			else
			{
//				alert('no es big scroll');
//				console.log('test this.');
				//el usuario se encuentra utilizando la flechita.
				if (response_page == (pagina_anterior + 1))
				{
//					console.log('el usuario mira la pagina siguiente');
					//el usuario paso a mirar la siguiente pagina.
					$('#main_results_container').scrollTop(0);
					window.ignore_scroll_event = true;
					//$('#scroll_div').scrollTop((3135 * (parseInt($('#response_page').val()) - 1)) + 470);
					
//					var offset = (3136 * (response_page - 1)) + (466 * (response_page - 2));
					//var offset = (24 * 150 * (response_page - 1));
					var offset = getPageScrollOffset(response_page);
					$('#scroll_div').scrollTop(offset);
					last_scroll = offset - getNavigatorScrollUnit();
//					alert('hugo');
				}
				else if (response_page == (pagina_anterior - 1))
				{
					//pagina anterior.
//					console.log('check pagina anterior');
					//set max scroll.
					$('#main_results_container').scrollTop(10000);
//					alert('current max scroll: ' + $('#main_results_container').scrollTop());
					window.ignore_scroll_event = true;
					var offset = getPageScrollOffset(response_page) + $('#main_results_container').scrollTop() - 19;
					last_scroll = offset + getNavigatorScrollUnit();
					$('#scroll_div').scrollTop(offset);
				}
			}
		}
		displayResultsNumber(cantidad_resultados);
		displayShapeName(current_shape);
		page_in_progress = false;
		hideUpdateResultsLoading();
	  }, "html");
	
}

function displayShapeName(name)
{
	$('#show_shape_name').html(name);
}

function displayResultsNumber(number)
{
	$('#show_cantidad_resultados').html(number);
}

function getPageToLoad(scroll){
	test_page = 1;
    while (true)
    {
    	offset = getPageScrollOffset(test_page+1);
        if (offset > 0)
            offset = offset - (466 - 19);
            
        if (scroll <= offset)
            break;
        else
            test_page = test_page + 1;
    }
    return test_page;
}

function findPos(obj)
{
    var curleft = curtop = 0;
    if (obj.offsetParent)
    {
        do
        {
	    curleft += obj.offsetLeft;
	    curtop += obj.offsetTop;
        }
        while (obj = obj.offsetParent);
    }

    return [curleft,curtop];
}

function getNavigatorName()
{
	var is_chrome =  navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
	if (is_chrome)
	{
		return 'CHROME';
	}
	else
	{
		return 'OTHER';
	}
}

function getNavigatorScrollUnit(){
	var increment = 0;
	if ('CHROME' == getNavigatorName())
	{
		increment = 40;
	}
	else
	{
		//work on firefox.
		increment = 19;
	}
	return increment;
}

function scrollGrid(scroll,event)
{
	if (window.ignore_scroll_event || page_in_progress)
	{
		if (window.ignore_scroll_event)
		{
			window.ignore_scroll_event=false;
		}
		return;
	}
	
	last_operation = '';
	
	if (0 != last_scroll)
	{
		delta_scroll = scroll - last_scroll;
	}
	else
	{
		delta_scroll = scroll;
	}
	
	last_scroll          = scroll;
    var page_to_load     = getPageToLoad(scroll);
    var cantidad_paginas = parseInt($('#cantidad_paginas').val());
    var max_scroll       = $('#main_results_container')[0].scrollHeight;
	var current_page     = parseInt($('#response_page').val());
	
	if (page_to_load > cantidad_paginas)
	{
		page_to_load = cantidad_paginas;
	}
	
    if (last_page_loading != page_to_load)
    {
        if (timeout_load_page != null)
        {
            clearTimeout(timeout_load_page);
            timeout_load_page = null;
        }

        timeout_load_page = setTimeout(function()
        {
            scroll_offset = scroll;
			if (page_to_load == cantidad_paginas)
			{
				//me fijo si el scroll container esta al maximo (El exterior)
				//esto puede ejecutarse tanto moviendo el scroll grande como haciendo click en la flechita
				//la diferencia se encuentra en que si uso el scroll de afuera necesariamente 
				//el scroll exterior tiene q estar al maximo.
				var max_fake_scroll = $('#scroll_div')[0].scrollHeight;
				var current_fake_scroll  = $('#scroll_div').scrollTop();
				
				//para que este al maximo la diferencia entre uno y el otro tiene que ser de 466.
				if ((max_fake_scroll - current_fake_scroll) == 466)
				{
					//alert('fucking scroll al maximo.');
					//scroll al maximo.
					loadPage(page_to_load,$('#response_page').val(),{is_big_scroll:true});
				}
				else
				{
					loadPage(page_to_load,$('#response_page').val());
				}
			}
			else
			{
				loadPage(page_to_load,$('#response_page').val());
			}
        },400);
    }
    else
    {
		var current_scroll = $('#main_results_container').scrollTop();
		var increment = 0;
		if (delta_scroll < 0)
		{
			increment = delta_scroll;
		}
		else
		{
			increment = delta_scroll;
		}
		
		
		var nav_increment = getNavigatorScrollUnit();
		if (increment > 0 && increment < nav_increment)
		{
			increment = getNavigatorScrollUnit();
		}
		else if (increment < 0 && (-1 *  nav_increment) < increment)
		{
			increment = -1 * nav_increment;
		}
		
//		console.log('increment: ' + increment);
		
		var scroll_grid = current_scroll + increment;
        if (scroll_grid < 0)
        {
//			alert('hola mundo.');
			last_page_loading = current_page - 1;
			page_to_load = last_page_loading;
			if (page_to_load == 0)
			{
				last_page_loading = 1;
				$('#main_results_container').scrollTop(0);
				return;
			}
			scroll_offset = scroll;
			//load previous page.
			loadPage(page_to_load,$('#response_page').val());
        }
		else
		{
			$('#main_results_container').scrollTop(current_scroll + increment);
		}
    }
    //$('#main_results_container').scrollTop(scroll);
	
	if ($('#scroll_div').scrollTop() == 0 && current_page == 1)
	{
		//todo: check this.
		$('#main_results_container').scrollTop(0);
	}
}

function loadPage(page,page_a,extra_params)
{
//	alertDebug();
	if (typeof page_a == 'undefined')
	{
		//si no se define la pagina anterior es la pagina actual.
		page_a = page;
	}
	
	if (typeof extra_params == 'undefined')
	{
		extra_params = {};
	}
	
    last_page_loading = page;
	pagina_anterior   = page_a;
	
	is_big_scroll = false;
	
	if (typeof extra_params.is_big_scroll != 'undefined' && extra_params.is_big_scroll)
	{
		is_big_scroll   = true;
	}
	
	showUpdateResultsLogin();
    updateResults();
}

function showPrdDetail(event,prd_id)
{
	in_detail_row = true;
	clearTimeoutDetail();
	
	if (last_prd_show != 0 && last_prd_show != prd_id)
	{
		//hide product arrow.
		$('#prd_detail_' + last_prd_show).css('display','none');
	}
	
	last_prd_show = prd_id;
	
	$('#prd_detail_popup').css('display','block');
	var pos = findPos($('#row_' + prd_id)[0]);
	
	var top = (pos[1] - $('#main_results_container').scrollTop()) + 'px';
	
	var flechita = $('#prd_detail_' + prd_id);
	flechita.css({top:top,display:'block'});
	
	//get product data.
	$('#stock').html($('#prd_'+prd_id+'_prd_dia_stock').val());
	$('#depth').html($('#prd_'+prd_id+'_prd_dia_depth').val());
	$('#table').html($('#prd_'+prd_id+'_prd_dia_table').val());
	$('#girdle').html($('#prd_'+prd_id+'_prd_dia_girdle').val());
	$('#sym').html($('#prd_'+prd_id+'_prd_dia_sym').val());
	$('#polish').html($('#prd_'+prd_id+'_prd_dia_polish').val());
	$('#flour').html($('#prd_'+prd_id+'_prd_dia_flour').val());
	$('#meas').html($('#prd_'+prd_id+'_prd_dia_meas').val());
	$('#ppc').html($('#prd_'+prd_id+'_prd_dia_ppc').val());
	$('#report').html($('#prd_'+prd_id+'_prd_dia_report').val());
	
	var certificate_value = $('#prd_'+prd_id+'_prd_dia_imglnk').val();
	if ('' != certificate_value)
	{
		$('#image_link').attr('href',certificate_value);
		$('#image_link').css('display','inline');
	}
	else
	{
		$('#image_link').css('display','none');
	}
	
	$('#prd_detail_link').attr('href','diamonds_s2.php?prd_id=' + prd_id);
	$('#basket_link').attr('href','sbasket.php?prd_id=' + prd_id + '&dmd');
	$('#prd_detail_linkesets').attr('href','engagement_diamond_detail.php?prd_id=' + prd_id);
	$('#ring_link').attr('href','engagement_sets_s3.php?dmd_id=' + prd_id + '&dmd');
}

function callPreviousDetailProcess()
{
	if (null !== hideDetail)
	{
		hideDetail();
		hideDetail = null;
	}
}

function clearTimeoutDetail()
{
	if (null !== timeout_show_detail)
	{
		clearTimeout(timeout_show_detail);
		timeout_show_detail = null;
	}
}

function hideProductDetailDelay(prd_id)
{
	clearTimeoutDetail();
	in_detail_row = false;
	hideDetail = function()
	{
		hidePrdDetail(prd_id);
	};
	
	timeout_show_detail = setTimeout(hideDetail,200);
}

function mouseOverDetail()
{
	in_detail_row=true;
	clearTimeoutDetail();
}

function hidePrdDetail(prd_id)
{
	if (!in_detail_row)
	{
		$('#prd_detail_popup').css('display','none');
		in_detail_row = false;
	}
	
	if (typeof prd_id == 'undefined' && last_prd_show != 0)
	{
		$('#prd_detail_' + last_prd_show).css('display','none');
	}
	else 
	{
		$('#prd_detail_' + prd_id).css('display','none');
	}
}

var compare_list = [];

function selectForCompare(check){
	var prd_id = check.value;
	if (check.checked)
	{
		if (compare_list.length < 7)
		{
			compare_list.push(prd_id);
		}
		else
		{
			check.checked = false;
		}
	}
	else
	{
		var temp_compare = [];
		for (var i=0; i < compare_list.length;i++)
		{
			if (compare_list[i] != prd_id)
			{
				temp_compare.push(compare_list[i]);
			}
		}
		
		compare_list = temp_compare;
	}
	
	$('#compare_number').html(compare_list.length);
}

$(function()
{
	var pos = findPos($('#results_container')[0]);
	var scroll_div_left = (pos[0] + 750);
	var scroll_div_top  = pos[1];

	if (document.all)
	{
		$('#scroll_div').css({width:'40px'});
		scroll_div_left = scroll_div_left - 25;
	}
	
	scroll_div_left += 'px';
	scroll_div_top  += 'px';
	
	$('#scroll_div').css({left:scroll_div_left,top:scroll_div_top});
	
	$('#scroll_div').scroll(function(event)
	{
		scrollGrid($(this).scrollTop(),event);
	});
	
	//assing select shape events.
	for (var i=0; i < shapes_ids.length;i++)
	{
		$('#' + shapes_ids[i]).bind('click',function(event)
		{
			event.preventDefault();
			selectShape($(this).attr('id').split('_')[1]);
		});
		
		$('#' + shapes_ids[i]).bind('focus',function(event)
		{
			try{
				$(this).blur();
			}
			catch(e){}
		});
	}
	
	$('#main_results_container').mousewheel(function(event,delta)
	{
		if (delta < 0)
		{
			$('#scroll_div').scrollTop($('#scroll_div').scrollTop() + 50);
		}
		else
		{
			$('#scroll_div').scrollTop($('#scroll_div').scrollTop() - 50);
		}
		return false;
	});
});
