dojo.require("dojo.widget.FilteringTable");

var tableId = "comparisonTable";
var radioValues = {
	"cost": {
		"value": "any",
		"filter": costFilter 
	},
	"numModules": {
		"value": "any",
		"filter": numModulesFilter
	},
	"numDevelopers": {
		"value": "any",
		"filter": numDevelopersFilter
	},
	"diskQuota": {
		"value": "any",
		"filter": diskQuotaFilter
	},
	"support": {
		"value": "any",
		"filter": supportFilter
	},
	"ssl": {
		"value": "any",
		"filter": sslFilter
	},
	"issueMgmt": {
		"value": "any",
		"filter": issueMgmtFilter
	},
	"websvn": {
		"value": "any",
		"filter": websvnFilter
	},
	"trac": {
		"value": "any",
		"filter": tracFilter
	},
	"oss": {
		"value": "any",
		"filter": ossFilter
	}
};
var extraCheckboxes = {
	"webHosting": false,
	"projectMgmt": false,
	"blog": false
} 

function updateValue(button) {
	radioValues[button.name].value = button.value;
	dojo.widget.byId(tableId).setFilter(button.name, radioValues[button.name].filter);
}

function updateExtras(box) {
	extraCheckboxes[box.name] = box.checked;
	dojo.widget.byId(tableId).setFilter("extras", extrasFilter);
}

function costFilter(cost) {
	var filter = radioValues.cost.value;
	if (filter == "free")
		return cost == 0;
	else if (filter == "tenOrLess")
		return cost <= 10;
	else if (filter == "elevenToFifty")
		return cost >= 11 && cost <= 50;
	else if (filter == "fiftyOnePlus")
		return cost > 50;
	else return true;
}

function numModulesFilter(num) {
	var filter = radioValues.numModules.value;
	if (filter == "one")
		return num == 1 ;
	else if (filter == "twoToNine")
		return num >= 2 && num < 9;
	else if (filter == "tenPlus")
		return num >= 10;
	else if (filter == "unlimited")
		return num == Number.POSITIVE_INFINITY;
	else return true;
}

function numDevelopersFilter(num) {
	var filter = radioValues.numDevelopers.value;
	if (filter == "oneToFive")
		return num >= 1 && num <= 5;
	else if (filter == "sixToTwenty")
		return num >= 6 && num <= 20;
	else if (filter == "twentyOnePlus")
		return num >= 21;
	else if (filter == "unlimited")
		return num == Number.POSITIVE_INFINITY;
	else return true;
}

function diskQuotaFilter(quota) {
	var filter = radioValues.diskQuota.value;
	if (filter == "zeroToHundred")
		return quota <= 100;
	else if (filter == "hundredToGiga")
		return quota > 101 && quota <= 1000;
	else if (filter == "gigaPlus")
		return quota >= 1001;
	else if (filter == "unlimited")
		return quota == Number.POSITIVE_INFINITY;
	else return true;
}

function supportFilter(support) {
	var filter = radioValues.support.value;
	if (filter == "yes")
		return support != "None";
	return true;
}

function sslFilter(ssl) {
	var filter = radioValues.ssl.value;
	if (filter == "yes")
		return ssl == "Yes";
	return true;
}

function issueMgmtFilter(issueMgmt) {
	var filter = radioValues.issueMgmt.value;
	if (filter == "yes")
		return issueMgmt != "None";
	return true;
}

function websvnFilter(websvn) {
	var filter = radioValues.websvn.value;
	if (filter == "yes")
		return websvn != "No";
	return true;
}

function tracFilter(trac) {
	var filter = radioValues.trac.value;
	if (filter == "yes")
		return trac != "No";
	return true;
}

function ossFilter(oss) {
	var filter = radioValues.oss.value;
	if (filter == "yes")
		return oss == "Yes";
	if (filter == "no")
		return oss == "No";
	return true;
}

function extrasFilter(extras) {
	if (extraCheckboxes.webHosting && extras.indexOf("Web Hosting") == -1)
		return false;
	if (extraCheckboxes.projectMgmt && extras.indexOf("Project Mgmt") == -1)
		return false;
	if (extraCheckboxes.blog && extras.indexOf("Blog") == -1)
		return false;
	return true;
}
