String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); };

function trim(str) {
	return str.trim();
}

function strip_special_chars(str) {
	return str.replace(/[^a-zA-Z0-9\-]+/g,'');
}

function update_user_box(src) {	
	if (once || isLoggedIn) return;
	if (src!=1) { 
		var user_box = document.getElementById("authDiv");	   
	    user_box.innerHTML = 
	      "<div style=\"line-height:1.6em; font-size:80%;text-align:right;\"><table align=\"right\"><tr><td style=\"text-align:right\">"      
	      +"<fb:name uid='loggedinuser' useyou='false'></fb:name><br>"      
	      +"<a href='javascript:FB.Connect.logout(logout);'>Logout of Facebook</a></td><td>&nbsp;</td>"
	      +"<td style=\"padding-top:8px;\"><fb:profile-pic uid='loggedinuser' width='45px' height='45px' facebook-logo='true'></fb:profile-pic>"
	      +"</td></tr></table></div>";
	}	
    FB.XFBML.Host.parseDomTree();//this line parses the fbml. remove this & fbml dont exec
    var setSrcFunc = function(result,exception) {
    	if (src == null) src = 0;  		
   		getInfo(result, exception, src);
    }
	fb_api.users_getInfo(fb_api.get_session().uid, ['first_name','last_name','name','sex','pic_small','timezone', 'proxied_email', 'profile_url', 'pic'], setSrcFunc);
	fb_api.users_hasAppPermission('email', function(result) {
        if (result == 0) {            
        	FB.Connect.showPermissionDialog('email');
        } else {}
    });
}

function getInfo(result,exception,src) {
	if (!once) {		
		fb_login(fb_api.get_session().uid, result[0].first_name, result[0].sex.substring(0,1).toUpperCase(), result[0].profile_url, result[0].proxied_email, result[0].pic, src);		
		once = true;
	}
}

function fb_login(fb_id, fb_display_name, fb_gender, fb_url, fb_email, fb_pic, src) {
	var sUrl = BASE_URL + 'm=getUserByFBId&web=1&fbid=' + fb_id + '&displayName=' + fb_display_name + '&gender=' + fb_gender + '&fbUrl=' + fb_url  
		+ '&uid=' + getUID() + '&email='+urlencode(fb_email) + '&picurl=' + fb_pic;
	
	var objInfo;
	var callback = {
		success: function(o) {
			isLoggedIn = true;
     		var exdate=new Date();
     		if (expiredays==null)
				exdate.setDate(exdate.getDate()+30);
			else
				exdate.setDate(exdate.getDate()+expiredays);
			set_cookie("spidrfbid", fb_id, exdate.toGMTString());			
								
			if (src==1)
				window.location = 'weblist.php';
			else if (src!=3){
	  			joeInfo = eval('YAHOO.lang.JSON.parse(o.responseText).getUserByFBId');
				isLoggedIn = true;
	     		Dom.get("signupLink").style.display='none';
	     		Dom.get("settingsLink").style.display='block';
	     		addUidToSess();			
				fetchPals();
				fetchFavs(true);
				initInit();
			}
	  	},
	  	failure: function(o) {setStatus('the Spidr server is acting weird, please try again. Sorry about this :( .');},
	  	argument: {}
	}
	var transaction = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, null);
}

function formatDate(spidrDate) {
	var dateTimeItems = spidrDate.split(" ");
	var dateStr = dateTimeItems[0];
	var timeStr = dateTimeItems[1];
	
	var dateItems = dateStr.split("-");
	var timeItems = timeStr.split(":");	 
	 
	var localDate = new Date();
	var localOffset = localDate.getTimezoneOffset();

	var mins = parseInt(timeItems[1]) + (localOffset - 480)/60;//480 = PST offset
	var d = new Date();
	d.setYear(dateItems[0]);
	d.setMonth(dateItems[1]-1);
	d.setDate(dateItems[2]); 
	d.setHours(timeItems[0]);
	d.setMinutes(mins);
	d.setSeconds(timeItems[2]);
	
	return d;	
}

function getReadableFormat(aDate, format) {
	var d = new Date();
	var newFormat = format;
	var one_day = 1000*60*60*24;
	var diff = (d.getTime()-aDate.getTime())/(one_day);

	if (diff <= 1) {
		if (aDate.getDate()==d.getDate()) {
			newFormat = newFormat.replace(/"on" ddd, mmm dS/, '"Today"');			
		} else {
			newFormat = newFormat.replace(/"on" ddd, mmm dS/, '"Yesterday"');
		}
	}
	return newFormat;
}

function setStatus(status, loading, stype) {
	if (stype!=2)
		document.getElementById('theStatus').className = 'statusDiv';
	else
		document.getElementById('theStatus').className = "errorDiv";
	Dom.get('theStatus').style.visibility = 'visible';
	Dom.get('clearBar').style.visibility = 'visible';
	if (loading==null || !loading) {
		Dom.get('theStatus').innerHTML = status;
	} else if (loading){
		Dom.get('loadingBar').style.visibility = 'visible';
		Dom.get('theStatus').innerHTML = '&nbsp;'+status;
	}
	
	var t = YAHOO.lang.later(30000, null, clearStatus, null, true);
}

function clearStatus() {
	Dom.get('theStatus').innerHTML = '';
	Dom.get('loadingBar').style.visibility = 'hidden';
	Dom.get('theStatus').style.visibility = 'hidden';
	Dom.get('clearBar').style.visibility = 'hidden';
}

function getSpidrTime() {
	var currentTime = new Date();
	var sep = '-';
	var time = currentTime.getFullYear() + sep + (currentTime.getMonth() + 1) + sep + currentTime.getDate() + sep + 
		currentTime.getHours() + sep + currentTime.getMinutes() + sep + currentTime.getSeconds();		

	return time;	
}

function fbs_click(url, t) {
	var zurl = 'http://www.facebook.com/sharer.php?t='+encodeURIComponent(t) + '&u='+encodeURIComponent(url);
	alert(zurl);
	window.open(zurl,'sharer','toolbar=0,status=0,width=626,height=436');
	return false;
}

function GetThis(T, C, U, L) {
    var targetUrl = 'http://www.myspace.com/index.cfm?fuseaction=postto&' + 't=' + encodeURIComponent(T)
    + '&c=' + encodeURIComponent(C) + '&u=' + encodeURIComponent(U) + '&l=' + L;
    window.open(targetUrl);
}

function delicious(url, title) {
	window.open('http://del.icio.us/post?v=2&url='+encodeURIComponent(url)+'&title='+encodeURIComponent(title));	
}

function stumbleUpon(url, title) {
	window.open('http://www.stumbleupon.com/submit?url='+encodeURIComponent(url)+'&title='+encodeURIComponent(title));	
}

function mixx(url) {
	window.open('http://www.mixx.com/submit?page_url='+url);
	return false;
}

function sharewebOnFB (wname, wurl, wpicurl) {
	var comment_data = {'web':wname, 'wurl': wurl, "images":[{'src': wpicurl, 'href': wurl},{'src': 'http://ispidr.com/i/spidr-s.gif', 'href': 'http://ispidr.com'}]};
	FB.Connect.showFeedDialog(134399992392, comment_data, null, null, null, FB.RequireConnect.promptConnect);
	return false;
}

function sharenewebOnFB (wname, wurl, wpicurl) {
	var comment_data = {'web':wname, 'wurl': wurl, "images":[{'src': wpicurl, 'href': wurl},{'src': 'http://ispidr.com/i/spidr-s.gif', 'href': 'http://ispidr.com'}]};
	FB.Connect.showFeedDialog(134399992392, comment_data, null, null, null, FB.RequireConnect.promptConnect);
	return false;
}

var postMsgOnFB = function(msgId) {
	setStatus('Launching facebook share..');
   	var postUrl = BASE_URL + 'm=getMsg&web=1&uid='+getUID()+'&msgId='+msgId;
   	var loader = new YAHOO.util.YUILoader({require: ["connection","json"], loadOptional: true, timeout: 10000, combine: true,
		onSuccess: function() {	
		var callback = {
			success: function(o) {
				var objInfo = YAHOO.lang.JSON.parse(o.responseText);
				var wurl = "http://ispidr.com/web/"+objInfo.getMsg.zoneUrl;
				if (objInfo.getMsg.msgPicId >0) {
					var comment_data = {"web":objInfo.getMsg.zoneDisplayName, "creator": objInfo.getMsg.userDisplayName, "post":objInfo.getMsg.messageText, "wurl" : wurl, 				 
						 "images":[{'src': "http://ispidr.com/service/viewImgForWeb?wid="+objInfo.getMsg.zoneId, 'href': wurl},
						 {'src': "http://ispidr.com/service/view?id="+objInfo.getMsg.msgPicId, 'href': wurl}, {'src': 'http://ispidr.com/i/spidr-s.gif', 'href': 'http://ispidr.com'}]
					}
				} else {
					var comment_data = {"web":objInfo.getMsg.zoneDisplayName, "creator": objInfo.getMsg.userDisplayName, 
						 "post":objInfo.getMsg.messageText, "wurl" : wurl , "images":[{'src': 'http://ispidr.com/i/spidr-s.gif', 'href': 'http://ispidr.com'}]
					}
				}
				FB.Connect.showFeedDialog(134409692392, comment_data, null, null, null, FB.RequireConnect.promptConnect);		
		  },  failure: function(o) {alert('Error communicating with the server. Sorry about that!');}, argument: {}		  
		}
	   	var transaction = YAHOO.util.Connect.asyncRequest('GET', postUrl, callback, null);
	}});
	loader.insert();
}

function getCookie(c_name) {
	if (document.cookie.length>0) {
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1) { 
  			c_start=c_start + c_name.length+1; 
  			c_end=document.cookie.indexOf(";",c_start);
  			if (c_end==-1) c_end=document.cookie.length;
  				return unescape(document.cookie.substring(c_start,c_end));
  		} 
	}
	return "";
}

function set_cookie(cookie_name, cookie_value, exDateString) {
	document.cookie= cookie_name + "=" + cookie_value + ";expires=" + exDateString;
}

function delete_cookie (cookie_name) {
  var cookie_date = new Date ( );  // current date & time
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = cookie_name + "=; expires=" + cookie_date.toGMTString();
}

function CL() {
//	container
}

function rgcode(lat, lon, callback) {
	if (GBrowserIsCompatible()) {
		var latlng = new GLatLng(lat, lon);
		geocoder.getLocations(latlng, function(response) {
	      	if (response && response.Status.code == 200) {
		      	var adminArea = response.Placemark[0].AddressDetails.Country.AdministrativeArea;		      	
		      	var cl = new CL();
		      	cl.lat = lat;
		      	cl.lon = lon;
		      	cl.addr = '';
		      	cl.st = adminArea.AdministrativeAreaName;

		      	var locality = adminArea.SubAdministrativeArea!=null ? adminArea.SubAdministrativeArea.Locality : 
		      		adminArea.Locality;

<!--		      	alert(YAHOO.lang.JSON.stringify(response.Placemark[0]));-->
		      	if (locality!=null) {
			      	cl.city = locality.LocalityName;
			      	cl.zip = locality.PostalCode!=null ? locality.PostalCode.PostalCodeNumber : '';
			      	
			      	if (locality.Thoroughfare!=null) {
				      	addrStr = locality.Thoroughfare.ThoroughfareName;//no thoroughfare means no street
				      	addrArr = addrStr.split(" ");
				      	var num = addrArr[0].replace('-', '');
				      	if (!isNaN(num)) {			      	
				    		cl.addr = addrArr[0];
				    		cl.str = addrStr.replace(cl.addr, '').replace(/^\s+|\s+$/, '');
			    		} else {
			    			cl.str = addrStr;
			    		}
		    		}			      	
		      	}
	    		cl.toString = response.Placemark[0].address.replace(cl.addr, '');
<!--	    		var localityHood = response.Placemark[1].AddressDetails.Country.AdministrativeArea.Locality;-->
<!--	    		alert(YAHOO.lang.JSON.stringify(response.Placemark[1]));-->

<!--		      	cl.hlat = response.Placemark[1].Point.coordinates[1];-->
<!--		      	cl.hlon = response.Placemark[1].Point.coordinates[0];-->
<!--		      	localityHood = response.Placemark[1].AddressDetails.Country.AdministrativeArea.Locality;-->
<!--	    		if (localityHood!=null&& localityHood.AddressLine!=null) {-->
<!--			      	cl.h = localityHood[0];-->
<!--		      	}		      	-->
	      	}
	      	callback(cl);
	  });        
	} else setStatus('Spidr suggests you upgrade to <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a>');
}

function preventAccess() {
	alert( 'Please log in or sign up for a new account' );
	if (e!=null)	
		YAHOO.util.Event.preventDefault(e);
}


function esc(str) {
	if (str!=null)
		return str.replace(/['"]/g,'\\\'');
	return '';
}

function clean(theString) {
	if (theString!=null) {
		theString+='';
		return empty_str(theString).replace(/(\\+\')/g,'\'');
	} else
		return theString;
}

function empty_str(str) {
	if (str == null || str == '' || str == 'undefined') return '';
	str = ''+str;
	return str.replace(/\[object Object\]/g, '');
}

function isset(str) {
	return (str!=null && str!='');
}

function track(url) {
	try {
		if(pageTracker) {		
			pageTracker._trackPageview(url);
		}
	} catch (e) {}
}

function urlencode (clearString) {
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}

var UTUBE_EMBED = '<br><object width="275" height="200"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/<vid>&hl=en&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="275" height="200"></embed></object>';
var reg = /\S+youtube\.com\/watch\?v=(\S+)\&*\S*/;

function utubePreview(theMsg, previewType) {//TODO previewType is for size, for now not used.
	if (reg.test(theMsg)) {
		var match = reg.exec(theMsg);
		var vLink = match[0];
		var vId = match[1];
		var embed = UTUBE_EMBED.replace('<vid>',vId);
		theMsg = theMsg.replace(vLink, embed);
	}
	return theMsg;
}

function getHeight(type) {
	if (!isIE) {
		if (type=='relatedW' || type == 'nearbyW')
			return "200px";
	} else
		return "";
}

function postToTwitter(recStr, type) {
	window.open('/twitterLogin.php?recstr=' + recStr+'&type='+type,'Twitter Login', 'left=200,top=100,width=750,height=380,toolbar=0,resizable=1');	
}

var handleMainTabClose = function(e, tab) {    	
	YAHOO.util.Event.preventDefault(e);
	tabView.removeTab(tab);
	var tabler = theMap['messages'+tab.wid];
	if (tabler!=null)
		tabler.getDataSource().clearInterval(tabler.intervalId);
	theMap['tab' + tab.wid] = null;
	
	if (isLoggedIn) {
		var sUrl= BASE_URL + 'm=disconnect&uid='+ joeInfo.joeId + '&wid=' + tab.wid;        
		var transaction = YAHOO.util.Connect.asyncRequest('GET', sUrl);
	}
};

function openWeb(wid, displayName, update) {
    var theTab = theMap['tab' + wid];    
	if (theTab != null) {	
		tabView.set('activeTab', theTab);
		return;
	}
	
    var webTab = new YAHOO.widget.Tab(
        { label: clean(displayName)+'&nbsp&nbsp&nbsp<span class="close">X</span>', 
			dataSrc: 'web.php?wid='+wid+'&displayName='+displayName,
			cacheData: true, 
			active: true}
    );
    webTab.wid = wid;//added	
    tabView.addTab(webTab);    
    theMap['tab' + wid] = webTab;

	connect(wid);    
    YAHOO.util.Event.on(webTab.getElementsByClassName('close')[0], 'click', handleMainTabClose, webTab);
    YAHOO.plugin.Dispatcher.delegate(webTab);
}

//Creates a marker whose info window displays the letter corresponding
//to the given index.
function createMarker(point, index, netId, webDisplayName) 
{
	// Create a lettered icon for this point using our icon class
	var letter = String.fromCharCode("A".charCodeAt(0) + index);
	var letteredIcon = new GIcon(baseIcon);
	letteredIcon.image = "i/marker"+ letter+".png";
	
	// Set up our GMarkerOptions object
	markerOptions = { icon:letteredIcon, title:webDisplayName };
	var marker = new GMarker(point, markerOptions);
	
	GEvent.addListener(marker, "click", function() {
		  openWeb(netId, esc(webDisplayName));
	});
	return marker;
}

function formatAddr(locationType, address, street, city, state,  zipcode) {	
	if (locationType>5) {
		zipcode = (empty_str(zipcode) == '') ? '' : zipcode; 
		loc = trim(address+' '+street,',') + ', '+(city=='0'?'':city)+', '+(state=='0'?'':state)+' '+zipcode;
	} else 
		loc = (city=='0'?'':city)+', '+(state=='0'?'':state);
	return trim(loc, ',');	
}

function fetchPhysicalLoc() {
	var callback = {
		success: function(o) {
			var loc = YAHOO.lang.JSON.parse(o.responseText).getCurrentLocation;
			var locstr =  ((loc.mytag!=null) && (empty_str(loc.mytag) !='')) ?clean(loc.mytag) + '@' +clean(loc.displayName):clean(loc.displayName);
			Dom.get('physicalLoc').innerHTML = '<a href="javascript:openWeb(\''+ loc.netId + '\', \'' + esc(loc.displayName) + '\')" style="color:#FFF;">' +locstr + 	'</a>';
	  	},
	  	failure: function(o) {},
	  	argument: {}
	}
	var url = BASE_URL + 'm=getCurrentLocation&web=1&uid='+joeInfo.joeId; 
	var transaction = YAHOO.util.Connect.asyncRequest('GET', url, callback);
}

//date.format appended here
/*
 * Date Format 1.2.2
 * (c) 2007-2008 Steven Levithan <stevenlevithan.com>

 * MIT license
 * Includes enhancements by Scott Trenda <scott.trenda.net> and Kris Kowal <cixar.com/~kris.kowal/>
 *
 * Accepts a date, a mask, or a date and a mask.
 * Returns a formatted version of the given date.
 * The date defaults to the current date/time.
 * The mask defaults to dateFormat.masks.default.
 */
var dateFormat = function () {
	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
			val = String(val);
			len = len || 2;
			while (val.length < len) val = "0" + val;
			return val;
		};

	// Regexes and supporting functions are cached through closure
	return function (date, mask, utc) {
		var dF = dateFormat;

		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
		if (arguments.length == 1 && (typeof date == "string" || date instanceof String) && !/\d/.test(date)) {
			mask = date;
			date = undefined;
		}

		// Passing date through Date applies Date.parse, if necessary
		date = date ? new Date(date) : new Date();
		if (isNaN(date)) throw new SyntaxError("invalid date");

		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

		// Allow setting the utc argument via the mask
		if (mask.slice(0, 4) == "UTC:") {
			mask = mask.slice(4);
			utc = true;
		}

		var	_ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
				d:    d,
				dd:   pad(d),
				ddd:  dF.i18n.dayNames[D],
				dddd: dF.i18n.dayNames[D + 7],
				m:    m + 1,
				mm:   pad(m + 1),
				mmm:  dF.i18n.monthNames[m],
				mmmm: dF.i18n.monthNames[m + 12],
				yy:   String(y).slice(2),
				yyyy: y,
				h:    H % 12 || 12,
				hh:   pad(H % 12 || 12),
				H:    H,
				HH:   pad(H),
				M:    M,
				MM:   pad(M),
				s:    s,
				ss:   pad(s),
				l:    pad(L, 3),
				L:    pad(L > 99 ? Math.round(L / 10) : L),
				t:    H < 12 ? "a"  : "p",
				tt:   H < 12 ? "am" : "pm",
				T:    H < 12 ? "A"  : "P",
				TT:   H < 12 ? "AM" : "PM",
				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

		return mask.replace(token, function ($0) {
			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
		});
	};
}();

// Some common format strings
dateFormat.masks = {
	"default":      "ddd mmm dd yyyy HH:MM:ss",
	shortDate:      "m/d/yy",
	mediumDate:     "mmm d, yyyy",
	longDate:       "mmmm d, yyyy",
	fullDate:       "dddd, mmmm d, yyyy",
	shortTime:      "h:MM TT",
	mediumTime:     "h:MM:ss TT",
	longTime:       "h:MM:ss TT Z",
	isoDate:        "yyyy-mm-dd",
	isoTime:        "HH:MM:ss",
	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
	dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
	monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
	return dateFormat(this, mask, utc);
};

function clearnWM(box, wm) {
	try{
      if (box != null && box.value.toString().toLowerCase() == wm.toLowerCase()) {
      	box.className = '';
      	box.value = "";
      }
    } catch (e) {
      alert(e.message);
   }
}

function showWM(boxId,wm) {
    try {
     	var box = Dom.get(boxId);
      	if (box != null && trim(box.value) == "") {      	 	
      	 	box.className = 'hint';
      	 	box.value = wm;
      	}
    } catch (e) {
		alert(e.message);
    }
}

function getCatString(cat) {
	cat = parseInt(cat);
	switch (cat) {
		case 1: return 'City'; break;
		case 2: return 'Street'; break;
		case 3: return 'Neighborhood'; break;
		case 5: return ''; break;
		case 6: return 'Bar'; break;
		case 7: return 'Restaturant'; break;
		case 8: return 'Shop'; break;
		case 9: return 'School'; break;
		case 10: return 'Cafe'; break;
		case 11: return 'Hotel'; break;
		case 12: return 'Dormitory'; break;
		case 13: return 'Airport'; break;
		case 14: return 'Stadium'; break;
		case 15: return 'Theater'; break;
		case 16: return 'Sale'; break;
		case 17: return 'Conference'; break;
		case 18: return 'Party'; break;
		case 19: return 'Apartments'; break;
		case 20: return 'Nature'; break;
		case 21: return 'Tourist'; break;
		case 22: return 'Office'; break;
		default: return '';break;
	}			
}

function closeTab(tabId) {
	tabView.removeTab(theMap[tabId]);
	theMap[tabId] = null;
}

function iresize(img, max) {
  if (img == undefined || img == null || max==null) return false;
  if (img.width > max) img.width = max;
}

function popImgPanel(src,title,id, etype, dlink) {
	Dom.get('abigimg').src = '' + src; 
	Dom.get('bigimgtitle').innerHTML= ''+title;
	
	panel.show();
	Dom.get('bigimgen').innerHTML = (etype==1) ? ' hop on to the ' + title + ' web' : ' view ' + title + '\'s profile';
	YAHOO.util.Event.on(Dom.get('bigimglink'), 'click', function() {
		panel.hide();
		if (etype==1)
			openWeb(id, '' + title);
		else {
			if (dlink == null)
				openProfile(id, '' + title);
			else
				window.location = 'http://ispidr.com/spidr/' + id;
		}
	});
}

function getag(wid) {
	if (!isLoggedIn || joeInfo.favs[wid]==null)
		return '';
	return joeInfo.favs[wid] + '@';	
}

function checkTwitter() {
	Dom.get('twitCheck').checked = true;
	Dom.get('twitterConnected').value = true;
}

var acceptFriendRequest = function(e, uid, bId, callbacks) {
	var callback = {
	  success: function(o) {
		setStatus('Friend added !');
		if (callbacks!=null && callbacks.length>0) {
			for (var i in callbacks)
				callbacks[i]();
		}
	  },
	  failure: function(o) {
		  setStatus('Error: Could not accept friend request. Please try later.');
	  },
	  argument: {}
	}

	var dt = theMap["dt-inbox"];
	var rec = dt.getRecord(dt.getSelectedRows()[0]);	
	var url = BASE_URL + 'm=acceptBuddy&uid='+uid+'&web=1&buddyId='+bId+'&msg=';
	
	YAHOO.util.Connect.asyncRequest('POST', url, callback, null);	
}

var denyFriendRequest = function(e, uid, bId, callbacks){
	var callback = {
	  success: function(o) {
		setStatus('Request denied !');
		if (callbacks!=null && callbacks.length>0) {
			for (var i in callbacks)
				callbacks[i]();
		}
	  },
	  failure: function(o) {
		  setStatus('Error: Could not deny friend request at this time. Please try later.');
	  },
	  argument: {}
	}

	var url = BASE_URL + 'm=rejectBuddy&uid='+uid+'&web=1&buddyId='+bId+'&msg=';
	YAHOO.util.Connect.asyncRequest('POST', url, callback, null);	
}

function switchFeed(e, o) {
	if (isLoggedIn) {		
		if (o.feedStatus == 2) {
			sUrl= BASE_URL + 'm=subscribeFeed&web=1&uid='+ o.uid + '&zoneId=' + o.wid;
			status = 'Subscribed to feed from <b>' + o.wname + '</b>';
		} else {
			sUrl= BASE_URL + 'm=removeFeed&web=1&uid='+ o.uid + '&zoneId=' + o.wid;
			status = 'Unsubscribed feed from <b>' + o.wname + '</b>';
		}
		var callback = {
			success: function(obj) {
				var sText = o.feedStatus == 2 ? 'Feed On' : 'Feed Off';
				setStatus(status);
				var feedbtnId = 'feedBtn' + o.wid;
				Dom.get(feedbtnId + '-button').innerHTML = sText;
		  	},
		  	failure: function(obj) {},
		  	argument: {}
		}
		var loader = new YAHOO.util.YUILoader({require: ["connection"], loadOptional: true, timeout: 10000, combine: true,
			onSuccess: function() {		
				var transaction = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
			}
		});
		loader.insert();
	} else {
		window.location = 'http://ispidr.com/login?rurl=' + location.href;
	}
}

function webListJs(feedOn, wid, wname, feedBtnId, feedBtnLbl, lat, lon, picSrc, wmmId, ctr, uid) {
 	var o = new Object();
 	o.feedStatus = feedOn ? 1 : 2;
 	o.wid = wid;
 	o.uid = uid;
 	o.wname = wname;
	
	var feedButton = new YAHOO.widget.Button(feedBtnId, {label: feedBtnLbl, checked: feedOn, onclick: {fn: switchFeed, obj: o, scope:this} });

	var point = new GLatLng(lat, lon);
    var marker = new GMarker(point);
    var html =  '<table><tr style="vertical-align:top;"><td><img src="' + picSrc + '" width="45px"/></td><td width="20px"/>'
    	+ '<td width="200px;"><a href="/web/'+wid+'">'+wname+'</a></td></tr></table>';
    GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});
    bmap.addOverlay(marker);        
	if (ctr == 0) {
    	bmap.setCenter(point);
    	marker.openInfoWindowHtml(html);		        	
    }
    YAHOO.util.Event.onAvailable(wmmId, function() {YAHOO.util.Event.on(Dom.get(wmmId), 'click', function() {marker.openInfoWindowHtml(html);});});
}

function activityListJs(lat, lon, picSrc, uid, uname, webLink, msgTime, msgTxt, ctr, mmId) {
	var point = new GLatLng(lat, lon);
    var marker = new GMarker(point);
    var html =  '<table><tr style="vertical-align:top;"><td><img src="'+picSrc+'" width="45px"/></td><td width="20px"/>'
    	+ '<td width="200px;"><div style="font-family:Verdana;" class="bold_gray"><a href="/user/'+uid+'">' + clean(uname) 
    	+ '</a>&nbsp;to '+webLink + ' at ' + msgTime + '</div><br>'+ msgTxt + '</td></tr></table>';
    GEvent.addListener(marker, "click", function() {marker.openInfoWindowHtml(html);});
    bmap.addOverlay(marker);        
    if (ctr == 0) {
    	bmap.setCenter(point);
    	marker.openInfoWindowHtml(html);		        	
    }
    YAHOO.util.Event.onAvailable(mmId, function() {YAHOO.util.Event.on(Dom.get(mmId), 'click', function() {marker.openInfoWindowHtml(html);});});
}

function flag(msgId) {
	if (!isLoggedIn) {setStatus('You need to be logged in to flag messages.'); return;}
	if (confirm('Are you sure you want to flag this message as offensive?')) {
		var loader = new YAHOO.util.YUILoader({require: ["connection","json"], loadOptional: true, timeout: 10000, combine: true,
			onSuccess: function() {
				var callback = {
					success: function(o) {
						location.reload(true);
					},
				  	failure: function(o) {alert('Error communicating with the server. Sorry about that!');}, argument: {}		  
				}
			   	var transaction = YAHOO.util.Connect.asyncRequest('GET', BASE_URL + 'm=flag&web=1&msgId='+msgId, callback, null);
		}});
		loader.insert();
	}	
}

function getRelX(relId, divId) {
	return Dom.getX(divId) - Dom.getX(relId);	
}
function getRelY(relId, divId) {
	return Dom.getY(divId) - Dom.getY(relId);	
}