  	//firefox fix

	if (!document.body.outerHTML){
		var _emptyTags = {
			"IMG":   true,
			"BR":    true,
			"INPUT": true,
			"META":  true,
			"LINK":  true,
			"PARAM": true,
			"HR":    true
		};
	
		HTMLElement.prototype.__defineGetter__("outerHTML", function () {
			var attrs = this.attributes;
			var str = "<" + this.tagName;
			for (var i = 0; i < attrs.length; i++)
				str += " " + attrs[i].name + "=\"" + attrs[i].value + "\"";
	
			if (_emptyTags[this.tagName])
				return str + ">";
	
			return str + ">" + this.innerHTML + "</" + this.tagName + ">";
		});
	
		HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
			var r = this.ownerDocument.createRange();
			r.setStartBefore(this);
			var df = r.createContextualFragment(sHTML);
			this.parentNode.replaceChild(df, this);
		});
	}

	//firefox fix end
  	
  	var restarray = new Array();
  	var restaurants_list = getElementsByClassName("result");
  	for (i = 0; i < restaurants_list.length; i++){
		divs = restaurants_list[i].getElementsByTagName("div");
		distance = 0;
		for(j = 0; j < divs.length; j++){
			if (divs[j].className == "distance"){
				distance = divs[j].innerHTML;
				distance = distance.substring(0, distance.indexOf("<"));
				break;
			}
		}
		
		restname = restaurants_list[i].getElementsByTagName("a")[0].innerHTML.toLowerCase();
		if(restname.substring(0, 4) == 'the ') {
			restname = restname.substring(4);
		}

  		restarray[i] = Array(restaurants_list[i].outerHTML, restname, distance);	

  	}

  	function namesort(a, b){
		if (a[1] > b[1]) return 1;
		if (a[1] < b[1]) return -1;
		return 0; 
  	}

  	function distancesort(a, b){
  		if (b[2] == a[2]){
			return namesort(a, b);
		}else{
			return a[2] - b[2];
		}
  	}

  	function restSort(type){
  		if (type == "name"){
  			document.getElementById("result_sort_name").innerHTML = "name";
  			document.getElementById("result_sort_distance").innerHTML = "<a href=\"#\" onclick=\"restSort('distance'); filterCuisines(); return false;\">distance</a>";
  			restarray.sort(namesort);
  		}else if (type == "distance"){
  			document.getElementById("result_sort_distance").innerHTML = "distance";
  			document.getElementById("result_sort_name").innerHTML = "<a href=\"#\" onclick=\"restSort('name'); filterCuisines(); return false;\">name</a>";
  			restarray.sort(distancesort);
  		}
  		var restaurants_list = getElementsByClassName("result");
		for (i = 0; i < restaurants_list.length; i++){
			restaurants_list[i].outerHTML = restarray[i][0];
		}
  	}

	
	function filterCuisines() {
		var cuisines = document.getElementsByName("cuisinelist");
		var result_cuisines = getElementsByClassName("result_cuisines");
		var showall = true;
		var oochecked = false;
		if (oo = document.getElementById("oocheck")){
			if (oo.checked){
				oochecked = true;
			}
		}
		for (i = 0; i < cuisines.length; i++){
    		if (cuisines[i].checked){
    			showall = false;
    			break;    		
    		}
		}

		var result_prominent = getElementsByClassName("result_prominent");
		for (i = 0; i < result_prominent.length; i++){
			if (showall && !oochecked){
				result_prominent[i].style.display = 'block';
			}else{
				result_prominent[i].style.display = 'none';
			}
		}	
		
		for (i = 0; i < result_cuisines.length; i++){
			if (showall){
				if (oochecked){
					str = new RegExp(",1000000,", "i");
			    	if (result_cuisines[i].innerHTML.match(str)){
	    				document.getElementById('res' + result_cuisines[i].id).style.display = 'block';
	    			}else{
	    				document.getElementById('res' + result_cuisines[i].id).style.display = 'none';
	    			}
				}else{
					document.getElementById('res' + result_cuisines[i].id).style.display = 'block';
				}
			}else{
				document.getElementById('res' + result_cuisines[i].id).style.display = 'none';
				for (j = 0; j < cuisines.length; j++){
    				if (cuisines[j].checked){
    					str = new RegExp("," + cuisines[j].value + ",", "i");
    					if (result_cuisines[i].innerHTML.match(str)){
    						if (!oochecked){
    							document.getElementById('res' + result_cuisines[i].id).style.display = 'block';
			    				break;
			    			}else{
			    				str = new RegExp(",1000000,", "i");
			    				if (result_cuisines[i].innerHTML.match(str)){
	    							document.getElementById('res' + result_cuisines[i].id).style.display = 'block';
				    				break;
			    				}
		    				}
		    			}
    				}
				}
			}
		}
   	
	}

 
	function getElementsByClassName(classname) {
	    var a = [];
    	var re = new RegExp('\\b' + classname + '\\b');
	    var els = document.getElementsByTagName("*");
    	for(var i=0,j=els.length; i<j; i++)
        	if(re.test(els[i].className))a.push(els[i]);
	    return a;
	}
