var debugMode = false;

var g_AJAX = null;
var g_deletedCourseID;
var g_numSavedCourses;
var g_numToBeDeleted; // number of courses that need to be deleted before checkout
var g_numLocations;
var g_selectedLocationID = null; // single location selected
var g_selectedLocations = null; // multiple locations selected
var g_searchBySingleLocation = false;

var g_currentSchoolSlideNum = 1;

// these are the clickable city dots that are shown on the map
//var locations = new Array("Paris", "Vichy", "Angers", "Nice + Antibes", "Nouméa", "Besançon", "Tours", "Caen", "Montpellier", "Brest");
var locations;
var g_numMapLocations;
var g_mapLocationIDs;

var HashCookie = new Hash.Cookie('buttons');

var buttonStates = {
	"rhythm": ["off", "off", "off"],
	"region": ["off", "off", "off"],
	"capacity": ["off", "off"],
	"startingdate": ["off", "off", "off", "off"],
	"duration": ["off", "off", "off"],
	"other": ["off", "off", "off"],
	"bylocation": ["off"]
};

window.onload = pageInit;

function pageInit() 
{
	try { 
		checkBrowserCookies(); 
	} catch(exc) { 
		alert('Error: ' + exc);
	}

	// pre-load some images
	var saveButtonIMG = new Image();
	saveButtonIMG.src = "/enfrance/button_add_sm.gif";

	var searchLoadingIMG = new Image();
	searchLoadingIMG.src = "/enfrance/search_animation.gif";

	var searchStaticIMG = new Image();
	searchStaticIMG.src = "/enfrance/search_static.gif";	

	// check to see if we are on the search page
	if ($('searchButtons')) {
		if (HashCookie.get("rhythm")) {
			// get stored button states
			buttonStates["rhythm"] = HashCookie.get("rhythm");
			buttonStates["region"] = HashCookie.get("region");
			buttonStates["capacity"] = HashCookie.get("capacity");
			buttonStates["startingdate"] = HashCookie.get("startingdate");
			buttonStates["duration"] = HashCookie.get("duration");
			buttonStates["other"] = HashCookie.get("other");
			buttonStates["bylocation"] = HashCookie.get("bylocation");

			// set CSS "on" class for selected buttons
			setCSSForButtons();

			// query for prior search results
			if (buttonStates["bylocation"][0] != 'off') {
				g_selectedLocationID = buttonStates["bylocation"][0];
				searchByLocation(g_selectedLocationID);
			} else {
				startSearch();
			}
		}

		if (g_numSavedCourses > 0 && $('stepsIndicator')) {
			$('stepsIndicator').addClass('showStep2And3');
			$('showNextSteps').style.display = 'block';
		}		
	}
}

function setCSSForButtons() 
{
	// from hash cookie, set button states upon page load
	if (buttonStates["rhythm"][0] == 'on') { $('pace-slow').addClass('on'); }
	if (buttonStates["rhythm"][1] == 'on') { $('pace-medium').addClass('on'); }
	if (buttonStates["rhythm"][2] == 'on') { $('pace-fast').addClass('on'); }
	if (buttonStates["region"][0] == 'on') { $('area-city').addClass('on'); }	
	if (buttonStates["region"][1] == 'on') { $('area-country').addClass('on'); }	
	if (buttonStates["region"][2] == 'on') { $('area-sea').addClass('on'); }		
	if (buttonStates["capacity"][0] == 'on') { $('size-small').addClass('on'); }	
	if (buttonStates["capacity"][1] == 'on') { $('size-large').addClass('on'); }	
	if (buttonStates["startingdate"][0] == 'on') { $('season-spring').addClass('on'); }	
	if (buttonStates["startingdate"][1] == 'on') { $('season-summer').addClass('on'); }
	if (buttonStates["startingdate"][2] == 'on') { $('season-fall').addClass('on'); }
	if (buttonStates["startingdate"][3] == 'on') { $('season-winter').addClass('on'); }	
	if (buttonStates["duration"][0] == 'on') { $('length-short').addClass('on'); }		
	if (buttonStates["duration"][1] == 'on') { $('length-medium').addClass('on'); }	
	if (buttonStates["duration"][2] == 'on') { $('length-long').addClass('on'); }	
	if (buttonStates["other"][0] == 'on') { $('other-staff').addClass('on'); }	
	if (buttonStates["other"][1] == 'on') { $('other-class').addClass('on'); }		
	if (buttonStates["other"][2] == 'on') { $('other-jp').addClass('on'); }		
}

function setInitialSchoolTxt(numSchools) 
{
	$('loadingIndicator').className = 'initial';
	$('searchResultNumbers').setHTML('<a href="#resultsHeader">日仏学院が厳選した' + numSchools + '校</a>');
}

/**
 * Main Search Buttons
 */ 
function toggleButtonClick(button, groupname, position) 
{
	var jsonString;

	// set JSON object state
	if (buttonStates[groupname][position] == "off") {
		buttonStates[groupname][position] = "on";
	} else {
		buttonStates[groupname][position] = "off";
	}

	// search by region overrides any existent search by location
	if (buttonStates["region"][0] == "on" || buttonStates["region"][1] == "on" || buttonStates["region"][2] == "on") {
		g_searchBySingleLocation = false;
		buttonStates["bylocation"][0] = "off"
	}

	// toggle "on" class
	$(button).toggleClass('on');

	// save our button JSON array in hash cookie
	HashCookie.extend(buttonStates);

	startSearch();
}

function searchByLocation(locationid) 
{
	var locationArrayPos;
	var i;
	
	// set all location dots EXCEPT CHOSEN ONE to their unclickable state
	g_mapLocationIDs.each(
		function (item, index) 
		{
			if (locationid == item.toInt()) {
				// chosen dot remains clickable
				$("location-" + item).setHTML('<a class="selected" href="#" title=' + locations[index] + ' onclick="resetSearch(); return false;">');
			} else {
				// all others become spans
				$("location-" + item).setHTML('<span>' + locations[index] + '</span>');
			}
		}
	);

	g_searchBySingleLocation = true;
	g_selectedLocations = new Array(locationid);
	g_selectedLocationID = locationid;
	buttonStates["bylocation"][0] = locationid;

	HashCookie.extend(buttonStates);

	// run search for results
	startSearch();
}

function startSearch() 
{
	var url;
	var jsonString = Json.toString(buttonStates);
	var searchResults = $('searchResults');

	// cancel any loading AJAX requests
	if (g_AJAX != null) {
		g_AJAX.cancel();
	}

	fadeSearchResults();	

	$('searchResultNumbers').setHTML('');
	$('loadingIndicator').className = 'animation';

	if (
		buttonStates["rhythm"][0] == "off" && buttonStates["rhythm"][1] == "off" && buttonStates["rhythm"][2] == "off"
		&& buttonStates["region"][0] == "off" && buttonStates["region"][1] == "off" && buttonStates["region"][2] == "off"
		&& buttonStates["capacity"][0] == "off" && buttonStates["capacity"][1] == "off"
		&& buttonStates["startingdate"][0] == "off" && buttonStates["startingdate"][1] == "off" && buttonStates["startingdate"][2] == "off" && buttonStates["startingdate"][3] == "off"
		&& buttonStates["duration"][0] == "off" && buttonStates["duration"][1] == "off" && buttonStates["duration"][2] == "off"
		&& buttonStates["other"][0] == "off" && buttonStates["other"][1] == "off" && buttonStates["other"][2] == "off"
		&& buttonStates["bylocation"][0] == "off"
	) {
		// none of the buttons are selected. show starting schools again
		url = "/enfrance/startingschools.php";
		resetMap();
		resetSearchNumbers();
	} else {
		// button or map location pressed - start search
 		url = "/enfrance/ajaxsearch.php";	
	}
	
	
	
	
	// run new AJAX search
	g_AJAX = new Ajax(url, {
		method: 'post',
		postBody: jsonString, 
		evalScripts: true,
		onComplete: unfadeSearchResults,
		update: searchResults
	}).request();
}

/* 
After an AJAX search has run, highlight the dots on the map for the cities that have schools that came up
*/
function highlightLocationDots() 
{
	var locationArrayPos;
	var i;

	if (!g_searchBySingleLocation) {
		
		if (debugMode) alert(g_selectedLocations);
		
		if (g_selectedLocations.length >= 1) {
			// determine whether dots should be highlighted
			g_mapLocationIDs.each(
				function (item, index) 
				{
					if (g_selectedLocations.contains(item.toInt())) {
						// chosen dot remains clickable
						$("location-" + item).setHTML('<a class="selected" href="#" title=' + locations[index] + ' onclick="unSelectLocation(); return false;">');
					} else {
						// all others become spans
						$("location-" + item).setHTML('<span>' + locations[index] + '</span>');
					}
				}
			);
		} else {
			// no results returned. mark all dots as unclickable
			if (debugMode) alert('no dots to highlight bc no school results returned')
			g_mapLocationIDs.each(
				function(item, index) 
				{
					$("location-" + item).setHTML('<span>' + locations[index] + '</span>');
				}
			);			
		}			
	}
}

function unSelectLocation() 
{
	buttonStates["bylocation"][0] = "off";
	g_searchBySingleLocation = false;
	startSearch();
}

function fadeSearchResults() 
{
	new Fx.Style(
		'searchResults', 
		'opacity',
		{duration: 200}
	).start(0.99,0.4);
}

function unfadeSearchResults() 
{
	

	new Fx.Style(
		'searchResults', 
		'opacity',
		{duration: 200}
	).start(0.4,0.99);

	$('loadingIndicator').removeClass('animation');
}

function resetSearch() 
{
	HashCookie.empty();
	window.location.reload(false);
}


/**
 * this will function will reset the state of the map with dots to it's default
 */
function resetMap () 
{
	// old code
	/*
	for(i = 1; i <= 8; i++) {
		locationArrayPos = i - 1;
		$("location-" + i).setHTML("<a href=\"#\" title=" + locations[locationArrayPos] + " onclick=\"searchByLocation(" + i + "); return false;\">" + locations[locationArrayPos] + "</a>");
	}
	*/
	g_mapLocationIDs.each(
		function (item, index) 
		{
			$("location-" + item).setHTML('<a href="#" title=' + locations[index] + ' onclick="searchByLocation(' + item + '); return false;">' + locations[index] + '</a>');
		}
	);	
}

function resetSearchNumbers () 
{
	$('searchResultNumbers').setHTML('');
}

function setSearchResultNumbers(numSchools, numCourses) 
{
	var txt = "<a href=\"#resultsHeader\">" + numSchools + "学校 ・ " + numCourses + "コース</a>";
	$('searchResultNumbers').setHTML(txt);
}


/* 
----------------------------------------------------------------------------
Cart Functions 
----------------------------------------------------------------------------
*/

function toggleCourseInCart(buttonid, courseid) 
{
	var i = 0;
	var url;
	var inCart = false;
	var postString = 'courseid=' + courseid;
	var dialogBox = $('dialogBox');

	
	
	
	// check to see if a course has already been saved
	while (Cookie.get("savedcourses[" + i + "]") != false) {
		if (Cookie.get("savedcourses[" + i + "]") == courseid) {
			inCart = true;
			break;
		}
		i++;
	}

	if(!$(buttonid).hasClass('clicked')) {
		$(buttonid).addClass('clicked');
	}

	if (inCart) {
		// >>>>>>>>>>>>> remove course from cart
		$(buttonid).removeClass('remove');
		$(buttonid).addClass('add');
		$(buttonid).setHTML('Add');		
		url = "/enfrance/removefromcart.php";
		g_numSavedCourses--;

		if (g_numSavedCourses == 0 && $('stepsIndicator')) {
			$('stepsIndicator').removeClass('showStep2And3');
			$('showNextSteps').style.display = 'none';
		}
		
		$('numSavedCourses').setHTML(g_numSavedCourses);
	} else {
		// >>>>>>>>>>>>> add new course to cart
		$(buttonid).removeClass('add');
		$(buttonid).addClass('remove');
		$(buttonid).setHTML('Remove');		
		url = "/enfrance/addtocart.php";

		if ($('stepsIndicator')) {
			// highlight image and link for step 2 and step 3
			$('stepsIndicator').addClass('showStep2And3');
			$('showNextSteps').style.display = 'block';
		}
		
		g_numSavedCourses++;
		$('numSavedCourses').setHTML(g_numSavedCourses);		
	}
	
	new Ajax(url, {
		method: 'post',
		postBody: postString, 
		evalScripts: true,		
		update: null
	}).request();
}


function removeClickedCSS(elementID) 
{
	if($(elementID).hasClass('clicked')) {
		$(elementID).removeClass('clicked');
	}
}

function deleteCourse(elementID, courseid) 
{
	var url = '/enfrance/deletecourse.php';
	var postString = 'courseid=' + courseid;
	var deletedItem = $(elementID);
	
	g_deletedCourseID = courseid;
	
	if (g_numToBeDeleted != null) {
		g_numToBeDeleted--;
		if (g_numToBeDeleted > 0) {
			$('toBeRemoved').setHTML('あと' + g_numToBeDeleted + 'つを削ってください');
		} else {
			$('toBeRemoved').setHTML('');
			$('contact').style.display = 'block';
		}

		if (g_numSavedCourses != null) {
			g_numSavedCourses--;
			$('numSavedCourses').setHTML(g_numSavedCourses);
		}
	}

	// set the appropriate bkgr image for Step 2
	if (g_numSavedCourses > 5) {
		$('step2').className = 'overFiveSaved';
	} else if (g_numSavedCourses >= 1 && g_numSavedCourses <= 5) {
		$('step2').className = 'oneToFiveSaved';
	} else {
		$('step2').className = 'zeroSaved';
	}	

	new Ajax(url, {
		method: 'post',
		postBody: postString, 
		evalScripts: true,
		onComplete: addToDeletedList,
		update: null
	}).request();

	new Fx.Style(
		elementID, 
		'opacity', 
		{ 
			onComplete: function() { 
				deletedItem.setStyle('display', 'none'); 
			} 
		}
	).start(1,0);
}


function addToDeletedList(request) 
{
	var divID = "deletedCourse-" + g_deletedCourseID;
	
    var newDiv = new Element('div', {
    	'id' : divID,
    	'class': 'deletedCourse'
    }).setHTML(request).injectTop('deletedCourses');
}

function reAddCourse(elementID, courseid) 
{
	var url = '/enfrance/readdcourse.php';
	var postString = 'courseid=' + courseid;
	var courseDiv = "course-" + courseid;

	if (g_numSavedCourses != null) {
		g_numSavedCourses++;
		$('numSavedCourses').setHTML(g_numSavedCourses);
		if (g_numToBeDeleted != null) {
			g_numToBeDeleted++;
			if (g_numToBeDeleted > 0) {
				$('toBeRemoved').setHTML('あと' + g_numToBeDeleted + 'つを削ってください');
				$('contact').style.display = 'none';
			} else {
				$('toBeRemoved').setHTML('');
				$('contact').style.display = 'block';
			}
		}
	}

	// set the appropriate bkgr image for Step 2
	if (g_numSavedCourses > 5) {
		$('step2').className = 'overFiveSaved';
	} else if (g_numSavedCourses >= 1 && g_numSavedCourses <= 5) {
		$('step2').className = 'oneToFiveSaved';
	} else {
		$('step2').className = 'zeroSaved';
	}		
	
	// remove "deleted" course from the DOM
	$(elementID).remove();
	
	// fade in the course that was deleted
	$(courseDiv).setStyle('display', 'block');

	new Ajax(url, {
		method: 'post',
		postBody: postString, 
		evalScripts: true,
		update: null
	}).request();	

	new Fx.Style(
		courseDiv, 
		'opacity'	
	).start(0,0.99);	
}

/* 
----------------------------------------------------------------------------
Cookie Testing (assuming they have JS enabled)
---------------------------------------------------------------------------- 
*/

// indicates whether user's browser has cookies turned off
function isCookieEnabled() 
{
	var isCookieEnabled;
	
	Cookie.set('ryugakuCookiesEnabled', 'true');

	isCookieEnabled = Cookie.get('ryugakuCookiesEnabled');

	return isCookieEnabled == 'true';
}

function checkBrowserCookies() 
{
	if (!isCookieEnabled()) {
		$('noCookiesError').style.display = 'block';
	}
}

/* 
----------------------------------------------------------------------------
Mini slide-show shown on indiv school pages
----------------------------------------------------------------------------
*/
function gotoSchoolSlide(newSlideNum) 
{
	var oldSlideNum = g_currentSchoolSlideNum;

	g_currentSchoolSlideNum = newSlideNum;

	// show/hide slide images
	$("slide-" + oldSlideNum).style.display = 'none';
	$("slide-" + newSlideNum).style.display = 'block';

	// set slide button to selected
	$("slideButton-" + oldSlideNum).removeClass('selected');
	$("slideButton-" + newSlideNum).addClass('selected');
}
	
