var sortField = 'sort_id'; // No sorting by default
var sortDesc = true; // Descending by default

var products = []; // array of DOM nodes
function init() {
	var productList = document.getElementById( "products" ).childNodes;
	for( var i = 0; i < productList.length; i++ ) {
		var child = productList[i];
		if( child.nodeType == 1 ) { // node
			products.push( child );
		}
	}
}

function sortBy( field ) {
	if( !products.length ) {
		return;
	}
	if( field != sortField ) {
		sortDesc = field != 'sort_id';
	} else {
		if( sortField == 'sort_id' ) {
			return; // already reset
		}
		sortDesc = !sortDesc;
	}
	document.getElementById( sortField ).style.backgroundImage = "none";
	sortField = field;
	document.getElementById( sortField ).style.backgroundImage =
		"url(images/" + (sortDesc ? "arrow_down.png" : "arrow_up.png") + ")";
	products.sort( compareProducts );
	
	var productContainer = document.getElementById( "products" );
	if( productContainer.swapNode ) { // IE
		var productList = productContainer.childNodes;
		for( var i = 0, j = 0; i < productList.length; i++ ) {
			var child = productList[i];
			if( child.nodeType == 1 ) { // node
				child.swapNode( products[j++] );
			}
		}
	} else { // browsers
		productContainer.innerHTML = "";
		for( var i = 0; i < products.length; i++ ) {
			productContainer.appendChild( products[i] );
		}
	}
}

function compareProducts( a, b ) {
	var val1 = a.getAttribute( sortField );
	var val2 = b.getAttribute( sortField );
	if( val1 == val2 ) {
		return 0;
	}
	var cmp = sortDesc ? val1 < val2 : val1 > val2;
	return cmp ? 1 : -1;
}

function updateDiscount( edtDiscount ) {
    try {
        checkEmpty( edtDiscount, "Please enter the discount" );
        checkNumeric( edtDiscount, "Please enter a numeric discount" );
        var discount = parseInt( edtDiscount.value, 10 );
        if( discount < 0 || discount >= 100 ) {
            throw { field: edtDiscount, msg: "Please enter a number between 0 and 99" };
        }
        edtDiscount.form.submit();
        return true;
    } catch( e ) {
        e.field.focus();
        showError( e.msg );
        return false;
    }
}