var Transferequiv = Class.create({
	initialize: function( tabBox ) {
		this.tabBox = tabBox;
		this.searchOptions();
		Event.observe( 'SchoolLookupStateSelect', 'change', function(){ this.getSchools(); }.bind( this ) );
		Event.observe( 'BeginCourseSearchDirections', 'click', function(){ this.showSearch(); }.bind( this ) );
		
		Event.observe( 'SchoolLookupsCoursesForm', 'submit', function( event ) {
			if( $( 'SchoolLookupSchoolCode' ).value ) {
				$( 'transferCourses' ).update();
				$( 'transferCoursesBox' ).hide();
				this.positionBox();
				$( 'imageBox' ).show();
				new Ajax.Request( APP_TRANSFEREQUIV_URL+'courses/get_courses/'+$( 'SchoolLookupSchoolCode' ).value, {
					method: 'get',
					onComplete: function( transport ) {
						$( 'transferCourses' ).update( transport.responseText );
						$( 'transferCoursesBox' ).show();
						$( 'imageBox' ).hide();
						$( 'NumberOfCourses' ).update(
							'<h4>Results - ' + $( 'NumberOfCourses' ).innerHTML + ' total for ' +
							$( 'SchoolLookupSchoolCode' )[ $( 'SchoolLookupSchoolCode' ).selectedIndex ].innerHTML + '</h4>'
						);
						$( 'NumberOfCourses' ).show();
						this.showHideCourses();
						Event.observe( 'HideResults', 'click', function(){ this.hideAllCourses(); }.bind( this ) );
						Event.observe( 'ShowResults', 'click', function(){ this.showAllCourses(); }.bind( this ) );
					}.bind(this)
				});
			}
			else {
				alert( 'No school was selected.' );
			}
		}.bind(this));
		
		Event.observe( 'SchoolLookupKeywordSearch', 'click', function( event ) {
			if( $( 'SchoolLookupSchoolKeyword' ).value ) {
				$( 'imageBox' ).show();
				this.positionBox();
				schoolKeyword = $( 'SchoolLookupSchoolKeyword' ).value;
				new Ajax.Request( APP_TRANSFEREQUIV_URL+'courses/get_schools_by_name/' + schoolKeyword + '.xml', {
					method: 'get',
					onComplete: function( transport ) {
						$( 'SchoolLookupSchoolCode' ).update();
						$( 'imageBox' ).hide();
						schools = transport.responseXML.getElementsByTagName( 'lookup_school' );
						for( var iNode = 0; iNode < schools.length; iNode++ ) {
							$( 'SchoolLookupSchoolCode' ).options.add( new Option( schools.item( iNode ).getAttribute( 'school_name' ), schools.item( iNode ).getAttribute( 'Scode' ) ) );
						}
					}.bind(this)
				});
			}
			else {
				alert( 'You did not enter a school.' );
			}
		}.bind(this));
	},

	showSearch: function() {
		$( 'tag_tab_instruction' ).removeClassName( 'current' );
		$( 'instructions' ).hide();
		$( 'tag_tab_course' ).addClassName( 'current' );
		$( 'courses' ).show();
		this.tabBox.currentTab = $( 'tag_tab_course' ).up();
		this.tabBox.currentTabId = 'courses';
	},
	
	positionBox: function(){
		this.pageOffsets = document.viewport.getScrollOffsets();
		this.page = document.viewport.getDimensions();
		$( 'imageBox' ).setStyle({
			width: '220px',
			left: ( parseInt( this.page.width / 2 ) - ( 110 ) )+'px',
			top: ( this.pageOffsets.top + 20 )+'px'
		});
	},
	
	showHideCourses: function() {
		$$( '.CourseGroup H4' ).each(function( course ) {
			Event.observe( course, 'click', function( ){
				if( !course.next().visible() ) {
					new Effect.BlindDown( course.next(), { duration: 0.5 } );
					course.setStyle( { backgroundColor: '#888' } );
				}
				else {
					new Effect.BlindUp( course.next(), { duration: 0.5 } );
					course.setStyle( { backgroundColor: '#444' } );
				}
			});
		});
	},
	
	showAllCourses: function() {
		$$( '.CourseGroup H4' ).each(function( course ) {
			if( !course.next().visible() ) {
				new Effect.BlindDown( course.next(), { duration: 0.5 } );
				course.setStyle( { backgroundColor: '#888' } );
			}
		});
	},
	
	hideAllCourses: function() {
		$$( '.CourseGroup H4' ).each(function( course ) {
			if( course.next().visible() ) {
				new Effect.BlindUp( course.next(), { duration: 0.5 } );
				course.setStyle( { backgroundColor: '#444' } );
			}
		});
	},
	
	getSchools: function( event ) {
		stateSelected = $( 'SchoolLookupStateSelect' ).value;
		new Ajax.Request( APP_TRANSFEREQUIV_URL+'courses/get_schools/' + stateSelected + '.xml', {
			method: 'get',
			onComplete: function( transport ) {
				$( 'SchoolLookupSchoolCode' ).update();
				schools = transport.responseXML.getElementsByTagName( 'lookup_school' );
				for( var iNode = 0; iNode < schools.length; iNode++ ) {
					$( 'SchoolLookupSchoolCode' ).options.add( new Option( schools.item( iNode ).getAttribute( 'school_name' ), schools.item( iNode ).getAttribute( 'Scode' ) ) );
				}
			}
		});
	},
	
	searchOptions: function() {
		$$( '.sortBys' ).each( function( sortby ) {
			Event.observe( sortby.down( 1 ), 'click', function() {
				if( !sortby.down( 1 ).hasClassName( 'sortSet' ) ) {
					sortby.down( 1 ).toggleClassName( 'sortSet' );
					sortby.down( 0 ).toggleClassName( 'sortSet' );
					$( 'SearchByLocation' ).toggle();
					$( 'SearchByKeyword' ).toggle();
					this.getSchools();
				}
			}.bind( this ) );
			
			Event.observe( sortby.down(), 'click', function() {
				if( !sortby.down().hasClassName( 'sortSet' ) ) {
					sortby.down( 1 ).toggleClassName( 'sortSet' );
					sortby.down( 0 ).toggleClassName( 'sortSet' );
					$( 'SearchByLocation' ).toggle();
					$( 'SearchByKeyword' ).toggle();
					$( 'SchoolLookupSchoolCode' ).update();
				}
			}.bind( this ) );
		}.bind( this ) );
	}
});