
// Constructor
var CandidatesList = function(district,base_url) {
	// Setup some defaults based off the district name
	this.district_code = district.replace(" ", "_");
	this.file_name = base_url + "/" + this.district_code + ".json"
}// End CandidatesList

function getRequest() {

	// Try and create an XMLHttpRequest object to load data file
	try {
		request = new XMLHttpRequest();
	} catch(e) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP")
		} catch(e) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				request = false;
			}// End try
		}// End try
	}// End try

	return request

}

CandidatesList.prototype = {

	load: function(targetTBodyId,pdfFolderPath,pdfPrefix) {
		
		request = getRequest();

		// Send the request and return google parsed response data
		request.open("GET",this.file_name,true);
		request.onreadystatechange=function() {
			if ( request.readyState == 4 ) {
				processResponse(request.responseText,document.getElementById(targetTBodyId),pdfFolderPath,pdfPrefix);
			}// End if
		}// End function
		request.send(null);

	}// End load
}// End CandidatesList.prototype

// Utility function to supply to Array.sort
function generateCompareTRs(iCol,sDataType) {
	var func = function(oTR1,oTR2) {
		var sValue1 = convert(oTR1.cells[iCol].innerHTML,sDataType)
		var sValue2 = convert(oTR2.cells[iCol].innerHTML,sDataType)
		if (sValue1 < sValue2) {
			return -1;
		} else if (sValue1 > sValue2) {
			return 1;
		} else {	
			return 0;
		}// End if
	}// End compareTRs
	return func
}// End generateCompareTRs

// Utility function to supply to Array.sort
function compareStrings(string1,string2) {
	return string1.localeCompare(string2);
}// End compareStrings

// Utility function to supply to Array.sort
function compareIntegers(vNum1,vNum2) {
	var iNum1 = parseInt(vNum1);
	var iNum2 = parseInt(vNum2);
	if (iNum1 < iNum2) {
		return -1;
	} else if (iNum1 > iNum2) {
		return 1;
	} else {	
		return 0;
	}// End for
}// End compareIntegers

// Datatype conversion for sorting
function convert(sValue, sDataType) {
	switch(sDataType) {
		case "int":
			return parseInt(sValue);
		case "float":
			return parseFloat(sValue);
		case "date":
			return new Date(Date.parse(sValue));
		default:
			return sValue;
	}// End switch
}// End convert

// Public function to sort tables 
function sortTable(tableElementId, column, sDataType) {

	table = document.getElementById(tableElementId);
	tableBody = table.tBodies[0];
	rows = tableBody.rows;
	aTRs = new Array;

	for (var i=0;i<rows.length;i++) {
		aTRs[i] = rows[i]
	}// end for


	if (table.sortCol == column) {
		aTRs.reverse();
	} else {
		aTRs.sort(generateCompareTRs(column,sDataType));
	}// end if
	var oFragment = document.createDocumentFragment();
	for (var i=0;i<aTRs.length;i++) {
		oFragment.appendChild(aTRs[i]);
	}// end for

	tableBody.appendChild(oFragment);
	table.sortCol = column;
}// End sortTable