var x = 0;
var singleoption_count = 0;
var mappings = new Array();

//var option_mapping = new Array();
var mysingleoptionlist = null;
var mysingleoptionnames = ["Sku","Color","Size"];
var mysingleoption_counts = new Array();
var mysingleoptionlist_array = new Array();

function getOptionMapping(key) {
    if (!hasKey(key, this.mappings)) {        
		this.mappings[key] = new Array();
	}

	return this.mappings[key];
}



function hasKey(myKey, myArray)
{
	for(var i in myArray) {
		if (i == myKey) {
			return true;
		}
	}

	return false;
}


function setOptions(num,chosen,element)
{	
	var option_mapping = this.getOptionMapping(element);
	var optionname = mysingleoptionnames[option_mapping[num]]+element;
	var selbox = GetSelectBox(optionname);
	var errorbox = GetSelectBox(optionname+"Error");
	
	if (optionname == null)
	return;
	
	if (num+1 < option_mapping.length)
	{
		this.PopulateSubOption(num,chosen,element);
	}
	
	this.AddSku(element);  
	this.changeImage(element);
	
	if (selbox != null && errorbox != null) {
		var currentsku = 'SKU'+element.toString();
		var i = document.getElementById(currentsku.toString());
		if (!InvalidOption(num, i.value))
		{
			var parent = errorbox.parentNode;
			parent.insertBefore(selbox,errorbox);
			parent.removeChild(errorbox);
		}
	}
}

function changeImage(element)
{
	var currentsku = 'SKU'+element.toString();
	var i = document.getElementById(currentsku.toString());
	this.set_data(i.value,element);

	//added to swap freebie image and text on product pages when an option is selected on a page with freebies
	if(document.getElementById("freegift-image")) {
		//Find and swap freebie image
		if (hasKey(i.value, freebieimagelist)) {
			var freebieImage = document.getElementById("freegift-image");
			var swapImage = freebieimagelist[i.value][0];
			var freebieImageLink = document.getElementById("freebiebox-image").firstChild;
			freebieImageLink.href = swapImage.replace(".jpg", "-zoom.jpg");
			var miniSwapImage = swapImage.replace(".jpg", "-mini.jpg");
			freebieImage.src = miniSwapImage;

			//Find and swap freebie text
			var freebieText = document.getElementById("freebiebox-title").firstChild;
			freebieText.href = swapImage.replace(".jpg", "-zoom.jpg");
			var swapText = freebieimagelist[i.value][1];
			freebieText.innerHTML = "Free "+swapText;

			//Reset Shadowbox Cache to update links
			Shadowbox.clearCache();
			Shadowbox.setup();
		}
		//alert("SKU # "+i.value+" Element # "+element+" Freebie Image: "+swapImage+" Freebie Text: "+swapText);
	}
}

function PopulateSubOption(num,valcheck,element)
{
   var option_mapping = this.getOptionMapping(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);
			values = RemoveDuplicats(optionlist,x);
			mysingleoptionlist_array[element]=this.mysingleoptionlist;
			this.PopulateDropDown(singleoption_count-1,values,element);
		}
	}

	this.AddSku(element);   
	this.changeImage(element);
}

function PopulateDropDown(number,values,element)
{
	var option_mapping = this.getOptionMapping(element);
	var optionname = mysingleoptionnames[option_mapping[number]]+element;

	if (optionname == null)
	return;

	var selbox = GetSelectBox(optionname);
	var textbox = GetSelectBox(optionname+"Text");

	if (selbox != null)
	{
		//var i = 0;
		//selbox.options.length = 0;
		
		if (values.length == 1 && textbox != null)
		{
			textbox.innerHTML = values[0];
		}
		else if (values.length == 1 && selbox != null)
		{
			var textbox = document.createElement("span");
			textbox.innerHTML = values[0];
			textbox.id = optionname+"Text";
			textbox.className = "product-option"
			selbox.parentNode.insertBefore(textbox,selbox);
			selbox.style.display = "none";
			selbox.options[0] = new Option(values[0],values[0]);
		}
		else
		{
			if (values[0] == "Choose your Free Gift") {
				//selbox.options[0] = new Option("Choose your Free Gift","Invalid Option");
				for (i = 0; i < values.length; i ++)
				{
					selbox.options[i] = new Option(values[i],values[i]);
				}
			}
			else
			{
				selbox.options[0] = new Option("Choose your Color/Size","Invalid Option");
				for (i = 1; i <= values.length; i ++)
				{
					selbox.options[i] = new Option(values[i-1],values[i-1]);
				}
			}
		}
	}

}

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());
		}
	}

	return selbox;
}

function GetValueOf(number,element)
{	
	var option_mapping = this.getOptionMapping(element);
	var optionname = mysingleoptionnames[option_mapping[number]]+element;
	var 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)
{
  var option_mapping = this.getOptionMapping(element);
  option_mapping[singleoption_count] = x;
  var optionname = mysingleoptionnames[option_mapping[singleoption_count]]+element;
  document.write("<div id='product-options-"+optionname.toLowerCase()+"'>");
  document.write("<label for="+optionname+">"+mysingleoptionnames[option_mapping[singleoption_count]]+":</label> ");
  document.write("<select name="+optionname+" id="+optionname+" onchange='setOptions("+singleoption_count+",document.orderform."+optionname+"[document.orderform."+optionname+".selectedIndex].value,"+element+");'>");
  //document.write('<option value="Invalid Option">Choose your Color/Size</option>');
  document.write("</select>");
  document.write("</div>");

  singleoption_count ++;
  mysingleoption_counts[element]=singleoption_count;
}

function AddSku(element)
{
  var option_mapping = this.getOptionMapping(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);
	if (valcheck == null) {
		valcheck = this.GetValueOf(1,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 CheckAddToCart() {
	var current_singleoption_count = 0;
	//var numelements = count_vwitems();
	var numelements = mysingleoptionlist_array.length - 1;
	var invalidFreebie = 0;
	var invalidProduct = 0;
	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 != null)
			{
				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.GetValueOf(i,j) == "Choose your Free Gift"){
				var option_mapping = this.getOptionMapping(j);
				var optionname = mysingleoptionnames[option_mapping[i]]+j;
				var selbox = GetSelectBox(optionname);
				var errorbox = GetSelectBox(optionname+"Error");
				
				if (selbox != null && errorbox == null) {
					//selbox.className += " invalid-option";
					var parent = selbox.parentNode;
					var invalidoptionbox = document.createElement("div");
					invalidoptionbox.innerHTML = "Please Select a Freebie <br>";
					invalidoptionbox.id = optionname+"Error";
					invalidoptionbox.className = "invalid-option"
					parent.insertBefore(invalidoptionbox,selbox);
					invalidoptionbox.appendChild(selbox);
				}
				invalidFreebie++;
			}
			else if (this.InvalidOption(i,j))
			{
				var option_mapping = this.getOptionMapping(j);
				var optionname = mysingleoptionnames[option_mapping[i]]+j;
				var selbox = GetSelectBox(optionname);
				var errorbox = GetSelectBox(optionname+"Error");
				
				if (selbox != null && errorbox == null) {
					//selbox.className += " invalid-option";
					var parent = selbox.parentNode;
					var invalidoptionbox = document.createElement("div");
					invalidoptionbox.innerHTML = "Please Select a Valid Option <br>";
					invalidoptionbox.id = optionname+"Error";
					invalidoptionbox.className = "invalid-option"
					parent.insertBefore(invalidoptionbox,selbox);
					invalidoptionbox.appendChild(selbox);
				}
				invalidProduct++;
			}
		}
	}
	
	if (invalidProduct > 0) {
		alert("Please Check Your Options, Then Click 'Add To Cart'");
		return false;
	}else if (invalidFreebie > 0) {
		alert("Please select your Free Gift, Then Click 'Add To Cart'");
		return false;
	}

	return true;
}


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)
			{
				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))
			{
				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;
} 

