log('product_browser.js loaded');

gItemSize = 'normal';
gUri = window.location.pathname;

if ( typeof gListType == "undefined" ) {
	gListType = 'product';
}

function wakeProductBrowser () {//{{{
	con.group('wakeProductBrowser called from product browser');
	// Price slider.

	$(contentCtrl.gfx.column.itemSelector).hide();

	if ($("body#product_browser").attr('id')!=undefined) {
		var pu = parseInt($('#price_upper').val());
		var pl = parseInt($('#price_lower').val());
		$('#slider').slider({
  	  "range": true,
  	  "min": pl,
  	  "max": pu,
  	  "values": [pl, pu],
			"step": 10,
  	  "slide": function(event, ui) {
  	    $("#amount").html(ui.values[0] + 'kr - ' + ui.values[1] + 'kr');
				$("#amount").attr({"priceLower" : ui.values[0]});
				$("#amount").attr({"priceUpper" : ui.values[1]});
  	  },
			"change": refinement.priceSlide
  	});
  	$("#amount").html($("#slider").slider("values", 0) + 'kr - ' + $("#slider").slider("values", 1) + 'kr');
	}

	$(window).scrollTop(0);

	contentCtrl.gfx.addToTopStuff();
	sizeman.addCallbacks();
	search.addCallbacks();

	refinement.clickify();
	adminbox.clickify();
	contentCtrl.addCallbacks();

	con.groupEnd();
}; // }}}
function navigationEvent(event) {//{{{
	hashMan.currentHash = '#' + event.value;
	log(hashMan.currentHash);
	hashMan.parse();
}//}}}

var hashMan = { // Manage url hash 
	currentHash : undefined,
	get : function() { // Get current hash value//{{{
		return window.location.hash;
	},//}}}
	parse : function() { // Parse the current hash into refinements//{{{
		log('parseUrlHash called');
		hash = hashMan.currentHash;
		if ( hash.substr(0,2) == "#/" ) {
			var start = 2;
		} else {
			var start = 1;
		}
		hash = hash.slice(start,hash.length-1);
		hash = hash.split(':');

		refinement.selected_refinements.category = refinement.hard_refinements.category.concat([]);
		refinement.selected_refinements.brand    = refinement.hard_refinements.brand.concat([]);
		refinement.selected_refinements.color    = refinement.hard_refinements.color.concat([]);

		var type = "";
		for (var i=0; i<hash.length; i++) {
			if ( hash[i] == "" ) continue;
			if (parseInt(hash[i]) != hash[i]) {
				type = hash[i];
			}
			else {
				// get length.
				//for (var j=i; j < hash.length && parseInt(hash[j]) == hash[j]; j++) {}
				// this isn't exactly necessary...

				if (type == 'brand') {
					refinement.selected_refinements.brand.push(parseInt(hash[i]));
				}	else if (type == 'style') {
					refinement.selected_refinements.style.push(parseInt(hash[i]));
				}
				else if (type == 'category') {
					refinement.selected_refinements.category.push(parseInt(hash[i]));
				} else if (type == 'color') {
					refinement.selected_refinements.color.push(parseInt(hash[i]));
				}
				else if (type == 'gender') {
					refinement.selected_refinements.gender.push(parseInt(hash[i]));
				}

				//i = j-1;
			}
		}
		refinement.syncRefinementColumn();
		contentCtrl.update.auto();
	},//}}}
	remove : function(value, type) {//{{{
		var hash = hashMan.get();
		var index = hash.search(value);
		if (index == -1) return;
		// Just remove it.
		var parts = hash.split(value);
		parts[0] = parts[0].slice(0,parts[0].length-1);
		hash = parts[0]+parts[1];
		hash.replace('::', ':');
		hash = hash.slice(0,hash.length-1);

		// Remove empty refinements from url.
		parts = hash.split(':');
		var type = "";
		var cnt = 0;
		var last = 0;
		for (var i=0; i<parts.length; i++) {
			if (parseInt(parts[i]) != parts[i]) { // This is not numeric.
        type = parts[i];
				if (i>0 && cnt == 0) {
					parts.splice(last, 1);
					cnt == 0;
				}
				if (i == parts.length-1) {
					parts.splice(i,1);
				}
			} else
				cnt++;
		}
		hash = parts.join(':');
		if (hash != '')
			window.location.hash = hash+':';
		else
			window.location.hash = "";
	},//}}}
	update : function(value, type) { // Add argument to selected refinements//{{{
		hash = hashMan.get();
		index = hash.search(type);
		if ( hash.substr(0,1) == "/" )
			hash = hash.substr(1);
		if (index == -1) {
			if (hash == '') hash = type + ':' + value;
			else hash = hash+type+ ':' +value;
		} else {
			// Find the occurence.
			var parts = hash.split(type);
			hash = parts[0]+type+':'+value+parts[1];
		}
		if (hash[hash.length-1] != ':') hash+=':';

		//$.address.value("");
		//$.address.value(url);
		//$.history.load('#' + hash);
		//$.address.value("/#" + url);
		window.location.hash = hash;
		return false;
	}//}}}
};

var contentCtrl = { // Manage content 
	items : {
		perChunk    : 20,
		startWith   : 0,
		loadedItems : 0
	},
	constructPost : function () {//{{{
		var postData = {
			'action'    : 'next',
			'num'       : '' + contentCtrl.items.perChunk,
			'first'     : '' + (contentCtrl.items.startWith +
													contentCtrl.items.loadedItems),
			'item_size' : '' + gItemSize,
		};

		if ( refinement.starredOnly == true ) {
			postData.starred = "true";
		}
		else {
			postData.want_refinements = "1";
		}
		jQuery.extend(postData, refinement.getAsObject());
		return postData;
	},//}}}
	appendRow : {//{{{
		isLocked : false,
		getLock : function () {//{{{
			debug("appendRow.isLocked: " + ((contentCtrl.appendRow.isLocked)?"true":"false"));
			return contentCtrl.appendRow.isLocked;
		},//}}}
		lock : function () {//{{{
			$("#waiter").show();
			contentCtrl.appendRow.isLocked = true;
			debug('locking appendrow');
		},//}}}
		unlock : function () {//{{{
			$("#waiter").hide();
			contentCtrl.appendRow.isLocked = false;
			debug('unlocking appendrow');
		},//}}}
		auto: function () { // {{{
			if ( contentCtrl.appendRow.getLock() == true ) {
				log("appendrow denied -- Already appending a row!", 0);
				return;
			} else {
				log("appendrow OK -- locking appendrow", 0);
				contentCtrl.appendRow.lock();
			}
			switch (gListType) {
				case "outfit":
					log('decided to append outfit list');
					contentCtrl.appendRow.outfit();
					break;
				case "brand":
					log('decided to append brand list');
					contentCtrl.appendRow.brand();
					break;
				case "user":
					log('decided to append user list');
					contentCtrl.appendRow.user();
					break;
				case "product":
					log('decided to append product list');
					contentCtrl.appendRow.product();
					break;
			}
		}, // }}}
		product : function () { // {{{
			log('contentCtrl.appendRow.product called', 0);

			var postData = {
				action:"next",
				num:   contentCtrl.items.perChunk,
				first: contentCtrl.items.startWith + contentCtrl.items.loadedItems,
				item_size: gItemSize,
				want_refinements: true
			}

			jQuery.extend(postData, refinement.getAsObject());
			var url = '/ajax/getItemList.php';
			$.ajax({
				type: "POST",
				url:  url,
				data: postData,
				success: function(html) {
					var json = eval('(' + html + ')');
					if ( json.html == "" ) {
						return;
					}

					contentCtrl.items.loadedItems += contentCtrl.items.perChunk;
					$('#products').append(json.html);
					//
					//love.clickify();
					contentCtrl.appendRow.unlock();
				}
			});
			//con.group('contentCtrl.appendRow.product');
			
			//log(contentCtrl.items.startWith, 0);
			//log(contentCtrl.items.loadedItems, 0);
			//var data_string = 'num=' + contentCtrl.items.perChunk + 
				//'&first=' + (contentCtrl.items.startWith + contentCtrl.items.loadedItems+1) + 
				//'&item_size='+gItemSize;
			//data_string += refinement.getAsDataString();
			//if ( refinement.starredOnly == true ) {
				//data_string += "&starred=true";
			//}
			//log('gStarred' + refinement.starredOnly);
			//contentCtrl.items.loadedItems += contentCtrl.items.perChunk;

			//con.groupEnd();

			//$.ajax({
				//type: "POST",
				//url:  "/getItemList"+gUri,
				//data: data_string,
				//success: function(html) {
					//var json;
					//eval('json = ' + html);
					//if ( json.html == "" ) {
						//return;
					//}
					//$('div#products').append(json.html);

					//love.clickify();
					//adminbox.clickify();
					////search.addCallbacks();
					//sizeman.windowScroll();
					//contentCtrl.appendRow.unlock();
				//}
			//});
			//con.groupEnd();
		}, // }}}
		outfit : function () { // {{{
			var data_string = 'num=' + contentCtrl.items.perChunk + 
				'&first=' + (contentCtrl.items.startWith+1) + 
				'&item_size='+gItemSize;
			if ( refinement.starredOnly == true ) {
				data_string += "&starred=true";
			}
			data_string+="&gender=" + refinement.gender;
			log('gStarred' + refinement.starredOnly);

			contentCtrl.items.startWith += contentCtrl.items.perChunk;

			con.groupEnd();
			$.ajax({
				type: "POST",
				url:  "/ajax/getOutfitList.php",
				data: data_string,
				success: function(html) {
					var json;
					eval('json = ' + html);
					if ( json.html == "" ) return;

					$('div#products').append(json.html);

					love.clickify();
					adminbox.clickify();
					search.addCallbacks();
					sizeman.windowScroll();
					log('unlocking appendrow', 0);
					contentCtrl.appendRow.unlock();
				}
			});
		}, // }}}
		user : function () { // {{{
		}, // }}}
		brand : function () { // {{{
			log('contentCtrl.appendRow.brand called', 0);

			var postData = {
				action:"next",
				num:   contentCtrl.items.perChunk,
				first: contentCtrl.items.startWith + contentCtrl.items.loadedItems,
				item_size: gItemSize,
				starred: ( refinement.starredOnly ? "true" : "false" )
			}

			var url = '/getBrandList'
			$.ajax({
				type: "POST",
				url:  url,
				data: postData,
				success: function(html) {
					var json = eval('(' + html + ')');
					if ( json.html == "" ) {
						return;
					}

					contentCtrl.items.loadedItems += contentCtrl.items.perChunk;
					$('#products').append(json.html);
					//
					//love.clickify();
					contentCtrl.appendRow.unlock();
				}
			});
		} // }}}
	},//}}}
	update : {//{{{
		auto : function () {//{{{
			if ( contentCtrl.appendRow.getLock() == true ) {
				log("update denied -- Already appending a row!");
				return;
			} else {
				log("update OK -- locking appendrow");
				contentCtrl.appendRow.lock();
			}
			switch (gListType) {
				case "outfit":
					contentCtrl.update.outfit();
					break;
				case "brand":
					contentCtrl.update.brand();
					break;
				case "user":
					contentCtrl.update.user();
					break;
				case "product":
					contentCtrl.update.product();
					break;
			}
		},//}}}
		product : function () {//{{{
			log('contentCtrl.update.product called', 0);

			log(contentCtrl.items.startWith, 0);
			log(contentCtrl.items.loadedItems, 0);

			contentCtrl.items.loadedItems = 0;
			//contentCtrl.items.startWith = 0;

			//{{{
			//log('refinement.starredOnly=' + refinement.starredOnly);
			//// TODO: merge postData with data_string and remove abundance

			//var data_string = 'action=next&num='+contentCtrl.items.perChunk;
			//data_string += '&first='+contentCtrl.items.startWith+'&item_size='+gItemSize;
			//if ( refinement.starredOnly == true ) {
				//data_string += "&starred=true";
			//}
			//else {
				//data_string += '&want_refinements=1';
			//}
			//log('refinement.starredOnly=' + refinement.starredOnly);

			//data_string+=refinement.getAsDataString();

			//log('contentCtrl.update.product: Performing query with data_string: ' + data_string);
			// }}}

			var postData = contentCtrl.constructPost();
			debug('mark1');
			con.dir(postData);

			var url = '/ajax/getItemList.php';
			$.ajax({
				type: "POST",
				url:  url,
				data: postData,
				success: function(html) {
					var json = eval('(' + html + ')');
					$('#products').html(json.html);
					$('div.product.module').each(function() {
						contentCtrl.items.loadedItems++;
					});
					debug("asdf!!!!" + contentCtrl.items.loadedItems);
					//updateAllImages();

					//if ( json.brands != undefined && json.categories != undefined ) 
					refinement.updateListing(json);
					love.clickify();
					adminbox.clickify();
					search.addCallbacks();
					contentCtrl.appendRow.unlock();
				}
			});
		},//}}}
		outfit : function () { // {{{
		}, // }}}
		user : function () { // {{{
		}, // }}}
		brand : function () {//{{{
			log('contentCtrl.update.brand called', 0);

			log(contentCtrl.items.startWith, 0);
			log(contentCtrl.items.loadedItems, 0);

			var postData = {
				action:"next",
				num: contentCtrl.items.perChunk,
				first: contentCtrl.items.startWith,
				item_size: gItemSize,
				starred: ( refinement.starredOnly ? "true" : "false" )
			}

			var url = '/getBrandList'
			$.ajax({
				type: "POST",
				url:  url,
				data: postData,
				success: function(html) {
					var json = eval('(' + html + ')');
					$('#products').html(json.html);
					$('div.product.module').each(function() {
						contentCtrl.items.loadedItems++;
					});
					//updateAllImages();
					log("Recieved JSON: ", 0);

					//love.clickify();
					contentCtrl.appendRow.unlock();
				}
			});
		}//}}}
	},//}}}
	gfx : {//{{{
		column : {//{{{
			type : "enlarge",
			itemSelector : "#product-filter ul.brands li:nth-child(1n+14), #product-filter ul.gender li:nth-child(1n+8), #product-filter ul.type li:nth-child(1n+14), #product-filter ul.colors li:nth-child(1n+14)",
			toggle : function () { //{{{
				if (contentCtrl.gfx.column.type == "enlarge") {
					contentCtrl.gfx.column.type = "minimize";
					$("#product-filter").animate({"height":300}, "slow");

					$(contentCtrl.gfx.column.itemSelector).show();

					$(this).html('Minimize');
				} else if (contentCtrl.gfx.column.type == "minimize") {
					contentCtrl.gfx.column.type = "enlarge"

					$("#product-filter").animate({"height":120}, "slow", function(){$(contentCtrl.gfx.column.itemSelector).hide()});
					$(this).html('Enlarge');
				}
			} //}}}
		}, //}}}
		showHardText : function() {$("#hardText").show();},
		hideHardText : function() {$("#hardText").hide();},
		addToTopStuff : function() { // {{{
			var wHeight = ($(window).height()/2);

			$('body').append('<img src="/_gfx/to-top-arrow2.png" alt="Back to top" title="Back to top" class="to-top"/>');
			$('.to-top').hide();
			$(window).scroll(function(){
				if($(window).scrollTop() > wHeight) {
					$('.to-top').fadeIn(320);
				} else {
					$('.to-top').fadeOut(320);
				}

			});

			$('.to-top').click(function(){
				$('html,body').animate({scrollTop: 0}, 1000);
			});	
		} // }}}
	},//}}}
	addCallbacks : function () {//{{{
		$("#liked-btn").click                 (refinement.toggleWishList);

		$("#enlarge-refinement-column").click (contentCtrl.gfx.column.toggle);
		$("#hardTextToggler").mouseover       (contentCtrl.gfx.showHardText);
		$("#hardTextToggler").mouseout        (contentCtrl.gfx.hideHardText);
		$("#hardTextToggler").focus           (contentCtrl.gfx.showHardText);
		$("#hardTextToggler").blur            (contentCtrl.gfx.hideHardText);
	}//}}}
}

var refinement = { // This is an object for handling refinements 
	has_base_category : 0,
	url_hash    : "-1",
	starredOnly : false,
	pushHard : function (type, value) {//{{{
		switch ( type ) {
			case "brand":
				refinement.hard_refinements.brand.push(value);
				break;
			case "style":
				break;
			case "category":
				refinement.hard_refinements.category.push(value);
				break;
			case "color":
				refinement.hard_refinements.color.push(value);
				break;
			case "price":
				break;
		}
	},//}}}
	hard_refinements : {//{{{
		brand: new Array(),
		style: new Array(),
		category: new Array(),
		color: new Array(),
		price: new Array(),
		gender: 0
	},//}}}
	selected_refinements : { // {{{
		brand: new Array(),
		style: new Array(),
		category: new Array(),
		color: new Array(),
		price: new Array(),
		gender: 0
	}, // }}}
	click : function () {//{{{
		con.group("Refinement clicked");
		if ( $(this).attr("class") == "refinement" )
		{ // Push refinement {{{
			$(this).addClass('active');
			if ( $(this).parent().parent().attr("class") == "brands" ) {
				refinement.pushRefinement($(this).attr("value"), "brand");
			}
			else if ( $(this).parent().parent().attr("class") == "colors" ) {
				refinement.pushRefinement($(this).attr("value"), "color");
			}
			else if ( $(this).parent().parent().attr("class") == "type" ) {
				refinement.pushRefinement($(this).attr("value"), "category");
			}
			else if ( $(this).parent().parent().attr("class") == "gender" ) {
				return true;
			}
		} // }}}
		else
		{ // Pop refinement {{{
			$(this).removeClass('active');
			log($(this).attr("class"));
			if ( $(this).parent().parent().attr("class") == "brands" ) {
				refinement.popRefinement($(this).attr("value"), "brand");
			}
			else if ( $(this).parent().parent().attr("class") == "colors" ) {
				log('color poppen');
				refinement.popRefinement($(this).attr("value"), "color");
			}
			else if ( $(this).parent().parent().attr("class") == "type" ) {
				refinement.popRefinement($(this).attr("value"), "category");
			}
			else if ( $(this).parent().parent().attr("class") == "gender" ) {
				return true;
			}
		} // }}}

		//contentCtrl.update.auto();
		con.groupEnd();

		return false;
	},//}}}
	clickify : function () { // {{{
		log ("Refinements clickified");
		// Make all refinement <a>:s functional
		$("a.refinement").click(refinement.click);
	}, // }}}
	pushRefinement : function (value, type) { // {{{
		value = "" + value;
		var didpush = 0;
		if ( type == "brand") {
			if ( myindexOf(refinement.selected_refinements.brand, value) == -1 ) {
				refinement.selected_refinements.brand.push(parseInt(value));
				didpush = 1;
			}
		}
		else if ( type == "color" ) {
			if ( myindexOf(refinement.selected_refinements.color, value) == -1 ) {
				refinement.selected_refinements.color.push(parseInt(value));
				didpush = 1;
			}
		}
		else if ( type == "category" ) {
			if ( myindexOf(refinement.selected_refinements.category, value) == -1 ) {
				refinement.selected_refinements.category.push(parseInt(value));
				didpush = 1;
			}
		}
		else if ( type == "gender" ) {
			log ( refinement.selected_refinements.gender );
			refinement.selected_refinements.gender = parseInt(value);
			didpush = 1;
		}

		if ( didpush ) {
			log ( "Pushed refinement " + value + " of type " + type );
			hashMan.update(value, type);
		} else {
			log ( "Attempted to push refinement " + value + " of type " + type + ", but neglected");
		}
		log('This is what selected_refinements look like: ');
		log(refinement.selected_refinements);
	}, // }}}
	popRefinement : function (value, type) { // {{{
		hashMan.remove(value, type);
		log ( "Popped refinement " + value + " of type " + type );
		if ( type == "brand" ) {
			this.selected_refinements.brand.splice(this.selected_refinements.brand.indexOf(value), 1);
		} else if ( type == "category" ) {
			var ival = this.selected_refinements.category.indexOf(value);
			this.selected_refinements.category.splice(ival, 1);
		} else if ( type == "color" ) {
			var ival = this.selected_refinements.color.indexOf(value);
			this.selected_refinements.color.splice(ival, 1);
		}
	}, // }}}
	updateListing : function (json) { // {{{
		// Call me in order to replace the refinements <a>:s
		log("refinement.updateListing called");

		// Give me something like this:
		// json = [
		//	"12345432",
		//	"12348432",
		//	"18543231"
		// ]

		//$("#product-filter ul.type li.even, #product-filter ul.type li.odd").remove();
		//$("#product-filter ul.brands li.even, #product-filter ul.brands li.odd").remove();
		var html;
		var id;
		var name;
		var availableRefinements = json.availableRefinements;

		$("#product-filter a").addClass("disabled"); // initialize all classes
		for (var i=0; i<availableRefinements.length; i++) {
			$("#product-filter a[value="+availableRefinements[i]+"]").removeClass("disabled");
		}

		//this.selected_refinements.brand = new Array();
		//this.selected_refinements.style = new Array();
		//this.selected_refinements.category = new Array();
		//this.selected_refinements.color = new Array();

		/*var catlen = json.categories.length;
		for ( i=0; i<catlen; i++ )
		{
			id = json.categories[i].id;
			name = json.categories[i].name;
			html = '<li class="'+((i%2)?'even':'odd') + '">';
			html+= '<a href="#'+json.categories[i].slug+'" class="refinement';
			if (json.categories[i].selected==1) {
				this.pushRefinement(id, "category");
				html+= " active";
			}
			html+= '"	value="'+id+'" rel="">'+name+'</a></li>';
			// TODO: Add the count of items. Needs to be fixed in getItemList.php
			$("#product-filter ul.type").append(html);
		}

		for ( i=0; i<json.brands.length; i++ )
		{
			id = json.brands[i].id;
			name = json.brands[i].name;
			html = '<li class="'+((i%2)?'even':'odd') + '">';
			html+= '<a href="#" class="refinement';
			if (json.brands[i].selected==1) {
				this.pushRefinement(id, "brand");
				html+= " active";
			}
			html+= '" value="'+id+'" rel="">'+name+'</a></li>';
			// TODO: Add the count of items. Needs to be fixed in getItemList.php
			$("#product-filter ul.brands").append(html);
		}
		*/

		//this.clickify();
	}, // }}}
	syncRefinementColumn : function() { //{{{
		// Sync the classes of refinement <a>s to the currently selected refinements.

		active = 
			refinement.selected_refinements.category.concat(
				refinement.selected_refinements.brand.concat(
					refinement.selected_refinements.style.concat(
						refinement.selected_refinements.color
					)
				)
			)

		var selRoot = "#product-filter a.refinement"
		var selector = active.join("],"+selRoot+"[value=");

		$(selRoot).removeClass('active');
		var jqSel = selRoot + "[value=" + selector + "]";
		log(jqSel);
		$(jqSel).addClass('active');

	}, //}}}
	get : function () { // {{{
		// Returns a JSON object containing information about the clicked <a>:s
		return this.selected_refinements;
	}, // }}}
	getAsDataString : function () { // {{{
		// Returns a HTTP-data-string according to clicked <a>:s
		var data_string = "";
		refinements = this.get();
		if ( refinements.brand.length ) {
			data_string += "&brands=" + refinements.brand.join(',');
		}
		if ( refinements.color.length ) {
			data_string += "&colors=" + refinements.color.join(',');
		}
		if ( refinements.category.length ) {
			data_string += "&categories=" + refinements.category.join(',');
		}
		if (refinements.price.length == 2) {
			data_string += "&priceLower=" + refinements.price[0];
			data_string += "&priceUpper=" + refinements.price[1];
		}
		data_string += '&gender='+refinements.gender;
		$("#product-filter ul li a").each(function() {
				data_string += "&allRefinements[]=" + $(this).attr("value");
				});
		
		return data_string;
	}, // }}}
	getAsObject : function () {//{{{
		refinements = this.get();
		obj = {};
		if ( refinements.brand.length ) {
			obj.brands = refinements.brand.join(',');
		}
		if ( refinements.color.length ) {
			obj.colors = refinements.color.join(',');
		}
		if ( refinements.category.length ) {
			obj.categories = refinements.category.join(',');
		}
		if (refinements.price.length == 2) {
			obj.priceLower = refinements.price[0];
			obj.priceUpper = refinements.price[1];
		}
		obj.gender = refinements.gender;
		obj.allRefinements = [];
		$("#product-filter ul li a").each(function() {
			obj.allRefinements.push($(this).attr("value"));
		});
		
		return obj;
	},//}}}

	toggleWishList : function () {//{{{
		log('togglewishlist called');
		refinement.starredOnly = true;
		$('#active-filter h3').html('Showing wishlist');
		contentCtrl.update.auto();
	},//}}}
	priceSlide : function (event, ui) {//{{{
		refinement.selected_refinements.price = new Array(2);
		refinement.selected_refinements.price[0] = $("#amount").attr("priceLower");
		refinement.selected_refinements.price[1] = $("#amount").attr("priceUpper");
		contentCtrl.update.product();
	},//}}}
	gender : "female"
}
var adminbox = { // Stuff for the admin box
	clickify : function () { // {{{
		$(".item_admin_link").click(adminbox.togglebox);
		$(".item_admin_save").click(adminbox.savebox);
		$(".item_admin_remove").click(adminbox.remove);

		$(".tag_remove").click( adminbox.tag_remove );
		$(".tag_add").click( adminbox.tag_add );
		adminbox.set_add_del();
	}, // }}}
	remove : function () { // {{{
		var data_string = "item=" + $(this).parent().parent().attr("id");
		data_string += '&remove=1';
		$.ajax({
      type: "POST",
      url: "/setItemData/",
      data: data_string,
      success: function(html) {
      }
    });
		$(this).parent().fadeOut();
		$(this).parent().parent().find(".item_admin_link").css({"background-color":"#FFFF00"});
	}, //}}}
	savebox : function () {//{{{
		// This item is clicked in order to save changes made to an adminbox
		var data_string = "item=" + $(this).parent().parent().attr("id");
		$(this).parent().find(".item_admin_tags").find(".search_area").each( function () {
			data_string += "&tags[]=" + encodeURIComponent($(this).find("input").val());
		});

		data_string += "&description=" + 
			encodeURIComponent($(this).parent().find(".item_admin_desc").find("textarea").val());

		data_string += "&name=" + 
			encodeURIComponent($(this).parent().find(".item_admin_name").find("input").val());

		data_string += "&price=" + 
			encodeURIComponent($(this).parent().find(".item_admin_price").find("input").val());

		log(data_string);

		$.ajax({
			type: "POST",
			url: "/setItemData/",
			data: data_string,
			success: function(html) {
			}
		});

		$(this).parent().fadeOut();
		$(this).parent().parent().find(".item_admin_link").css({"background-color":"#FFFF00"});
	},//}}}
	togglebox : function () { // {{{
		log("Togglebox called");
		if ($(this).parent().find(".item_admin_box").is(':hidden')) {
			$(this).parent().find(".item_admin_box").fadeIn(200);
		}
		else{
			$(this).parent().find(".item_admin_box").fadeOut(200);
		}
	}, // }}}
	tag_add : function () {//{{{
		$(this).parent().clone(true).insertAfter($(this).parent());
		adminbox.set_add_del();
	},//}}}
	tag_remove : function () {//{{{
		$(this).parent().remove();
		adminbox.set_add_del();
	},//}}}
	set_add_del : function () { // {{{
		// Set show-hide-properties for adminbox innerhtml
		$('.tag_remove').show();
		$('.tag_add').hide();
		$('.item_admin_tags').find(".search_area:last").find(".tag_add").show();
		$('.item_admin_tags').find(".search_area:only-child").find(".tag_remove").hide();
	} // }}}
}
var sizeman = { // Item size and windowscroll 
	addCallbacks : function () {
		$('.grid-view a').click(sizeman.update);
		$(window).scroll(sizeman.windowScroll);
	},
	windowScroll : function () { // {{{
		var input = $(window).scrollTop() + $(window).height();
		var threshold = $("#container").height()-1000;
		//log("sizeman.windowScroll said " + input + ":" + threshold);

		if ( input > threshold ) {
			log('windowScroll wants to append a row');
			contentCtrl.appendRow.auto();
		}
	}, // }}}
	update : function () { // {{{
		log('sizeman.update, overridden, called');
		var className = $(this).attr('href').substr(1);
		gItemSize = className;
		if(className == 'large') { 
			className += ' clearfix'; 
		}
		className = $('#products .product').attr('class').replace(/(small|normal|large)/gi, className);

		$('.grid-view a').removeClass('active');
		$(this).addClass('active');
		
		$('#products .product').removeAttr("class").addClass(className);
		sizeman.windowScroll();
	} // }}}
}
