jQuery.fn.mainObject = function() {
	var main_image = $($('#mainobject-mainimage').find('> img')[0]);	
	var thumbs_obj = $('#mainobject-thumbs');
	var thumbs_container = $('#mainobject-thumbs-container');
	var ypos = 0;
	var page_selected = 1;
	var page_height = 306;
	
	// collect images
	var i = 0;
	var p = 1;
	var limit = 3;
	var thumbs = Array();
	
	thumbs_container.find('>img').each(function() {
		$(this).data('index', i);
		$(this).data('page', p);
		if (((p*limit) / (i+1)) <= 1 ) p++; // next page		
		thumbs.push($(this));
		i++;
	});
	
	var selected = thumbs[0]; // image visible from start
	
	var thumbClickHandler = function(event) {
		selected = $(this);
		showImg();
	};
	var addThumbClickHandler = function() {
		$(this).css('cursor', 'pointer');
		$(this).click( thumbClickHandler );
	};
	var showImg = function() {		
        var src = String(selected.attr('src'));
		var img_name = src.substring(0,src.indexOf('&sizex'));
		var new_src = img_name + '&sizex=' + main_image.attr('width') + '&sizey=' + main_image.attr('height');
		
		// fade out old / fade in new
		if (new_src != main_image.attr('src')) {
			main_image.fadeOut('fast', function(){
				main_image.attr('src', new_src);
			});
		}
	};
	var fade_in_img = function() {
		main_image.fadeIn('fast');
	};
	var nextImage = function(event) {
		event.preventDefault();
		var ind = selected.data('index');
		ind++;
		if (ind <= (thumbs.length-1)) {
			selected = thumbs[ind];
			scrollToPage(selected.data('page'));
			showImg();
		}
	};
	var previousImage = function(event) {
		event.preventDefault();
		var ind = selected.data('index');
		ind--;
		if (ind >= 0) {
			selected = thumbs[ind];
			scrollToPage(selected.data('page'));
			showImg();
		}
	};
	var scrollDown = function(event) {
		event.preventDefault();
		scrollToPage(page_selected+1);
	}
	var scrollUp = function(event) {
		event.preventDefault();
		scrollToPage(page_selected-1);
	}
	var scrollToPage = function(page) {
		var new_pos = -((page * page_height) - page_height);

		if (new_pos != ypos && new_pos <= 0 && new_pos > - thumbs_container.height()) {
			page_selected = page;
			ypos = new_pos;
			thumbs_container.animate({
				top: new_pos + 'px'
			}, 700);
		}		
	};
	var showMainControls = function() {		
		var prev = $('#mainobject-mainimage-previous');
		var next = $('#mainobject-mainimage-next');
		
		prev.stop();
		next.stop();
		
		prev.animate({  // slide in
			bottom: '-2px'
		}, 400);
		next.animate({ // slide in
			bottom: '-2px'
		}, 400);		
	};
	var hideMainControls = function() {
		var prev = $('#mainobject-mainimage-previous');
		var next = $('#mainobject-mainimage-next');
		
		prev.stop();
		next.stop();
		
		prev.animate({  // slide in
			bottom: '-30px'
		}, 200);
		next.animate({ // slide in
			bottom: '-30px'
		}, 200);
	};
	var showThumbControls = function() {		
		var up = $('#mainobject-thumbs-previous');
		var down = $('#mainobject-thumbs-next');
		
		up.stop();
		down.stop();
		
		up.animate({  // slide in
			top: '-2px'
		}, 400);
		down.animate({ // slide in
			bottom: '0px'
		}, 400);
	};
	var hideThumbControls = function() {
		var up = $('#mainobject-thumbs-previous');
		var down = $('#mainobject-thumbs-next');

		up.stop();
		down.stop();

		up.animate({  // slide in
			top: '-30px'
		}, 200);
		down.animate({ // slide in
			bottom: '-30px'
		}, 200);
	};
	
	thumbs_container.find('> img').each( addThumbClickHandler );
	// add controls
	// add main image controls
	$('#mainobject-mainimage').bind("mouseout", hideMainControls).bind("mouseover", showMainControls);
	$('#mainobject-mainimage-previous').css('cursor', 'pointer').click(previousImage);
	$('#mainobject-mainimage-next').css('cursor', 'pointer').click(nextImage);
	// add thumbs controls
	$('#mainobject-thumbs').bind("mouseout", hideThumbControls).bind("mouseover", showThumbControls);
	$('#mainobject-thumbs-previous').css('cursor', 'pointer').click(scrollUp);
	$('#mainobject-thumbs-next').css('cursor', 'pointer').click(scrollDown);
	// default state
	$('#mainobject-thumbs-previous').css('top', '-30px');
	$('#mainobject-thumbs-next').css('bottom', '-30px');
	$('#mainobject-mainimage-previous').css('bottom', '-30px');
	$('#mainobject-mainimage-next').css('bottom', '-30px');
	
	main_image.load(fade_in_img);
};





jQuery.fn.listPager = function() {
	var object_table = $('#objectlist-table');
	var table_body = $($('#objectlist-table').find('tbody'));
	
	var limit = 10;
	var count = $('#objectlist-table').find('tbody').find('tr').length ;

	var pages = Array();
	var page = 1;
	var rows = Array();

	var showPage = function() {
		for (var i=0; i < pages[page].length; i++) {
			pages[page][i].show(); // show rows in page
		}
		$('#objectlist-controls-page').text('Sida: ' + page + '/' + (pages.length-1));
	};
	var hidePage = function() {
		for (var i=0; i < pages[page].length; i++) {
			pages[page][i].hide(); // hide rows in page
		}
	};
	var nextPage = function(event) {
		event.preventDefault();
		if (page+1 < pages.length) {
			hidePage(); // hide visible page
			page++;	// inc page
			showPage(); // show nextpage
		}
	};
	var previousPage = function(event) {
		event.preventDefault();
		if (page-1 > 0) {
			hidePage(); // hide visible page
			page--;	// dec page
			showPage(); // show nextpage
		}
	};
	var setDefault = function() {
		for (var i=1; i <= Math.round((count / limit) + 0.49); i++) {			
			pages[i] = Array();
		}
		
		table_body.empty(); // clear html
		for (var i=0; i < rows.length; i++) {
			table_body.append(rows[i]); // add row html
		}
	};
	var pos = 0;	
	var setRows = function() {
		object_table.find('tbody').find('tr').each( getRow );
	};
	var getRow = function() {
		$(this).data("pos", pos);
		rows.push( $(this) );
		pos++;
	};
	var addRowsToPages = function() {
		var p = 1;
		for (var i=0; i < rows.length; i++) {
			pages[p].push(rows[i]); // add row to page
			rows[i].hide(); // hide all rows from start
			if ( ((p*limit) / (i+1)) <= 1 ) p++; // next page
		}
	};
	var showIt = function() {
		setDefault();
		addRowsToPages();
		showPage();
	};
	// Sorting eventhandlers
	var sortByStl = function(event) {
		event.preventDefault();
		if ($(this).data('desc') == undefined) $(this).data('desc', 0);

		if ($(this).data('desc') == 0) {
			$(this).data('desc', 1);
			rows.sort(sortStlDesc);
		} 
		else {
			$(this).data('desc', 0);	
			rows.sort(sortStl);
		}
		
		showIt();			
	};
	var sortByAdress = function(event) {
		event.preventDefault();
		if ($(this).data('desc') == undefined) $(this).data('desc', 1);

		if ($(this).data('desc') == 0) {
			$(this).data('desc', 1);
			rows.sort(sortAdressDesc);
		} 
		else {
			$(this).data('desc', 0);	
			rows.sort(sortAdress);
		}
		
		showIt();			
	};
	var sortByAvgift = function(event) {
		event.preventDefault();
		if ($(this).data('desc') == undefined) $(this).data('desc', 1);

		if ($(this).data('desc') == 0) {
			$(this).data('desc', 1);
			rows.sort(sortAvgiftDesc);
		} 
		else {
			$(this).data('desc', 0);	
			rows.sort(sortAvgift);
		}
		
		showIt();			
	};
	var sortByPris = function(event) {
		event.preventDefault();
		if ($(this).data('desc') == undefined) $(this).data('desc', 1);

		if ($(this).data('desc') == 0) {
			$(this).data('desc', 1);
			rows.sort(sortPrisDesc);
		} 
		else {
			$(this).data('desc', 0);	
			rows.sort(sortPris);
		}
		
		showIt();			
	};
	// SORTING FUNCTIONS
	function sortStl(a,b) {
		var aa = parseFloat($(a.find('> td')[0]).text().replace(/,/g, '.'));
		var bb = parseFloat($(b.find('> td')[0]).text().replace(/,/g, '.')) ;
		return ((aa < bb) ? -1 : ((aa > bb) ? 1 : 0));
	};
	function sortStlDesc(a,b) {
		var aa = parseFloat($(a.find('> td')[0]).text().replace(/,/g, '.'));
		var bb = parseFloat($(b.find('> td')[0]).text().replace(/,/g, '.'));
		return ((bb < aa) ? -1 : ((bb > aa) ? 1 : 0));
	};
	function sortAdress(a,b) {
		var aa = $(a.find('> td')[1]).text();
		var bb = $(b.find('> td')[1]).text();
		return ((aa < bb) ? -1 : ((aa > bb) ? 1 : 0));
	};
	function sortAdressDesc(a,b) {
		var aa = $(a.find('> td')[1]).text();
		var bb = $(b.find('> td')[1]).text();
		return ((bb < aa) ? -1 : ((bb > aa) ? 1 : 0));
	};
	function sortAvgift(a,b) {
		var aa = parseInt($(a.find('> td')[2]).text().replace(/\D/g, ''));
		var bb = parseInt($(b.find('> td')[2]).text().replace(/\D/g, ''));
		return ((aa < bb) ? -1 : ((aa > bb) ? 1 : 0));
	};
	function sortAvgiftDesc(a,b) {
		var aa = parseInt($(a.find('> td')[2]).text().replace(/\D/g, ''));
		var bb = parseInt($(b.find('> td')[2]).text().replace(/\D/g, ''));
		return ((bb < aa) ? -1 : ((bb > aa) ? 1 : 0));	
	};
	function sortPris(a,b) {
		var aa = parseInt($(a.find('> td')[3]).text().replace(/\D/g, ''));
		var bb = parseInt($(b.find('> td')[3]).text().replace(/\D/g, ''));
		return ((aa < bb) ? -1 : ((aa > bb) ? 1 : 0));
	};
	function sortPrisDesc(a,b) {
		var aa = parseInt($(a.find('> td')[3]).text().replace(/\D/g, ''));
		var bb = parseInt($(b.find('> td')[3]).text().replace(/\D/g, ''));
		return ((bb < aa) ? -1 : ((bb > aa) ? 1 : 0));	
	};

	setRows(); // get rows
	rows.sort(sortStl); // sort
	showIt();	
	
	$('#objectlist-controls-next').click(nextPage);
	$('#objectlist-controls-previous').click(previousPage);
	$('#objectlist-stl').click(sortByStl);
	$('#objectlist-adr').click(sortByAdress);
	$('#objectlist-avg').click(sortByAvgift);
	$('#objectlist-pri').click(sortByPris);	
};

jQuery.fn.thumbPager = function() {	
	var thumbs_container = $('#object-thumbs-container');
	var control_pages = $('#control-pages');
	var previous = $('#control-previous');
	var next = $('#control-next');
	var total_width = 0;
	var pos = 0;
	var page_width = 0;
	var page = 1;
	
	var getWidth = function() {
		page_width = $(this).width();
		total_width += $(this).width();
	};
	var scrollLeft = function(event) {
		event.preventDefault();
		if ((pos - page_width) > -total_width) {
			page++;
			pos = pos - page_width;
			
			scrollContainer(pos);
			selectPage();
		}
	};
	var scrollRight = function(event) {
		event.preventDefault();
		if ((pos + page_width) <= 0) {
			page--;
			pos = pos + page_width;
			
			scrollContainer(pos);
			selectPage();
		}
	};
	var scrollToPage = function() {
		pos = page_width - ($(this).data('page') * page_width);
		page = $(this).data('page');
		scrollContainer(pos);
		selectPage();
	};
	var scrollContainer = function (ypos) {
		thumbs_container.animate({
			left: ypos + 'px'
		}, 800);
	};
	var selectPage = function() {
		var c = 1;
		control_pages.find('> img').each(function(){
			if (c == page) {
				$(this).attr('src', '/img/dot_filled.gif');
			}
			else {
				$(this).attr('src', '/img/dot_hollow.gif');
			}
			c++;
		});
	};
	var setDotLinks = function() {
		var c = 1;
		control_pages.find('> img').each(function(){
			$(this).click(scrollToPage);
			$(this).css('cursor', 'pointer')
			$(this).data('page', c);
			c++;
		});
	};
	
	thumbs_container.find('> div').each(getWidth);
	thumbs_container.width(total_width);
	setDotLinks();
	previous.css('cursor', 'pointer').click(scrollRight);
	next.css('cursor', 'pointer').click(scrollLeft);
	selectPage();
};

jQuery.fn.addMouseOver = function() {
    var onObjectEnter = function() {
        $(this).addClass("object-thumb-over");
    };
    var onObjectLeave = function() {
        $(this).removeClass("object-thumb-over");
    };
    $("div.object-thumb").bind("mouseenter", onObjectEnter).bind("mouseleave", onObjectLeave);
}

$(document).ready(
    function() {
		var showTorget = function(event) {
			event.preventDefault();
			var url = top.location.href.split('torget');
			var new_url = url[0] + "torget";
						
			if ($("#torget-filter").attr('value') != "" && $("#torget-filter").attr('value') != "null") {
				new_url += '/' + $("#torget-filter").attr('value');
			}

			top.location.href = new_url;
		};
		$("#object-thumbs").thumbPager();
		$("#object-thumbs").addMouseOver();
		$("#objectlist").listPager();
		$("#mainobject-images").mainObject();
		$("#torget-show").click(showTorget);	
    }
);
