function Product() {
    
    this.setXCartProductId = function(id) {
        this.productid = id;
    }
     
    this.setBrand = function(brand) {
        this.brand = brand;
    }
     
    this.setName = function(name) {
        this.name = name;
    }
     
    this.setPrice = function(price) {
        this.price = price;
    }
     
    this.setSKU = function(sku) {
        this.sku = sku;
    }
     
    this.setUrl = function(url) {
        this.url = url;
    }
     
    this.setPhoto = function(photo) {
        this.photo = photo;
    }
     
    this.setFlavor = function(flavor) {
        this.flavor = flavor;
    }
     
    this.setSize = function(size) {
        this.size = size;
    }
     
    this.setGoal = function(goal) {
        this.goal = goal;
    }
     
    this.setDescription = function(desc) {
        this.description = desc;
    }
     
    this.setRelatedProducts = function(skus) {
        this.relatedskus = skus;
    }

    this.setInventoryStatus = function(status){
        this.inventorystatus = status;
    }

    this.getInventoryStatus = function(){
        return this.inventorystatus;
    }

    this.getXCartProductId = function() {
        return this.productid;
    }
     
    this.getBrand = function() {
        return this.brand;
    }
     
    this.getName = function() {
        return this.name;
    }
     
    this.getPrice = function() {
        return this.price;
    }
     
    this.getSKU = function() {
        return this.sku;
    }
     
    this.getUrl = function() {
        return this.url;
    }
     
    this.getPhoto = function() {
        return this.photo;
    }
     
    this.getFlavor = function() {
        return this.flavor;
    }
     
    this.getSize = function() {
        return this.size;
    }

    this.getGoal = function() {
        return this.goal;
    }
     
    this.getDescription = function() {
        return this.description;
    }
     
    this.getRelatedProducts = function() {
        return this.relatedskus;
    }
}

function limitFlavors(prefix) {
    if (checkForReset(prefix)) {
        return;
    }
    var size = document.getElementById(prefix + "_size");
    var flavor = document.getElementById(prefix + "_flavor");
	var errorSpan = document.getElementById(prefix + "_error");
    var status = document.getElementById(prefix + "_status");
	errorSpan.style.display= 'none';

    
    try {
        var selectedFlavor = flavor.options[flavor.selectedIndex].value;
    } catch (e) {
        var selectedFlavor = flavor.value;
    }

	try {
		var selected = size.options[size.selectedIndex].value.split(" - ");
	} catch (e) {
		var selected = size.value.split(" - ");
	}
	
	if (selected.length > 1) {
		var selectedPrice = selected.pop();
		var selectedSize = selected.join(" - ");
	} else {
		var selectedSize = selected[0];
		var selectedPrice = "";
	}

	selectedPrice = selectedPrice.replace("$", "");

	//clear out current flavor options, but leave the choose text
	if (flavor.options == null) 
    {
        if( selectedSize.indexOf("Choose") == -1 )
        {
            products = eval(prefix);
            for (var i = 0; i < products.length; i++) {
                if ((products[i].getSize() == selectedSize) && (products[i].getPrice() == selectedPrice)) {
                    var inventorystatus = products[i].getInventoryStatus();
                    status.innerHTML = inventorystatus;
                    break;
                }
            }
        }
        else
        {
            status.innerHTML = "";
        }
        return;
    }
    
	for(var count = flavor.options.length - 1; count >= 1; count--) {
		flavor.options[count] = null;
	}

	products = eval(prefix);

	var flavorArray = new Array();
	for (var i = 0; i < products.length; i++) {
		if (((products[i].getSize() == selectedSize) && (products[i].getPrice() == selectedPrice)) || ((selectedSize.indexOf("Choose") > -1) && (selectedFlavor.indexOf("Choose") == -1))) {
		   if (!inArray(products[i].getFlavor(),flavorArray)) {
				flavorArray.push(products[i].getFlavor());
			}
		}
	}

    if(selectedFlavor.indexOf("Choose") == -1 && selectedSize.indexOf("Choose") == -1 )
    {
        for (var i = 0; i < products.length; i++) {
            if ((products[i].getFlavor() == selectedFlavor) && (products[i].getSize() == selectedSize) && (products[i].getPrice() == selectedPrice)) {
                var inventorystatus = products[i].getInventoryStatus(); 
                status.innerHTML = inventorystatus;
                break;
            }
        }
    }
    else
    {
        status.innerHTML = "";
    }
	flavorArray.sort();

	for (var i = 0; i < flavorArray.length; i++) {
		var option = new Option(flavorArray[i], flavorArray[i]);
		flavor.options.add(option);
	}

	for (var j = 0; j < flavor.options.length; j++) {
		if (flavor.options[j].value == selectedFlavor) {
			flavor.selectedIndex = j;
			break;
		}
	}
}

function limitSizes(prefix) {
    if (checkForReset(prefix)) {
        return;
    }
    var size = document.getElementById(prefix + "_size");
    var flavor = document.getElementById(prefix + "_flavor");
	var errorSpan = document.getElementById(prefix + "_error");
    var status = document.getElementById(prefix + "_status");
	errorSpan.style.display= 'none';

    try {
        var selectedFlavor = flavor.options[flavor.selectedIndex].value;
    } catch (e) {
        var selectedFlavor = flavor.value;
    }

    try {
        var selectedSize = size.options[size.selectedIndex].value;
    } catch (e) {
        var selectedSize = size.value;
    }

	//clear out current size options, but leave the choose text
	if (size.options == null) {
        if( selectedFlavor.indexOf("Choose") == -1 )
        {
            products = eval(prefix);
            for (var i = 0; i < products.length; i++) {
                if ((products[i].getFlavor() == selectedFlavor) ) {
                    var inventorystatus = products[i].getInventoryStatus();
                    status.innerHTML = inventorystatus;
                    break;
                }
            }
        }
        else
        {
            status.innerHTML = "";
        }
    
       return;
    }
	for(var count = size.options.length - 1; count >= 1; count--) {
		size.options[count] = null;
	}

	products = eval(prefix);

	var sizeArray = new Array();
	for (var i = 0; i < products.length; i++) {
		if ((products[i].getFlavor() == selectedFlavor) || ((selectedFlavor.indexOf("Choose") > -1) && (selectedSize.indexOf("Choose") == -1))) {
			var sizeText = products[i].getSize() + " - $" + products[i].getPrice();
			if (!inArray(sizeText,sizeArray)) {
				sizeArray.push(sizeText);
			}
		}
	}

    if(selectedFlavor.indexOf("Choose") == -1 && selectedSize.indexOf("Choose") == -1 )
    {                
        for (var i = 0; i < products.length; i++) {
            if ((products[i].getFlavor() == selectedFlavor) && ( products[i].getSize() + " - $" + products[i].getPrice() == selectedSize)) {
                var inventorystatus = products[i].getInventoryStatus();  
                status.innerHTML = inventorystatus;
                break;
            }
        }
    }
    else
    {
        status.innerHTML = "";
    }

	sizeArray.sort();

	for (var i = 0; i < sizeArray.length; i++) {
		var option = new Option(sizeArray[i], sizeArray[i]);
		size.options.add(option);
	}

	for (var j = 0; j < size.options.length; j++) {
		if (size.options[j].value == selectedSize) {
			size.selectedIndex = j;
			break;
		}
	}
}

function checkForReset(prefix) {
    var size = document.getElementById(prefix + "_size");
    var flavor = document.getElementById(prefix + "_flavor");

    try {
        var selectedFlavor = flavor.options[flavor.selectedIndex].value;
    } catch (e) {
        var selectedFlavor = flavor.value;
    }

    try {
        var selectedSize = size.options[size.selectedIndex].value;
    } catch (e) {
        var selectedSize = size.value;
    }

    if ((selectedSize.indexOf("Choose") > -1) && (selectedFlavor.indexOf("Choose") > -1)) {
        //reset both selects
        
        for(var count = size.options.length - 1; count >= 1; count--) {
            size.options[count] = null;
        }

        for(var count = flavor.options.length - 1; count >= 1; count--) {
            flavor.options[count] = null;
        }

        products = eval(prefix);

        var sizeArray = new Array();
        var flavorArray = new Array();
        for (var i = 0; i < products.length; i++) {
            var sizeText = products[i].getSize() + " - $" + products[i].getPrice();
            if (!inArray(sizeText,sizeArray)) {
                sizeArray.push(sizeText);
            }

            if (!inArray(products[i].getFlavor(),flavorArray)) {
                flavorArray.push(products[i].getFlavor());
            }
        }

        sizeArray.sort();
        flavorArray.sort();

        for (var i = 0; i < sizeArray.length; i++) {
            var option = new Option(sizeArray[i], sizeArray[i]);
            size.options.add(option);
        }

        for (var i = 0; i < flavorArray.length; i++) {
            var option = new Option(flavorArray[i], flavorArray[i]);
            flavor.options.add(option);
        }
        return true;
    }
    return false;
}

function inArray(item, theArray) {
    var exists = false;
    for (var i = 0; i < theArray.length; i++) {
        if (theArray[i] == item) {
            exists = true;
            break;
        }
    }

    return exists;
}

function order(prefix, omnitureSource) {
    var size = document.getElementById(prefix + "_size");
    var flavor = document.getElementById(prefix + "_flavor");

    try {
        var selectedFlavor = flavor.options[flavor.selectedIndex].value;
    } catch (e) {
        var selectedFlavor = flavor.value;
    }

    try {
        var selected = size.options[size.selectedIndex].value.split(" - ");
    } catch (e) {
        var selected = size.value.split(" - ");
    }


	if (selected.length > 1) {
		var selectedPrice = selected.pop();
		var selectedSize = selected.join(" - ");
	} else {
		var selectedSize = selected[0];
		var selectedPrice = "";
	}

	try {
		selectedPrice = selectedPrice.replace("$", "");
	} catch (ex) {
	}

    var xcartId = 0;
	var sku = '';
    products = eval(prefix);
    for (var i = 0; i < products.length; i++) {
        if ((products[i].getFlavor() == selectedFlavor) && (products[i].getSize() == selectedSize) && (products[i].getPrice() == selectedPrice)) {
            xcartId = products[i].getXCartProductId();
			sku = products[i].getSKU();
            break;
        }
    }

    if (xcartId > 0) {
        ref = window.location;
        window.location = "http://www.bodybuilding.com/cart/cart.php?mode=add&amount=1&productid=" + xcartId + "&ev15=" + omnitureSource + "&ev32=" + sku + "&omnitureReferrer="+ref;
    } else {
 		var errorSpan = document.getElementById(prefix + "_error");

        errorSpan.style.display = "";
		if ((selectedFlavor.indexOf("Choose") > -1) && (selectedSize.indexOf("Choose") > -1)) {
				errorSpan.innerHTML = "Please select a size and flavor.";
		} else {
			if (selectedFlavor.indexOf("Choose") > -1) {
                if (selectedFlavor.indexOf("Choose Color") > -1)
                     errorSpan.innerHTML = "Please select a color.";
                 else
                    errorSpan.innerHTML = "Please select a flavor.";
			}
			if (selectedSize.indexOf("Choose") > -1) {
				errorSpan.innerHTML = "Please select a size.";
			}
		}
	}
}
