	var postalArray = new Array();
	postalArray[1] = {"areas": [
		{area: "Marina South", postal: "01"},
		{area: "Marina East", postal: "02"},
		{area: "Esplanade/Suntec", postal: "03"},
		{area: "Raffles Place", postal: "04"},
		{area: "Chinatown", postal: "05"},
		{area: "Shenton Way", postal: "06"},
		{area: "Anson Road", postal: "07"},
		{area: "Tanjong Pagar", postal: "08"},
		{area: "Clarke Qy/Hill St", postal: "17"},
		{area: "Bugis/Victoria", postal: "18"},
		{area: "Beach Rd", postal: "19"}
		],
		tag: "City"
	};
	postalArray[2] = {"areas": [
		{area: "H.front/Telok Blgh", postal: "09"},
		{area: "Depot Road", postal: "10"},
		{area: "Pasir Panjang", postal: "11"},
		{area: "Clementi", postal: "12"},
		{area: "Dover/Buona Vista", postal: "13"},
		{area: "Queenstown/C'wealth", postal: "14"},
		{area: "Bt Merah/Alexandra", postal: "15"},
		{area: "Outram/Tiong Bahru", postal: "16"}
		],
		tag: "West"
	};
	postalArray[3] = {"areas": [
		{area: "Jurong East", postal: "60"},
		{area: "Taman Jurong", postal: "61"},
		{area: "Jurong/Joo Koon", postal: "62"},
		{area: "Jurong/Tuas", postal: "63"},
		{area: "Jurong West/Boon Lay", postal: "64"},
		{area: "Bukit Batok", postal: "65"},
		{area: "Hillview", postal: "66"},
		{area: "Bukit Panjang", postal: "67"},
		{area: "Choa Chu Kang", postal: "68"},
		{area: "Tengah", postal: "69"},
		{area: "Lim Chu Kang", postal: "70"}	
		],
		tag: "Jurong/Bukit Batok"
	};	
	postalArray[4] = {"areas": [
		{area: "Scotts Rd/Newton", postal: "22"},
		{area: "Orchard Road", postal: "23"},
		{area: "Tanglin/River Valley", postal: "24"},
		{area: "Bt Timah/Farrer Rd", postal: "26"},
		{area: "Holland/Ghim Moh", postal: "27"}
		],
		tag: "Orchard/Holland"
	};	
	postalArray[5] = {"areas": [
		{area: "Bt Timah/Stevens Rd", postal: "25"},
		{area: "Bt Timah/Old Turfclub", postal: "28"},
		{area: "Thomson Road", postal: "29"},
		{area: "Bukit Timah Hill", postal: "58"},
		{area: "King Albert Park", postal: "59"}
		],
		tag: "Newton/Bt. Timah"
	};	
	postalArray[6] = {"areas": [
		{area: "Lavender/Jln Besar", postal: "20"},
		{area: "Little India", postal: "21"},
		{area: "Braddell/Toa Payoh", postal: "31"},
		{area: "Balestier", postal: "32"},
		{area: "Geylang Bahru", postal: "33"},
		{area: "Macpherson", postal: "34"},
		{area: "Potong Pasir", postal: "35"},
		{area: "MacPherson Road", postal: "36"},
		{area: "Old Airport", postal: "37"},
		{area: "Kallang/Geylang", postal: "38"},
		{area: "Stadium", postal: "39"},
		{area: "Paya Lebar", postal: "40"},
		{area: "Kembangan", postal: "41"}
		],
		tag: "Balestier/Geylang"
	};	
	postalArray[7] = {"areas": [
		{area: "Katong/Joo Chiat", postal: "42"},
		{area: "Katong/Tanjong Rhu", postal: "43"},
		{area: "Marine Parade", postal: "44"},
		{area: "Siglap", postal: "45"},
		{area: "Bedok/Chai Chee", postal: "46"},
		{area: "Bedok Reservoir", postal: "47"},
		{area: "Singapore Expo", postal: "48"}
		],
		tag: "East Coast"
	};	
	postalArray[8] = {"areas": [
		{area: "Changi Coast", postal: "49"},
		{area: "Loyang", postal: "50"},
		{area: "Pasir Ris", postal: "51"},
		{area: "Tampines/Simei", postal: "52"},
		{area: "Changi Airport", postal: "81"}
		],
		tag: "Changi/Pasir Ris"
	};	
	postalArray[9] = {"areas": [
		{area: "Hougang/Yio Chu Kang", postal: "53"},
		{area: "Serangoon", postal: "55"},
		{area: "Ang Mo Kio", postal: "56"},
		{area: "Bishan/Thomson Rd", postal: "57"}
		],
		tag: "Serangoon/AMK"
	};	
	postalArray[10] = {"areas": [
		{area: "Sengkang/Buangkok", postal: "54"},
		{area: "Seletar", postal: "79"},
		{area: "Yio Chu Kang", postal: "80"},
		{area: "Punggol", postal: "82"}
		],
		tag: "North East"
	};	
	postalArray[11] = {"areas": [
		{area: "Neo Tiew/Kranji", postal: "71"},
		{area: "Mandai", postal: "72"},
		{area: "Woodlands", postal: "73"},
		{area: "Sembawang", postal: "75"},
		{area: "Yishun/Khatib", postal: "76"},
		{area: "Nee Soon", postal: "77"},
		{area: "Spring Leaf", postal: "78"}
		],
		tag: "North"
	};
	//$(function(){
		//getAreaTagSelectOptions();
		
		//getSubAreasSelectOptions(0, "area");
		
		//getAllSubAreas("postal");
	//});
	
	function sortArea(a,b) {
		if (a.area<b.area) return -1;
		if (a.area>b.area) return 1;
		return 0;
	}
	
	function sortPostal(a,b) {
		return a.postal-b.postal;
	}
	
	function getSubAreas(areaIndex, sortby){
		var areaArray = null;
		if (areaIndex == 0)
		{
			//all locations
			areaArray = new Array();
			for (i=1; i< postalArray.length; i++)
			{
				areaArray = areaArray.concat(postalArray[i].areas);
			} 			
		}
		else if (areaIndex < postalArray.length)
		{
			areaArray = postalArray[areaIndex].areas;
		}
		
		var retStr = "";
		if (areaArray!=null)
		{
			retStr = getSelectOptionsFromArray(areaArray, sortby);;
		}
		
		return retStr;
	}
	
	function getSelectOptionsFromArray(areaArray, sortby){
		var returnStr = "<option value='--'>-- All Locations --</option>";
		if (sortby=="postal")
		{
			areaArray.sort(sortPostal);
			
            for (i = 0; i < areaArray.length; i++) {
            	returnStr += "<option value='"+areaArray[i].postal+"'>"+ areaArray[i].postal + " - " + areaArray[i].area+"</option>";
            }
		}
		else {
			areaArray.sort(sortArea);
            
            for (i = 0; i < areaArray.length; i++) {
            	returnStr += "<option value='"+areaArray[i].postal+"'>"+areaArray[i].area+"</option>";
            }
		}
		return returnStr;
	}
	
	function setSubAreaSelectBoxes(selectedZoneId)
	{
		// set the already sorted options for the areas by alphabetical order
		var options = getSubAreas(selectedZoneId, "area");
		$("#location-alpha-select").html(options);
		// set the already sorted options for postal
		options = getSubAreas(selectedZoneId, "postal");
		$("#location-postal-select").html(options);
	}

$(document).ready(function() {
	
	//search form
	$('.searchopt').click(function(){
		//deselect all others
		var data = $(this).metadata();
		$('.searchopt').removeClass("selected");
		
		//populate hidden field about the category selected
		var searchCat = data.cat;
		setSelectedSearchCat(searchCat);
		
		// set the label
		var searchLabel = data.label;
		setIFeelLikeLabel(searchLabel);
	});
	
	//setting the searchcat from previous search;
	var searchCat = getHttpGetParam('searchcat');
	if (searchCat == 'address' || searchCat == 'building')
	{
		searchCat = 'street';
	}
	setSelectedSearchCat(searchCat);
	setIFeelLikeLabel(getHelperTextFromSearchCat(searchCat));

	$('#drawer-nav-adv a').click(function() {
		var isAdvanced = $('#isadvanced').val();
		if (isAdvanced == 'true')
		{
			resetSearchAndCloseDrawer();
		}
		else {
			openDrawer("slideDown");
		}		
		return false;
	});
	$('#drawer-close').click(function() {
		resetSearchAndCloseDrawer();
	});
	
	// UI Tabs for advanced search -> location
	$('#location-options').tabs();
	
	// check if "Bing" is selected.
	// if it is. open a new window
	$("#main-search").submit(function(){
		//first of all check if the search text is one of the helper text.
		if (isSeachTextHelperTextFromLabel($("#ifeellike").val()))
		{
			//it is. set to empty string
			$("#ifeellike").val("");
		}
		
		//lets check if there is a presence of a nearby keyword
		var nearbyPos = $("#ifeellike").val().search(/nearby/i);
		if (nearbyPos != -1)
		{
			//nearby keyword found
			
			if (navigator.geolocation) {
				if (isGeolocationStarted)
				{
					var curDate = new Date;
					if (curDate - geolocationStartDate > 20000)
					{
						// terminate waiting for geolocation resuts after 20s
						isGeolocationEnded = true;
					}
					
					//this is not the first attempt to get the geolocation
					// lets check if the geolocation has been retrieved or if an error has occured
					if (isGeolocationEnded)
					{
						// result retrieved
						// continue with submission
					}
					else
					{
						//delay submission by 2s
						setTimeout ("$('#main-search').submit();", 2000);
						return false;
					}
				}
				else {
					// new request for geolocation
					geolocationStartDate = new Date();
					isGeolocationStarted = true;
					isGeolocationEnded = false;
					
					/* geolocation is available */  
					navigator.geolocation.getCurrentPosition(function(position) {
						//position retrieved. geolocation attempt succeeded.
						isGeolocationEnded = true;
						// check for the accuracy of the coordinate retrieved
						if (position.coords.accuracy!=null && position.coords.accuracy < 2000)
						{
							//accuracy is within 2km
							$("#f_lat").val(position.coords.latitude); 
							$("#f_long").val(position.coords.longitude);
						}
					}, 
					function(error){
						// error has occured. geolocation attempt ended
						isGeolocationEnded = true;
					}, 
					{
						maximumAge:600000, // make sure the position returned is still fresh within 10 minutes 
						timeout:0
					}
					);
					//delay submission by 2s
					setTimeout ("$('#main-search').submit();", 2000);
					return false;
				} 
			}
		}
		
		if($("#searchcat").val()=="bing")
		{
			var bingUrl = "http://www.bing.com/search?q=" + $("#ifeellike").val();
			window.open(bingUrl);
			// don't submit
			return false;
		}
		else if ($("#searchcat").val()=="member")
		{
			var memberSearchUrl = SERVER_HTTP_HOST() + "/member/search/?searchcat=member&f_name=" + $("#ifeellike").val();
			window.location = memberSearchUrl;
			// don't submit
			return false;
		}
	});
	
	$(".bing").click(function(){
		$("#main-search").submit();
	});
	
	$isOverrideAdvanced = false;
	
	var foodPlaceSelected = getHttpGetParam('f_foodplace');
	if (foodPlaceSelected != "na")
	{
		$("#f_foodplace").val(foodPlaceSelected);
	}
	if (foodPlaceSelected != "" && foodPlaceSelected != "na" )
	{
		$isOverrideAdvanced = true;
	}
	
	var cuisineSelected = getHttpGetParam('f_cuisine');
	if (cuisineSelected != "na")
	{
		$("#f_cuisine").val(cuisineSelected);
	}
	if (cuisineSelected != "" && cuisineSelected != "na" )
	{
		$isOverrideAdvanced = true;
	}
	
	
	var recommendSelected = getHttpGetParam('f_recommend');
	if (recommendSelected != "na")
	{
		$("#f_recommend").val(recommendSelected);
	}
	if (recommendSelected != "" && recommendSelected != "na" )
	{
		$isOverrideAdvanced = true;
	}	
	
	var zoneSelected = getHttpGetParam('f_zone');
	if (zoneSelected == "") zoneSelected = 0;
	if (zoneSelected > 0) { $isOverrideAdvanced = true; }
	$("#f_zone").val(zoneSelected);
	setSubAreaSelectBoxes(zoneSelected);
	
	var alphaArea = getHttpGetParam('location-alpha-select');
	$("#location-alpha-select").val(alphaArea);
	
	var zipArea = getHttpGetParam('location-postal-select');
	$("#location-postal-select").val(alphaArea);
	
	var fZip = getHttpGetParam('f_zip');
	if (fZip != "" && fZip !="--") { $isOverrideAdvanced = true };
	$("#f_zip").val(fZip);
	
	$("#f_zone").change(function(){
		var selectedZoneId = $("#f_zone").val();
		setSubAreaSelectBoxes(selectedZoneId);
		$("#f_zip").val("");
		$("#location-postal-select").val("");
		$("#location-alpha-select").val("");
	});
	
	$("#location-alpha-select").change(function(){
		$("#f_zip").val($("#location-alpha-select").val());
		$("#location-postal-select").val($("#location-alpha-select").val());
	});
	
	$("#location-postal-select").change(function(){
		$("#f_zip").val($("#location-postal-select").val());
		$("#location-alpha-select").val($("#location-postal-select").val());
	});
	
	$("#clearSearch").click(function(){
		resetSearch(true);
		return false;
	});

	// UI Tabs for advanced search
	var isAdvanced = getHttpGetParam('isadvanced');
	if ($isOverrideAdvanced)
	{
		isAdvanced = 'true';
	}
	
	if (isAdvanced == 'true')
	{
		openDrawer("show");
	}
	else {
		closeDrawer();
	}	
	
});

var isGeolocationStarted = false;
var isGeolocationEnded = true;
var geolocationStartDate;

function openDrawer(effect)
{
	$('#drawer').show().addClass('ui-tabs');
	var $advtabs = $('#drawer').tabs();
	var $tabindex = $('#advanced-search-tabs li').index($(this).parent());
	$advtabs.tabs('select', $tabindex);
	$('#isadvanced').val('true');
	if (effect=="show")
	{
		$('.drawer').show();
	}
	else {
		$('.drawer').slideDown();
	}
}

function closeDrawer()
{
	$('#drawer').tabs().tabs('select', -1);
	$('.drawer').slideUp('normal', function() {
		$('.drawer').removeClass().addClass('drawer');
		$('#drawer').removeClass();
	});
	$('#advanced-search-tabs li').removeClass();
	$('#isadvanced').val('false');
	var $advtabs = null;
}

function resetSearchAndCloseDrawer()
{
	resetSearch(false);
	closeDrawer();	
}

function resetSearch(isResetSearchKeyword){
	var currentSearchTerm = $("#ifeellike").val();
	
	$(".bankCheckBox").each(function(){
		this.checked = false;
	});
	$("#f_foodplace").val("na");
	$("#f_cuisine").val("na");
	$("#f_recommend").val("na");
	$("#f_price").val("na");
	$("#f_zone").val("0");
	$("#f_zip").val("");
	setSubAreaSelectBoxes(0);
	
	if (isResetSearchKeyword){
		$("#ifeellike").val("");
		setIFeelLikeLabel(getHelperTextFromSearchCat($("#searchcat").val()));
	}
	else {
		$("#ifeellike").val(currentSearchTerm);
	}
}

/* this function gets the GET params from the HTTP request */
function getHttpGetParam( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function SERVER_HTTP_HOST(){  
	var url = window.location.href;  
	url = url.replace("http://", "");   
	
	var urlExplode = url.split("/");  
	var serverName = urlExplode[0];  
	
	serverName = 'http://'+serverName;  
	return serverName;  
}  

/* this function sets the hidden input for the search cat  */
function setSelectedSearchCat(searchCat){
	$("#" + searchCat + "SearchId").addClass("selected");
	$("#searchcat").val(searchCat);
}

/* this function sets the helper label in the search field */
function setIFeelLikeLabel(searchLabel) {	
	
	// store the label to be used in a label that is hidden
	$("#searchlabel").text(searchLabel);
	
	var inactive = "inactive";
	var active = "active";
	var focused = "focused";
	
	// this obj is the actual text field
	var obj =$("#ifeellike");

	if ($(obj).val() == null || $(obj).val() == "" || isSeachTextHelperTextFromLabel(obj.val())) {
		// lets set the initial value of the text field to the value of the search label as defined above
		// the textfield is set to css inactive
		$(obj).removeClass(active);			
		$(obj).addClass(inactive);			
		$(obj).val($("#searchlabel").text());
	}
	// set what to do when the textfield is focused
	$(obj).focus(function(){
		// set css to focused
		$(this).addClass(focused);
		$(this).removeClass(inactive);
		$(this).removeClass(active);
		if(isSeachTextHelperTextFromLabel($(this).val())) {
			// if the text is one fo the helper text, set the val to "" for user to enter
			$(this).val("");
		}
	});	
	// set what to do when the textfield is blurred
	$(obj).blur(function(){	
		// set textfield to blurred
		$(this).removeClass(focused);													 
		if($(this).val() == "" || isSeachTextHelperTextFromLabel($(this).val())) {
			// set the value of the textfield to the value of helper label as stored earlier
			$(this).addClass(inactive);
			$(obj).val($("#searchlabel").text());
		} else {
			$(this).addClass(active);		
		};				
	});				
}

/* this function checks if the text in the search field is one of the helper text */
function isSeachTextHelperTextFromLabel(text)
{
	var isTextFound = false;
	$('.searchopt').each(function(){
		if (!isTextFound)
		{
			var data = $(this).metadata();
			if (data.label == text)
			{
				isTextFound = true;
			}
		}
	})
	return isTextFound;
}

/* this function gets the helper text from the search cat in the metadata in the search field */
function getHelperTextFromSearchCat(searchCat)
{
	/* lets assume the search cat is not found */
	var isSearchCatFound = false;
	var helperText = "";
	$('.searchopt').each(function(){
		if (!isSearchCatFound)
		{
			/* now that the searchCat is found, get the helper text */
			var data = $(this).metadata();
			if (data.cat == searchCat)
			{
				isSearchCatFound = true;
				helperText = data.label;
			}
		}
	})
	return helperText;
}

