
function SearchControl(div, control) {
	var me = this;
	me.page;
	me.camera;
	me.schoolProfile;
	me.tabsControl;
	
	me.fbLoggedIn;
	me.fbUserId;
	me.fbFavorites = [];
	me.favIpeds;
	
	me._mainDiv = '#'+div;
	me._searchDiv = 'searchOptions';
	me._resultsDiv = 'resultsContent';
	me._recentsDiv = 'recentsContent';
	me._control = '#'+control;
	
	me._schools;
	me._schoolsResultsList;
	
	me._markers;
	me._markersZoom;
	me._placemarks;

	me._url = URL + 'php/';
	
	me._initSearchAreas();
}

SearchControl.prototype._initSearchAreas = function() {
	var cStr = '<ul>'
//			 + '	<li><a href="#"><img src="assets/img/controls-min.png" alt="minimize map" /></a></li>'
			 + '	<li><a title="New Search" href="#" onclick="control.changePage(\'search\');"><img src="assets/img/controls-search.png" /></a></li>'
//			 + '	<li><a href="#" onclick="control.changePage(\'results\');"><img src="assets/img/controls-results.png" alt="school results" /></a></li>'
			 + '	<li><a title="Recently Viewed Schools" href="#" onclick="control.changePage(\'recents\');"><img src="assets/img/controls-history.png" /></a></li>'
			 + '	<li><a title="See Favorites" href="#" onclick="control.changePage(\'favorites\');"><img src="assets/img/controls-favs.png" /></a></li>'
			 + '</ul>';
	
	$(this._control).append($(cStr));
	
	var sStr = '<div class="loader"><img src="'+BASE_URL+'assets/img/icons/load/birdLoad.gif" /></div>'
			 + '<div id="'+this._searchDiv+'"></div>'
//			 + '<div id="'+this._recentsDiv+'"></div>'
			 + '<div id="'+this._resultsDiv+'"></div>'
			 + '';
	
	$(this._mainDiv).append($(sStr));
	// $(this._mainDiv).append('<div class="loader" id="loader"><img id="birdLoad" src="'+BASE_URL+'assets/img/icons/load/birdLoad.gif" /></div>');
	$('.loader').hide();
	$('#'+this._resultsDiv).hide();	
//	$('#'+this._recentsDiv).hide();
	$('#'+this._searchDiv).hide();

	$('#'+this._searchDiv).load(this._url+'schoolSearch.php', {}, function() {
		$(".multiselect").multiselect();
	});
	
	$('#'+this._resultsDiv).load(this._url+'schoolResults.php', {}, function() {
		control.schoolProfile = new SchoolProfiles('schoolProfiles', 'results');
		control.tabsControl = $("#resultsTabs").tabs();
		// <a href="#" id="backTabAnchor" style="color: #fff" onclick="control.tabsControl.tabs('option', 'selected', 0);">back</a>
		$("#schoolProfileHeader").css({"height": "0px"}).hide();
		$("#backTab").append($("<a></a>")
						.text("back")
						.attr("id", "backTabAnchor")
						.css({"color": "#fff"})
						.click(function() {
							control.tabsControl.tabs('option', 'selected', 0);
							$("#schoolProfileHeader").css({"height": "0px"}).hide();
							$("#backTabAnchor").css({"color": "#fff", "height": "0px"});
						})
					);

		$("#resultsTabs").bind('tabsselect', function(event, ui) {
			// alert(ui.tab);
			if(ui.tab == BASE_URL + 'index.php#resultsTab'  || ui.tab == '#resultsTab' || ui.tab == BASE_URL + 'index.php?show=no#resultsTab') {
				$("#backTabAnchor").css({"color": "#fff", "height": "0px"});				
				$("#schoolProfileHeader").css({"height": "0px"}).hide();
			} else {
				$("#backTabAnchor").css({"color": ""});
			}
			clearYelpPlacemarks();
		});
	});
	
	// Add tooltips to Control
	$('#control a[title]').qtip({
		content: {
			text: false // Use each elements title attribute
		},

		position:{
			corner:{
				target: 'bottomMiddle',
				tooltip: 'topMiddle'
			}
		},
		style: {
			name: 'light', 
			border:{
				radius: 5,
				color: '#274B68'
			},
			tip: true 
		} 
	});
};

SearchControl.prototype.changePage = function(newPage) {
	this.page = newPage;
	$("#schoolProfileHeader").css({"height": "0px"}).hide();
	$("#backTabAnchor").css({"color": "#fff", "height": "0px"});
	if(newPage == 'search') {
		searchOptions.page = 1;
		$('#search-bar-text').val('');
		$('#search-bar-text').blur();
		$('#'+this._resultsDiv).hide();
		$('#'+this._searchDiv).fadeIn("slow");
	} else if(newPage == 'results') {
		$('#'+this._searchDiv).hide();		
		$('#'+this._resultsDiv).fadeIn("slow");
	} else if(newPage == 'favorites') {
		this.isLoggedIn();
	} else if(newPage == 'recents') {
		control.tabsControl.tabs('option', 'selected', 0);
		this.loadRecentSearch();
		$('#'+this._searchDiv).hide();
		$('#'+this._resultsDiv).fadeIn("slow");
	}
};

SearchControl.prototype.loadSearchResults = function(responseText, status, responseXML, object) {
	this.changePage('results');
	this.clearSearch();	
//	alert(responseText);
	if(responseText.length) {
		this._schools = new Schools();
		this._schools.loadSchoolsJson(responseText);
		this._loadData('schoolResultsList');
	} else {
		$('#schoolResultsList').html("Sorry, no schools found try your search again.");
	}
};

SearchControl.prototype._loadData = function(list) {
	map.getEarthInstance(function() {
		control.camera = new GCamera();
	});
	
	map.getEarthInstance(function() {
		if(ge) {
			control._schools.setPlacemarks(ge);
			control._placemarks = new GePlacemarkManager(ge, control.camera);
			control._placemarks.addPoints(control._schools.getPlacemarks());
		}
		
		control._schools.setMarkers();
		control._markers = new MarkerClusterer(map, control.camera);
		control._markers.addMarkers(control._schools.getMarkers());

		if (map.getCurrentMapType().getName() == 'Earth') {
			control._markers.hideMarkers();
		} else if(map.getCurrentMapType().getName() == 'Map' || map.getCurrentMapType().getName() == 'Hybrid') {
			control._markers.showMarkers();
			control._markers.resetViewport();
		}
	});
	
	
	// -------------------------------------------------------------------------------------------
	GEvent.addListener(map, 'maptypechanged', function() {
//		alert(map.getCurrentMapType().getName());
		var zoom = map.getZoom();
		if (map.getCurrentMapType().getName() == 'Earth') {
//			alert('hide markers');
			control._markers.hideMarkers();
		} else if(map.getCurrentMapType().getName() == 'Map' || map.getCurrentMapType().getName() == 'Hybrid') {
			control._markers.showMarkers();
			control._markers.resetViewport();
		}
	});
	
	this._schoolsResultsList = new SchoolResultsList(list);
	this._schoolsResultsList.addSchools(this._schools.getSchools());
};

SearchControl.prototype.clearSearch = function() {
	if(control.tabsControl)
		control.tabsControl.tabs('option', 'selected', 0);

	map.getEarthInstance(function() {
		//------------ todo find original object --------------- //
		if(ge) {
			ge.setBalloon(null);
		}
		
		if(control._placemarks) {
			control._placemarks.destroy();
		}
		if(control._markers) {
			control._markers.clearMarkers();
		}
		if(control._schools) {
			control._schools.clearSchoolCampus();
		}
		
		if(control.camera) {
			if (map.getCurrentMapType().getName() == 'Earth') {
				removeSpin();
				control.camera.moveCamera(41.8489055052432, -95.90747171258352, 5000000, 0, 0);
			} else if(map.getCurrentMapType().getName() == 'Map' || map.getCurrentMapType().getName() == 'Hybrid') {
				map.setCenter(new google.maps.LatLng(41.8489055052432, -95.90747171258352), 3);
			}
		}
	});
};

SearchControl.prototype.schoolResultsClick = function(lat, lng, ipeds) {
	$.get(URL + 'php/ajaxDb.php', {"tracking": true, "type": "view", "ipedsView": ipeds});
	
	if (map.getCurrentMapType().getName() == 'Earth') {
		var range = 1000;
		heading = Math.floor(Math.random()*91);
		tilt = 30 + Math.floor(Math.random()*20);
		ge.getOptions().setFlyToSpeed(0.2);

		this.camera.moveCamera(lat, lng, range, heading, tilt); 
		spinCamera();
	} else if(map.getCurrentMapType().getName() == 'Map' || map.getCurrentMapType().getName() == 'Hybrid') {
		map.setCenter(new google.maps.LatLng(lat, lng), 15);
	}

	this.schoolProfile.setIpeds(ipeds);
	this.tabsControl.tabs('option', 'selected', 1);
//	this._schools.loadSchoolCampus(ipeds); 
};


SearchControl.prototype.loadFavorites = function() {
	if(this.fbLoggedIn) {
		$.get(this._url+'ajaxDb.php', {"uid": this.fbUserId}, function(data) {
			var jsonData = JSON.parse(data);
			// alert(jsonData['data']);
			control.loadFavoritesResults(jsonData['data']);
		});
	}
};

SearchControl.prototype.loadFavoritesResults = function(responseText) {
	this.clearSearch();

	this._schools = new Schools();
	this._schools.loadSchoolsJson(responseText);
	this._loadData('schoolResultsList');
};

SearchControl.prototype.loadFavoritesList = function() {
	if(this.fbLoggedIn) {
		$.get(this._url+'ajaxDb.php', {"uid": this.fbUserId, "list": "yes"}, function(data) {
			var json = JSON.parse(data);
			if(json['favorites'] != '') {
				var favArray = json['favorites'].split(",");
				control.fbFavorites = favArray.slice(0, favArray.length-1);
				// alert('list: ' + json['favorites'] + ' ' + favArray.length + ' ' + control.fbFavorites.length);
			} else {
				control.fbFavorites = [];
			}
			control.pushToFavorites();
		});
	}
};

SearchControl.prototype.addToFavorites = function(ipeds) {
	this.favIpeds = ipeds;
	this.isLoggedIn();
};

SearchControl.prototype.pushToFavorites = function() {
	this.fbFavorites.push(this.favIpeds);
	// alert(this.favIpeds + ' ' + this.fbFavorites);
	var jsonObject = new Object;
	var jsonString = '';
	
	jsonObject.favorites = this.fbFavorites;
	jsonString = JSON.stringify(jsonObject);
	
	$.get(this._url+'ajaxDb.php', {"uid": this.fbUserId, "favorites": jsonString}, function() {
		control.favIpeds = '';
		alert('School added to favorites');
	});
};

SearchControl.prototype.isLoggedIn = function() {
	FB_RequireFeatures(["XFBML"], function() { 
		FB.ensureInit(function() { 
			FB.Connect.get_status().waitUntilReady( function( status ) {
				switch ( status ) { 
					case FB.ConnectState.connected: 
						$('#'+control._searchDiv).hide();
						$('#'+this._recentsDiv).hide();
						$('#'+control._resultsDiv).show();
						control.onFbLogin();
						break; 
					case FB.ConnectState.appNotAuthorized: 
					case FB.ConnectState.userNotLoggedIn:
						FB.Connect.requireSession(control.checkFbUser); 
						control.fbLoggedIn = false;
						break;
				}
			}); 
		});
	});
};

SearchControl.prototype.onFbLogin = function() {
	control.fbUserId = FB.Connect.get_loggedInUser();
	control.fbLoggedIn = true;

	if(control.favIpeds) {
		// alert(control.favIpeds);
		control.loadFavoritesList();
	} else {
		// alert('favorites');
		control.loadFavorites();
	}
};

SearchControl.prototype.checkFbUser = function() {
	control.fbUserId = FB.Connect.get_loggedInUser();
	// alert('check' + control.fbUserId);
	$.get(control._url+'ajaxDb.php', {"uid": control.fbUserId, "checkUid": "true"}, function(data) {
		// alert('data: ' + data);
		if(data == '0') {
			control.addFbUser(control.fbUserId);
		} else {
			control.onFbLogin();
		}
	});
};

SearchControl.prototype.addFbUser = function(fbUserId) {
	$.get(this._url+'ajaxDb.php', {"uid": control.fbUserId, "addUid": "true"}, function() {
		// alert('add user');
		control.onFbLogin();
	});	
};


SearchControl.prototype.loadRecentSearch = function() {
	$.get(this._url+'ajaxDb.php', {"recent": true}, function(data) {
		var jsonData = JSON.parse(data);
		control.clearSearch();

		control._schools = new Schools();
		control._schools.loadSchoolsJson(jsonData['data']);
		control._loadData('schoolResultsList');

//		var json = JSON.parse(data);
//
//		var display = '';
//		for(var i = 0; i < json.length; i++) {			
//				display += 	'<a href="#" onclick="javascript: searchOptions._jsonString = JSON.stringify('+json[i]+'); searchOptions._sendAjax; return false;">search</a>';
//				display	+=	'<ul>';
//			if(json[i]['name'] != '' && json[i]['name'] != null)		
//				display	+=	'	<li>School Name: '+json[i]['name']+'</li>';
//			
//			if(json[i]['degrees'] != '' && json[i]['degrees'] != null)		
//				display	+=	'	<li>Degrees: '+json[i]['degrees']+'</li>';
//			
//			if(json[i]['programs'] != '' && json[i]['programs'] != null)		
//				display	+=	'	<li>Programs: '+json[i]['programs']+'</li>';
//			
//			if(json[i]['regions'] != '' && json[i]['regions'] != null)		
//				display	+=	'	<li>Regions: '+json[i]['regions']+'</li>';
//			
//			if(json[i]['settings'] != '' && json[i]['settings'] != null)		
//				display	+=	'	<li>Area: '+json[i]['settings']+'</li>';
//			
//			if(json[i]['size'] != '' && json[i]['size'] != null)		
//				display	+=	'	<li>Campus Size: '+json[i]['size']+'</li>';
//			
//			if(json[i]['weather'] != '' && json[i]['weather'] != null)		
//				display	+=	'	<li>Weather: '+json[i]['weather']+'</li>';
//			
//			if(json[i]['age'] != '' && json[i]['age'] != null)		
//				display	+=	'	<li>Age: '+json[i]['age']+'</li>';
//			
//			if(json[i]['gender'] != '' && json[i]['gender'] != null)		
//				display	+=	'	<li>Gender: '+json[i]['gender']+'</li>';
//			
//			if(json[i]['special'] != '' && json[i]['special'] != null)		
//				display	+=	'	<li>Special: '+json[i]['special']+'</li>';
//			
//			if(json[i]['athletics'] != '' && json[i]['athletics'] != null)		
//				display	+=	'	<li>Athletics: '+json[i]['athletics']+'</li>';
//			
//			if(json[i]['sat'] != '' && json[i]['sat'] != null)		
//				display	+=	'	<li>SAT: '+json[i]['sat']+'</li>';
//			
//			if(json[i]['act'] != '' && json[i]['act'] != null)		
//				display	+=	'	<li>ACT: '+json[i]['act']+'</li>';
//				
//				display	+=	'</ul>';
//		}
//
//		$('#'+control._recentsDiv).html(display);
//		$('#'+control._recentsDiv).fadeIn('slow');
	});	
};








