var x = 0;
var singleoption_count = 0;
var option_mapping = new Array();
var mysingleoptionlist = null;
var mysingleoptionnames = ["Sku","Color","Size"];
var mysingleoption_counts = new Array();
var mysingleoptionlist_array = new Array();



function setOptions(num,chosen,element)
{
	

  if (num+1 < option_mapping.length)
  {
	this.PopulateSubOption(num,chosen,element);
  }

  this.AddSku(element);  
  this.changeImage(element);

}

function changeImage(element)
{
  var currentsku = 'SKU'+element.toString();
  var i = document.getElementById(currentsku.toString());
  this.set_data(i.value,element);
}

function PopulateSubOption(num,valcheck,element)
{
   var poscheck = option_mapping[num];
   var nextpos = option_mapping[num+1];
   var nextvals = new Array();
   var i = 0;

	      for (i = 0; i < mysingleoptionlist_array[element].length; i ++)
   {
	  

	  secops = mysingleoptionlist_array[element][i]
	  if (secops != null)
	  {
		 if (secops[poscheck] == valcheck)
		 {
			 if (!this.ContainsItem(nextvals,secops[nextpos]))
			 {
				 if (secops[nextpos] != null){
					 nextvals[nextvals.length] = secops[nextpos];
				 }
			 }
		 }
	  }
   }
	   
   PopulateDropDown(num+1,nextvals,element)
}



function ValidOptions(optionlist,position)
{
  if (optionlist == null)
	return false;

  for (i = 0; i < optionlist.length; i ++)
	{
		optionset = optionlist[i];
		if (optionset != null)
		   if (optionset[position] != null)
			  if (optionset[position].length > 0)
		if (optionset[position] != "")
		   {
					return true;
		   }
		  
	}
  return false;
}

function ContainsItem(list,item)
{
  for (j = 0; j < list.length; j ++)
  {
	if (list[j] == item)
	  return true;
  }
  return false;
}

function RemoveDuplicats(optionlist, position)
{
  var valuelist = new Array();
  this.mysingleoptionlist = optionlist;

  
  for (i = 0; i < optionlist.length; i ++)
  {
   
	optionset = optionlist[i];
	if (optionset != null)
	{
	  if (optionset.length >= position)
	  {
		 if (!ContainsItem(valuelist,optionset[position]))
		 {   
			valuelist[valuelist.length] = optionset[position];
		 }
	  }
	}
  }
  return valuelist;
}

function setupOptions(optionlist, element)
{
  singleoption_count =0;
  optioncheckset = optionlist[0];
  var first = true;
  var x = 0;

  for (x = 1; x < optioncheckset.length; x++)
  {
	 if (ValidOptions(optionlist,x))
	 {  
	this.CreateSelectBox(x, element);
	if (first)
		{
		  values = RemoveDuplicats(optionlist,x);
		  mysingleoptionlist_array[element]=this.mysingleoptionlist;
	   this.PopulateDropDown(singleoption_count-1,values,element);
	   first = false;
		}
	 }
  }

 
  
  for (x =1;x < singleoption_count; x++)
  {

	var val = this.GetValueOf(x-1,element);
	this.PopulateSubOption(x-1,val,element);
  }

	
  this.AddSku(element);   
  this.changeImage(element);
}


function PopulateDropDown(number,values,element)
{
  var optionname = mysingleoptionnames[option_mapping[number]]+element;

  if (optionname == null)

	return;

  selbox = GetSelectBox(optionname);

if (selbox != null)
{
	var i = 0;
	selbox.options.length = 0;
	if (optionname != 'Color'+element)
	{
		selbox.options[0] = new Option("Select","Invalid Option");
		for (i = 1; i < values.length + 1; i ++)
		{
			selbox.options[i] = new Option(values[i-1],values[i-1]);
		}
	}
	else
	{	
		for (i =0; i < values.length ; i ++)
		{
			selbox.options[i] = new Option(values[i],values[i]);
		}
	}
}
  
}

function GetSelectBox(optionname)
{
  selbox = eval("document."+optionname.toString());
  if (selbox == null) 
  {   

  if (document.all)
	{
	  selbox = document.all[optionname.toString()];
	}
  else
	{
	 selbox = document.getElementById(optionname.toString());
	}
  }

//if (selbox == null)
//	alert("Broken DOM");

return selbox;

}
function GetValueOf(number,element)
{

  var optionname = mysingleoptionnames[option_mapping[number]]+element;
  
  
  selbox = GetSelectBox(optionname);
  if (selbox != null)
  {
	 var selectedindex = selbox.selectedIndex;
	 return selbox.options[selectedindex].value;
  }

  return null;
}

function InvalidOption(number,element)
{

	

	  if (this.GetValueOf(number,element) == "Invalid Option"){
	return true;  
	  }
  
	return false;
  
}

function CreateSelectBox(x,element)
{
  this.option_mapping[singleoption_count] = x;
  document.write(mysingleoptionnames[option_mapping[singleoption_count]]);
  document.write(": ");
  document.write("<SELECT name="+mysingleoptionnames[option_mapping[singleoption_count]]+element+" id="+mysingleoptionnames[option_mapping[singleoption_count]]+element+" onchange='setOptions("+singleoption_count+",document.orderform."+mysingleoptionnames[option_mapping[singleoption_count]]+element+"[document.orderform."+mysingleoptionnames[option_mapping[singleoption_count]]+element+".selectedIndex].value,"+element+");'>");
  document.write("<OPTION value=ignore>Choose</OPTION>");
  document.write("</SELECT>");
  document.write("<BR>");

  singleoption_count ++;
  mysingleoption_counts[element]=singleoption_count;
}

function AddSku(element)
{


  var CheckArray = new Array();
  var i = 0;
  var def = -1;
  
  if (!element){
	  element=1;
  }
  
  var skufield='SKU'+element;

  var valcheck = this.GetValueOf(0,element);
  var poscheck = option_mapping[0];
  for (i = 0; i < mysingleoptionlist_array[element].length; i++)
  {
	 var secops = mysingleoptionlist_array[element][i];
	 if (secops != null)
	 {
		if (secops[poscheck] == valcheck)
	{
		  CheckArray[CheckArray.length] = i;
	}
	 }
  }

  var j = 0;

  
  for (j = 1; j < mysingleoption_counts[element]; j++)
  {
	valcheck = this.GetValueOf(j,element);
	poscheck = option_mapping[j];
	for (i = 0; i < CheckArray.length; i++)
	  {
		var toCheck = CheckArray[i];
	if (toCheck != null)
	{
	  secops = mysingleoptionlist_array[element][toCheck];

	  if (secops != null)
	  {
		if (secops[poscheck] != valcheck)
		{
		if (def == -1)
			def = CheckArray[i];

		  CheckArray[i] = null;
		}
	  }
	}
	  }
	} 

  var found = false;
  for (j = 0; j < CheckArray.length; j++)
  {
	if (CheckArray[j] != null)
	{
	found = true;
	  var x = CheckArray[j];
	  secops = mysingleoptionlist_array[element][x];
	  document.getElementById(skufield).value = secops[0];
	var vw_id = "vwitem" + element;
	var vw_el = document.getElementById(vw_id);
	if (vw_el != null) { vw_el.value = secops[0]; }

	  //document.orderform.SKU.value = secops[0];
	}
  } 

	if (!found)
	{
if (def != -1)
{
	  secops = mysingleoptionlist_array[element][def];
	  document.getElementById(skufield).value = secops[0];
	  //document.orderform.SKU.value = secops[0];
}

	}

}

function CheckDropDowns()
{
  
  var current_singleoption_count = 0;

  //var numelements = count_vwitems();
  var numelements = mysingleoptionlist_array.length - 1;
  var j = 1;

 for (j = 1; j <= numelements; j++)
  {
	  
	  if(j > 1){
		
		var freevwqty = 'vwquantity'+j;
		var qty1 = document.getElementById('vwquantity1').value;
		var freebiequantityinput =
document.getElementById(freevwqty);

		if (freebiequantityinput.type.toLowerCase() == 'hidden')
		{
			freebiequantityinput.value = qty1;
		}

	  }

  current_singleoption_count = mysingleoption_counts[j];
  var i = 0;
  
  
  for (i = 0; i < current_singleoption_count; i++)
  {
	
	if (this.InvalidOption(i,j))
	{
		var isfreebieoption = false;
	        var vwitemname = 'vwitem'+j; 
                var vwiteminput = document.getElementById(vwitemname);

		if (vwiteminput)
		{
			var parentnode = vwiteminput.parentNode;
			if (parentnode)
			{
				if (parentnode.id)
				{
					if (parentnode.id.match('freebie'))
					{
						isfreebieoption = true;
					}
				}
			}
		}

		if (isfreebieoption)
		{
			alert("Please select the size or color of your Free Item below, Then Click 'Add To Cart'");
		}
		else
		{
			alert("Please Check Your Options, Then Click 'Add To Cart'");
		}

		return false;
	}
  }
  }

  return true;
}


function count_vwitems(){
	var total =0;
   for (i=0;i<document.forms[0].elements.length;i++) {
       if (document.forms[0].elements[i].name.match('vwitem')) {
		       total++;
       }
   }
   return total;
} 


