var ie6 = false;
if ($.browser.msie && $.browser.version < 7) {
	ie6 = true;
}
/*
* Get URL Parameter 
* gup("urlparameter")
*/
function gup(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];}}

/*
http://www.JSON.org/json2.js
2009-06-18
Public Domain.
NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
See http://www.JSON.org/js.html
This script creates a global JSON object containing two methods: stringify and parse.
*/

var JSON=JSON||{};(function(){function f(n){return n<10?'0'+n:n;}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return this.valueOf()?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}if(typeof rep==='function'){value=rep.call(holder,key,value);}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value});};}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}return reviver.call(holder,key,value);}cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}throw new SyntaxError('JSON.parse');};}}());

(function($) {
	// Color animations
	$.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(e,d){$.fx.step[d]=function(f){if(f.state==0){f.start=b(f.elem,d);f.end=a(f.end)}f.elem.style[d]="rgb("+[Math.max(Math.min(parseInt((f.pos*(f.end[0]-f.start[0]))+f.start[0]),255),0),Math.max(Math.min(parseInt((f.pos*(f.end[1]-f.start[1]))+f.start[1]),255),0),Math.max(Math.min(parseInt((f.pos*(f.end[2]-f.start[2]))+f.start[2]),255),0)].join(",")+")"}});function a(e){var d;if(e&&e.constructor==Array&&e.length==3){return e}if(d=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(e)){return[parseInt(d[1]),parseInt(d[2]),parseInt(d[3])]}if(d=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(e)){return[parseFloat(d[1])*2.55,parseFloat(d[2])*2.55,parseFloat(d[3])*2.55]}if(d=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(e)){return[parseInt(d[1],16),parseInt(d[2],16),parseInt(d[3],16)]}if(d=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(e)){return[parseInt(d[1]+d[1],16),parseInt(d[2]+d[2],16),parseInt(d[3]+d[3],16)]}return[0,0,0]}function b(f,d){var e;do{e=$.curCSS(f,d);if(e!=""&&e!="transparent"||$.nodeName(f,"body")){break}d="backgroundColor"}while(f=f.parentNode);return a(e)};

	$.extend($.easing, {
		outBack: function (x, t, b, c, d, s) {
			if (s == undefined) s = 1.70158;
			return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
		}
	});

	$.fn.reveal = function(settings) {
		settings = $.extend({ speed: "fast", travel: -40, element: "div.text-section" }, settings);

		return this.each(function() {
			var self = $(this), el = self.find(settings.element);
			$(this).bind("mouseenter.reveal mouseleave.reveal", function(e) {
				if ("mouseenter" === e.type) {
					el.animate({ marginTop: settings.travel }, { duration: settings.speed, easing: "outBack", queue: false });
					if (ie6) {
						$(self).find('a.handdrawn-border').show();
					}
				} else {
					el.animate({ marginTop: 0 }, { duration: settings.speed, queue: false });
					if (ie6) {
						$(self).find('a.handdrawn-border').hide();
					}
				}
			});
		});
	};

	$.fn.writeTags = function(settings) {
		settings = $.extend({ json: this.parents(".outfit").attr("data-json"), editMode: false, element: "" }, settings);
		
		return this.each(function() {
			var self = $(this), el = self.find(settings.element);
			self.css({ position: "relative" });
			var json = {};
			var tagInfo;
			var tag;
			var gotData = false; 
			var tagContainer;
			if (settings.editMode) {
				if ($("#tags").length > 0 && $("#tags").val().length > 0) {
					json = JSON.parse($("#tags").val());
					gotData = true;
					tagContainer = $("#tagInfo").find("ul");
				}
			} else {
				if (settings.json.length > 0) {
					json = JSON.parse(settings.json);
					gotData = true;
					tagContainer = self.parents(".item-body").find("div.tags ul");
				}
			}
			
			if (gotData) {
				var number = 1;
				if (!settings.editMode) { // remove old tags
					self.parents(".item-body").children(".tag").remove();
					tagContainer.find("li").remove();
				}
				for (var i in json.elements) {
					if (json.elements[i].contentId == self.attr("data-imageid")) {
						for (var j in json.elements[i].imagePoints) {
							if (settings.editMode) {
								if ("undefined" !== typeof json.elements[i].imagePoints[j].id) {
									json.elements[i].imagePoints[j].imagePointsHTMLId = json.elements[i].imagePoints[j].id;
								}

								tagInfo = $(
									"<li id='" + json.elements[i].imagePoints[j].imagePointsHTMLId + "-taginfo' class='delete'><strong><span class='number'>0"+ number +"</span><a data-tagid='" + json.elements[i].imagePoints[j].imagePointsHTMLId + "' data-imageid='" + json.elements[i].contentId + "' class='cross'></a></strong><div>"+
									"<div class='wrapper'><label>Item:</label><span>" + json.elements[i].imagePoints[j].imageTags[0].label + "</span></div>"+
									"<div class='wrapper'><label>Brand:</label><span>" + json.elements[i].imagePoints[j].imageTags[1].label + "</span></div>"+
									"<div class='wrapper'><label>Store:</label><span>" + json.elements[i].imagePoints[j].imageTags[2].label + "</span></div>"+
									"</div></li>"
								);
								
								tag = $("<div id='"+ json.elements[i].imagePoints[j].imagePointsHTMLId +"-tag' data-tagid='" + json.elements[i].imagePoints[j].imagePointsHTMLId + "' data-imageid='" + json.elements[i].contentId + "' class='tag done number-" + number + "'></div>")
								.css({
									"top": json.elements[i].imagePoints[j].yCoordinate + "px",
									"left": json.elements[i].imagePoints[j].xCoordinate + "px"
								});
								//if (gup("edit") === "true") { // only correct position if its a edit. otherwise its already corrected.
									tag.css({
										"margin-top": -10,
										"margin-left": -35
									});
								//}
							} else {
								tagInfo = $(
									"<li id='" + json.elements[i].imagePoints[j].id + "-taginfo' data-imageid='" + json.elements[i].contentId + "'><strong><span class='number'>0"+ number +"</span></strong><div>"+
									"<div class='wrapper'><label>Item:</label><span><a href='http://pic" + json.clusterId + ".piczo.com/go/explore/item/" + escape(json.elements[i].imagePoints[j].imageTags[0].label.toLowerCase()) + "'>" + json.elements[i].imagePoints[j].imageTags[0].label + "</a></span></div>"+
									"<div class='wrapper'><label>Brand:</label><span><a href='http://pic" + json.clusterId + ".piczo.com/go/explore/brand/" + escape(json.elements[i].imagePoints[j].imageTags[1].label.toLowerCase()) + "'>" + json.elements[i].imagePoints[j].imageTags[1].label + "</a></span></div>"+
									"<div class='wrapper'><label>Store:</label><span><a href='http://pic" + json.clusterId + ".piczo.com/go/explore/store/" + escape(json.elements[i].imagePoints[j].imageTags[2].label.toLowerCase()) + "'>" + json.elements[i].imagePoints[j].imageTags[2].label + "</a></span></div>"+
									"</div></li>"
								);

								tag = $("<div id='"+ json.elements[i].imagePoints[j].id +"-tag' data-tagid='" + json.elements[i].imagePoints[j].id + "' data-imageid='" + json.elements[i].contentId + "' class='tag done number-" + number + "'></div>")
								.css({
									"top": json.elements[i].imagePoints[j].yCoordinate + "px",
									"left": json.elements[i].imagePoints[j].xCoordinate + "px",
									"margin-top": -10,
									"margin-left": -35
								});
							}
							
							if (settings.editMode) {
								$("#main-image").append(tag);
								tagContainer.append(tagInfo);
							} else {
								// add new tags
								self.parents(".item-body").append(tag);
								tagContainer.append(tagInfo);
							}
							number++;
						}
					}
				}
			}
		});
	};

	$.fn.highlight = function(settings) {
		settings = $.extend({ highlightClass: "highlight", afterHighlightClass: "highlight-after", element: "" }, settings);

		return this.each(function() {
			var self = $(this), el = self.find(settings.element);
			self.bind("mouseenter.highlight mouseleave.highlight", function(e) {
				if ("mouseenter" === e.type) {
					self.addClass(settings.highlightClass)
						.next().addClass(settings.afterHighlightClass);
				} else {
					self.removeClass(settings.highlightClass)
						.next().removeClass(settings.afterHighlightClass);
				}
			});
		});
	};

	// Used for sign-up and blog creation
	$.fn.suggest = function(settings) {
		settings = $.extend({ url: "checkuserwebsitename", insertAfter: null, delay: 250 }, settings);

		return this.each(function() {
			var self = $(this);
			var timer = 0;
			// changing the width here since it doesn't fit into the join form
			var display = $("<div style='display:none;clear:both;width:60%;' class='form-error'>The chosen name is not available, but the following names are<ul></ul></div>").hide();
			var results = display.find("ul");
			var submit = self.closest("form").find("[type='submit']");
			if (null === settings.insertAfter) {
				display.insertAfter(self);
			} else {
				display.insertAfter(settings.insertAfter);
			}
			self.bind("keyup", function() {
				if (self.val().length > 3) { 
					clearTimeout(timer);
					timer = setTimeout(function getSuggestions() {
						$.get(settings.url, { name: self.val() },
							function(data) {
								var suggestions = data.split('\n').slice(1);
								if (suggestions.length > 1) { //change index and check-string to the right one
									var text = $.map(suggestions, function(t) {
										return (t && "<li><a class='username' href='#'>" + t + "</a></li>" || null);
									}).join('');
									results.html(text);
									display.find("a").click(function(e) {
										e.preventDefault();
										self.val(this.innerHTML);
									});
									display.slideDown("fast");
									// Doesn't make sense to disable the button here since you can't see that the button is disabled
									// with the current css
									//submit.attr("disabled", "disabled");
								} else {
									display.slideUp("fast");
									//submit.removeAttr("disabled");
								}
							}
						);
					}, settings.delay);
				}
			});
		});
	};	

	$.fn.inputMessage = function(settings) {
		settings = $.extend({ message: "Message unspecified", element: "" }, settings);

		return this.each(function() {
			var self = $(this), el = self.find(settings.element);
			var elementWidth = self.outerWidth() - 8; // 8 is for padding
			var elementHeight = self.outerHeight();
			var elementFloat = self.css("float");
			var elementFontSize = self.css("font-size");
			var elementMarginTop = self.css("margin-top");
			var elementMarginRight = self.css("margin-right");
			var elementMarginBottom = self.css("margin-bottom");
			var elementMarginLeft = self.css("margin-left");
			var errorMessageID = self.attr("id") + "-message";
			var replaced;
			var isPassword = false;
			var passwordClearElement;
			
			if($('#' + errorMessageID) != null) {
				replaced = $('#' + errorMessageID);
				replaced.remove();
			}
			
			if ($('#' + self.attr("id") + '-clear') != null) {
				isPassword = true;
				passwordClearElement = $('#' + self.attr("id") + '-clear');
			}
			
			var message = 
				'<span class="input-error" ' +
				'id="' + errorMessageID + '" ' +
				'style="display: inline-block;' +
				'width: ' + elementWidth + 'px;' +
				'height: ' + elementHeight + 'px;' +
				'margin-top: ' + elementMarginTop + ';' +
				'margin-right: ' + elementMarginRight + ';' +
				'margin-bottom: ' + elementMarginBottom + ';' +
				'margin-left: ' + elementMarginLeft + ';' +
				'font-size: ' + elementFontSize + ';' +
				'float: ' + elementFloat + ';"' +
				'>' + settings.message + 
				'<span class="right-border"></span></span>';
			
			self.after(message);
			self.hide();
			if (isPassword) {
				passwordClearElement.hide();
			}
			replaced = $('#' + errorMessageID);
			
			
			replaced.click(function () {
				replaced.hide();
				self.fadeIn().focus();
			});
			
			self.blur(function () {
				if (self.val().length < 1 ) {
					replaced.fadeIn();
					self.hide();
				}
			});
		});
	};

	/**
	 * Requesting href of links or action of form using AJAX
	 * @param object settings
	 * @param function callback
	 * @author jonas
	 */
	$.fn.remote = function(settings, callback) {
		if ($.isFunction(settings)) {
			callback = settings;
			settings = {};
		}
		settings = $.extend({
			speed: "slow", // For animations
			activeClass: "active",
			highlight: "#FF42E2",
			increment: null,
			formPost: null,
			rePostable: false,
			type: "GET",
			responseType: null
		}, settings);

		return this.each(function() {

			var self = $(this), url = "", data = {};
			var submitOn = "";
			
			if (self.is("form")) {
				submitOn = "submit.remote";
			} else {
				submitOn = "click.remote";
			}

			// add callback param for JSONP
			if ("jsonp" === settings.responseType) { data.callback = '?'; }

			self.bind(submitOn, function(e) {
				e.preventDefault();
				
				if (self.is("form")) {
					url = self.attr("action");
					data = self.serializeArray();
					
					self.find("button,input[type=button]").attr("disabled",true);
				} else {
					url = self.attr("href");
				}
				
				if (settings.formPost === true) {
					var responses = self.find(".responses");
					responses.html("");
				}

				$.ajax({
					url: url,
					data: data,
					type: settings.type,
					dataType: settings.responseType,
					success: function(data) {
						if (self.is("form")) {
							self.find("button,input[type=button]").attr("disabled",false);
						}
					
						// Increment number in element, for hype links etc
						if (null !== settings.increment) {
							var num = self.find(settings.increment);
							var count = 1 + Number(num.text());
							// var color = num.css("color");
							num.text(count);
							/*
								.css("color", settings.highlight)
								.animate({ color: color }, settings.speed);
								*/
						}
						
						if (settings.rePostable === false) {
							self.unbind("click.remote")
							.attr("href", "#")
							.addClass(settings.activeClass)
							.bind("click.remote", function(e) {
								e.preventDefault();
							});
						}
						
						// Form with error handling
						if (settings.formPost === true) {
							if (data.success === true) {
								// Replace button with success message "button"
								var button = self.find("button").not("button.success");
								var buttonSuccess = self.find("button").filter("button.success");
								button.hide().toggleClass("success");
								buttonSuccess.fadeIn("slow").toggleClass("success");
							} else {
								if ("undefined" !== typeof data.fieldError) {
									for (var i = 0; i < data.fieldError.length; i++) {
										$("#" + data.fieldError[i].id).inputMessage({ message: data.fieldError[i].error });
									}
								}
							}
							if ("undefined" !== typeof data.response) {
								for (var i in data.response) {
									responses.append("<li>" + data.response[i] + "</li>");
								}
							}
						}

						// Callback with element and response data as args
						($.isFunction(callback) && callback.call(self.get(0), data));
					},
					error: function(a, b, c) {
						/** console is bad, mkay */
					}
				});
			});
		});
	};

	$.fn.outfit = function(settings) {
		settings = $.extend({
			speed: "medium",
			update: ".large-img:first-child",
			links: ".thumbnails a",
			activeClass: "active"
		}, settings);

		var links = $(this).find(settings.links);
		var update = $(this).find(settings.update);
		var busy = false; // Prevent craziness

		update.height(update.height());

		var imageShow = function(img, cb) {
			img.fadeIn(settings.speed, function() {
				if (img.get(0).parentNode) {
					img.siblings("img").remove();
				}
				($.isFunction(cb) && cb(img));
				busy = false;
			});
		}

		var imageLoaded = function(img) {
			/* IE fix */
			if (! img.get(0).complete) {
				window.setTimeout(function() { imageLoaded(img); }, 100);
				return;
			}
			var imgHeight = img.height();
			var elHeight = update.height();
			if (imgHeight < elHeight) {
				update.animate({ height: imgHeight }, settings.speed, function() {
					imageShow(img);
				});
			} else if (elHeight < imgHeight) {
				imageShow(img, function() {
					update.animate({ height: imgHeight }, settings.speed);
				});
			} else {
				imageShow(img);
			}
		}

		var changePlaces = function(big, small) {
			
		}

		links.bind("click.outfit", function(e) {
			e.preventDefault();
			var self = $(this);
			if (false === busy && !self.hasClass(settings.activeClass)) {
				busy = true;
				links.removeClass(settings.activeClass);
				self.addClass(settings.activeClass);
				var img = $("<img/>").hide()
					.css({ position: "absolute", left: 0, top: 0 });
				// Must break here for IE
				img.bind("load.outfit", function() { imageLoaded(img); })
					.attr("src", self.attr("href"))
					.attr("data-imageid", self.find("img").attr("data-imageid"))
					.appendTo(update)
					.writeTags();
			}
		});

		return this;
	}

	$.extend($.fn, {
			clearingInput: function (options) {
				var defaults = {blurClass: 'blur'};

				options = $.extend(defaults, options);

				return this.each(function () {
					var input = $(this).addClass(options.blurClass);
					var form  = input.parents('form:first');
					var label, text;

					text = options.text || textFromLabel() || input.val();

					if (text && input.next().not(".input-error")) {
						input.val(text);
						
						var isPassword = input.is("[type=password]");
						var inputReadable;
						if (isPassword) {
							inputReadable = $("<input/>")
								.attr({ type: "text", value: text, "class": input.attr("class"), id: input.attr("id") /* Yes yes, but I had to! */ });
							input.val("").hide().after(inputReadable);
							
							input.blur(function () {
								if (input.val() === '') {
									inputReadable.show();
									input.hide();
								}
							});
							inputReadable.focus(function () {
								inputReadable.hide();
								input.show().focus();
							});
						} else {
							input.blur(function () {
								if (input.val() === '') {
									input.val(text).addClass(options.blurClass);
								}
							}).focus(function () {
								if (input.val() === text) {
									input.val('');
								}
								input.removeClass(options.blurClass);
							});
						}

						form.submit(function() {
							/*if (input.hasClass(options.blurClass)) {
								input.val('');
							}*/
						});

						input.blur();
					}

					function textFromLabel() {
						label = form.find('label[for=' + input.attr('id') + ']');
						// Position label off screen and use it for the input text
						return label ? label.css({position: 'absolute', left: '-9999px'}).text() : '';
					}
				});
			}
		}
	);

	$(".main-feature .feature").reveal({ travel: -56 });
	$(".second-feature .feature").reveal();
	$(".mosts li").reveal({ travel: -30 });

	$.event.add(window, "load", function() {
		$("#main-blog .outfit .item-body").each(function() { $(this).outfit(); });
	});

	// Remove onclick safety device
	$("#header .join a").removeAttr("onclick");
	// Special links
	$("a")
		// Hype links
		.filter(".hype").remote({ responseType: "jsonp", rePostable: true }, 
		function(data) {
			var el = $(this);
			// Show other hypers
			if (el.children().filter(".love-m").length > 0) {
				var num = el.prev("a");
				var count = 1 + Number(num.text());
				var color = num.css("color");
				num.text(count)
				/*
					.css("color", "#fff")
					.animate({ color: color });
					*/
				
				el
					.find(".love-m")
					.removeClass("love-m")
					.addClass("unlove-m");
				// Switch URLs
				var oldHref = el.attr("href");
				el.attr("href", el.attr("data-posturl"));
				el.attr("data-posturl", oldHref);

			} else if (el.children().filter(".unlove-m").length > 0) {
				el
					.find(".unlove-m")
					.removeClass("unlove-m")
					.addClass("love-m");

				var oldHref = el.attr("href");
				el.attr("href", el.attr("data-posturl"));
				el.attr("data-posturl", oldHref);
				
				var num = el.prev("a");
				var count = Number(num.text()) - 1;
				// var color = num.css("color");
				num.text(count);
				/*
					.css("color", "#fff")
					.animate({ color: color });
					*/
			}
		})
		.end()
		.filter(".hypers").bind("click", function(e) {
			e.preventDefault();
			// Show other hypers
			$(this.hash).slideToggle("fast");
		})
		.end()
		.filter(".follow").remote({ responseType: "jsonp", rePostable: true }, 
			function(data) {
				if (data.success) {
					var el = $(this);
					if (el.hasClass("add-l")) {
						el.removeClass("add-l").addClass("minus-l");
					} else if (el.hasClass("minus-l")) {
						el.removeClass("minus-l").addClass("add-l");
					} else if (el.hasClass("add-m")) {
						el.removeClass("add-m").addClass("minus-m");
					} else if (el.hasClass("minus-m")) {
						el.removeClass("minus-m").addClass("add-m");
					} else if (el.hasClass("add-s")) {
						el.removeClass("add-s").addClass("minus-s");
					} else if (el.hasClass("minus-s")) {
						el.removeClass("minus-s").addClass("add-s");
					}
					var oldHref = el.attr("href"), newHref = el.attr("rel");
					el.attr({ href: newHref, rel: oldHref }); // Switch them around
				}
			})
		.end()
		.filter(".del-site").remote(function() {
			// TODO
		})
		.end()
		.filter(".popup").colorbox({
			width: 330
		})
		.end()
		.filter(".blog-setting").click( function(e) {
			e.preventDefault();
			var foo = $(this).clone();
			$(this).replaceWith($("#changeBlogNameForm").show());
		})
		.end()
		.filter(".deletePost").each( function() {
			var self = $(this);
			self.colorbox({
				inline: true,
				href: this.hash,
				width: 330
			})
		});
	
	// Settings list
	var clicked = true;
	$("#feed li.expandable div.clickable").click(function (e) {
		e.preventDefault();
		var self = $(this).parent();
		if (clicked == true) {
			self
				.addClass("highlight")
				.next("#feed li").addClass("highlight-after")
				.end()
				.find(".slider")
				.slideDown("fast");
			clicked = false;
		} else {
			self
				.removeClass("highlight")
				.next("#feed li").removeClass("highlight-after")
				.end()
				.find(".slider")
				.slideUp("fast");
			clicked = true;
		}
	});
	
	// Highlighting feeds
	$("#feed li").not(".expandable").hover(function () {
		$(this)
			.addClass("highlight");
			//.next("#feed li").addClass("highlight-after");
	}, function() {
		$(this)
			.removeClass("highlight");
			//.next("#feed li").removeClass("highlight-after");
	});
	
	// Toplists: dynamic set height
	$(window).load(function(){
		var padd = 14;
		var hBlogs = $("ul#toplist-blog .text").height() + padd - 4;
		var hOutfits = $("ul#toplist-outfits .text").height() + padd - 4;
		var hSites = $("ul#toplist-sites .text").height() + padd - 4;
		var hWriters = $("ul#toplist-writers .text").height() + padd - 4;
		var hTrends = $("ul#toplist-trends .text").height() + padd - 4;
		
		$("ul#toplist-blog a.list-link-item").css("height", hBlogs);
		$("ul#toplist-outfits a.list-link-item").css("height", hOutfits);
		$("ul#toplist-sites a.list-link-item").css("height", hSites);
		$("ul#toplist-writers a.list-link-item").css("height", hWriters);
		$("ul#toplist-trends a.list-link-item").css("height", hTrends);
	});
		
	// Feed switcher
	$("#feed .controls a").click(function () {
		var self = $(this);
		var parent = self.parent();
		var feed = $("#feed li");
		
		parent.find(".active").removeClass("active");
		self.addClass("active");
		
		if (self.is(".all")) {
			feed.show();
		} else if (self.is(".hypes")) {
			feed.not(".hype").hide();
			feed.filter(".hype").css("display","block");
		} else if (self.is(".comments")) {
			feed.not(".comment").hide();
			feed.filter(".comment").css("display","block");
		} else if (self.is(".follows")) {
			feed.not(".follow").hide();
			feed.filter(".follow").css("display","block");
		}
		return false;
	});
	
	$('#updateUserSettings,#updateUserEmail,#updateUserPassword').remote({ responseType: "json", type: "POST", rePostable: true } , function(data) {
		var responses = $(this).find(".responses").empty();
		if (data.success == false) {
			for (var i in data.response) {
				$("<li/>").text(data.response[i]).appendTo(responses);
			}
		} else {
			var button = $(this).find("button:not(.success)");
			var buttonSuccess = $(this).find("button.success");
			button.hide().toggleClass("success");
			buttonSuccess.fadeIn("slow").toggleClass("success");
			// Toggle back to the original button after 2.5 seconds
			setTimeout( function() {
				buttonSuccess.hide().toggleClass("success");
				button.fadeIn("slow").toggleClass("success");
			}, 2000);
		}
	});
	
	$("#menu .expand").bind("mouseenter mouseleave", function(e) {
		var list = $(this).find("ul");
		var elements = $(this).find("a.button-border");
		
		if ("mouseenter" === e.type) {
			list.show();
			elements.show();
		} else {
			list.hide();
			elements.hide();
		}
	});
	
	// Login dropdown form
	$(".drop-link").click(function(e) {
		e.preventDefault();
		$(this).toggleClass("drop-link-open-bg");
		$(".login-form-new").toggle();
		$(".login-border-hide").toggle();
		$(".form-open").toggle();
		if (ie6) { $("#sidebar select").css({ "visibility": "hidden" }); }
	});

	$(".login-form-new").mouseup(function() {
		return false
	});

	$(document).mouseup(function(e) {
		if($(e.target).parent(".drop-link").length==0) {
			$("#login-drop .drop-link").removeClass("drop-link-open-bg");
			$("#login-drop .form-open, #login-drop .login-border-hide, #login-drop .login-form-new").hide();
			if (ie6) { $("#sidebar select").css({ "visibility": "visible" }); }
		}
	});
	
	if (gup("posted") === "true" && $("#sidebar .responses").length > 0 && $("#login-drop").length > 0) {
		var response = $("#sidebar .responses").html();
		$("#sidebar .responses").remove();
		$("#login-drop form").prepend("<p class='responses'>" + response + "</p><br />");
		$("#login-drop").toggleClass("drop-link-open-bg");
		$("#login-drop .login-form-new").toggle();
		$("#login-drop .login-border-hide").toggle();
		$("#login-drop .form-open").toggle();
		if (ie6) { $("#sidebar select").css({ "visibility": "hidden" }); }
	}
	
	$("#changeBlogNameForm").remote({}, function(data) {
		window.location.href = window.location.href;
	});
	
	/* IE6 Specific bug fix code */
	if (ie6) {
		$('a.handdrawn-border').hide();
	}

	$('input.inside-label').clearingInput();

	// Clear comment textareas
	$("#main-blog .item-comments textarea").each(function(i, l) {
		var el = $(l);
		el.data("initialValue", el.val())
			.bind("focus blur", function() {
				// Clear if it contains the placeholder text
				if (el.val() === el.data("initialValue")) { el.val(""); }
				// Restore placeholder text if empty
				else if (el.val() === "") { el.val(el.data("initialValue")); }
			});
	});

	$('#join-nickname').suggest({ url: "/go/checkuserwebsitename?cr=2" });
	var siteName = $("input#siteName"), blogName = $("#createBlog input[name='name']");
	siteName.suggest({ url: "/go/checkuserwebsitename", insertAfter: siteName.next() });
	blogName.suggest({ url: "/go/checkuserwebsitename", insertAfter: blogName.next() });
})(jQuery);
