
UsnSchoolSearchTerms = function(terms) {
	if (terms) {
		extend(this, terms);
	}
}

UsnSchoolSearchTerms.prototype = {
	serialize: UsnSchoolSearchTerms_serialize
}

UsnSearch = {
	Execute: UsnSearch_Execute,
	SelectState: UsnSearch_SelectState,
	Sort: UsnSearch_Sort,
	GoToPage: UsnSearch_GoToPage
}

function UsnSearch_Execute() {
	var terms = UsnSchoolSearchTerms.Instance;
	if (terms) {
		var url = terms.serialize();
		if (url) {
			Url.navigate(url);
		}
	}	
}

function UsnSearch_SelectState() {
	SM.Validation.Validate();	
	if (Page_IsValid) {
		var terms = UsnSchoolSearchTerms.Instance;
		if (terms) {
			terms.pageNumber = 1;
			UsnSearch.Execute();
		}
	}	
}

function UsnSearch_Sort() {
	var terms = UsnSchoolSearchTerms.Instance;
	if (terms.sortCriteria != SchoolSortCriteria.StateCode) {
		terms.sortCriteria = SchoolSortCriteria.StateCode;
	}
	else {	
		terms.sortOrder = terms.sortOrder == SchoolSortOrder.Ascending ?
			SchoolSortOrder.Descending : SchoolSortOrder.Ascending;
	}
	UsnSearch.Execute();
}

function UsnSearch_GoToPage(step) {
	var terms = UsnSchoolSearchTerms.Instance;
	if (terms) {
		terms.pageNumber += step;
		UsnSearch.Execute();
	}
}

function UsnSchoolSearchTerms_serialize() {
	var params = [];
	
	// get current state code
	if (this.selectState) {
		var value = this.selectState.value;
		this.stateCode = value;
	}	
	params.push(!this.stateCode ? "" : Url.createParameter(P_US_STATE, this.stateCode));			
	params.push(Url.createParameter(P_SORT_ORDER, this.sortOrder));
	params.push(Url.createParameter(P_SORT_CRITERIA, this.sortCriteria));
	params.push(Url.createParameter(P_PAGE_NUMBER, this.pageNumber));

	var url = this.Url; 
	url = Url.addParameters(url, params);
	
	return url;		
}
