
var elementCount = 0;
var sliderPosition = 0;
var sliderMax = 0;
var sliderItemWidth = 78;
var sliderItemsPerSlide = 6;
var overslide = 0;
var inOverslide = false;
var carouselBaseURL = "";

var lastKeyPressDateCarousel = 0;

var carouselImageURLPrefix = "";
var carouselPulldownOptions = new Array();
var carouselBlacklistOptions = new Array();

var carouselCurrentSelectedIndex = 0;
var carouselCurrentSelectedIndexMax = 0;

var productsJSON;

var carouselIsFiltered = false;
var altCarouselImage = "";


var __storedCarousel = null;
var __carouselProducts = null;


var productsPerPage = 5;





function showBreadcrumbs(message)
{
	var targetDiv = document.getElementById("filterCrumbs");
	targetDiv.style.display = "inline";
	targetDiv = document.getElementById("filterCrumbsDetail");
	targetDiv.innerHTML = message;

}






function resetCarouselList(){

	__carouselProducts = null;
	__storedCarousel.reset();
	$('#filterCrumbs').css('display','none');
	return true;
}

function getJSONProducts(){
	return productsJSON;
}

function filterListForBlacklistedProducts(list){
	var retval = new Array();
	var count = 0;
	for (var i = 0; i < list.length; i++) {
		if(carouselBlacklistOptions[list[i].refkey] != 'Y')
	    {
			retval[count] = list[i];
			count++;
	    }
	}
	return retval;
}

function loadProductCarousel(carousel, list){
	var flist = filterListForBlacklistedProducts(list);
	if(flist.length == 0){
		resetCarouselSlider();
	}else{
		carousel.size(flist.length);
		for (var i = 1; i <= flist.length; i++) {
	        carousel.add(i, getProductHTML(flist[i-1]));       
	    }
	}
}


function productItemLoadCallback(carousel, state)
{
	__storedCarousel = carousel;
	if( __carouselProducts == null){
		__carouselProducts = getJSONProducts();
	}
	loadProductCarousel(carousel, __carouselProducts);
}



function onInitCarousel(carousel, state)
{

	if(state == 'init') {
        __storedCarousel = carousel;
    }
}

function getProductHTML(item)
{
	return "<a href=\"#\" onclick=\"selectProductAction('"+ item.refkey + "');return false;\"><img src=\"" + carouselImageURLPrefix + "/"+ item.refkey + ".gif\" onerror=\"this.src='"+altCarouselImage+"';return false;\" width=\"75\" height=\"75\" alt=\"" + item.label + "\" /><div style=\"text-align:center;\">"+item.label+"</div></a>";
}


/**
 * This is the callback function which receives notification
 * when an item becomes the first one in the visible range.
 */
function productLastInCallback(carousel, item, idx, state) {
	var targetDiv = $("#pageCountIndicator");
	var unselectDiv = $("#carouselPageUnselect").html();
	var selectDiv = $("#carouselPageSelect").html();

	var totalElements = carousel.size();
	var shiftIdx = idx;
	var content = "";
	var addedCurrentPage = false;
	while(totalElements > productsPerPage){

		if(shiftIdx <= productsPerPage)
		{
			if((shiftIdx <= totalElements)&&(!addedCurrentPage)){
				content += selectDiv;
				addedCurrentPage = true;
			}else{
				content += unselectDiv;
			}
		}else{
			shiftIdx -= productsPerPage;
			content += unselectDiv;
		}
		totalElements -= productsPerPage;
	}
	if( !addedCurrentPage ){
		content += selectDiv;
	}else{
		content += unselectDiv;
	}
	targetDiv.html(content);
}





/*******************************/
/** Pulldown for carousel box **/
/*******************************/

function hideCarouselSelectorPulldown()
{
	carouselCurrentSelectedIndex = 0;
	var targetDiv = document.getElementById("productSelectPulldown");
	targetDiv.style.display = "none";
}

function resetCarouselSlider()
{
	resetCarouselList();
	carouselIsFiltered = false;
}





function updateCarouselPulldownOptionsList(item, keyEvent)
{

	var keynumber;
	var keyPressed = "";


	var targetDiv = document.getElementById("productSelectPulldown");
	if(window.event) // IE
	{
		keynumber = keyEvent.keyCode;
	}
	else if(keyEvent.which) // Netscape/Firefox/Opera
	{
		keynumber = keyEvent.which;
	}
	if((keynumber > 31) && (keynumber < 128))
	{
		if(keynumber == 38){
			if( carouselCurrentSelectedIndex > 0 ){
				setPulldownSelectedIndex( carouselCurrentSelectedIndex -1, carouselCurrentSelectedIndexMax, "carouselSelectorPulldownItem", "carouselSelectorPulldownItemOver", "carouselSelectorPulldownItemOff", document.productSelect.elements['searchModel'], targetDiv);
				carouselCurrentSelectedIndex--;
			}			
			return;
		}else if(keynumber == 40){
			if(carouselCurrentSelectedIndex < carouselCurrentSelectedIndexMax){
				setPulldownSelectedIndex( carouselCurrentSelectedIndex+1, carouselCurrentSelectedIndexMax, "carouselSelectorPulldownItem", "carouselSelectorPulldownItemOver", "carouselSelectorPulldownItemOff", document.productSelect.elements['searchModel'], targetDiv);
				carouselCurrentSelectedIndex++;
			}
			return;
		}else{
			keyPressed = String.fromCharCode(keynumber);
			carouselCurrentSelectedIndex = 0;
		}
	}else if(keynumber == 13)
	{
		hideCarouselSelectorPulldown();
		return;
	}

	var value = item.value;
	var d = new Date();
	lastKeyPressDateCarousel = d.getTime();
	var command = "redrawCarouselPulldownOptionsList('"+value+"');";
	setTimeout(command, 130);
}

function redrawCarouselPulldownOptionsList(value)
{

	var startingHTML = "<tr><td onMouseOver=\"carouselCurrentSelectedIndex=";
	var secondHTML = ";setPulldownSelectedIndex( ";
	var thirdHTML = ", 'carouselSelectorPulldownItem', 'carouselSelectorPulldownItemOver', 'carouselSelectorPulldownItemOff', document.productSelect.elements['searchModel'], document.getElementById('productSelectPulldown'));\" class=\"carouselSelectorPulldownItemOff\" id=\"carouselSelectorPulldownItem";
	var selectorClick = "\" onClick=\"carouselSelectorClick(this.getElementsByTagName('div')[0].innerHTML);\">";
	var endingHTML = "</td></tr>";

	if(value.length > 1)
	{

		resetCarouselSlider();
		var d = new Date();
		if(d.getTime() - lastKeyPressDateCarousel < 99)
		{
			return;
		}
		
		var baseDiv = document.getElementById("carouselPullDownAnchor");
		var url = "index?page=carouselPulldownSelector&keyin="+URLEncode(value);
		var targetDiv = document.getElementById("productSelectPulldown");

		var myTop = baseDiv.offsetTop + baseDiv.offsetHeight -4;
		var myLeft = baseDiv.offsetLeft;

		if( isIE())
		{
			myTop += 0;
			myLeft += 0;
		}
		
		myTop += getAbsoluteTop(baseDiv, false);
		myLeft += getAbsoluteLeft(baseDiv, false);
		
	
		targetDiv.style.top = myTop+"px";
		targetDiv.style.left = myLeft+"px";
		
		
		//$.get(url, function(data){
		//	targetDiv.innerHTML = data;});
		var divData = "<table border=\"0\" style=\"margin-left: 1px;vertical-align: bottom;\" cellpadding=\"0\" cellspacing=\"0\" width=\"99%\" >";
		var foundValue = false;
		var filterParam = "";
		var currentValue = "";
		var currentKey = "";
		var carouselList = [];
		var count = 1;
		value = value.toUpperCase();

		for (currentKey in carouselPulldownOptions) { 
			currentValue = carouselPulldownOptions[currentKey];
			if(currentValue.toUpperCase().indexOf(value) >= 0)
			{
				foundValue = true;
				divData += startingHTML;
				divData += count;
				divData += secondHTML;
				divData += count;
				divData += ",";
				divData += count+1;
				divData += thirdHTML;
				divData += count;
				divData += selectorClick;
				divData += currentValue;
				divData += "<div style=\"display: none;\">";
				divData += currentValue;
				divData += "</div>";
				divData += endingHTML;	
				
				carouselList[count-1]= {refkey:currentKey, label: currentValue};
				             
				filterParam = "&filter="+URLEncode(value);
				count++;
			}

			if(count > 40){
				break;
			}
			
		}

		carouselCurrentSelectedIndexMax = count;
		targetDiv.innerHTML = divData + "</table>";
		if(!foundValue)
		{

			resetCarouselSlider();
			hideCarouselSelectorPulldown();
		}
		else
		{

			__carouselProducts = carouselList;
			__storedCarousel.reset();
			$('#filterCrumbs').css('display','none');
			//navigateCarouselIframe(carouselBaseURL+filterParam);
			targetDiv.style.display = "block";			
		}
	}
	else
	{
		if(carouselIsFiltered)
		{
			resetCarouselSlider();
		}
		hideCarouselSelectorPulldown();
	}

}

function carouselSelectorClick(label)
{
	document.productSelect.elements['searchModel'].value = label;
	hideCarouselSelectorPulldown();
}

function blurProductSelectPulldown()
{
	setTimeout("hideCarouselSelectorPulldown();",500);

}


function validateProductSelect()
{
	var product = document.productSelect.elements['searchModel'].value;

	var code = "";
	var url = "index?page=carouselPulldownSelectorValidate&product="+URLEncode(product);
	$.get(url, function(data){
		if(data.indexOf('VALID') > -1)
		{
			code = data.substring( data.indexOf('VALID')+5 );
			document.productJump.elements['productCode'].value = stringTrim(code);
			document.productJump.submit();
		}else
		{
			var targetDiv = document.getElementById("carouselSelectPulldownWarning");
			targetDiv.style.display = "inline";
			targetDiv = document.getElementById("carouselSelectPulldownCodeWarning");
			targetDiv.innerHTML = product;
		}
	});
	
}