slTrailsUtils = {
	serverUrl: "http://sitelifestage.ehow.com/ver1.0/Direct/Process?sid=sitelifestage.ehow.com",
	defaultCoverImage: "/sitelife2/images/default-cover.jpg",
	getQueryParam: function(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];
		}
	},
	makeSingleRequest: function(request, callback) {
		var rb = new RequestBatch();
		rb.AddToRequest(request)
		rb.BeginRequest(this.serverUrl, function(data) {
			if (callback)
				callback(data);
		});
	},
	getAvatar: function(avatarUrl, size) {
		if (avatarUrl.indexOf(".Small") != -1)
			return avatarUrl.replace(".Small.","."+size+".")
		else
			return avatarUrl;
	}

}

var slTrailsUrls = function() {
	var buildUrl = function(base, page, qs) {
		var url = base;
		if (base.indexOf("?") != -1)
			url += "&p="+page;
		else
			url += "?p="+page;
		if (qs)
		{
			for(var key in qs)
			{	
				url+="&"+key+"="+qs[key];
			}
		}
		return url;
	}

	var buildPersonaUrl = function(pageName, queryString) {
		return buildUrl("/mytrails/", pageName, queryString);
		//return slwidgets.slUtils.buildUrl(PLUCKSL_GLOBAL_OPTIONS.baseUrl, pageName, queryString);
	}
	var buildPublicPhotoUrl = function(pageName, queryString) {
		return buildUrl("/trailphotos.aspx", pageName, queryString);
	}

	return {
		'persona': {
			'showOverview': function(userKey) {
				return buildPersonaUrl('profile', {
					uid: userKey
				});
			},
			'editProfile': function(userKey) {
				return buildPersonaUrl('profileedit', {
					uid: userKey
				});
			},
			'showGalleries': function(userKey) {
				return buildPersonaUrl('photos', {
					uid: userKey
				});
			},
			'showGallery': function(userKey, galleryKey) {
				return buildPersonaUrl('photoalbum', {
					uid: userKey,
					albumid: galleryKey
				});
			},
			'showGalleryEdit': function(userKey, galleryKey) {
				return buildPersonaUrl('photoalbumedit', {
					uid: userKey,
					albumid: galleryKey
				});
			},
			'showPhoto': function(userKey, galleryKey, photoKey) {
				return buildPersonaUrl('photo', {
					uid: userKey,
					albumid: galleryKey,
					photoid: photoKey
				});
			},
			'showPhotoTag': function(userKey, tagName) {
				return buildPersonaUrl('phototag', {
					uid: userKey,
					tag: tagName
				});
			},
			'showPhotoEdit': function(userKey, galleryKey, photoKey) {
				return buildPersonaUrl('photoedit', {
					uid: userKey,
					albumid: galleryKey,
					photoid: photoKey
				});
			},
			'showPhotoUpload': function(userKey, galleryKey) {
				return buildPersonaUrl('photoupload', {
					uid: userKey,
					albumid: galleryKey
				});
			},
			'showFriends': function(userKey) {
				return buildPersonaUrl('friends', {
					uid: userKey
				});
			},
			'showMessages': function(userKey) {
				return buildPersonaUrl('messages', {
					uid: userKey
				});
			},
			'showTrails': function(userKey) {
			    return "/mytrails/trails.aspx?uid=" + userKey;
			},
			'showMaps': function(userKey) {
			    return "/mytrails/topomap.aspx?uid=" + userKey;
			}

		},
		'publicPhotos': {
			'showGallery': function(galleryKey, photoKey, userKey) {
				return buildPublicPhotoUrl("publicphotos", {
					albumid: galleryKey,
					photoid: photoKey,
					uid: userKey
				});
			},
			'showGalleryThumbnails': function(galleryKey) {
				return buildPublicPhotoUrl("publicalbum", {
					albumid: galleryKey
				});
			},
			'showUpload': function(userKey, galleryKey) {
				return buildPublicPhotoUrl("publicphotoupload", {
					uid: userKey,
					albumid: galleryKey
				});
			},
			'showPhotoEdit': function(galleryKey, photoKey) {
				return buildPublicPhotoUrl("publicphotoedit", {
					albumid: galleryKey,
					photoid: photoKey
				});
			}
		}
	}
}();

var PrettyDate = function() {

	var getPrettyDate = function(time) {
		var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
			diff = (((new Date()).getTime() - date.getTime()) / 1000),
			day_diff = Math.floor(diff / 86400);
				
		if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 )
			return time;
				
		return day_diff == 0 && (
				diff < 60 && "just now" ||
				diff < 120 && "1 minute ago" ||
				diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
				diff < 7200 && "1 hour ago" ||
				diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
			day_diff == 1 && "Yesterday" ||
			day_diff < 7 && day_diff + " days ago" ||
			time
	}


	return {
		execute: function() {
			$(".PrettyDate").each(function() {
				var prettyDate = getPrettyDate($(this).html());
				$(this).html(prettyDate);
			});
		},

		getPrettyDate: function(time) {
			return getPrettyDate(time);
		}
	}
}();

var cookie = {

	createCookie: function(name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	},

	readCookie: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},

	eraseCookie: function(name) {
		createCookie(name,"",-1);
	}
}


var SiteLifeTrails = new function()
{
	var serverUrl = SiteLifeV2Config.DaapiServer; 
	var GetParameter = function(parameterName)
	{
		var key = parameterName + "=";
		var parameters = document.location.search.substring(1).split("&");
		for (var i = 0; i < parameters.length; i++)
		{
			if (parameters[i].indexOf(key) == 0)
			return parameters[i].substring(key.length);
		}
		return null;
	}
	this.GetCoverPhoto = function(albumid)
	{
		var rb = new RequestBatch();
		rb.AddToRequest(new GalleryKey(albumid));
		rb.BeginRequest(serverUrl,function(data) {
			var img = document.getElementById("trailImage");
			if (img && data.Responses)
			{
				var imgurl = data.Responses[0].Gallery.GalleryPromo.Image.Small || SiteLifeV2Config.WidgetServer+"/images/DefaultAlbum.gif";
				img.innerHTML = '<img src="'+imgurl+'"/>';
			}
		});
	}
	this.CoverPhotos = new function() {
		var request_size = 20;
		var i = 0;
		var self = this;
		this.Init = function() {
			AddLoadEvent(function() { self.Execute() });
		}
		this.Add = function(albumid) {
			document.write('<div id="slCoverPhoto'+i+'" class="slCoverPhoto"><div>'+albumid+'</div></div>');
			i++;
		}
		var GetRequests = function() {
			var rb = new Array();
			var i = 0;
			while (true)
			{
				var element = document.getElementById("slCoverPhoto"+i);
				if (element)
				{
					var albumid = element.childNodes[0].innerHTML;
					var currentpage = Math.ceil((i+1)/20)-1;	
					if (!rb[currentpage])
						rb[currentpage] = new RequestBatch()
					rb[currentpage].AddToRequest(new GalleryKey(albumid));
				}
				else
					break;
				i++;
			}
			return rb;
		}
		this.Execute = function() {
			var rb = GetRequests();
			var count=0;
			for (var x=0;x<rb.length;x++)
			{
				rb[x].BeginRequest(serverUrl,function(data) {
					var galleries = data.Responses;
					for(var i=0;i<galleries.length;i++)
					{
						WriteImage(count,galleries[i].Gallery);	
						count++;
					}
				});
			}
		}
		var GetImage = function(gallery)
		{
			return gallery.GalleryPromo.Image.Small || SiteLifeV2Config.WidgetServer+"/images/DefaultAlbum.gif";
		}

		var WriteImage = function(index,gallery) {
			var div = document.getElementById("slCoverPhoto"+index);
			div.innerHTML = '<img src="'+GetImage(gallery)+'"/>';
		}
	}
	this.LatestPhotos = new function() {
	    var request_size = 20;
	    var i = 0;
	    var self = this;
	    this.Init = function() {
	        AddLoadEvent(this.Execute);
	    }
	    this.Add = function(photoid) {
	        document.write('<div id="slLatestPhoto' + i + '" class="slLatestPhoto"><div>' + photoid + '</div></div>');
	        i++;
	    }
	    var GetRequests = function() {
	        var rb = new Array();
	        var i = 0;
	        while (true) {
	            var element = document.getElementById("slLatestPhoto" + i);
	            if (element) {
	                var photoid = element.childNodes[0].innerHTML;
	                var currentpage = Math.ceil((i + 1) / 20) - 1;
	                if (!rb[currentpage])
	                    rb[currentpage] = new RequestBatch()
	                rb[currentpage].AddToRequest(new PhotoKey(photoid));
	            }
	            else
	                break;
	            i++;
	        }
	        return rb;
	    }
	    this.Execute = function() {
	        var rb = GetRequests()
	        var count = 0;
	        for (var x = 0; x < rb.length; x++) {
	            rb[x].BeginRequest(serverUrl, function(data) {
	                var photos = data.Responses;
	                var photoindex = 0;
    	            var element;
    	            var hasPhoto;
	                while(photoindex < photos.length) {
	                    element = document.getElementById("slLatestPhoto" + count);
	                    if(element) {
	                        hasPhoto = (photos[photoindex].Photo.PhotoKey.Key.toLowerCase() == element.childNodes[0].innerHTML.toLowerCase());
	                        WriteImage(count, hasPhoto ? photos[photoindex].Photo : null);
	                        if(hasPhoto)
	                            photoindex++;
	                        count++;
    	                }
    	                else
    	                    break;
	                }
	            });
	        }
	    }
	    var GetImage = function(photo) {
	        if(photo && photo.Image.Small) return photo.Image.Small;
	        else return SiteLifeV2Config.WidgetServer + "/images/DefaultAlbum.gif";
	    }

	    var WriteImage = function(index, photo) {
	        var div = document.getElementById("slLatestPhoto" + index);
	        div.innerHTML = '<img src="' + GetImage(photo) + '"/>';
	    }
	}
	this.Avatars = new function() {
		var request_size = 20;
		var i = 0;
		var self = this;
		this.Init = function() {
			AddLoadEvent(this.Execute);
		}
		this.Add = function(userid) {
			document.write('<div id="slAvatar'+i+'" class="slAvatar"><div>'+userid+'</div></div>');
			i++;
		}
		var GetRequests = function() {
			var rb = new Array();
			var i = 0;
			while (true)
			{
				var element = document.getElementById("slAvatar"+i);
				if (element)
				{
					var userid = element.childNodes[0].innerHTML;
					var currentpage = Math.ceil((i+1)/20)-1;	
					if (!rb[currentpage])
						rb[currentpage] = new RequestBatch()
					rb[currentpage].AddToRequest(new UserKey(userid));
				}
				else
					break;
				i++;
			}
			return rb;
		}
		this.Execute = function() {
			var rb = GetRequests()
			var count=0;
			for (var x=0;x<rb.length;x++)
			{
				rb[x].BeginRequest(serverUrl,function(data) {
					var users = data.Responses;
					for(var i=0;i<users.length;i++)
					{
						WriteImage(count,users[i].User);	
						count++;
					}
				});
			}
		}
		var GetImage = function(user)
		{
			return user.AvatarPhotoUrl;
		}

		var WriteImage = function(index,user) {
			var div = document.getElementById("slAvatar"+index);
			div.innerHTML = '<img src="'+GetImage(user)+'"/>';
		}

	}
	this.RecentPhotos = function(albumid) {
		new SiteLifeV2.PublicPhotos.Modules.RecentPhotos().Execute({AlbumId:albumid,NumPerPage:3,CanPaginate:false});
	}
	this.PhotoUpsell = function(module) {
		var util = document.getElementById("slPublicAlbumUtils");
		var util_viewall = util.getElementsByTagName("a")[1];
		util_viewall.style.display = "none";
		var stream = document.getElementById("slPublicPhotoAlbumStream");
		var lis = stream.getElementsByTagName("li");
		if (module.Options.Page == "1")
			var start = 4;
		else
			var start = 1;
		for(var i=start;i<lis.length-1;i++)
		{
			var href = lis[i].getElementsByTagName("a")[0];
			href.onclick = function() { 
				var photo = document.getElementById("slPublicPhoto");
				var upsell = document.getElementById("PhotoUpsell");
				upsell.style.display = "block";
				photo.style.display = "none";
			};
		}
		for(var i=1;i<start;i++)
		{
			var href = lis[i].getElementsByTagName("a")[0];
			PhotoUpsellClick(href);	
		}
	}
	var PhotoUpsellClick = function(href)
	{
		var old_click = href.onclick;
		href.onclick = function() {
			var photo = document.getElementById("slPublicPhoto");
			var upsell = document.getElementById("PhotoUpsell");
			upsell.style.display = "none";
			photo.style.display = "block";
			old_click();
		};
	}
}

var AddLoadEvent = function(func) {
	if(window.addEventListener){
		window.addEventListener("load", func, false);
		}else{
			if(window.attachEvent){
				window.attachEvent("onload", func);
			} else {
				if(document.getElementById){
					var oldonload = window.onload;
					if (typeof window.onload != 'function') {
						window.onload = func;
					} else {
						window.onload = function() {
							if (oldonload) {
								oldonload();
							   }
							func();
		}}}}}

}
