var x = 0;
var option_count = 0;
var option_mapping = new Array();
var myoptionlist = new Array();
var myoptionnames = ["Sku","","Color","Size"];
var myprefixes = new Array();
var myzoomimages = new Array();
var retailprice = 0;
var houseprice = 0;

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + num + '.' + cents);
}


function pkgSetupOptions(optionlist, nameprefix,descriptor)
{
  optioncheckset = optionlist[0];
  var first = true;
  this.option_mapping[nameprefix] = new Array();
  var PostPopulate = new Array();

  for (x = 1; x < optioncheckset.length; x++)
  {
    if (pkgValidOptions(optionlist,x))
    {
      this.pkgCreateSelectBox(x, nameprefix,descriptor);
      if (first)
      {
        values = pkgRemoveDuplicats(optionlist,nameprefix,x);
        this.pkgPopulateDropDown(option_count-1,values,nameprefix);
        first = false;
      }
      PostPopulate.push(option_count-1);
    }
  }
  for (var j = 0; j < PostPopulate.length; j++)
  {
    var index = PostPopulate[j];
    var chosenval = pkgGetValueOf(index,nameprefix)
    this.pkgSetOptions(index,nameprefix,chosenval)
  }
}

var yes = false;
function pkgCreateSelectBox(x, prefix, descriptor)
{
  this.option_mapping[prefix][option_count] = x;
  document.write(descriptor+" "+myoptionnames[option_mapping[prefix][option_count]]);
  document.write(": ");
  var eventcall = "pkgSetOptions("+option_count+",\""+prefix+"\""
                                +",document.orderform."+prefix+myoptionnames[option_mapping[prefix][option_count]]
                                +"[document.orderform."+prefix+myoptionnames[option_mapping[prefix][option_count]]
								+".selectedIndex].value);";
  var selectbox = "<SELECT name="+prefix+myoptionnames[option_mapping[prefix][option_count]]
                                +" id="+prefix+myoptionnames[option_mapping[prefix][option_count]]
                                +" onchange='" + eventcall + "'>";
  document.write(selectbox);
  document.write("</SELECT>");
  document.write("<BR>");
  option_count ++;
}

function pkgRemoveDuplicats(optionlist,prefix, position)
{
  var valuelist = new Array();
  this.myoptionlist[prefix] = optionlist;
  for (i = 0; i < optionlist.length; i ++)
  {
    var optionset = optionlist[i];
    if (optionset != null)
    {
      if (optionset.length >= position)
      {
        if (!pkgContainsItem(valuelist,optionset[position]))
        {
          valuelist[valuelist.length] = optionset[position];
        }
      }
    }
  }
  return valuelist;
}

//good new match for dynamic
function MatchRegex(Regex, Vals)
{
	if (Regex) {
	var test = Regex.replace('*','');	
	if (Vals) {
	if (Vals.indexOf(test) >= 0)
	{
		return true;
	}
	}}
	return false;

}

//bad old match for static
/*function MatchRegex(Regex, Vals)
{
	var pattern = Regex;
	pattern = pattern.replace("*",".*");
	var reg = new RegExp(pattern);
//	for (i = 0 ; i < Vals.length; i ++)
//	{
		var testval = Vals;
		if (testval.match(reg))
			return true;
//	}
	return false;
}*/


function pkgPopulateDropDown(number,values,prefix)
{
  var optionname = prefix+myoptionnames[option_mapping[prefix][number]];
  var selbox = EvalObject(optionname);


  if (selbox != null)
  {
    var i = 0;
    selbox.options.length = 0;
    for (i = 0; i < values.length; i ++)
    {
      if (values[i] != null)
      {
        if ((values[i] != '') && (values[i] != '') && (values[i].length > 0))
        {
          selbox.options[i] = new Option(values[i],values[i]);
	}
      }
    }
   if (selbox.options.length >= 1)
   {
      pkgToggleBox(number,prefix,true);
      selbox.selectedIndex = 0;
   }
   else
   {
      pkgToggleBox(number,prefix,false);
   }

  }

}

function pkgSetOptions(num,prefix,chosen)
{
  var i = 0;

  if (num+1 < option_mapping[prefix].length)
  {
    this.pkgPopulateSubOption(num,prefix,chosen);
  }

  for (i = num; i < option_mapping[prefix].length-1; i ++)
  {
    var chosenval = pkgGetValueOf(i,prefix)
    this.pkgPopulateSubOption(i,prefix,chosenval);
  }

  pkgAddSku(prefix,true)
  pkgChangeImage(prefix)
}

function pkgChangeImage(prefix)
{
set_data(document.orderform[prefix+"_SKU"].value,prefix);
}

function set_data (id, whichone) {
	var sku = id;
      if (whichone + "images" == "4images") { return; }

	var prodimages = eval(whichone+"images");
	var prodlarges = eval(whichone+"larges");
	var prodImg = prodimages.get(sku);
	if (prodImg != null) {
		document[whichone+"image"].alt = prodimages.get(sku).alt;
	    	document[whichone+"image"].src = prodimages.get(sku).src;
		var lrg = this.EvalObject(whichone+"large");
		lrg.href = "javascript:productZoom('"+prodlarges.get(sku).src+"')";
	}
}

function ClearSubOptions(number,prefix)
{
  var optionname = prefix+myoptionnames[option_mapping[prefix][number]];
  var selbox = EvalObject(optionname);

  selbox.options.length = 0;

  pkgToggleBox(number,prefix,false);

}

function DisplayZoom(prefix)
{
//  window.open("http://store.yahoo.com/lib/the-house/product-zoom.html?"+this.myzoomimages[prefix],'','toolbar=no, width=550, height=600, resizable=1, scrollbars=1');
//  void('');
}

function SwapImage(prefix)
{
  var matches = new Array();
  for(var i=0; i < option_count ; i++)
  {
    var val = this.pkgGetValueOf(i,prefix);
    if ((val != null) && (val != ''))
      matches.push(val);
  }
  return this.FindMatches(matches,prefix);
}

function FindMatches(matches,prefix)
{
  var CheckArray = this.myoptionlist[prefix];
  var MatchList = new Array();
  for(var j = 0; j < CheckArray.length; j++)
  {
    var optionset = CheckArray[j];
    if (optionset != null)
    {
      var ismatch = true;
      var changed = false;
      for (var i = 0; i < matches.length; i++)
      {
        var matchVal = matches[i];
	if (matchVal != null)
	{
	  if ((matchVal != '') && (matchVal != "Invalid Option") && (matchVal != "ignore") && (matchVal != ""))
	  {
	    changed = true;
	    if (matchVal != optionset[i+1])
	      ismatch = false;
	  }
        }
      }
      if (ismatch && changed)
      MatchList.push(optionset[0]);
    }
  }
  for (var i = 0; i < this.imagelist.length; i++)
  {
    var imageid = this.imagelist[i];
    if (imageid != null)
    {
      for (var j = 0; j < MatchList.length; j++)
      {
         var matchid = MatchList[j];
         if (imageid[0] == matchid)
           if ((imageid[1] != null) && (imageid[1] != ''))
   	     return imageid;
      }
    }
  }
}

function pkgOptionIndex(optionname)
{
	for(var i=0; i<optionnames.length; i++)
	{
		if(optionnames[i] == optionname)
		{
			return i;
		}
	}
	return -1;
}

function pkgPopulateSubOption(num,prefix,valcheck)
{
   var precheck = option_mapping[prefix][num - 1];
   var poscheck = option_mapping[prefix][num];
   var nextpos = option_mapping[prefix][num+1];
   var nextvals = new Array();
   var i = 0;

   for (i = 0; i < this.myoptionlist[prefix].length; i++)
   {
      var secops = this.myoptionlist[prefix][i];
      if (secops != null)
      {
	 var good = true;

	 if (precheck != null)
	 {
	    if (pkgGetValueOf(num - 1, prefix)  != secops[precheck])
	    {
		good = false;
	    }
         }

	 if (good)
	 {
            if (secops[poscheck] == valcheck)
	    {
	       if (!this.pkgContainsItem(nextvals,secops[nextpos]))
		    {
			nextvals[nextvals.length] = secops[nextpos];
	            }
        	 }
	}
      }
   }

   pkgPopulateDropDown(num+1,nextvals,prefix)

}

function pkgValidOptions(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 pkgContainsItem(list,item)
{
  for (j = 0; j < list.length; j ++)
  {
    if (list[j] == item)
      return true;
  }
  return false;
}


function pkgToggleBox(number,prefix,onoff)
{

  var optionname = prefix+myoptionnames[option_mapping[prefix][number]];

var isIE=document.all?true:false;
var isDOM=document.getElementById?true:false;
var isNS4=document.layers?true:false;

  var selbox = EvalObject(optionname);

  onoff = !onoff;

  if (selbox != null)
  {

	if (onoff)
	{
	    selbox.disabled = true;
	}
	else
	{
	    selbox.disabled = false;
	}
  }
}

function EvalObject(name)
{
  var optionname = name;
  var selbox = eval("document."+optionname.toString());
  if ((selbox == null) && (document.getElementById)) {selbox = document.getElementById(optionname);}
  if ((selbox == null) && (document.tags)) {selbox = document.tags["select"][optionname];}
  if ((selbox == null) && (document.all)) {selbox = document.all[optionname.toString()];}
  return selbox;
}

function pkgGetValueOf(number,prefix)
{
  var optionname = prefix+myoptionnames[option_mapping[prefix][number]];

  var selbox = EvalObject(optionname);

  if (selbox != null)
  {
     var selectedindex = selbox.selectedIndex;
     if ((selectedindex >= selbox.options.length) || (selectedindex <= -1))
     {
	return null;
     }

     return selbox.options[selectedindex].value;
  }

  return null;
}

function pkgInvalidOption(prefix,number)
{
  if (this.pkgGetValueOf(number,prefix) == "Invalid Option")
    return true;
  return false;
}


function pkgAddSku(prefix,partial)
{
  var CheckArray = new Array();
  var i = 0;

  var valcheck = this.pkgGetValueOf(0,prefix);
  var poscheck = option_mapping[prefix][0];
  var defaulti = -1;
  for (i = 0; i < this.myoptionlist[prefix].length; i++)
  {
    var secops = this.myoptionlist[prefix][i];
    if (secops != null)
    {
      if (secops[poscheck] == valcheck)
      {
        CheckArray[CheckArray.length] = i;
        defaulti = i;
      }
    }
  }

  var j = 0;

  var maxcount = this.option_count;

  if (partial)
      maxcount = maxcount - 1;

  for (j = 1; j <= maxcount; j++)
  {
    valcheck = this.pkgGetValueOf(j,prefix);

    poscheck = option_mapping[prefix][j];

    for (i = 0; i < CheckArray.length; i++)
    {
      var toCheck = CheckArray[i];
      if (toCheck != null)
      {
        secops = this.myoptionlist[prefix][toCheck];
	if (secops != null)
 	{
	  if (secops[poscheck] != valcheck)
	  {
	      CheckArray[i] = null;
 	  }
 	}
      }
    }
  }

  document.orderform["vwattr1_packagecount"].value = CheckArray.length;

  for (j = 0; j < CheckArray.length; j++)
  {
    if (CheckArray[j] != null)
    {
      var x = CheckArray[j];
      secops = myoptionlist[prefix][x];
      document.orderform[prefix+"_SKU"].value = secops[0];
     
      if (prefix == "Option1")
      {
         document.orderform["vwattr1_sku1"].value = secops[0];
         document.orderform["vwattr1_sku1_Size"].value = secops[3];

      }
      if (prefix == "Option2")
      { 	
         document.orderform["vwattr1_sku2"].value = secops[0];
         document.orderform["vwattr1_sku2_Size"].value = secops[3];
      }
      if (prefix == "Option3")
      {    	
         document.orderform["vwattr1_sku3"].value = secops[0];
         document.orderform["vwattr1_sku3_Color"].value = secops[2];
      }
	if (prefix == "Option4")
      {    	
         document.orderform["vwattr1_sku4"].value = secops[0];
         document.orderform["vwattr1_sku4_Color"].value = secops[2];
      }
	if (prefix == "Option5")
      {    	
         document.orderform["vwattr1_sku5"].value = secops[0];
         document.orderform["vwattr1_sku5_Color"].value = secops[2];
      }
	if (prefix == "Option6")
      {    	
         document.orderform["vwattr1_sku6"].value = secops[0];
         document.orderform["vwattr1_sku6_Color"].value = secops[2];
      }
	if (prefix == "Option7")
      {    	
         document.orderform["vwattr1_sku7"].value = secops[0];
         document.orderform["vwattr1_sku7_Color"].value = secops[2];
      }
      recalcprice();
    }
  }
}

function getDiscountPrice(id)
{

var discountreg = discountHash.get(id);
var regex = null;
var discountprice = 0;

if (discountreg)
	{
		regex = discountreg[1];	
		regex = regex.replace(/^\s+|\s+$/g,"");
		discountprice = discountreg[0];
		for (i = 1; i < 8; i ++)
		{
			var vwitem = "vwattr1_sku"+i;
			if (document.orderform[vwitem])
			{
				var testlocation = discountHash.get(document.orderform[vwitem].value);
				if (testlocation)
				{					
					var tomatch = testlocation[2];
					var testid = tomatch.replace(/^\s+|\s+$/g,"");
					var crumb = crumbHash.get(testid);
					if (MatchRegex(regex,crumb))
					{						
						if (discountprice)
						{
							return discountprice;
						}
					}
				}
			}

		}
	}

return 0;
}

function updatePrices(oldItem,newItem)
{
var prices = priceHash.get(newItem);
var old = priceHash.get(oldItem);
var discountreg = discountHash.get(newItem);
var regex = null;
var newdiscountprice = getDiscountPrice(newItem);
var olddiscountprice = getDiscountPrice(oldItem);

      if (prices != null)
      { 

          this.retailprice += prices[1];
  	  if (newdiscountprice > 0)
	  {
          	this.houseprice  += newdiscountprice;
	  } else {
		this.houseprice  += prices[0];
	  }
		
      }

      if (old != null)
      { 
          this.retailprice -= old[1];
	  if (olddiscountprice > 0)
	  {
             this.houseprice  -= old[0];
	  } else {
             this.houseprice  -= olddiscountprice;
	  }
	   
      }

}

function recalcprice()
{

this.retailprice = 0;
this.houseprice = 0;


if (document.orderform["vwattr1_sku1"])
        updatePrices(null,document.orderform["vwattr1_sku1"].value);

if (document.orderform["vwattr1_sku2"])
        updatePrices(null,document.orderform["vwattr1_sku2"].value);

if (document.orderform["vwattr1_sku3"])
	updatePrices(null,document.orderform["vwattr1_sku3"].value);

if (document.orderform["vwattr1_sku4"])
	updatePrices(null,document.orderform["vwattr1_sku4"].value);

if (document.orderform["vwattr1_sku5"])
	updatePrices(null,document.orderform["vwattr1_sku5"].value);

if (document.orderform["vwattr1_sku6"])
	updatePrices(null,document.orderform["vwattr1_sku6"].value);

if (document.orderform["vwattr1_sku7"])
	updatePrices(null,document.orderform["vwattr1_sku7"].value);
/*
if (document.orderform["RegPriceBox"])
	document.orderform["RegPriceBox"].value = formatCurrency(retailprice);

if (document.orderform["HousePriceBox"])
	document.orderform["HousePriceBox"].value = formatCurrency(houseprice);

if (document.orderform["SavingsPriceBox"])
	document.orderform["SavingsPriceBox"].value = formatCurrency(retailprice - houseprice);
*/
}

function pkgCheckDropDowns(namepfx)
{

  if (option_mapping[namepfx] == null)
	return true;

  var i = 0;
  for (i = 0; i < this.option_count; i++)
  {
    if (this.pkgInvalidOption(namepfx, i))
    {
      alert("Please Check your Options, then click 'Add to My Cart'");
      return false;
    }
  }

  this.pkgAddSku(namepfx,false);


  return true;


}

function CheckDropDowns()
{
  pkgCheckDropDowns("Option1");
  pkgCheckDropDowns("Option2");
  pkgCheckDropDowns("Option3");
  pkgCheckDropDowns("Option4");
  pkgCheckDropDowns("Option5");
  pkgCheckDropDowns("Option6");
  pkgCheckDropDowns("Option7");

  var freebie = document.getElementById("vwitem2");
  if (freebie) {
	var freebie_sku = document.getElementById("SKU2");
	freebie.value = freebie_sku.value;
	}


}
