var ProductID=0;
var FreeItems="";
var OutOfStock=false;
var LastRedStar=null;

function CheckSelector(obMP)
{
	if(obMP.Error) return false;
	if(OutOfStock) return false;
	if(ProductID<=0)
	{
		for(var i=0;i<obMP.Keys.Rows.length;i++)
		{
			var Sel=$(obMP.ClientID+"AtrbSel_"+i);
			var Msg=$(obMP.ClientID+"AtrbMsg_"+i);
			if(Sel.selectedIndex<1)
			{
				alert(MSGSELECT.replace("[s]",obMP.Keys.Rows[i].KeyName));
				Msg.innerHTML="*";
				LastRedStar=Msg;
				return false;
			}
		}
		return false;
	}
	var FreeItems;
	if(typeof(checkFreeItems)=="function")
		FreeItems=checkFreeItems();
	else
		FreeItems="";
	if(FreeItems=="ERROR") return false;
	
	$("ButtonLink").href=szStoreURL + szCartPage + "?productID=" + ProductID + ((FreeItems == "") ? "" : "&freeitems=" + FreeItems);

	//Add for yahoo
	if(window.parent)
	{
		window.parent.location=$("ButtonLink").href;
		return false;
	}

	return true;
}


function ShowAttributeSelector(obMP, ContainerID)
{

	if(!obMP.Error)
	{
		if(obMP.SingleProduct)
		{
			ProductID=obMP.Products.Rows[0].nProductID;
		}
		else
		{
			Container=$(ContainerID);
			Container.style.display="block";
			for(var i=0;i<obMP.Keys.Rows.length;i++)
			{
				var Sel=document.createElement("SELECT");
				Sel.id=obMP.ClientID+"AtrbSel_"+i;
				Sel.options.add(new Option(obMP.Keys.Rows[i].KeyName , i+",-1,-1,"+obMP.ClientID));
				if(i>0) Sel.disabled=true;
				else
				{
					var szPre="";
					for(var j=0;j<obMP.Products.Rows.length;j++)
					{
						var szValue=obMP.Products.Rows[j].Key_0;
						var nPdtID=obMP.Products.Rows[j].nProductID;
						if(szValue!=null && szValue!=szPre)
						{
							Sel.options.add(new Option(szValue, i+","+j+","+nPdtID+","+obMP.ClientID));
							szPre=szValue;
						}
					}
				}
				if (!document.addEventListener)
					Sel.attachEvent('onchange', AtrbSel_OnChange); 
				else
					Sel.addEventListener("change", AtrbSel_OnChange, false);
				Container.appendChild(Sel);
			    
				var Msg=document.createElement("SPAN");
				Msg.id=obMP.ClientID+"AtrbMsg_"+i;
				Container.appendChild(Msg);
			}
		}
	}
	ShowInfor(obMP);
}

function AtrbSel_OnChange(event)
{
	var obj= event.srcElement? event.srcElement:event.target;
	var Index=obj.value.split(",");
	var m=parseInt(Index[0]);  //KeyIndex
	var n=parseInt(Index[1]);  //PdtIndex
	var o=parseInt(Index[2]);  //ProductID
	var p=Index[3];  //ClientID of MasterProduct object
	var obMP=eval(p);
	
	if(LastRedStar!=null)
	{
		LastRedStar.innerHTML="";
		LastRedStar=null;
	}
	
	if(obMP.Keys.Rows[m].KeyID==1 || obMP.Keys.Rows[m].KeyID==26)
	{
		//Color selector changed, update product image
		if(n>=0)
		{
			var AtrbValueID=eval("obMP.Products.Rows[n].VID_"+m);
			if($("prodImage"))
			//add by hao yang for fix jp old image 2009-6-11
			 if (obMP.Country==81 &&  obMP.MasterProductID==11397)
			 $("prodImage").src=szImgServer+"/images/products/large/"+obMP.MasterProductID+"_"+AtrbValueID+"_"+obMP.Country+".png";
			 else
			 //end hao yang modify
			 $("prodImage").src=szImgServer+"/images/products/large/"+obMP.MasterProductID+"_"+AtrbValueID+".png";
				
		}
	}
	if(m == obMP.Keys.Rows.length-1)
	{
		//The last dropdown list
		ProductID=o;
	}
	else
	{
		ProductID=0;
		OutOfStock=false;
		
		if(n<0)
		{
			//Select the first item, disable all items after it
			for(var i=m+1;i<obMP.Keys.Rows.length;i++)
			{
				$(obMP.ClientID+"AtrbSel_"+i).options.length=1;
				$(obMP.ClientID+"AtrbSel_"+i).disabled=true;
			}
		}
		else
		{
			//Set next dropdown list
			var ParentAttrib=eval("obMP.Products.Rows[n].Key_"+m);
			var NextSel=$(obMP.ClientID+"AtrbSel_"+(m+1));
			NextSel.options.length=1;
			NextSel.disabled=false;
			var szPre="";
			for(var i=n;i<obMP.Products.Rows.length;i++)
			{
				var szParentValue=eval("obMP.Products.Rows[i].Key_"+m);
				var szValue=eval("obMP.Products.Rows[i].Key_"+(m+1));
				var nPdtID=obMP.Products.Rows[i].nProductID;
				if(szParentValue!=ParentAttrib) break;
				if(szValue!=null && szPre!=szValue)
				{
					NextSel.options.add(new Option(szValue, (m+1)+","+i+","+nPdtID+","+obMP.ClientID));
					szPre=szValue;
				}
			}
			//disable all items after it
			for(var i=m+2;i<obMP.Keys.Rows.length;i++)
			{
				$(obMP.ClientID+"AtrbSel_"+i).options.length=1;
				$(obMP.ClientID+"AtrbSel_"+i).disabled=true;
			}
		}
	}
	ShowInfor(obMP);
}

function ShowInfor(obMP)
{
	if(ProductID>0)
	{
		obPdts=obMP.Products;
		var i;
		for(i=0;i<obPdts.Rows.length;i++)
			if(obPdts.Rows[i].nProductID==ProductID) break;

		if(i<obPdts.Rows.length)
		{
			Sku=obPdts.Rows[i].szSku;
			JapanModel=obPdts.Rows[i].szJapanModel;
			Stock=obPdts.Rows[i].nStock;
			StockInTransit=obPdts.Rows[i].nStockInTransit;
			LeadTime=obPdts.Rows[i].nLeadTime;
			DeliveringTime=obPdts.Rows[i].nDeliveringTime;
			$("ShippingMsg").style.display="block";
			$("ProductSku").innerHTML=SKU.replace("[s]", Sku);
			var n=-999;
			if(Stock>0) n=DeliveringTime;
			else if(StockInTransit>0) n=LeadTime;
			if(n==-999)
			{
				$("OutOfStock").style.display="block";
				$("Delivery").style.display="none";
				$("OutOfStock").innerHTML=obMP.IsComingSoon?COMINGSOON:BACKINSTOCK;
				OutOfStock=true;
				$("ButtonLink").style.backgroundImage = "url(/images/butn_grey_bg.gif)";
			}
			else
			{
				$("OutOfStock").style.display="none";
				$("Delivery").style.display="block";
				if(n==1)
					$("Delivery").innerHTML=SHIP1DAY;
				else
					$("Delivery").innerHTML=SHIP.replace("[n]",n);
				OutOfStock=false;
			}
		}
		else
			$("ShippingMsg").style.display="none";
	}
	else
		$("ShippingMsg").style.display="none";
		
	if(ProductID>0)
		$("ButtonLink").href=szStoreURL+"/ShoppingCart/AddToCart.aspx?productID=" + ProductID;
	else
		$("ButtonLink").href="#";

	if(typeof(freeItemRefresh)=="function")
		freeItemRefresh(OutOfStock?0:ProductID);
}

function PreLoadImg(obMP)
{
	var PreLoadImages=new Array();
	obAtrbs=obMP.Attributes;
	for(var i=0;i<obAtrbs.Rows.length;i++)
	{
		if(obAtrbs.Rows[i].nAttributeKeyID==1 || obAtrbs.Rows[i].nAttributeKeyID==26)
		{
			//Color Attribute
			AtrbID=obAtrbs.Rows[i].nAttributeValueID;
			var j=0;
			for(;j<PreLoadImages.length;j++)
				if(PreLoadImages[j]==AtrbID) break;
			if(j==PreLoadImages.length) PreLoadImages[PreLoadImages.length]=AtrbID;
		}
	}
	for(var i=0;i<PreLoadImages.length;i++)
	{
		var IMG=new Array();
		IMG[IMG.length]=new Image();
		IMG[IMG.length-1].src=szImgServer+"/images/products/large/"+obMP.MasterProductID+"_"+PreLoadImages[i]+".png";
	}
	if(obMP.SingleProduct && PreLoadImages.length==1)
	{
		//Single Product with color
		$("prodImage").src=szImgServer+"/images/products/large/"+obMP.MasterProductID+"_"+PreLoadImages[0]+".png";
	}
}

function InitAttributeTable(obMP)
{
	if(obMP.Keys.Rows.length==0) obMP.SingleProduct=true;
	if(obMP.Error || obMP.SingleProduct) return;
	obKeys=obMP.Keys;
	obPdts=obMP.Products;
	obAtrbs=obMP.Attributes;
	
	var KeyIndex={};
	for(var i=0;i<obKeys.Rows.length;i++)
	{
		if(obKeys.Rows[i].Count==1) { obKeys.RemoveRow(i); i--; }
		else KeyIndex[obKeys.Rows[i].KeyID]=i;
	}
	var PdtIndex={};
	for(var i=0;i<obPdts.Rows.length;i++)
		PdtIndex[obPdts.Rows[i].nProductID]=i;
	for(var i=0;i<obAtrbs.Rows.length;i++)
	{
		var KeyID=obAtrbs.Rows[i].nAttributeKeyID;
		var PdtID=obAtrbs.Rows[i].nProductID;
		if(KeyIndex[KeyID]!=null && PdtIndex[PdtID]!=null)
		{
			if(obPdts.Rows[PdtIndex[PdtID]].AtrbCount==null)
				obPdts.Rows[PdtIndex[PdtID]].AtrbCount=0;

			if(eval("obPdts.Rows[PdtIndex[PdtID]].VID_"+KeyIndex[KeyID]+"==null"))
			{
				var AtrbName=obAtrbs.Rows[i].szAttributeValueName;
				var AtrbID=obAtrbs.Rows[i].nAttributeValueID;
				var Rank=obAtrbs.Rows[i].nRank;
				var FullRank=obPdts.Rows[PdtIndex[PdtID]].Rank;
				if(FullRank==null) FullRank=0;
				FullRank=parseInt(FullRank)+GetRank(Rank,obKeys.Rows.length-KeyIndex[KeyID]-1);
				obPdts.Rows[PdtIndex[PdtID]].Rank=FullRank;
				
				eval("obPdts.Rows[PdtIndex[PdtID]].Key_"+KeyIndex[KeyID]+"=AtrbName;");
				eval("obPdts.Rows[PdtIndex[PdtID]].VID_"+KeyIndex[KeyID]+"=AtrbID;");
				obPdts.Rows[PdtIndex[PdtID]].AtrbCount++;
			}
		}
	}
	//remove products that haven't enought attributes
	for(var i=0;i<obPdts.Rows.length;i++)
	{
		if(obPdts.Rows[i].AtrbCount != obKeys.Rows.length)
		{
			obPdts.RemoveRow(i);
			i--;
		}
	}
	obPdts.Rows.sort(SortProduct);
	//document.getElementById("Debug").innerText+=obPdts.ToString();
}
function GetRank(n,i)
{
	var Step=10000;
	return n*Math.pow(Step,i);
}

/*****************************************************************************
 *    Functions for Table object and MasterProduct object                    *
 *    By Chen Wu                                                             *
 *    2/19/2008 Beijing                                                      *
 *****************************************************************************/
var Row=function(nIndex)
{	this.Index=nIndex; }

var Table=function()
{	this.Rows=new Array(); }

Table.prototype.AddRow=function()
{
	var obRow=new Row(this.Rows.length);
	this.Rows[this.Rows.length]=obRow;
	return obRow;
}

Table.prototype.RemoveRow=function(nIndex)
{
	if(nIndex<this.Rows.length)
	{
		for(var i=nIndex;i<this.Rows.length-1;i++)
			this.Rows[i]=this.Rows[i+1];
		this.Rows.length--;
	}
}

Table.prototype.ListColumn=function(szColumn)
{
	var Result="";
	for(var i=0;i<this.Rows.length;i++)
	{
		if(i>0) Result+=" , ";
		Result+=eval("this.Rows[i]."+szColumn);
	}
	return Result;
}

Table.prototype.ToString=function()
{
	var Result="<table border=0 cellspacing=1 bgcolor=black>";
	if(this.Rows.length>0)
	{
		Result+="<tr>";
		for(var i in this.Rows[0])
			Result+="<th bgcolor=white>"+i+"</th>";
		Result+="</tr>";
		for(var i=0;i<this.Rows.length;i++)
		{
			Result+="<tr>";
			for(var j in this.Rows[i])
				Result+="<td bgcolor=white>"+this.Rows[i][j]+"</td>";
			Result+="</tr>";
		}
	}
	Result+="</table>";
	return Result;
}

var MasterProduct=function()
{
	this.Keys=new Table();
	this.Products=new Table();
	this.Attributes=new Table();
	return this;
}

MasterProduct.prototype.Init=function()
{
	if(typeof(InitAttributeTable)=="function")
		InitAttributeTable(this);
}

function SortProduct(a,b)
{	return a.Rank-b.Rank; }

function $(src)
{	return document.getElementById(src); }

var obKeys;var obPdts;var obAtrbs; var obRow;


