var CasesList = {
	pageScrolled: false,
	
	initialize: function() {
		var cl = CasesList.clientList = $('client');
		var tl = CasesList.typeList = $('type');
		var sf = CasesList.sortField = $('sort');
		CasesList.table = $('caseslist');
		if (!cl || !tl || !sf || !CasesList.table) return;
		CasesList.request = new Request.JSON({ url: 'javascripts/cases.js.php', method: 'get', onFailure: CasesList.onFailure, onSuccess: CasesList.onSuccess }).send();
		cl.addEvent('change', CasesList.filter);
		tl.addEvent('change', CasesList.filter);
		sf.addEvent('change', CasesList.sort);
	},
	
	onFailure: function() {
		CasesList.clientList.removeEvent('change', CasesList.filter);
		CasesList.typeList.removeEvent('change', CasesList.filter);
		CasesList.sortField.removeEvent('change', CasesList.sort);
		CasesList.clients = CasesList.worktypes = CasesList.cases = null;
		var buttonbars = $$('div.buttonbar.noscript');
		for (var i = buttonbars.length - 1; i >= 0; i--) {
			buttonbars[i].setStyle('display', 'block');
		}
	},
	
	onSuccess: function(data) {
		CasesList.clients = data.clients;
		CasesList.worktypes = data.worktypes;
		CasesList.cases = data.cases;
		CasesList.countClientCases();
		CasesList.countWorktypeCases();
		var cl = CasesList.clientList, tl = CasesList.typeList, sf = CasesList.sortField;
		for (var i = cl.options.length - 1; i >= 0; i--) {
			if (cl.options[i].defaultSelected != cl.options[i].selected) {
				CasesList.filter(true);
				return;
			}
		}
		for (i = tl.options.length - 1; i >= 0; i--) {
			if (tl.options[i].defaultSelected != tl.options[i].selected) {
				CasesList.filter(true);
				return;
			}
		}
		if (sf.options) {
			for (i = sf.options.length - 1; i >= 0; i--) {
				if (sf.options[i].defaultSelected != sf.options[i].selected) {
					CasesList.sort();
					return;
				}
			}
		}
	},
	
	getClient: function(c) {
		var clients = CasesList.clients;
		var clientID = c.client;
		for (var i = clients.length - 1; i >= 0; i--) {
			if (clients[i].ID == clientID)
				return clients[i];
		}
		return null;
	},
	
	getWorktype: function(id) {
		var worktypes = CasesList.worktypes;
		for (var i = worktypes.length - 1; i >= 0; i--) {
			if (worktypes[i].ID == id)
				return worktypes[i];
		}
		return null;
	},
	
	countClientCases: function() {
		var cl = CasesList.clientList;
		var list = cl.getNext('div.list');
		if (!list) return;
		var rows = list.getElements('div.row');
		var cases = CasesList.cases;
		var numCases = cases.length;
		
		for (var i = cl.options.length - 1; i >= 0; i--) {
			var opt = cl.options[i];
			var num = 0;
			if (opt.value == 'all')
				num = numCases;
			else {
				var clientID = opt.value.toInt();
				for (var j = numCases - 1; j >= 0; j--) {
					if (cases[j].client == clientID)
						num++;
				}
			}
			rows[i].grab(new Element('span', { 'class': 'num' }).appendText(' (' + num + ')'));
		}
	},
	
	countWorktypeCases: function() {
		
	},
	
	filterCases: function() {
		var cases = CasesList.cases;
		var client = CasesList.clientList.value;
		var type = CasesList.typeList.value;
		if (client == '' || type == '') return;
		if (client == 'all') client = 0;
		if (type == 'all') type = 0;
		
		var numCases = cases.length;
		var filtered = [];
		
		for (var i = 0; i < numCases; i++) {
			var c = cases[i];
			if (client == 0 || c.client == client) {
				if (type == 0 || c.worktypes.indexOf(type) != -1)
					filtered.push(c);
			}
		}
		
		return filtered;
	},
	
	sortCases: function(cases) {
		var field = CasesList.sortField.value;
		var sortFunc = null;
		
		if (field == 'name') {
			sortFunc = function(a, b) {
				var an = a.name, bn = b.name;
				if (an < bn) return -1;
				else if (an > bn) return 1;
				return 0;
			};
		}
		else if (field == 'date') {
			sortFunc = function(a, b) {
				return (Number(b.date) - Number(a.date));
			};
		}
		else if (field == 'client') {
			sortFunc = function(a, b) {
				var ac = CasesList.getClient(a).name, bc = CasesList.getClient(b).name;
				if (ac < bc) return -1;
				else if (ac > bc) return 1;
				return 0;
			};
		}
		else
			return;
		
		cases.sort(sortFunc);
	},
	
	addCases: function(cases) {
		var mainRow = new Element('tr');
		
		var numCases = cases.length;
		var numPages = Math.ceil(numCases / 6);
		
		for (var i = 0; i < numPages; i++) {
			var table = new Element('table', { 'class': (i == 0 ? 'first' : '') + ' ' + (i == numPages - 1 ? 'last' : '') });
			
			for (var j = 0; j < 2; j++) {
				var row = new Element('tr');
				
				for (var k = 0; k < 3; k++) {
					var cell = new Element('td');
					var index = i * 6 + j * 3 + k;
					if (index < numCases) {
						var c = cases[index];
						var client = CasesList.getClient(c);
						var a = new Element('a', { href: 'portfolio/' + client.nicename + '/' + c.nicename + '/', 'class': 'case fadingbackground' });
						a.grab(new Element('span', { 'class': 'background' }));
						var fg = new Element('span', { 'class': 'foreground' });
						var thumb = new Element('span', { 'class': 'thumb' });
						if (c.image != '')
							thumb.grab(new Element('img', { src: 'uploads/images/' + c.image, alt: c.name }));
						fg.grab(thumb);
						for (var l = 0; l < c.worktypes.length; l++) {
							var type = CasesList.getWorktype(c.worktypes[l]);
							if (type) fg.grab(new Element('img', { src: 'images/color_' + type.color + '.png', width: 8, height: 8, alt: type.name, 'class': 'color' }));
						}
						fg.grab(new Element('span', { 'class': 'title' }).appendText(c.name));
						fg.grab(new Element('span', { 'class': 'client' }).appendText(client.name));
						a.grab(fg);
						cell.grab(a);
						Site.setupFadingBackground(a);
					}
					row.grab(cell);
				}
				
				table.grab(row);
			}
			
			new Element('td').grab(table).inject(mainRow);
		}
		
		CasesList.table.grab(mainRow);
	},
	
	removeCases: function() {
		CasesList.table.empty();
	},
	
	filter: function(noScroll) {
		if (noScroll !== true && !CasesList.pageScrolled) {
			var doc = $(document.body);
			new Fx.Scroll(doc).start(0, doc.getElement('a[name=cases]').getPosition().y);
			CasesList.pageScrolled = true;
		}
		
		CasesList.removeCases();
		
		var filtered = CasesList.curCases = CasesList.filterCases();
		
		CasesList.sortCases(filtered);
		CasesList.addCases(filtered);
		CasesList.table.getParent('div.view').fireEvent('resize');
		
		var num = filtered.length;
		
		var numresults = $('numresults');
		if (numresults)
			numresults.set('text', (num == 0 ? 'Inga cases hittades' : (num == 1 ? 'Hittade 1 case' : 'Hittade ' + num + ' cases')) + '.');
		
		var sort = $('sort');
		if (sort) {
			var dropdown = sort.getNext('div.dropdown');
			if (dropdown)
				dropdown.setStyle('display', (num > 1 ? 'block' : 'none'));
		}
	},
	
	sort: function() {
		CasesList.removeCases();
		
		if (!CasesList.curCases)
			CasesList.curCases = CasesList.filterCases();
		
		CasesList.sortCases(CasesList.curCases);
		CasesList.addCases(CasesList.curCases);
		CasesList.table.getParent('div.view').fireEvent('resize');
	},
	
	compareName: function(a, b, shallow) {
		var fa = a.name.toLowerCase();
		var fb = b.name.toLowerCase();
		if (fa < fb) return -1;
		else if (fa > fb) return 1;
		else if (shallow != true) return PeopleList.compareTitle(a, b, true);
		else return 0;
	},
	
	compareTitle: function(a, b, shallow) {
		var fa = a.title.toLowerCase();
		var fb = b.title.toLowerCase();
		if (fa < fb) return -1;
		else if (fa > fb) return 1;
		else if (shallow != true) return PeopleList.compareName(a, b, true);
		else return 0;
	},
	
	getPageDescription: function(num) {
		var cell = (CasesList.table || $('caseslist')).getElement('tr').cells[num];
		if (cell) {
			var sort = (CasesList.sortField || $('sort')).value;
			var table = $(cell).getChildren('table')[0];
			var text1 = null, text2 = null;
			var cell = table.getElement('tr').getElement('td');
			if (cell) text1 = cell.getElement((sort == 'client' ? 'span.client' : 'span.title'));
			var rows = table.getElements('tr');
			var numRows = rows.length;
			var numCells = rows[0].getElements('td').length;
			for (var i = numRows - 1; i >= 0; i--) {
				var cells = rows[i].getElements('td');
				for (var j = numCells - 1; j >= 0; j--) {
					var cell = cells[j];
					if (cell) {
						var t = cell.getElement((sort == 'client' ? 'span.client' : 'span.title'));
						if (t) {
							text2 = t;
							break;
						}
					}
				}
				if (text2) break;
			}
			if (text1)
				return text1.get('text').substr(0, 1) + '-' + (text2 ? text2.get('text').substr(0, 1) : text1.get('text').substr(0, 1));
		}
		return '';
	}
};

function getPageDescription(num, slider) {
	return CasesList.getPageDescription(num);
}

window.addEvent('domready', function() { if (!Site.IE6) CasesList.initialize(); });