function setup(){
    //array of possible items
    window.products = new Array();
    //array of items in cart
    window.cart = new Array();
}

function vsetup(){
    //form validation
    document.getElementById('buynow_form').onsubmit = validate;
}

function remove(id){
    var error = '';
    //attempts to remove item
    var itemname = cart[id][1];
    var newcart = new Array();
    for(var item = 0; item < cart.length; item++){
        if(item != id)
            newcart.push(cart[item]);
    }
    cart = newcart;
    
    if(cart.length == 0){ 
        document.getElementById('control').style.display = 'none';
        document.getElementById('labels').style.display = 'none';
    }
    
    show_message('"' + itemname + '" has been removed from your cart!');
    draw();
}

function add(id){
    document.getElementById('control').style.display = 'block';
    document.getElementById('labels').style.display = 'block';
    var error = '';
    //check to see if item is already in cart
    for(var item = 0; item < cart.length; item++){
        if(cart[item][0] == id) error = '"' + cart[item][1] + '" is already in your cart!';
    }
    
    if(error == ''){
        //adds item to cart
        cart[cart.length] = products[id].slice();
        show_message('"' + products[id][1] + '" has been added to your cart!');
    }else
        show_error(error);
    window.location.hash = 'update';
    draw();
    window.location.hash = 'cart';
}

function draw(){
    var area = document.getElementById('items');
    area.innerHTML = '';
    var total = 0.00;
    for(var item = 0; item < cart.length; item++){
        if(cart[item][4] > products[cart[item][0]][3]){
            cart[item][4] = products[cart[item][0]][3];
            show_warning('The maximum quantity for "' + cart[item][1] + '" is ' + cart[item][4]);
        }
    
        var subtotal = cart[item][2] * parseInt(cart[item][4]);
        subtotal = format(subtotal);
        total += parseFloat(subtotal);
        if(isNaN(subtotal)) subtotal = '0.00';
        var code = '';
            code = code + '<fieldset class="item" id="' + item + '">\n';
            code = code + '    <input type="button" value="x" onclick="remove(' + item + ')" class="remove" />'
            code = code + '    <input type="hidden" name="item_number_' + item + '" readonly="readonly" value="' +  cart[item][0] + '" />\n';
            code = code + '    <input type="text" name="item_name_' + item + '" readonly="readonly" class="name" value="' + cart[item][1] + '" />\n';
            code = code + '    <input type="text name="amount_' + item + '" readonly="readonly" class="price" value="' + format(cart[item][2]) + '" />\n';
            code = code + '    <input type="text" name="quantity_' + item + '" class="quantity" onchange="update(' + item + ')" value="' + cart[item][4] + '" />';
            if(parseInt(cart[item][3]) < 10) code = code + '<p class="max">MAX: ' + cart[item][3] + '</p>\n';
            code = code + '    <input type="text" name="subtotal_' + item + '" class="subtotal" value="' + subtotal + '" />\n';
            code = code + '</fieldset>';
        area.innerHTML = area.innerHTML + code;
    }
    
    var index = document.getElementById('shipping').selectedIndex;
    var shipping = 0;
    switch(index){
        case 1:
            shipping = 0.00;
            break;
        case 2:
            shipping = 7.00;
            break;
        /*case 3:
            shipping = 14.95;
            break;
        case 4:
            shipping = 19.95;
            break;*/
        default:
            shipping = 0.00;
            break;
    }
    
    total += shipping;
    document.getElementById('total').value = format(total);
    document.getElementById('num_items').value = cart.length;
    
    if(cart.length == 0) area.innerHTML = '<p>You currently have no items in your cart!</p>';
}

function update(id){
    for(var item = 0; item < cart.length; item++){
        var fs = document.getElementById(item);
        var inputs = fs.getElementsByTagName('input');
        
        cart[item][4] = parseInt(inputs[4].value);
        if(isNaN(cart[item][4]) || cart[item][4] < 1){
            cart[item][4] = '1';
            show_error('Invalid quantity for "' + cart[item][1] + '", please enter a positive integer.');
        }
    }
    draw();
}

function show_error(error){
    document.getElementById('message').innerHTML = error;
    document.getElementById('message').className = 'error';
}

function show_message(message){
    document.getElementById('message').innerHTML = message;
    document.getElementById('message').className = 'success';
}

function show_warning(warning){
    document.getElementById('message').innerHTML = warning;
    document.getElementById('message').className = 'warning';
}

function format(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num)) num = "0";
    num = Math.floor(num * 100 + 0.50000000001);
    var cents = num % 100;
    num = Math.floor( num / 100).toString();
    if(cents < 10) cents = "0" + cents;
    return (num + '.' + cents);
}

function validate(){
    document.getElementById('message').innerHTML = '';//reset error
    
    //items
    if(cart.length <= 0){
        show_error('You have no items in your cart! Please add some before attempting to checkout.');
        return false;
    }
    
    //valid user input for items
    for(var item = 0; item < cart.length; item++){
        var fs = document.getElementById(item);
        var inputs = fs.getElementsByTagName('input');
        
        cart[item][4] = parseInt(inputs[4].value);
        if(isNaN(cart[item][4]) || cart[item][4] < 1){
            show_error('Invalid quantity for "' + cart[item][1] + '", please enter a positive integer.');
            return false;
        }
    }
    
    //shipping is chosen
    var index = document.getElementById('shipping').selectedIndex;
    if(index <= 0 || index > 4){
        show_error('Please pick a shipping region!');
        return false;
    }
    
    return true;
}

if (document.getElementById){
    window.onload = vsetup;
}
