/**
 * @author zoesee
 */

function loadTwitWidget(){
    new TWTR.Widget({
        version: 2,
        type: 'profile',
        id: 'twitterwidget',
        interval: 6000,
        title: 'don\'t just take our word for it',
        subject: 'see reviews as they happen',
        width: 320,
        height: 300,
        theme: {
            shell: {
                background: '#46690F',
                color: '#fbf4e1'
            },
            tweets: {
                background: '#382309',
                color: '#fbf4e1',
                links: '#92C04F'
            }
        },
        features: {
            scrollbar: false,
            loop: false,
            live: true,
            hashtags: true,
            timestamp: true,
            avatars: false,
            toptweets: true,
            behavior: 'default'
        }
    }).render().setUser('twr_uk').start();
}

Request.Twitter = new Class({
    Extends: Request.JSONP,

    options: {
        linkify: true,        url: 'http://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=twr_uk&count=30',
        data: {
            since_id: 1
        }
    },

    initialize: function(term, options){
        this.parent(options);
//        this.options.url = this.options.url.substitute({
//            term: term
//        });
    },

    success: function(data, script){
        if (this.options.linkify) Array.each(data[0]['results'],
        function(tweet){
            //        strip out all hastags
            var regexp = new RegExp('#([^\\s]*)', 'g');
            tweet.text = tweet.text.replace(regexp, '');
            tweet.text = this.linkify(tweet.text);
        },
        this);

        if (data[0]) this.options.data.since_id = data[0][0].id;
        // keep subsequent calls newer
        this.parent(data, script);
    },

    linkify: function(text){
        // modified from TwitterGitter by David Walsh (davidwalsh.name)
        // courtesy of Jeremy Parrish (rrish.org)
        return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
        .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
        .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
    }

});

var Ticker = new Class({

    Implements: [Options],

    options: {
        delay: 5000
    },

    item: -1,

    initialize: function(term, element){
    			//passing term, but ignoring it
//        this.term = term;
        this.element = $(element);
        this.element.empty();
        this.twitter = new Request.Twitter(term, {
            onComplete: this.show.bindWithEvent(this)
        });
        this.twitter.send();
    },

    show: function(data){
        this.tweets = data;
        this.item = Object.getLength(this.tweets) - 1;
        if (this.item>=0) {
	        //initiliase display
	        this.loadtweets();
	        // Show first tweet
	        this.ticking();
	        // Queue periodical ticker updates
	        this.tickperiod = this.ticking.periodical(this.options.delay, this);
        }
    },

    loadtweets: function(){
        for (i = 0; i < Object.getLength(this.tweets); i++){
            var tweet = new Element('div', {
                html: this.tweets[i].text
            }).fade('hide');
            tweet.setStyle('left', i * 300);
            this.element.adopt(tweet);
        }
    },

    ticking: function(){
    		var linkytweet = this.linkify(this.tweets[this.item].text); 
        var tweet = new Element('div', {
            html: linkytweet
        }).fade('hide');
        var tweeter = new Element('a', {
            href: 'http://twitter.com/' + this.tweets[this.item].from_user,
            'class': 'emphasis',
            html: '@twr_uk said: '
        });
        tweeter.inject(tweet, 'top');
        this.shifttweets();
        this.tweet = $(tweet);
        this.tweet.inject(this.element, 'top');
        this.tweet.fade('in');
        this.item -= 1;
        if (this.item < 0) this.item = Object.getLength(this.tweets) - 1;
    },

    shifttweets: function(){
        var tweetDivs = this.element.getChildren();
        tweetDivs.each(function(item){
            var currleft = item.getStyle('left').toInt();
            var newleft = currleft + 300;
            item.tween('left', newleft);
        });
        this.element.getLast().destroy();
    },

    linkify: function(text){
        // modified from TwitterGitter by David Walsh (davidwalsh.name)
        // courtesy of Jeremy Parrish (rrish.org)
        return text.replace(/(https?:\/\/[\w\-:;?&=+.%#\/]+)/gi, '<a href="$1">$1</a>')
        .replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>')
        .replace(/(^|\W)#(\w+)/g, '$1#<a href="http://search.twitter.com/search?q=%23$2">$2</a>');
    }

});

/* Form handlers that pass off to Ajax routines and deal with responses */
var PostManager = new Object();
PostManager.getElementValue = function(formElement)
{
    if (formElement.length != null) var type = formElement[0].type;
    if ((typeof(type) == 'undefined') || (type == 0)) var type = formElement.type;

    switch (type)
    {
    case 'undefined':
        return;
    case 'button':
        return;
    case 'submit':
        return;

    case 'radio':
        for (var x = 0; x < formElement.length; x++)
        if (formElement[x].checked == true)
        return formElement[x].value;

    case 'select-multiple':
        var myArray = new Array();
        for (var x = 0; x < formElement.length; x++)
        if (formElement[x].selected == true)
        myArray[myArray.length] = formElement[x].value;
        return myArray;

    case 'checkbox':
        return formElement.checked;

    default:
        return formElement.value;
    }
}
PostManager.buildQuery = function(form)
{
    var query = "";
    for (var i = 0; i < form.elements.length; i++)
    {
        var key = form.elements[i].name;
        var value = PostManager.getElementValue(form.elements[i]);
        if (key && value){
            if (i > 0){
                query += "&";
            }
            query += key + "=" + encodeURIComponent(value);
        }
    }
    return query;
}

var SUBetaManager = new Object();
SUBetaManager.Send = function(form) {
	var e = $('signupbtn');
	e.clone().inject(e,'after').set('disabled',true).set('value','Processing ...');
	e.setStyle('display','none');	
    var query = PostManager.buildQuery(form);
    Ajax.Request(form.method, form.action, query, SUBetaManager.OnResponse);
}
SUBetaManager.OnResponse = function(responseText) {
    $("signupbetaform").innerHTML = responseText;
}

var SIBetaManager = new Object();
SIBetaManager.Send = function(form) {
	var e = $('signinbtn');
	e.clone().inject(e,'after').set('disabled',true).set('value','Processing ...');
	e.setStyle('display','none');	
    var query = PostManager.buildQuery(form);
    Ajax.Request(form.method, form.action, query, SIBetaManager.OnResponse);
}
SIBetaManager.OnResponse = function(responseText) {
    $("signinbetaform").innerHTML = responseText;
}

var ForgotPwordManager = new Object();
ForgotPwordManager.Send = function(form) {
	var e = $('sendemailbtn');
	e.clone().inject(e,'after').set('disabled',true).set('value','Processing ...');
	e.setStyle('display','none');	
    var query = PostManager.buildQuery(form);
    Ajax.Request(form.method, form.action, query, ForgotPwordManager.OnResponse);
}
ForgotPwordManager.OnResponse = function(responseText) {
    $("signinbetaform").innerHTML = responseText;
}

var ReportChangeManager = new Object();
ReportChangeManager.Send = function(form) {
	var e = $(form).getFirst('input.button');
	e.clone().inject(e,'after').set('disabled',true).set('value','Processing ...');
	e.setStyle('display','none');	
    var query = PostManager.buildQuery(form);
    Ajax.Request(form.method, form.action, query, ReportChangeManager.OnResponse);    	
}
ReportChangeManager.OnResponse = function(responseText) {
    $("reporteatery").innerHTML = responseText;
}

/** Ajax handling routines */
var Ajax = new Object();
Ajax.isUpdating = true;

Ajax.Request = function(method, url, query, callback){
    this.isUpdating = true;
    this.callbackMethod = callback;
    this.request = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP");
    if (method.toLowerCase() == 'get') url = url + "?" + query;
    this.request.open(method, url, true);
    this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    this.request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    this.request.onreadystatechange = function(){
        Ajax.checkReadyState();
    };
    this.request.send(query);
}

Ajax.checkReadyState = function(_id){
    switch (this.request.readyState)
    {
    case 1:
        break;
    case 2:
        break;
    case 3:
        break;
    case 4:
        this.isUpdating = false;
        $redirect = this.request.responseText.indexOf('redirect-to-');
        if ($redirect>-1) {
        		$url = this.request.responseText.substring($redirect+12);
        		window.location = $url;
	    } else {
	        this.callbackMethod(this.request.responseText);
	    }
	    
    }
}

var ulResultsShowHide = {
	init : function () {
		this.elements = $$('a.showhideresult');
		var element;
		this.elements.each(function(element, index){
			element.addEvent('click', function(e){
				var el = (/a/i.test(this.nodeName)) ? this : e.target;
				el.toggleClass('hide');
				if ((sLinks = el.getSiblings('a.showhideresult')).length>0) {
					sLinks.each(function(linkEl, index){
						linkEl.toggleClass('hide');
					});
				}
				var childList = null;
				while (!el.getParent().getFirst('*.hiddenlist')) {
					el = el.getParent();
				}
				childList = el.getParent().getFirst('*.hiddenlist');
				if (childList) {
					childList.toggleClass('showlist');
				}
				return false;
			});
		});		
	}
};

var reportInfoChange = {
	init : function () {
		this.elements = $$('a.editimg');
		var element;
		this.elements.each(function(element, index){
			element.addEvent('click', function(e){
				var el = (/a/i.test(this.nodeName)) ? this : e.target;
				var owli = el.get('id');
				var eateryName = '';
				if (!owli && (elOwli = el.getSiblings('div.eatery-service')).length>0) {
					owli = elOwli[0].get('id');
				}
				if ((elName = el.getSiblings('h3.eatery-name')).length>0) {
					if ((elName[0].getChildren('a')).length > 0) {
						eateryName = elName[0].getChildren('a')[0].get('html');
					} else {
						eateryName = elName[0].get('html');
					}
				}
				var parentHeader = el.getParent('div.eatery-header');
				if (!parentHeader) {
					parentHeader = el.getParent();
				}
				//get reporting element
				var reportForm = $('reporteatery');
				parentHeader.grab(reportForm);
				$('reportowli').set('value',owli);
				$('reportname').set('value',eateryName);
				reportForm.getElements('h3')[0].set('html','Report incorrect information for '+eateryName);
				if (!(Browser.ie6 || Browser.ie7)){
					$('overlay').removeClass('hide');
				}
				reportForm.removeClass('hide');
				var actualTop = (findPos(reportForm)[1]-window.pageYOffset);
				var midPoint = (window.getCoordinates().height - reportForm.getCoordinates().height)/2;
				if (midPoint < actualTop) {
					$(window).scrollBy(0,actualTop-midPoint);
				}
				return false;
			});
		});
		this.closeElements = $$('a.formclose');
		var closeElement;
		this.closeElements.each(function(closeElement, index) {
			closeElement.addEvent('click',function(e){
				return closeReportForm();
			});
		});
		closeElement = $('overlay');
		closeElement.addEvent('click',function(e){
			return closeReportForm();
		});
		this.addElements = $$('a.addimg');
		var addElement;
		this.addElements.each(function(addElement, index) {
			addElement.addEvent('click',function(e){
				var el = (/a/i.test(this.nodeName)) ? this : e.target;
				var parentHeader = el.getParent('div.searchparams');
				var reportForm = $('reporteatery');
				$('reportowli').set('value','');
				reportForm.getElements('h3')[0].set('html','Add a missing eatery');
				reportForm.getElements('label.infoheader')[0].set('html','Who needs adding, please provide a name and address as a minimum? (max 500 characters)');
				parentHeader.grab(reportForm,'after');
				if (!(Browser.ie6 || Browser.ie7)){
					$('overlay').removeClass('hide');
				}
				reportForm.removeClass('hide');	
				return false;
			});
		});
	}
};

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	return [curleft,curtop];
	}			
}

var eateryHeaderShowHide = {
	init : function () {
		this.elements = $$('h1.alphatab a');
		var element;
		this.elements.each(function(element, index){
			element.addEvent('click', function(e){
				var el = (/a/i.test(this.nodeName)) ? this : e.target;
				el.toggleClass('hide');
				if ((sLinks = el.getSiblings('a')).length>0) {
					sLinks.each(function(linkEl, index){
						linkEl.toggleClass('hide');
					});
				}
				var showAll = el.getParent().getFirst('a').hasClass('hide');
				var hideEateryList = null;
				while (!el.getParent().getFirst('*.hideeatery')) {
					el = el.getParent();
				}
				hideEateryList = el.getSiblings('*.hideeatery');
				if (hideEateryList) {
					if (showAll) {
						hideEateryList.addClass('showeatery');
					} else {
						hideEateryList.removeClass('showeatery');
					}
				}
				return false;
			});
		});		
	}
};

var showHideEateriesWithinRating = {
	init : function() {
		this.elements = $$('li.star a.showhideeateries');
		var element;
		this.elements.each(function(element,index) {
			element.addEvent('click',function(e) {
				var el = (/a/i.test(this.nodeName)) ? this : e.target;
				el.toggleClass('hide');
				sLinks = el.getSiblings('*.showhideeateries');
				if (sLinks.length>0) {
					sLinks.each(function(linkEl, index){
						linkEl.toggleClass('hide');
					});
				}
				while (el.getParent().get('class').indexOf('star') == -1) {
					el = el.getParent();
				}
				var rating = el.getParent().get('class');
				rating = rating.substr((rating.indexOf('star')+5));    
				var showAll = ($$('li.'+rating)[0].getFirst('a').hasClass('hide') ? true : false);
				var elements = $$('li.'+rating+' ul.gainlayout');
				elements.each(function(element, index) {
					var eateryList = element.getChildren('li');
					if (showAll) {
						eateryList.addClass('showeatery');
					} else {
						eateryList.removeClass('showeatery');
						element.getFirst('li').addClass('showeatery');
					}
				});
				var tabElements = $$('li.'+rating+' h1.alphatab');
				tabElements.each(function(element, index) {
					if (showAll) { 
						element.getFirst('a').addClass('hide');
						element.getFirst('a').getNext('a').removeClass('hide');
						element.getLast('a').getPrevious('a').addClass('hide');
						element.getLast('a').removeClass('hide');
					} else {
						element.getFirst('a').removeClass('hide');
						element.getFirst('a').getNext('a').addClass('hide');
						element.getLast('a').getPrevious('a').removeClass('hide');
						element.getLast('a').addClass('hide');
					}
				});
				return false;
			})
		})	
	}
}

function closeReportForm() {
	var reportForm = $('reporteatery');
	reportForm.addClass('hide');	
	var templateForm = $('template-reporteatery').clone(true, true);
	reportForm.empty();
	reportForm.adopt(templateForm.getChildren());
	var closeElements = $$('a.formclose');
	var closeElement;
	closeElements.each(function(closeElement, index) {
		closeElement.addEvent('click',function(e){
			return closeReportForm();
		});
	});	
	$('overlay').addClass('hide');
	if ($('formerrors')) {	$('formerrors').destroy(); }
	return false;
}

function switchSearch(toshow) {
	var toshow = $(toshow);
	var turnOnForm = $(toshow.className);
	var allForms = $$('div.searchpanel form');
	var allTabs = toshow.getParent('ul').getChildren();
	allForms.addClass('hide');
	allTabs.removeClass('searchon');
	toshow.getParent('li').addClass('searchon');
	turnOnForm.removeClass('hide');
	return false;
}

function findMeClick () {
	$('findme').set('html','Searching for location ... ');
	$('findme').addClass('subtle');
	$('findme').removeEvents('click');
	$('findme').addEvent('click',function(e) {
		return false;
	})
	if(geo_position_js.init()){
		geo_position_js.getCurrentPosition(geo_success, geo_error);
		return false;
	} else {
		geo_error();
	}
}

var findMe = {
	init : function() {
		var element = $('findme');
		element.addEvent('click',findMeClick);	
	}
}

function resetFindMe() {
	var findmebtn = $('findme'); 
	$('search-long').set('value', '');
	$('search-lat').set('value','');
	$('searcheatbtn').set('value','Let\'s go search');
	findmebtn.set('html','Use my location');
	findmebtn.removeClass('subtle');
	findmebtn.removeEvents('click');
	findmebtn.addEvent('click',findMeClick);
}

function geo_success(p) {
	new Request.JSONP({
		url: 'http://api.geonames.org/findNearbyPlaceNameJSON',
		data: {
			lat: p.coords.latitude, 
			lng: p.coords.longitude, 
			username:'twitreview',
			style: 'short'
		},			
		onComplete: function(place){
	    		var findmebtn = $('findme'); 
	    		findmebtn.set('html','Don\'t use my location');
	    		findmebtn.removeEvents('click');
	    		findmebtn.addEvent('click', function(e) {
		    		resetFindMe();
	    			$('trsearchwhere').set('value','');
	    			return false;
	    		})
	    		$('search-long').set('value', place.geonames[0].lng);
	    		$('search-lat').set('value',place.geonames[0].lat);
			$('searcheatbtn').set('value','Use my location: '+place.geonames[0].name);
			$('trsearchwhere').set('value',place.geonames[0].name);	    		
		},
		onTimeout: function(text){
			$('findme').set('html','Location not available');
	    		$('findme').removeEvents('click');
		}
	}).send();
}	

function geo_error() {
	$('findme').set('html','Location not available');
	$('findme').removeEvents('click');
}

function checkMinOne(field) {
	for (i = 0; i < field.length; i++) {
		if (field[i].checked) {
			return true;
		}
	}
	var e = $('eateryoptionerror');
	e.setStyle('display','block');
	return false;
}

var latlongList = [];

function checkLatLongExists(lat, lng) {
	var newLat = lat;
	var newLong = lng;

	if (newLat in latlongList) {
		var existingLongs = latlongList[newLat];
		if (existingLongs.contains(newLong)) {
			var floatLong = parseFloat(newLong);
			var floatLat = parseFloat(newLat);
			if (!existingLongs.contains((floatLong+0.0003).toString())) { 
					newLong = (floatLong+0.0003).toString();
			} else if (!existingLongs.contains((floatLong-0.0002).toString())) {
					newLong = (floatLong-0.0003).toString();
			} else if (!(floatLat+0.0003).toString() in latlongList) {
					newLat = (floatLat+0.0002).toString();
			} else if (!(floatLat-0.0003).toString() in latlongList) {
					newLat = (floatLat-0.0003).toString();
			}
		}
	}
	if (newLat in latlongList) {
		latlongList[newLat].push(newLong);
	} else {
		latlongList[newLat] = new Array(newLong);	
	}

	return Array(newLat, newLong);
}

function switchClass(primaryEl,classToSwitch) {
	var siblingsList = primaryEl.getSiblings();
	if (siblingsList.length>0) {
		siblingsList.each(function(linkEl, index){
			linkEl.addClass(classToSwitch);
		});
	}
	//show this content itself
	primaryEl.removeClass(classToSwitch);
}

var multiMarkers = [];

function showOnMap(lat,lng,radius,callerEl) {
	var callerEl = $(callerEl);
	var mapElement = $('map_canvas');
	var parentEl = ('div.eatery-result'); 
//	alert("radius="+radius+" :logbase2="+(Math.log(radius))/(Math.log(2)));
	var zoomLevel = 14 - (parseInt((Math.log(radius))/(Math.log(2))));	
	if (mapElement.getChildren().length<1) {
		var latlng = new google.maps.LatLng(lat,lng);
		var myOptions = {
			zoom: zoomLevel,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		var map = new google.maps.Map(mapElement, myOptions);		
		
		var resultEateries = mapElement.getParent(parentEl).getElements('div.eatery-service');
		var eateries = [];
		if (resultEateries.length>0) {
			resultEateries.each(function(eatery, index){
				var latlong = eatery.getSiblings('p.eatery-long-lat')[0].get('html').split(",");
				var name = eatery.getSiblings('h3.eatery-name')[0].getChildren('a')[0].get('html');
				var OWLi = eatery.getChildren('h4.eatery-type span')[0].get('html');
				var type = eatery.getChildren('h4.eatery-type a')[0].get('html').substring(0,1);
				var result = checkLatLongExists(latlong[0],latlong[1]);
				var elat = parseFloat(result[0]);
				var elng = parseFloat(result[1]);
				eateries.push([elat,elng,name,OWLi,type]);
			});
		}

		var shadow = new google.maps.MarkerImage(
		  '/images/mapicons/shadow.png',
		  new google.maps.Size(82,63),
		  new google.maps.Point(0,0),
		  new google.maps.Point(26,63)
		);
		var shape = {
		  coord: [31,0,33,1,35,2,37,3,38,4,39,5,40,6,41,7,42,8,43,9,43,10,44,11,44,12,44,13,45,14,45,15,45,16,45,17,45,18,45,19,45,20,45,21,45,22,45,23,45,24,45,25,44,26,44,27,44,28,44,29,43,30,43,31,42,32,42,33,42,34,41,35,41,36,40,37,40,38,39,39,39,40,38,41,38,42,37,43,36,44,36,45,35,46,35,47,34,48,34,49,33,50,32,51,32,52,31,53,31,54,30,55,29,56,29,57,28,58,28,59,27,60,26,61,26,62,20,62,19,61,19,60,18,59,17,58,17,57,16,56,16,55,15,54,14,53,14,52,13,51,13,50,12,49,11,48,11,47,10,46,10,45,9,44,9,43,8,42,8,41,7,40,6,39,6,38,5,37,5,36,5,35,4,34,4,33,3,32,3,31,2,30,2,29,2,28,1,27,1,26,1,25,1,24,1,23,0,22,0,21,0,20,0,19,0,18,0,17,1,16,1,15,1,14,1,13,2,12,2,11,2,10,3,9,4,8,4,7,5,6,6,5,7,4,9,3,10,2,12,1,15,0,31,0],
		  type: 'poly'
		};		
		eateries.each(function(markerll, index){
			var image = new google.maps.MarkerImage(
			  '/images/mapicons/' + markerll[4].toLowerCase() + '.png',
			  new google.maps.Size(46,63),
			  new google.maps.Point(0,0),
			  new google.maps.Point(23,63)
			);
	
			var marker = new google.maps.Marker({
			  icon: image,
			  shadow: shadow,
			  shape: shape,
			  map: map,
			  title:markerll[2]+" ("+markerll[3] + ")",
			  position: new google.maps.LatLng(markerll[0],markerll[1])
			});

			marker.eatType = markerll[4].toUpperCase();

			google.maps.event.addListener(marker, 'mouseup', (function(marker, index) {
		        return function() {
		          showEateryMapInfo(marker);
		          return false;
		        }
			})(marker, index));
			
			multiMarkers.push(marker);
  		});  
	}
	var callerItem = callerEl.getParent();
	switchClass(callerItem,'mute');
	switchClass(mapElement.getParent(), 'hide');
	return false;
}

function showHideMarkers(eateryType,show,linkEl) {
	var i;
	var linkEl = $(linkEl);

	for (i = 0; i < multiMarkers.length; i++) {
		if (multiMarkers[i].eatType == eateryType.toUpperCase()) {
			multiMarkers[i].setVisible(show);
		}
	}
	linkEl.getSiblings('a')[0].removeClass('hide');
	linkEl.addClass('hide');
	return false;
}

function showHideReviews(show,linkEl) {
	var reviewsList = $$('div.eatery-service div.reviews');
	var reviewlinksList = $$('div.reviewlinks');
	var linkEl = $(linkEl);
	var i;
	for (i = 0; i < reviewsList.length; i++) {
		if (show) {
			reviewsList[i].addClass('showlist');
		} else {
			reviewsList[i].removeClass('showlist');
		}
	}
	for (i = 0; i < reviewlinksList.length; i++) {
		if (show) {
			reviewlinksList[i].getChildren('a')[1].removeClass('hide');
			reviewlinksList[i].getChildren('a')[0].addClass('hide');
		} else {
			reviewlinksList[i].getChildren('a')[0].removeClass('hide');
			reviewlinksList[i].getChildren('a')[1].addClass('hide');
		}
	}
	linkEl.getSiblings('a')[0].removeClass('hide');
	linkEl.addClass('hide');
	return false;
}

function showAsList(callerEl) {
	var listElement = $('eaterylist'); 
	var callerItem = $(callerEl).getParent();
	switchClass(callerItem,'mute');
	switchClass(listElement, 'hide');
	return false;
}

function showRefineSearch(callerEl) {
	var listElement = $('refinesearch'); 
	var callerItem = $(callerEl).getParent();
	switchClass(callerItem,'mute');
	switchClass(listElement, 'hide');
	return false;
}

function showOneOnMap(mapId) {
	var mapElement = $(mapId); 
	var zoomLevel = 15;
	var latlong = $$('p.eatery-long-lat')[0].get('html').split(",");
	var elat = parseFloat(latlong[0]);
	var elong = parseFloat(latlong[1]);
	var type = $$('h4.eatery-type')[0].get('html').substring(0,1);
	
	var latlng = new google.maps.LatLng(elat,elong);
	var myOptions = {
		zoom: zoomLevel,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var map = new google.maps.Map(mapElement, myOptions);
		
	var shadow = new google.maps.MarkerImage(
	  '/images/mapicons/shadow.png',
	  new google.maps.Size(82,63),
	  new google.maps.Point(0,0),
	  new google.maps.Point(23,63)
	);
	var shape = {
	  coord: [31,0,33,1,35,2,37,3,38,4,39,5,40,6,41,7,42,8,43,9,43,10,44,11,44,12,44,13,45,14,45,15,45,16,45,17,45,18,45,19,45,20,45,21,45,22,45,23,45,24,45,25,44,26,44,27,44,28,44,29,43,30,43,31,42,32,42,33,42,34,41,35,41,36,40,37,40,38,39,39,39,40,38,41,38,42,37,43,36,44,36,45,35,46,35,47,34,48,34,49,33,50,32,51,32,52,31,53,31,54,30,55,29,56,29,57,28,58,28,59,27,60,26,61,26,62,20,62,19,61,19,60,18,59,17,58,17,57,16,56,16,55,15,54,14,53,14,52,13,51,13,50,12,49,11,48,11,47,10,46,10,45,9,44,9,43,8,42,8,41,7,40,6,39,6,38,5,37,5,36,5,35,4,34,4,33,3,32,3,31,2,30,2,29,2,28,1,27,1,26,1,25,1,24,1,23,0,22,0,21,0,20,0,19,0,18,0,17,1,16,1,15,1,14,1,13,2,12,2,11,2,10,3,9,4,8,4,7,5,6,6,5,7,4,9,3,10,2,12,1,15,0,31,0],
	  type: 'poly'
	};		

	var image = new google.maps.MarkerImage(
	  '/images/mapicons/' + type.toLowerCase() + '.png',
	  new google.maps.Size(46,63),
	  new google.maps.Point(0,0),
	  new google.maps.Point(23,63)
	);

	var marker = new google.maps.Marker({
	  icon: image,
	  shadow: shadow,
	  map: map,
	  title:$$('h3.eatery-name')[0].get('html'),
	  position: new google.maps.LatLng(elat,elong)
	});

	return false;
}

function showEateryMapInfo(marker) {
	var OWLi = (marker.title).substring( (marker.title).lastIndexOf(": ")+2 , marker.title.length-1 );
	var eateryElement = $(OWLi);
	var outputElement = $('map_eatery_box');
	var eaterylink = eateryElement.getChildren('h4.eatery-type a')[0].get('href');
	outputElement.empty();
	eateryElement.getSiblings('h3.eatery-name')[0].clone().removeClass('fleft').inject(outputElement);
	eateryElement.getChildren('h4.eatery-type')[0].clone().inject(outputElement);
	var reviewLink = eateryElement.getChildren('div.reviewlinks a')[0].get('html');
	if (reviewLink.contains("show")) {
		var reviewAnchor = new Element('a', {
	    		href: eaterylink,
		    'class': 'reviewtotal',
		    	html: reviewLink
		});
		reviewAnchor.inject(outputElement);
	}
	eateryElement.getSiblings('p.eatery-contact')[0].clone().inject(outputElement);
	outputElement.set('style','display:block;');
}

function limitTextArea(taEl, charCount, charMax) {
	charCount.value = charMax - taEl.value.length;
	if (taEl.value.length > charMax) {
		taEl.value = taEl.value.substring(0, charMax);
	}
}

