Event.observe(window, 'load', wireFindAClass);

Prototype.Browser.IE6=Prototype.Browser.IE && parseInt(navigator.userAgent.substring (navigator.userAgent.indexOf("MSIE")+5))==6;
var isIE6 = (Prototype.Browser.IE6)?true:false;
var isSafari = (Prototype.Browser.WebKit)?true:false;

var qsParm = new Array();
var regionData;
var hfResultCountID;    //populated from .net side
var useQSSearch = false;


var ClassSearchParams = {
region : '',
clubs : [],
categories : [],
className : '',
day : '',
time : '',
subclub : '',
instructor : '',
level : '',
init : function(params) {
      if (params["rgn"]) { this.region = params["rgn"]; } else { return; }
      if (params["club"]) { this.clubs = params["club"].split('%20'); }
      if (params["cat"]) { this.categories = params["cat"].split('%20'); }
      if (params["class"]) { this.className = params["class"]; }
      if (params["day"]) { this.day = params["day"]; }
      if (params["time"]) { this.time = params["time"]; }
      if (params["sclub"]) { this.subclub = params["sclub"]; }
      if (params["instr"]) { this.instructor = params["instr"]; }
      if (params["level"]) { this.level = params["level"]; }
      
      
    }
};

var Chooser = {
	region : false,
	regionName: false,
	//allInRegion : false,
	favoriteClubs : false,
	allCategories : false,
	favoriteCategories : false,
	hasSelectedClubs : true,
	hasSelectedCategories : true,
	currentClubIDs : false,
	currentClubNames : false,
	currentCategoryIDs : false,
	currentCategoryNames : false,
	currentPage : false,
	currentClassID : false,
	redirectUrl : "",
    //	clubs : [],
    //	categories : [],
    
    hasFavoriteClubs : function() {
    
        var hasFavs = false;
        if($$('.favClubItem').length > 0)
            hasFavs = true;
        
        return hasFavs;
    
    },
    
    hasFavCategories : function() {
    
        var hasFavs = false;
        if ($$('.favCategoryItem').length > 0)
            hasFavs = true;
        
        return hasFavs;
    
    },
    
	// retrieval function, which we ask to get us things
	updateMe : function(event) {
	//alert('updateMe');
		var element = Event.element(event);
		
		// both conditions must be true for this to fire since checkboxes also fire "true" for "change" events
		if (element.id == "selectRegion" && event.type == "change") {
			//Chooser.allInRegionElement.enable();
			
			Chooser.myFavoriteClubsElement.enable();
			eventRegionChange(false);

		}
		else {
			if ((element.id == "selectRegion") || (event.type == "change")) return;	
			
			// checkbox logic for top level filters
			switch(element.id) {
				case "allInRegion":
				    // check/uncheck all clubs...
				    $$('ul.clubList .clubItem').each(function(e){e.checked = element.checked});
				    
					Chooser.myFavoriteClubsList.style.display = "none";
					if ($('subRegionList')) $('subRegionList').show();
					$$('.clubList').invoke('show');
				    
				    //Chooser.allInRegion = element.checked;
					Chooser.myFavoriteClubsElement.checked = false;
    				break;
				
				case "myFavoriteClubs":
				//alert("myFavoriteClubs");
				    Chooser.favoriteClubs = element.checked;
				
					if (element.checked)
					{
						if ($('subRegionList')) $('subRegionList').hide();
						$$('.clubList').invoke('hide');
						Chooser.myFavoriteClubsList.style.display = "block";
						//Chooser.allInRegion = false; 
						//Chooser.allInRegionElement.checked = false;
					}
					else
					{
						Chooser.myFavoriteClubsList.style.display = "none";
						if ($('subRegionList'))
						{
						    $('subRegionList').show();
						}
						else
						{
						    selectRegion(2);
						}
						$$('.clubList').invoke('show');
					}
    				break;
    				
    				
				case "selectAllClasses":
				
				    $$('#categorySelection .categoryItem').each(function(e){e.checked = element.checked;});
				    
					Chooser.favoriteCategories = false;
					if (Chooser.myFavoriteCategoriesElement)
					{
					    Chooser.myFavoriteCategoriesElement.checked = false
					    $$('.favColumn1')[0].style.display = "none";
						$$('.favColumn2')[0].style.display = "none";
					    //Chooser.myFavoriteCategoriesList.style.display = "none";
					}
					
				    Chooser.allCategories = element.checked;
					
					if($$('.column1').length > 0) $$('.column1')[0].style.display = "block";
					if($$('.column2').length > 0) $$('.column2')[0].style.display = "block";
					if($$('.column3').length > 0) $$('.column3')[0].style.display = "block";
    				break;
    				
				case myFavoriteCategories: // the following is set in the code behing var myFavoriteCategories = myFavoriteCategories.ClientID; // originally, "myFavoriteCategories":
				
				    Chooser.favoriteCategories = element.checked;
//alert('135');				    
				    if (element.checked)
				    {
						if($$('.column1').length > 0) $$('.column1')[0].style.display = "none";
					    if($$('.column2').length > 0) $$('.column2')[0].style.display = "none";
					    if($$('.column3').length > 0) $$('.column3')[0].style.display = "none";
						$$('.favColumn1')[0].style.display = "block";
						$$('.favColumn2')[0].style.display = "block";
						//Chooser.myFavoriteCategoriesList.style.display = "block";
				    }
				    else
				    {
	
						//Chooser.myFavoriteCategoriesList.style.display = "none";
						$$('.favColumn1')[0].style.display = "none";
						$$('.favColumn2')[0].style.display = "none";
						if($$('.column1').length > 0) $$('.column1')[0].style.display = "block";
					    if($$('.column2').length > 0) $$('.column2')[0].style.display = "block";
					    if($$('.column3').length > 0) $$('.column3')[0].style.display = "block";
				    }
				
					if (Chooser.allCategories) {
						Chooser.allCategories = false;
						Chooser.allCategoriesElement.checked = false;
					}
				break;
			}
			
			// add or remove "checked" clubs from the Chooser
			if (element.hasClassName('clubItem'))
			{		
				Chooser.favoriteClubs = false;
				Chooser.myFavoriteClubsElement.checked = false;
				//Chooser.allInRegion = false;
				//Chooser.allInRegionElement.checked = false;
			}
			
			if (element.hasClassName('categoryItem'))
			{
				Chooser.allCategories = false;
				Chooser.allCategoriesElement.checked = false;
			}
		}
		
		// check if any changes have been made since the last time this function ran
		Chooser.checkSubmitStatus();		
	},
	updateFromQS : function() {
	    
	
	},
	// builder function, which constructs our subregions and clubs layout
	build : function() {

		// clean out the contents of regionSelector
		var z = $('subRegionList');
		if (z) z.remove();
		$$('.clubList').invoke('remove');
		
		Object.toJSON(regionData); // make sure region data is JSON
		
		var subRegionList = new Element('ul', {id: "subRegionList"});
		var titleBuilder = clubBuilder = "";
		var rSelector = $('regionSelector');		
		var idOfChecked = '0';
		// construct lists of subregions and clubs
		regionData.contents.each(function(obj) {
		    //added style to remove the region.
			//titleBuilder += '<li style="display:none;"><a href="#">' + obj.subRegion.title + '</a></li>';
			//clubBuilder += '<ul style="display: block; font-size:12px; color: #FFF; line-height: 19px; margin-left: 5px;">';
			clubBuilder += '<table class="clubList"><tr><td><ul>';
			
			// create club lists
			var i = 0;
			obj.subRegion.clubs.each(function(club){
				var clubId = "listItem" + Math.round(1000*Math.random());
				var checked = "";
				
				//if the querystring clubID is present make sure that box is checked
				if (useQSSearch) {
				    for (var c=0;c<ClassSearchParams.clubs.length;c++) {
				    //alert('club.id: ' + club.id + ', CSP: ' + ClassSearchParams.clubs[c]);
	                    if (club.id == ClassSearchParams.clubs[c]) {
	                        checked = 'checked';
	                        break;
	                    }    
	                }
				}
				else {
				    if(club.id == qsParm["clubid"]){
				        checked = 'checked';
				        idOfChecked = clubId;
				    }
				}
				
				clubBuilder += '<li><input ' + checked + ' type="checkbox" id="' + clubId + '" value="' + club.id + '" class="clubItem" /><label for="' + clubId + '">' + club.name + '</label></li>';
			    if(i == 5 || i == 11){
			        clubBuilder +='</ul></td><td style="padding-left:5px;"><ul class="clubList visible">';
			    }
			    i++
			});
			clubBuilder += '</ul></td></tr></table>';
		});
		
		// glue together fragmented html
		//subRegionList.update(titleBuilder);
		//subRegionList.firstDescendant().className = "active";
		//rSelector.appendChild(subRegionList)
		rSelector.insert(clubBuilder);
		
		// wire up event listeners
		var listTrigger = subRegionList.select('a');
		var listFinder = rSelector.select('.clubList');
		var listItem = subRegionList.select('li');
		
		// event listener that creates a link between subregions and their clublists
		listTrigger.invoke('observe', 'click', function(event){
			event.stop();
			var currentList = rSelector.select('.visible')[0];			
			var caller = this.up();
			var oldCaller = subRegionList.select('.active')[0];
			currentList.removeClassName('visible');		
			var pointer = listItem.indexOf(caller); // numerical representation of clicked item's position in its container's array
			listFinder[pointer].addClassName('visible'); // we use it here to target a club list with the same position in its own array
			subRegionList.select('.active')[0].removeClassName('active');
			
			// check whether subregion's list contains any checked items before moving on
			var inputs = currentList.select('input');
			for (x = 0; x < inputs.length; x++) {
				if (inputs[x].checked){
					oldCaller.className = "engaged";
					break;
				}
				else oldCaller.className = "";
			}
			
			caller.className = "active";
		});
		
		listFinder[0].addClassName('visible'); // finally, lets show the first list by default
        if(idOfChecked != '0'){
            Chooser.favoriteClubs = false;
		    Chooser.myFavoriteClubsElement.checked = false;
		    Chooser.checkSubmitStatus();	
		}
		
	    Chooser.checkSubmitStatus();
	},
	// submit state status checker, this function runs everytime something is changed
	checkSubmitStatus : function() {
	    //Chooser.classSubmitBtn.className = "off";
	    Chooser.classSubmitBtn.className = "on";
	    
		//if (isIE6) Chooser.classSubmitBtn.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/cached/findAClassSubmitOff.png')";
		if (isIE6) Chooser.classSubmitBtn.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/cached/findAClassSubmitOn.png')";
		
	},
	
	// initializer function
	init : function() {
		// wrapper identification
		Chooser.wrapper = ($('container').hasClassName('white')) ? "white" : "black"

		// change the chooser tab on find a class
		if (Chooser.wrapper == "black") {
			$('findInstructorTrigger').observe('click', function(event){
				event.stop();
				$('divResults').update();
				$('findaClassTrigger').removeClassName('current');
				$('findAClass').style.display = "none";
				$('findAnInstructor').style.display = "block";
				this.className = "current";
			});
			$('findaClassTrigger').observe('click', function(event){
				event.stop();
				$('findInstructorTrigger').removeClassName('current');
				$('findAnInstructor').style.display = "none";
				$('findAClass').style.display = "block";
				this.className = "current";
			});
		}
		
		// variables
		Chooser.myFavoriteClubsElement = $('myFavoriteClubs');
		Chooser.myFavoriteClubsList = $('myFavoriteClubsList');
		Chooser.classSubmitBtn = $('submitClassQuery');
		Chooser.allCategoriesElement = $('selectAllClasses');
		Chooser.myFavoriteCategoriesElement = $$('.myFavoriteCategories')[0];
		Chooser.myFavoriteCategoriesList = $('myFavoriteCategoriesList');		
		
		// event listeners
		$('findAClass').observe('click', function(event) {Chooser.updateMe(event);});
		$('selectRegion').observe('change', function(event) {Chooser.updateMe(event);});
		Chooser.classSubmitBtn.observe('click', function(event){
			if (this.className == "on") {
			
			    //$('imgSpinner').style.display = 'block';
			    $('imgSpinner').show();
				//Results.statusImg.style.display = "block";
				// collect clubs & categories
				//if (Chooser.allInRegionElement.checked) $$('.clubItem').each(function(s){Chooser.clubs.push(s)});
				//if (Chooser.allCategoriesElement.checked) $$('.categoryItem').each(function(s){Chooser.categories.push(s)});

				
				Results.retrieve(event, this);
			}
			else {
				event.stop();
				return;
			}
		});
		
		// addclass popup add + cancel buttons
		$('cancel').observe('click', function(){this.up().style.display = "none"});
		$('add').observe('click', function(event)
		{
		    var duration = Form.getInputs('aspnetForm','radio','classDuration').find(function(radio) { return radio.checked; }).value;
		    
		    new Ajax.Request("findAClass.aspx", {
				method: "get",
				evalScripts: true,
				parameters: { a:'addclass', classInstanceID: Chooser.currentClassID, duration: duration},
				onSuccess: function(transport)
				{
				    $('addAClassMenu').style.display = 'none';
        		    Chooser.currentClassID = 0;
        		    if(Chooser.redirectUrl.length > 0 && Chooser.redirectUrl != "false")
        		    {
        		        if(duration > 1) //I love closures.
        		        {
        		            window.location = Chooser.redirectUrl + ((Chooser.redirectUrl.indexOf("?")>-1)?"&":"?") + "firstInSeries=true";
        		        }
        		        else
        		        {
        		            window.location = Chooser.redirectUrl;
        		        }
        		    }
				}
			});
		});


		// Safari 2.0.x fix
		if ((isSafari) && (Chooser.wrapper == "black")) {
			var version = window.navigator.userAgent.split('/');
			version = version[version.length-1];
			if (version < 500){
				$(tb_InstructorInput).style.width = "173px";
				$(tb_InstructorInput).style.height = "14px";
			}
		}
	}
}

var Results = {

    filterClassName: false,
    filterClassDay: false,
    filterClassTime: false,
    filterClub: false,
    filterInstructor: false,
    filterLevel: false,

	// retrieval function
	retrieve : function(event, caller) {
		if (event) event.stop();
		
		//reset
		Chooser.currentClubNames = Chooser.currentCategoryNames = "";
		Chooser.currentClubIDs = Chooser.currentCategoryIDs = "";
		Chooser.currentPage = 1;
		
		// selected club Ids and names
		if ($('myFavoriteClubs').checked == true){
		    $$('.favClubItem').each(
		        function(e){
		            if (e.checked){ 
		                Chooser.currentClubIDs += e.value + ',';
		                Chooser.currentClubNames += e.nextSibling.innerHTML + ',';
		            }
		        }
		    );		    
		}
		else {
		    $$('.clubItem').each(function(e){
		        if (e.checked){
		            Chooser.currentClubIDs += e.value + ',';
		            Chooser.currentClubNames += e.nextSibling.innerHTML + ',';
		            
		        }
		    });
		}
		
		var msg = 'At least one location and class category must be selected.';
		if (location.href.toLowerCase().indexOf('findaspa') > 0)
		    msg = 'At least one location and spa service must be selected.';
		    
		if (Chooser.currentClubIDs == '') {
		    $('imgSpinner').hide();
		    alert(msg);
		    return;
		}
		    
		    
		
		// selected cat IDs and names
		if ($$('.myFavoriteCategories')[0] && $$('.myFavoriteCategories')[0].checked) {
		
		    $$('.favCategoryItem').each(function(s){ 
		        if (s.checked){
		            Chooser.currentCategoryIDs += s.value + ',';
		            Chooser.currentCategoryNames += s.nextSibling.innerHTML + ',';
		            }
		    });
		}
		else {
		    $$('.categoryItem').each(function(s){ 
		        if (s.checked){
		            Chooser.currentCategoryIDs += s.value + ',';
		            Chooser.currentCategoryNames += s.nextSibling.innerHTML + ',';
		        }
		    });
		}
		
		if (Chooser.currentCategoryIDs == '') {
		    $('imgSpinner').hide();
		    alert(msg);
		    return;
		}
		
		
		try {$('searchResults').remove(); $('srPagination').remove();} catch(e){} // check to see if there are already search results on the page and remove them
		
		Chooser.currentPage = 1;
				
		new Ajax.Updater('divResults', location.pathname, {
			method: 'get',
			parameters: {
			    a:'getresults',
			    regionId: Chooser.region,
				clubIDs: Chooser.currentClubIDs,
				categoryIDs: Chooser.currentCategoryIDs,
				page: Chooser.currentPage
			},
			onComplete: function() {
			    $('imgSpinner').hide();
				Results.rowToggler();
				if (isIE6) Results.ieHover();
				//caller.firstDescendant().style.display = "none";

				// wireup dropdown filters and paging
				$$('.resultFilter').invoke('observe','change', function(e){ Chooser.currentPage = 1; Results.Filter();});
				//wireupPaging();
				Results.WireupPaging();
				
				//Omniture - log search - just the regions, clubs, and categories
				
				if(Chooser.wrapper == "black"){
				    WriteTrackingJSGFSearch(Chooser.regionName, Chooser.currentClubNames, '', Chooser.currentCategoryNames, '', '', '', $(hfResultCountID).value);  
				}
				
				//info popup
				wireUpInfoIcons();
				
				if (useQSSearch) {
				    //alert('add filter code here');
				    useQSSearch = false;
				}
				
                $$('.jsCountDownTime').each(function(el,index){
				    //alert($(el).readAttribute('timeoutlength'));
				    setTimeout(function(){ turnOnBookABikeIcon($(el).readAttribute('classid'), $(el).readAttribute('targetlinkid'), $(el).readAttribute('targetimgid')); }, $(el).readAttribute('timeoutlength'));
				});
				
				if(typeof(loadingLayer) != "undefined" && loadingLayer)
                {
                    new Effect.Fade(loadingLayer, { from:0.85, duration: 0.5 });
                }
                else
                {
				    //new Effect.ScrollTo('chooseLocation');
				}
			}
		});
	},
	retrieveFromQS : function(searchParams) {
	    
	
	
	},
	// event handler for opening rows
	rowToggler : function() {
		$$('.srRow').invoke('observe', 'click', function(event) {
		
		    if(typeof(event.srcElement) == "undefined")
		    {
		        event.srcElement = event.target;
		    }
		    if($(event.srcElement).hasClassName("infoBtn") && $(event.srcElement.parentNode).readAttribute("href") != null && $(event.srcElement.parentNode).readAttribute("href").length>0)
		    {
		        return;
		    }

			//if (Effect.Queue.effects.length > 0) return;

			// check for a row that's already opened
			this.siblings().each(function(siblingRow){
				if (siblingRow.hasClassName('openRow')) {
					var oldInfoBlock = siblingRow.down('div.srInfo');
					oldInfoBlock.style.display = "none";
					siblingRow.removeClassName('openRow');
				}
			});
			
			// open the selected row
			if (this.hasClassName('openRow')) return; // check to make sure that the row isn't already open
			var infoBlock = this.down('div.srInfo');
			if (typeof(infoBlock) == 'undefined') return; // make sure the info exists
			this.addClassName('openRow');
			infoBlock.style.display = "block";
		});
		
		
		if (Chooser.wrapper == "black") {
		
		/*
			// add "add class" items
			$$('.srAddClass').each(function(item){
				//item.update('<p class="addToClass">ADD TO MY EQ</p>');
			});
			*/
		    
			// calendar icon hover events
			$$('.srRow .srAddClass').invoke('observe', 'mouseover', function(){
				//if (this.up().hasClassName('openRow')) 
				//{
					this.addClassName('on');	
				    var addToMyEq = $('addToMyEqTooltip');
				    addToMyEq.style.top = Element.cumulativeOffset(this)["top"] -13 + "px";
				    addToMyEq.style.left = Element.cumulativeOffset(this)["left"] -3 + "px";
				    addToMyEq.style.display = "block";										
				//}
			}).invoke('observe', 'mouseout', function(){
				if (this.hasClassName('on')) {
					this.removeClassName('on');
					$('addToMyEqTooltip').style.display = "none";
				}
			}).invoke('observe', 'click', function(event){
			    if(loggedOn){
			        $('addToMyEqTooltip').style.display = "none";
			        Chooser.currentClassID = this.readAttribute('classID');
			        Chooser.redirectUrl = this.readAttribute('redirectUrl');
				    Results.addingClass = this.next('.srClassName'); // reference to the the class name div that called the menu --> can be used for ajax requests
				    var addClassMenu = $('addAClassMenu');
				    addClassMenu.style.top = Element.cumulativeOffset(this)["top"] + 10 + "px";
				    addClassMenu.style.left = Element.cumulativeOffset(this)["left"] + "px";
				    addClassMenu.style.display = "block";
				}			
			});
			
			$$('.srRow .srToolTip1').invoke('observe', 'mouseover', function(){
				//if (this.up().hasClassName('openRow')) 
				//{
				    if(!loggedOn
				        && this.childNodes.length > 1){
					    this.addClassName('on');	
					    
				        var addToMyEq = $('bookABikeToolTip');
				        addToMyEq.style.top = Element.cumulativeOffset(this)["top"]+10 + "px";
				        addToMyEq.style.left = Element.cumulativeOffset(this)["left"] -3 + "px";
				        addToMyEq.style.display = "block";						    
					}
					else if(loggedOn
				        && this.childNodes.length > 1){
					    this.addClassName('on');	
					     
				        var addToMyEq = $('bookABikeToolTip2');
				        addToMyEq.style.top = Element.cumulativeOffset(this)["top"]+10 + "px";
				        addToMyEq.style.left = Element.cumulativeOffset(this)["left"] -10 + "px";
				        //addToMyEq.style.display = "block";	
					}   			
				//}
			}).invoke('observe', 'mouseout', function(){
				if (this.hasClassName('on')) {
					this.removeClassName('on');
				}
				$('bookABikeToolTip').style.display = "none";
				$('bookABikeToolTip2').style.display = "none";
			});
		}
		
	},
	// add mouseover effects support for IE6
	ieHover : function() {
		$$('.srRow').invoke('observe', 'mouseover', function() {
			if (!this.hasClassName('openRow')) this.addClassName('over');
		}).invoke('observe', 'mouseout', function(){
			if (!this.hasClassName('openRow')) this.removeClassName('over');
		});
	},
	init : function() {
		Results.statusImg = $('submitClassQuery').select('img')[0];
	},
	
	Filter : function()
	{
	    var strFilter = "";

        Results.filterClassName = "";
        Results.filterClassDay = "";
        Results.filterClassTime = "";
        Results.filterClub = "";
        Results.filterInstructor = "";
        Results.filterLevel = "";

        // collect dropdown filter values for search criteria
        $$('.resultFilter').each(function(e)
        {   
            // strip off .net mangled ID prefix for use as column names...
            if (e.selectedIndex != 0 && $F(e) != null) {
            
                strFilter+= " AND " + e.id.slice(e.id.lastIndexOf("_") + 4) + "='" + $F(e).replace("\'", "\\'") + "'";
                
            }
        });
        
        if (strFilter.length > 1) strFilter = "\"" + strFilter.slice(5) + "\"";

        Results.PopulateCurrentFilters();   //Get the names of all of the filters currently in use, store in Results object

        var instr = '';
        // 'find an instructor' additional filter    
        if ($$('.current').length > 0 && $$('.current')[0].id == "findInstructorTrigger")
        {
            //if (strFilter.length > 1) strFilter +=" AND ";
            if ($('myFavoriteInstructors').checked)
		    {
		        //loop, grab all selected instructors
		        
		        //$$('.favInstructor').each(function(e){if (e.checked) strFilter+= "instructor='" + e.value.replace("\'", "\\'") + "' OR";});
		        //strFilter = "\"" + strFilter.substring(0, strFilter.length - 3) + "\"";
		        
                
                $$('.favInstructor').each(function(e){if (e.checked) instr += e.value + '|';});
                instr = instr.substring(0, instr.length-1);

		    }
		    else
		    {
                //strFilter += "instructor='" + $F(tb_InstructorInput).replace("\'", "\\'") + "'";   // find instructor search
                instr = $F(tb_InstructorInput);
            }
            
            //Omniture - log serach - filtered
            /*
            if(Chooser.wrapper == "black"){
        		WriteTrackingJSGFSearch("","", Results.filterClassDay, "", $F(tb_InstructorInput), Results.filterClassTime, Results.filterClassName, $(hfResultCountID).value);
        		}
        	*/
        }else{
            //Regular GF Search 
                            //Omniture - log serach - filtered
            /*
            if(Chooser.wrapper == "black")
            {
        		WriteTrackingJSGFSearch(Chooser.regionName, Chooser.currentClubNames, Results.filterClassDay, Chooser.currentCategoryNames, Results.filterInstructor, Results.filterClassTime, Results.filterClassName, $(hfResultCountID).value);       
        		}
        	*/
        }   
        
		
	    new Ajax.Updater('divResultRows', location.pathname, 
	    {
		    method: 'get',
		    parameters: {
	            a:'filterResults',
		        clubIDs: Chooser.currentClubIDs,
		        categoryIDs: Chooser.currentCategoryIDs,
		        instrList: instr,
		        filter:strFilter,
		        page: Chooser.currentPage
	        },
	        onComplete: function(n) 
	        {
	                var regexS = /id="hidResultCount"[^>]*>(\d+)/;
	                var regex = new RegExp(regexS);
	                var results = regex.exec(n.responseText)[1];
	                $('spnTotalResults').innerHTML = results;
				    Results.rowToggler();
				    if (isIE6) Results.ieHover();
				    Results.WireupPaging();
				    caller.firstDescendant().style.display = "none";
				    
		    }
	    });
	},
	
	WireupPaging : function()
	{
	    $$('.pagingNav').invoke('observe', 'click', function(e)
        {
	        Event.stop(e)
	        Chooser.currentPage = this.innerHTML;
	        Results.Filter();
	        return;
	    });
	},
	
	PopulateCurrentFilters : function()
	{
		$$('.resultFilter').each(function(e)
        {   
            // strip off .net mangled ID prefix for use as column names...
            var currentFilter = '';
            
            if (e.selectedIndex !=0) currentFilter = e.id.slice(e.id.lastIndexOf("_") + 4);
            
            /*
                    filterClassName: false,
            filterClassDay: false,
            filterClassTime: false,
            filterClub: false,
            filterInstructor: false,
            filterLevel: false,
            */
            
            //Check the field names against those that have currently been selected
            switch(currentFilter)
            {
                case "Classname":
                    Results.filterClassName = $F(e);
                    break;
                case "Day":
                    Results.filterClassDay = $F(e);
                    break;
                case "Time":
                    Results.filterClassTime = $F(e);
                    break;
                case "Club":
                    Results.filterClub = $F(e);
                    break;
                case "Instructor":
                    Results.filterInstructor = $F(e);
                    break;
                case "Level":
                    Results.filterLevel = $F(e);
                    break;
                default:
                    //do nothing
                    break;
            }
        });
	}
}

var Instructor = {
	init : function() {
		if (Chooser.wrapper != "black") return;
		
		Instructor.inputField = $(tb_InstructorInput);
		Instructor.favoriteInstructorsElement = $('myFavoriteInstructors');
		Instructor.submitBtn = $('submitInstructorQuery');
		Instructor.favoriteInstructors = $('myFavoriteInstructorsList');
		//Instructor.message = $('noFavInstructorsMsg');
		//Instructor.message.hide();
		
		/*		
		Instructor.inputField.observe('keyup', function(){
			if ($F(this).length < 1) {
				Instructor.submitBtn.className = "off";
				if (isIE6) Instructor.submitBtn.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/images/cached/findAClassSubmitOff.png')";
			}
			
			else {*/
				Instructor.submitBtn.className = "on";
				if (isIE6) Instructor.submitBtn.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/images/cached/findAClassSubmitOn.png')";
			/*}
		});
		*/
		
        

        // wire up fav instructors checkbox
		Instructor.favoriteInstructorsElement.observe('click', function(){
			if (this.checked) {
				Instructor.inputField.disable();
				//Instructor.submitBtn.className = "on"
				Instructor.favoriteInstructors.style.display = "block";
				Instructor.favoriteInstructors.style.visibility = "visible";
				if (isIE6) Instructor.submitBtn.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/images/cached/findAClassSubmitOn.png')";
				
				
				$$('.favInstructor').each(function(e) { e.observe('click', Instructor.setSubmitStatus); });
				
		        
		        Instructor.setSubmitStatus();
		        
			}
			else 
			{
				Instructor.inputField.enable();
				Instructor.favoriteInstructors.style.visibility = 'hidden';
				Instructor.favoriteInstructors.style.display = "none";
				/*
				if (Instructor.inputField.value.length < 1)
				{
				    Instructor.submitBtn.className = "off"
				    if (isIE6) Instructor.submitBtn.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/images/cached/findAClassSubmitOff.png')";
				}
			    */
				
				if (Instructor.message)
				    Instructor.message.hide();
			}
		});
		
		// find instructor submit
		Instructor.submitBtn.observe('click', function(event) {
			//if(this.hasClassName('on')) 
			//{
			    $('imgSpinner2').style.display = 'block';
				Chooser.currentPage = 1;
				var f = '';
				var inst = '';
				
				if ($('myFavoriteInstructors').checked)
				{
				    $$('.favInstructor').each(function(e){if (e.checked) inst += e.value + "|";});
				    inst = inst.substring(0, inst.length-1);
				}
				else
				{
				    inst = $F(tb_InstructorInput);
				}
				
				if (inst == '') {
				    $('imgSpinner2').hide();
				    alert('An instructor must be entered or checked.');
				    
				    return;
				}
				
				
				new Ajax.Updater('divResults', 'findAClass.aspx', {
			        method: 'get',
			        parameters: {
			            a:'getresults',
			            regionId: Chooser.region,
				        clubIDs: Chooser.currentClubIDs,
				        categoryIDs: Chooser.currentCategoryIDs,
				        instrList: inst,
				        filter: f,
				        page: Chooser.currentPage
			        },
			        onComplete: function() {
			
			            $('imgSpinner2').style.display = 'none';
				        Results.rowToggler();
				        if (isIE6) Results.ieHover();
        				
				        // wireup dropdown filters and paging
				        $$('.resultFilter').invoke('observe','change', function(e){ Chooser.currentPage = 1; Results.Filter();});
				        Results.WireupPaging();
				        
				        //omniture
				        if(Chooser.wrapper == "black"){
        		            WriteTrackingJSGFSearch("","", "", "", $F(tb_InstructorInput), "", "", $(hfResultCountID).value);
        		            }
			        }
		        });
			//}
			//else {
			//	event.stop();
			//	return;
			//}
		});
	},
	
	hasFavInstructors : function() {
	    var hasFavs = false;
        if ($$('.favInstructor').length > 0)
            hasFavs = true;
        
        return hasFavs;
	},
	
	setSubmitStatus : function() {
	    
        hasSelectedFavInstructors = true;
         
    }//function
}

function qs() {
    var query = window.location.search.substring(1);
    var parms = query.split('&');
    for (var i=0; i<parms.length; i++) {
        var pos = parms[i].indexOf('=');
        if (pos > 0) {
            var key = parms[i].substring(0,pos);
            var val = parms[i].substring(pos+1);
            qsParm[key] = val;
        }
    }
} 
function fireEvent(element,event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}

function wireFindAClass() {	
//alert("wire");
    Chooser.init();
    Results.init();
    Instructor.init();
    qs();

    if(qsParm["clubid"]){
        //alert("ClubID " +  qsParm["clubid"] + "!");
        //alert("RegionID " +  regionID + "!");
        for(i = 0; i < $('selectRegion').length; i++){
            if($('selectRegion').options[i].value == regionID){
                $('selectRegion').selectedIndex = i;
                fireEvent( $('selectRegion'),'change')
            }
        }
    }
    if(isLoggedIn == "True"){
       $('myFavoriteClubsSpan').style.visibility = '';
       $('myFavoriteCategoriesSpan').style.visibility = '';
       $('myFavoriteInstructorsSpan').style.visibility = '';
    }
    //alert("End Wire");
}


function eventRegionChange(testForFavClubs)
{
    //alert('eventRegionChange');
        var element = $('selectRegion');
		$('myFavoriteClubs').checked = false;
		$('myFavoriteClubsList').style.display = 'none';
		Chooser.region = $F(element);			
		Chooser.regionName = $(element).options[$(element).selectedIndex].text;

		var url = location.pathname + "?a=getregion&regionID=" + Chooser.region;

		new Ajax.Request(url, {
			method: "get",
			onSuccess: function(transport){
				regionData = transport.responseText.evalJSON();
	            if (isSafari) $('findAClass').style.display = "none"; // ** workaround fix for Safari 2.0.x
	            
		        Chooser.build();

		        if (testForFavClubs && Chooser.hasFavoriteClubs()) {
		            //Paul's Hack 
		            //checkFavClubs();
		        }
		        
		        if (isSafari) $('findAClass').style.display = "block";  // ** workaround fix for Safari 2.0.x
		        
		        if (useQSSearch) {
		            Results.retrieve(null,null);
		            
		        }
			}
		});
}

// If you diff version 44 and 45 of this file, you will see a function that nearly drove hackmastah t-funk insane on 20080917. RIP function enableCategorySelect

/*
var GeoData = {"Regions":[{"id":110,"name":"Boston","coord":[-71.05682,42.35888]},{"id":107,"name":"California - Northern","coord":[-122.4641,37.799596]},{"id":108,"name":"California - Southern","coord":[-118.243425,34.052187]},{"id":100,"name":"Chicago","coord":[-87.624333,41.879535]},{"id":101,"name":"Connecticut","coord":[-73.469164,41.07821]},{"id":104,"name":"Florida","coord":[-80.190262,25.774252]},{"id":2,"name":"New York City","coord":[-73.985506,40.757929]},{"id":102,"name":"New York - Long Island","coord":[-73.523981,40.763489]},{"id":103,"name":"New York - Westchester","coord":[-73.777498,40.98889]},{"id":111,"name":"Washington D.C.","coord":[-77.024055,38.892091]}]}

function GetClosestRegion(longitude, latitude) {

    var data = GeoData;
   
    var list = '';
    var xy;
    var x;
    var y;
    var dist = 0;
    var distances = new Array(data.Regions.length);
    for (var i=0;i<data.Regions.length;i++) {
        xy = data.Regions[i].coord;
        x = longitude - xy[0];
        y = latitude - xy[1];
        dist = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
        list += data.Regions[i].name + ": " + dist + '   ';
        distances[i] = {"id":data.Regions[i].id,
                            "name":data.Regions[i].name,
                            "dist":dist};
    }

    var minDist = {"id":0,"name":"","dist":1000};
    for (var i=0;i<distances.length;i++) {
        if (distances[i].dist < minDist.dist) {
            minDist = distances[i];
        }
    }
    
         
    return minDist;
   
            
}
*/

Event.observe( window, 'load', function() {
    if (qsParm["qs"]) {
        useQSSearch = true;
        ClassSearchParams.init(qsParm);
        selectRegion(ClassSearchParams.region);
    }
    else if(!qsParm["clubid"] || qsParm["clubid"] == '') {
        if(myFavoriteClubsSet==true) {
            if(!$('myFavoriteClubs').checked)
            {
                $("myFavoriteClubs")["click"]();
            }
            if(qsParm["autosearch"] && $('myFavoriteClubs').checked)
            {
                createLoadingLayer();
                new Effect.Appear(loadingLayer, { to:0.85, duration: 0.5 } );
                Results.retrieve(null,null);
            }
        } else {
            selectRegion(2);
        }
     }
  }
);


function selectRegion(regionId)
{
    element = $('selectRegion');
   
    for ( i=0; i < element.length; i++ )
    {
        if ( element[i].value == regionId )
        {
            element.options.selectedIndex = i;
            eventRegionChange(true);
           
           
            /*
            if (Chooser.hasFavCategories()){
                checkFavCat();	
                Chooser.classSubmitBtn.className = "on";
            }
            if (Instructor.hasFavInstructors())
                checkFavInstructors();
            break;
            }*/
                   
        }
    }
}


function checkFavClubs()
{
    var element = Chooser.myFavoriteClubsElement;
	element.checked = true;			
		
	if ($('subRegionList')) $('subRegionList').hide();
	$$('.clubList').invoke('hide');
	Chooser.myFavoriteClubsList.style.display = "block";
	
	/* select the region */
	
	return;
}

function checkFavCat()
{
    Chooser.myFavoriteCategoriesElement.checked = true;;

	if($$('.column1')) $$('.column1').style.display = "none";
    if($$('.column2')) $$('.column2').style.display = "none";
    if($$('.column3')) $$('.column3').style.display = "none";
    alert(favColumn1.style.display);
	$$('.favColumn1').style.display = "block";
	$$('.favColumn2').style.display = "block";

	if (Chooser.allCategories) {
		Chooser.allCategories = false;
		Chooser.allCategoriesElement.checked = false;
	}
}

function checkFavInstructors()
{
    if (!Instructor.favoriteInstructorsElement)
        return;
        
    Instructor.favoriteInstructorsElement.checked = true;
    Instructor.inputField.disable();
	Instructor.favoriteInstructors.style.display = "block";
	Instructor.favoriteInstructors.style.visibility = "visible";
	if (isIE6) Instructor.submitBtn.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/images/cached/findAClassSubmitOn.png')";
	
	
	$$('.favInstructor').each(function(e) { e.observe('click', Instructor.setSubmitStatus); });
	
    
    Instructor.setSubmitStatus();
}


function turnOnBookABikeIcon(classId, linkId, imgId)
{
    $(linkId).writeAttribute("href","/groupfitness/bookabike.aspx?classId="+classId);
    $(imgId).writeAttribute("src","/images/cached/addBikeAvailableIcon.gif");
    $(imgId).writeAttribute("bubble", "NotBooked_24hTo30m");

    var dest = $($(imgId).getAttribute('bubble'));
    $(dest).clonePosition($(imgId),{setWidth: false, setHeight: false, offsetTop: -120});
    ToggleElement(dest.id);
    setTimeout(function(){ToggleElement(dest.id);},30000);
}