var compatData = new Array();
var doadvancedsearch=false;
var ScriptPath;
var partnerID;
var displayMode; //default - display all items including incompatible ones

function RootPath()
{
	var cart = getCookie('pcdesignerCart');
	return ScriptPath + "?items=" + (cart ? encodeURIComponent(cart) : "") + "&partner=" + (partnerID ? encodeURIComponent(partnerID) : "") + "&referrer=" + (document.referrer ? encodeURIComponent(document.referrer) : "");
}
function ImageServePath()
{
	return (partnerID ? "http://www.lambda-tek.com/componentshop/imageserve.pl" : "/componentshop/imageserve.pl");
}

function ShowTabbedPanel(rootname,selectedIdx)
{
	//do nothing if this tab is selected
	if (document.getElementById(rootname+"Tab"+selectedIdx).className == "selected"+rootname+"Tab")
		return;
	//hide all panels and unselect all tabs
	var singlePanel = document.getElementById(rootname+"Panel");
	for (i=1;;i++)
	{
		var tab = document.getElementById(rootname+"Tab"+i);
		if (tab == null) break;
		tab.className="unSelected"+rootname+"Tab";
		if (singlePanel == null)
			document.getElementById(rootname+"Panel"+i).style.display="none";
	}
	//new show selected tab+panel
	document.getElementById(rootname+"Tab"+selectedIdx).className="selected"+rootname+"Tab";
	if (singlePanel == null)
	{
		document.getElementById(rootname+"Panel"+selectedIdx).style.display="block";
		try
		{
			eval('Init' + rootname + 'Panel('+selectedIdx+')');
		}
		catch (e)
		{
		}
	} 
	else
	{
		GetAjaxData(RootPath() + "&command="+rootname+"&idx="+selectedIdx,rootname+"Panel",null,selectedIdx);
	}
}
function InitMainStagePanel(selectedIdx)
{
	if (selectedIdx==2)
	{
		var cart = getCookie('pcdesignerCart');
		var configurationUrl = document.getElementById('configurationUrl');
		var copyUrlBox = document.getElementById('configurationUrl');
		if (cart && cart != "")
		{
			if (configurationUrl) configurationUrl.value="http://www.lambda-tek.com/computing/" + ScriptPath + "?cart=" + (cart ? encodeURIComponent(cart) : "");
			if (copyUrlBox) copyUrlBox .style.display = "block";
		}
		else
		{
			if (copyUrlBox) copyUrlBox .style.display = "none";
		}
	}
}
var showIntro = false;
function InitStagePanel(stageIdx)
{
	if (document.getElementById("productSelector").style.display == "block" && !showIntro)
		document.getElementById("selectStageButton").style.display="none";
	if (showIntro)
	{
		document.getElementById("productSelector").style.display="block";
		GetAjaxData(RootPath() + "&command=ShowIntro","productSelector");
		showIntro = false;
	}
	if (document.getElementById("ProdTab1") != null)
	{
		ShowTabbedPanel('Prod',1);
		setStageCompatData(stageIdx);
	}
	ScrollStageTabTo(stageIdx);
}
function PrepareStagePanel(data,stageIdx)
{
	InitStagePanel(stageIdx);
}
function updateCompatData(data)
{
	compatData = data.split("\n");
	var compatDetails = "";
	var compatSummary = "";
	for (var stageIdx=1;stageIdx<=compatData.length;stageIdx++)
	{
		var compatDatElt = compatData[stageIdx-1].split("\t");
		var elt = document.getElementById("state" + stageIdx);
		if (!elt) continue;
		if (compatDatElt[0] == "")
		{
			elt.innerHTML = "";
			elt.className = ""; //zero width so invisible
		}
		else if (compatDatElt[0] == 0)
		{
			elt.innerHTML = "?";
			elt.className = "unknownCompatIcon";
			if (compatSummary != "-1") compatSummary = 0;
		}
		else if (compatDatElt[0] == 1)
		{
			elt.innerHTML = "&#10003;";
			elt.className = "okCompatIcon";
			if (compatSummary != "-1" && compatSummary != "0") compatSummary = 1;
		}
		else if (compatDatElt[0] == "-1")
		{
			elt.innerHTML = "!";
			elt.className = "noCompatIcon";
			compatSummary = -1;
		}
		compatDetails += compatDatElt[1];
	}
	var compatSummaryElt = document.getElementById('compatSummary');
	if (compatSummaryElt)
	{
		if (compatSummary == "0")
		{
			compatSummaryElt.innerHTML = "? Unsure about some compatabilities";
			compatSummaryElt.className = "unknownCompatIcon";
		}
		else if (compatSummary == "1")
		{
			compatSummaryElt.innerHTML = "&#10003; All Components are compatible";
			compatSummaryElt.className = "okCompatIcon";
		}
		else if (compatSummary == "-1")
		{
			compatSummaryElt.innerHTML = "! Some incompatabilities detected";
			compatSummaryElt.className = "noCompatIcon";
		}
	}
	var compatDetailsElt = document.getElementById('compatDetails');
	if (compatDetailsElt)
		compatDetailsElt.innerHTML = compatDetails;
}
function setStageCompatData(stageIdx)
{
	var compatSummaryElt = document.getElementById('stageCompatSummary');
	if (!compatSummaryElt) return; // area not rendered 
	
	var compatDatElt = compatData[stageIdx-1].split("\t");
	document.getElementById('stageCompatDetails').innerHTML = compatDatElt[1];
	var compatSummaryStr;
	if (compatDatElt[0] == "0")
	{
		compatSummaryElt.innerHTML = "? Uncertain or unavailable compatability";
		compatSummaryElt.className = "unknownCompatIcon";
	}
	else if (compatDatElt[0] == "1")
	{
		compatSummaryElt.innerHTML = "&#10003; Component is compatible";
		compatSummaryElt.className = "okCompatIcon";
	}
	else if (compatDatElt[0] == "-1")
	{
		compatSummaryElt.innerHTML = "! Some incompatabilities detected";
		compatSummaryElt.className = "noCompatIcon";
	}
	document.getElementById('stageCompatArea').style.display = (compatDatElt[0] != "" ? 'block':'none');
}
function OnUpdateCart(responseText)
{
	var cartData = responseText.split("<!--AJAXSEPARATOR-->");
	document.getElementById("cartArea").innerHTML = cartData[0];
	var partnerCartArea = document.getElementById("partnerCartArea");
	if (partnerCartArea)
		partnerCartArea .innerHTML = cartData[1];
}
function OnSelectProduct(responseText,selectedIdx)
{
	updateCompatData(responseText);
	GetAjaxData(RootPath() + "&command=ShowSelectedProduct&idx="+selectedIdx,"selectedProdArea",PrepareStagePanel,selectedIdx);
	GetAjaxData(RootPath() + "&command=updatecart","",OnUpdateCart,null,"cartArea");
}
function SelectProduct(selectedIdx,stage,pcode,qty)
{
	if (qty == null || qty == "") qty=1;
	SetCartItem(stage,pcode,qty);
	GetAjaxData(RootPath() + "&command=getCompatData","",OnSelectProduct,selectedIdx);
	document.getElementById("StageTabImg"+selectedIdx).src = ImageServePath() + "?prodID=" + pcode;
}
function OnChangeProductQty(responseText,stageIdx)
{
	updateCompatData(responseText);
	setStageCompatData(stageIdx);
	GetAjaxData(RootPath() + "&command=updatecart","",OnUpdateCart,null,"cartArea");
}
function ChangeProductQty(stage,stageIdx,pcode,qty)
{
	if (qty == null || qty == "") qty=1;
	SetCartItem(stage,pcode,qty);
	GetAjaxData(RootPath() + "&command=getCompatData","",OnChangeProductQty,stageIdx);
}
function RemoveProduct(selectedIdx,stage,stageImage,pcode)
{
	RemoveCartItem(stage);
	GetAjaxData(RootPath() + "&command=getCompatData","",OnSelectProduct,selectedIdx);
	document.getElementById("StageTabImg"+selectedIdx).src=stageImage;
	var elt = document.getElementById('productSelect'+pcode);
	if (elt != null) elt.checked=false;
}
function OnSubmitSpecData(responseText,selectedIdx)
{
	alert(responseText);
	GetAjaxData(RootPath() + "&command=getCompatData","",OnSelectProduct,selectedIdx);
}
function submitSpecDataRaw(selectedIdx,pcode,specData)
{	
	GetAjaxData(RootPath() + "&command=submitSpecData&pcode="+pcode+"&specData="+encodeURIComponent(specData),"",OnSubmitSpecData,selectedIdx);
}
function submitSpecData(selectedIdx,pcode)
{
	var specData = constructSpecData(pcode);
	submitSpecDataRaw(selectedIdx,pcode,specData);
}
function OnSubmitReview(responseText,selectedIdx)
{
	alert(responseText);
	GetAjaxData(RootPath() + "&command=ShowSelectedProduct&idx="+selectedIdx,"selectedProdArea",PrepareStagePanel,selectedIdx);
}
function submitReview(selectedIdx,pcode,reviewData,rating)
{
	if (rating == "")
	{
		alert("please select a rating");
		return;
	}
	if (reviewData == "")
	{
		alert("you have not written anything!");
		return;
	}
	GetAjaxData(RootPath() + "&command=submitReview&pcode="+pcode+"&reviewData="+encodeURIComponent(reviewData)+"&rating="+rating,"",OnSubmitReview,selectedIdx);
}
function SetCartItem(stage,pcode,qty)
{
	var cart = getCookie('pcdesignerCart');
	var reg = new RegExp("\n"+stage+"\t.+?\t.+?\n");
	var newCartElt = stage+"\t"+pcode+"\t"+qty+"\n";
	var cart1 = "\n" + cart;
	if (!cart || cart.length == 0)
	{
		cart = "\n" + newCartElt;
	}
	else if (reg.test(cart1))
	{
		cart1 = cart1.replace(reg,"\n"+newCartElt);
		cart = cart1.substring(1);
	}
	else
	{
		cart += newCartElt;
	}
	setCookie("pcdesignerCart", cart, null, "/");   
}

function RemoveCartItem(stage)
{
	var cart=getCookie('pcdesignerCart');
	if (!cart) return;
	var reg = new RegExp("\n"+stage+"\t.+?\t.+?\n");
	var cart1 = "\n" + cart;
	if (reg.test(cart1))
	{
		cart1 = cart1.replace(reg,"\n");
		cart = cart1.substring(1);
	}
	setCookie("pcdesignerCart", cart , null, "/");   
}

var filterKeyword,filterManuf,filterStock,filterCompat;
var productFilters = new Array();
function getFilterUrl()
{
	var filterUrl =  
		"&filterKeyword="+encodeURIComponent(filterKeyword)+
		"&filterManuf="+encodeURIComponent(filterManuf)+
		"&filterStock="+filterStock+
		"&filterCompat="+encodeURIComponent(filterCompat);
	for (var i=0;i<productFilters.length;i++)
	{
		filterUrl += "&pFilter" + i + "="+encodeURIComponent(productFilters[i]);
	}
	return filterUrl;
}

function OnUpdateProductSelector()
{
	document.getElementById("advancedSearch").style.display = doadvancedsearch ? "block" : "none";
	document.getElementById('moreOptionsLink').innerHTML = doadvancedsearch ? "hide advanced filters" :  "show advanced filters";
}
function UpdateProductSelector(selectedIdx,pageno)
{
	filterKeyword = document.getElementById('filterKeyword').value;
	filterManuf = document.getElementById('filterManuf').value;
	filterStock = document.getElementById('filterStock').value;
	var filterCompatElt = document.getElementById('filterCompat');
	filterCompat = filterCompatElt  ? filterCompatElt .value : '1';
	for (var i=0;;i++)
	{
		var elt = document.getElementById('pFilter' + i);
		if (elt == null) break;
		productFilters[i] = elt.value;
	}
	GetAjaxData(RootPath() + "&command=ShowProductSelector&idx="+selectedIdx+"&pageno="+pageno+getFilterUrl(),"productSelector",OnUpdateProductSelector);
}

function ResetFilters(selectedIdx,pageno)
{
	filterKeyword = "";
	filterManuf = "";
	filterStock = "";
	filterCompat = "";
	for (var i=0;;i++)
	{
		var elt = document.getElementById('pFilter' + i);
		if (elt == null) break;
		productFilters[i] = "";
	}
	GetAjaxData(RootPath() + "&command=ShowProductSelector&idx="+selectedIdx+"&pageno="+pageno+getFilterUrl(),"productSelector",OnUpdateProductSelector);
}

function ShowProductSelectorPage(selectedIdx,pageno,sortid,sortdir)
{
	GetAjaxData(RootPath() + "&command=ShowProductSelectorPage&idx="+selectedIdx+"&pageno="+pageno+getFilterUrl()+"&sortid="+sortid+"&sortdir="+sortdir,"prodList");
}

function OnShowProductSelector()
{
	document.getElementById("selectStageButton").style.display="none";
	doadvancedsearch=false;
	document.getElementById("advancedSearch").style.display="none";
}

function ShowProductSelector(selectedIdx,pageno)
{
	//reset filters
	filterKeyword='';
	filterManuf='';
	filterStock='1';
	filterCompat=(displayMode == "complete" ? '2' : '1');
	productFilters = new Array();
	//now show page
	document.getElementById("productSelector").style.display="block";
	GetAjaxData(RootPath() + "&command=ShowProductSelector&idx="+selectedIdx+"&pageno="+pageno+getFilterUrl(),"productSelector",OnShowProductSelector,null,'selectStageButton');
}

function ShowCompatInfo0(compatFlag, compatInfo,parentElt,xfact,yfact,xscrollRef,yscrollRef)
{
	var xshift = xscrollRef ? -document.getElementById(xscrollRef).scrollLeft : 0;
	var yshift = yscrollRef ? -document.getElementById(yscrollRef).scrollTop : 0;
	var elt = document.getElementById('popupInfo');
	if (compatFlag == 0)
	{
		elt.className = "popupInfoUnknownCompat";
		elt.innerHTML = compatInfo == "" ? "Uncertain or unavailable compatability" : compatInfo;
	}
	else if (compatFlag == 1)
	{
		elt.className = "popupInfoOkCompat";
		elt.innerHTML = compatInfo == "" ? "Compatability is OK" : compatInfo;
	}
	else if (compatFlag == -1)
	{
		elt.className = "popupInfoNoCompat";
		elt.innerHTML = compatInfo;
	}
	displayMenu('popupInfo',parentElt,0.8,parentElt,0.8,xfact,yfact,xshift,yshift);
}


function ShowCompatInfo(stageIdx,parentElt,xfact,yfact,xscrollRef,yscrollRef)
{
	var compatDatElt = compatData[stageIdx-1].split("\t");
	ShowCompatInfo0(compatDatElt[0], compatDatElt[1], parentElt,xfact,yfact,xscrollRef,yscrollRef);
}

function HandleReturn(e)
{
	if (e.keyCode == 13)
		return false
	else
		return true;
}

var scrollTimerInterval = 25;
var stageTabArea, scrollTimer, stageTabDelta;
function InitScrollStageTab()
{
	stageTabArea = document.getElementById('stageTabArea');
	var stageTabAreaWidth = getElementWidth(stageTabArea);
	var stageTabWidth = getElementWidth(document.getElementById('stageTab'));	
	stageTabDelta = stageTabWidth - stageTabAreaWidth ;
}
function CheckScrollHandles()
{
	InitScrollStageTab();
	document.getElementById('stageTabGofoward').style.visibility = stageTabArea.scrollLeft>=stageTabDelta ? 'hidden' : 'visible';
	document.getElementById('stageTabGoback').style.visibility = stageTabArea.scrollLeft<=0 ? 'hidden' : 'visible';
}
function ScrollStageTab0(scrollInterval)
{
	stageTabArea.scrollLeft += scrollInterval;
	CheckScrollHandles();
	scrollTimer = setTimeout('ScrollStageTab('+scrollInterval+')',scrollTimerInterval);
}

function ScrollStageTab(scrollInterval)
{
	InitScrollStageTab();
	ScrollStageTab0(scrollInterval);
}

function ScrollStageTabToLeft(stageTabIRight,stageTabAreaRight)
{
	if (stageTabIRight - stageTabArea.scrollLeft > stageTabAreaRight)
	{
		stageTabArea.scrollLeft += 8;
		scrollTimer = setTimeout('ScrollStageTabToLeft('+stageTabIRight+','+stageTabAreaRight+')',scrollTimerInterval);
	}
}
function ScrollStageTabToRight(stageTabILeft,stageTabAreaLeft)
{
	if (stageTabILeft - stageTabArea.scrollLeft < stageTabAreaLeft)
	{
		stageTabArea.scrollLeft -= 8;
		scrollTimer = setTimeout('ScrollStageTabToRight('+stageTabILeft+','+stageTabAreaLeft+')',scrollTimerInterval);
	}
}
function ScrollStageTabTo(stageIdx)
{
	InitScrollStageTab();
	var stageTabI = document.getElementById('StageTab' + stageIdx);
	var stageTabIWidth = getElementWidth(stageTabI);
	var stageTabAreaLeft = getElementLeft(stageTabArea);
	var stageTabAreaRight = stageTabAreaLeft  + getElementWidth(stageTabArea);
	var stageTabILeft = getElementLeft(stageTabI);
	var stageTabIRight = stageTabILeft +getElementWidth(stageTabI);
	if (stageTabILeft - stageTabArea.scrollLeft < stageTabAreaLeft)
	{
		ScrollStageTabToRight(stageTabILeft,stageTabAreaLeft)		
		CheckScrollHandles();
	}
	else if (stageTabIRight - stageTabArea.scrollLeft > stageTabAreaRight )
	{
		ScrollStageTabToLeft(stageTabIRight,stageTabAreaRight)		
		CheckScrollHandles();
	}
}

function StopStageTabScroll()
{
	clearTimeout(scrollTimer);
}

function toggleAdvancedSearch()
{
	var advancedSearch = document.getElementById('advancedSearch');
	if (advancedSearch.style.display == 'block')
	{
		advancedSearch.style.display='none';
		document.getElementById('moreOptionsLink').innerHTML="show advanced filters";
		doadvancedsearch=false;
	}
	else
	{
		advancedSearch.style.display='block';
		document.getElementById('moreOptionsLink').innerHTML="hide advanced filters";
		doadvancedsearch=true;
	}
}

function OnDisplayInfo(text,parentElt)
{
	displayMenu('showInfo',parentElt,0.5,parentElt,0.5,0.5,0.5);
}
function DisplayInfo(eltname,eltparent,parent)
{
	var showInfo = document.getElementById('showInfo');
	showInfo.innerHTML = "";
	showInfo.className = 'showInfo';
	var parentElt=document.getElementById(parent);
	GetAjaxData(RootPath() + "&command=getinfo&elt="+eltname + "&parent="+eltparent,'showInfo',OnDisplayInfo,parentElt);
}
function OnAddToShopCart(responseText)
{
	document.getElementById('placeInShoppingBasketMessage').innerHTML = "";
	var data = responseText.split("<!--AJAXSEPARATOR-->");
	if (data[0] == "OK")
	{
		if (data[1] != "")
		{
			alert(data[1]);
		}
		location.href = data[2];
	}
	else
	{
		alert(data[1]);
	}
}
function AddToShopCart()
{
	var cart = getCookie('pcdesignerCart');
	if (!cart || cart == "")
	{
		alert("your Design is empty. Please select some components");
		return;
	}
	var shoppingcart = getCookie('shoppingcart');
	if (shoppingcart == "" || shoppingcart == null || confirm("This will erase all items currently in your Shopping Cart. Are you sure you want to continue?"))
	{
		alert("DISCLAIMER.\nWe cannot be held responsible for any unlikely mistakes there may be in the compatability information provided in PC Designer.\nIf necessary, please check with us before purchase");
		document.getElementById('placeInShoppingBasketMessage').innerHTML = "performing real time stock check ...";
		GetAjaxData(RootPath() + "&command=addtoshopcart&numSystems=" + document.getElementById('numSystems').value,null,OnAddToShopCart,null,'placeInShoppingBasket');
	}
}
function ClearCart()
{
	var cart = getCookie('pcdesignerCart');
	if (cart && cart != "" && confirm("Are you sure you want to erase your current Design?"))
	{
		setCookie("pcdesignerCart","" , null, "/");
		location.href=location.href; //reload page
	}
}
function OnSaveConfiguration(responseText)
{
	if (responseText == '0')
	{
		alert('Configutation saved successfully\nYou can view your saved Designs by pressing on the \"View Saved Designs\" button ');
	} 
	else if (responseText == '1')
	{
		alert('please specify a name for your Design');
	} 
	else
	{
		alert('!! a system error has occurred !!');
	} 
}
function SaveConfiguration()
{
	var cart = getCookie('pcdesignerCart');
	if (cart && cart != "")
	{
		var name = document.getElementById('configurationName').value;
		if (name == "")
		{
			alert('please specify a name for your Design');
		}
		else
		{
			GetAjaxData(RootPath() + "&command=saveConfiguration&name=" + encodeURIComponent(name),"",OnSaveConfiguration);
		}
	}
}
function OnInitPCDesigner2(responseText)
{
	updateCompatData(responseText);
	var initStage = getCookie('initStage')
	ShowTabbedPanel('Stage',initStage ? initStage : 1);
	ShowTabbedPanel('MainStage',1);
	GetAjaxData(RootPath() + "&command=updatecart","",OnUpdateCart,null,"cartArea");
}
function OnInitPCDesigner()
{
	CheckScrollHandles();
	GetAjaxData(RootPath() + "&command=getCompatData","",OnInitPCDesigner2);
}
function InitPCDesigner(ScriptPath0,container,partnerID0)
{
	ScriptPath = ScriptPath0;
	partnerID = partnerID0;
	if (partnerID && partnerID != "")
	{
		hourGlassIcon = "http://www.lambda-tek.com/loading1.gif";
	}
	else
	{
		showIntro = getCookie('showIntro') ? true : false;
		displayMode = getCookie('displayMode');
		hourGlassIcon = "../loading1.gif";
	}
	var numSystems = getCookie('numSystems');
	GetAjaxData(RootPath() + "&command=InitPCDesigner&numSystems=" + (numSystems ? numSystems : ""),container,OnInitPCDesigner);
}

function OnSubmitSimpleModeOrder(responseText)
{
	var data = responseText.split("\t");
	if (data[0] == "OK")
	{
		location.href = data[1];
	}
	else
	{
		alert(data[1]);
	}
}
function SubmitSimpleModeOrder(form)
{
	GetAjaxData(RootPath() + "&command=SubmitSimpleModeOrder" + 
		"&BasePrice=" + encodeURIComponent(form.BasePrice.value) + 
		"&numSystems=" + encodeURIComponent(form.numSystems.value) + 
		"&ShippingCost=" + encodeURIComponent(form.ShippingCost.value) + 
		"&cart=" + encodeURIComponent(form.cart.value) + 
		"&itemsurl=" + encodeURIComponent(form.itemsurl.value + "&numSystems=" + form.numSystems.value) + 
		"&name=" + encodeURIComponent(form.name.value) + 
		"&email=" + encodeURIComponent(form.email.value) + 
		"&telephone=" + encodeURIComponent(form.telephone.value),
		"",OnSubmitSimpleModeOrder,null,'placeInShoppingBasket');	
}

function OnSubmitAdvancedModeOrder(form)
{
	form.itemsurl.value = document.getElementById("ItemsUrl").value + "&numSystems=" + form.numSystems.value;
}
