var projectLoader = {
	curlabel : 0,
	curthumb : 0,
	curproject : 0,
	nextprojectid : 0,
	prevprojectid : 0,
	customers : {},	// customercache
	primages : {},	// imagecache
	projects : {},	// projectcache
	togglebox : function(show) {
		if (show) {
			var height = new Fx.Tween('project');
			height.set('overflow','hidden');
			height.start('height',$('project').getHeight(),$('project').getScrollSize().y);
			height.set('border-width','1px');
			if (navigator.appVersion.indexOf("MSIE 6")>0) height.set('display','block');
			var fade = new Fx.Tween('project');
			fade.start('opacity',0,1).chain(function() {fade.set('height','auto')});
		} else {
			var height = new Fx.Tween('project');
			height.set('overflow','hidden');
			height.start('height',$('project').getHeight(),0);
			var fade = new Fx.Tween('project');
			fade.start('opacity',1,0).chain(function() {if (navigator.appVersion.indexOf("MSIE 6")>0){height.set('display','none');};height.set('border-width','0px')});
		}
		this.show = show;
		return false;
	},
	showProject : function (id, inc) {
		var l = projectLoader.labels[projectLoader.curlabel].length;
		if (0 != inc && l > 0 && !projectLoader.in_array(id,projectLoader.labels[projectLoader.curlabel])) {
			found = false;
			for (var i = 0; i < l; i++) {
				if (projectLoader.curproject == projectLoader.labels[projectLoader.curlabel][i]) {
					found = true;
					break;
				}
			}
			id = found ? projectLoader.labels[projectLoader.curlabel][(i+inc+l)%l] : projectLoader.labels[projectLoader.curlabel][0];
		}
		projectLoader.activateThumb(id);
		projectLoader.curproject = id;
		if (typeof projectLoader.projects[id] != 'undefined') {
			projectLoader.showProjectInShowdiv(id);
			if (projectLoader.show == 0) {
				projectLoader.togglebox(1);
			}
		} else {
			var projectrequest = new Request.JSON(
			{
				url: "/dconn/json/entity.get.php?ent=bsproject&id=" + id,
				onComplete: function(projectobj){
					var project = projectobj['objects'][0];
					projectLoader.projects[project['projectid']] = project;
					projectLoader.showProjectInShowdiv(id);
					if (projectLoader.show == 0) {
						projectLoader.togglebox(1);
					}
				}
			}).get();
		}
		for (var i = 0; i < l; i++) {
			if (id == projectLoader.labels[projectLoader.curlabel][i]) {
				projectLoader.nextprojectid = projectLoader.labels[projectLoader.curlabel][(i+1)%l];
				projectLoader.prevprojectid = projectLoader.labels[projectLoader.curlabel][(i-1+l)%l];
				break;
			}
		}
		if (e = $('prevheading')){
			e.onclick = function(){
				return projectLoader.showProject(projectLoader.prevprojectid,-1);
			}
		}
		if (e = $('nextheading')){
			e.onclick = function(){
				return projectLoader.showProject(projectLoader.nextprojectid,1);
			}
		}
		return false;
	},
	trim : function(value) {
		value = value.replace(/^\s+/,'');
		value = value.replace(/\s+$/,'');
		return value;
	},
	parafix : function (text) {
		text = this.trim(text)
		if (text.substr(0,3) != '<p>') {
			text = '<p>' + text;
		}
		if (text.substr(-4) != '</p>') {
			text += '</p>';
		}
		return text;
	},
	showProjectInShowdiv : function(projectid) {
		if (typeof projectLoader.projects[projectid] != 'undefined') {
			var project = projectLoader.projects[projectid];
			$('projecttitle').innerHTML		= project['title'];
			$('projectresult').innerHTML	= projectLoader.parafix(project['result']);
			$('projectwebsite').innerHTML	= project['name'];
			$('projectwebsite').href		= project['external_url'];
			/*
			if (sIFR) {
				$('projecttitle').className = '';// unset sIFR-replaced
						sIFR.replace(rotis_sans_extrabold, {
					selector: '#projecttitle',
					wmode: 'transparent',
					tuneWidth: 2,
					css: {
					'.sIFR-root':			{ 'color': '#C91417', 'font-weight':'normal', 'font-size':'25px' },
					'a':					{ 'color': '#C91417', 'text-decoration':'none' },
					'a:link':				{ 'color': '#C91417', 'text-decoration':'none' },
					'a:hover':				{ 'color': '#C91417', 'text-decoration':'underline' }
					}
				});
			}*/
			if (this.customers.length > 0) {
				this.putInCustomerBox(project['customer_id']);
			} else {
				this.loadCustomers("projectLoader.putInCustomerBox(" + project['customer_id'] + ")");
			}
			$('projectimages').innerHTML = '';
			projectLoader.getImgs(project['galleryid'], true);
		}
	},
	showProjectInPreviewdiv : function(projectid) {
		var project		                      = projectLoader.projects[projectid];
		var galleryid	                      = project['galleryid'];
		var firstid		                      = (typeof projectLoader.primages[galleryid] != 'undefined' && projectLoader.primages[galleryid].length > 0 ) ? projectLoader.primages[galleryid][0]['imageid'] : false;
		var image                             = firstid ? ('/image.php?ent=image&id=' + firstid + '&amp;w=100') : ('/icon.php?ent=bsprojectsettings&id=' + projectid + '&amp;w=100');
		$('projectpreviewtitle').set('html',project['title']);
		$('projectpreviewcontent').innerHTML  = this.parafix(project['description']);
		$('projectpreviewlink').innerHTML     = '<a class="link" href="/werk/'+ project['projectid'] + '/' + escape(project['name']) + '#project" onclick="return projectLoader.showProject(' + project['projectid'] + ',0)" title="Meer over ' + (project['project'] ? project['project']  : project['name']) + '">Meer over ' + (project['project'] ? project['project']  : project['name']) + '</a>';
		$('projectpreviewimage').href         = '/werk/' + projectid + '/' + project['name'] + '#werk';
		$('projectpreviewimage').onclick      = function(){return projectLoader.showProject(projectLoader.curthumb, 0)};
		$('projectpreviewimage').innerHTML    = '<img src="'+ image +'" class="right border" title="Meer over ' + project['name'] + '" alt="" />';
	},
	loadCustomers : function (action) {
		var galleryrequest = new Request.JSON(
		{
			url: "/entity.get.php?ent=bscustomer",
			onComplete: function(customers){
				projectLoader.customers = customers['objects'];
				setTimeout(action,0);
			}
		}).get();
	},
	putInCustomerBox : function(customerid) {
		foundCustomer = false;
		$each(projectLoader.customers,function(customer,key){
			if (customer['itemid'] == customerid) {
				$('projectcustomer').innerHTML = '<span class="project_specs">Opdrachtgever</span><br/><a class="newtab" href="' + customer['external_url'] + '" onclick="this.target=\'_blank\'">' + customer['name'] + '</a>';
				foundCustomer = true;
			}
		});
		if (!foundCustomer) {
			$('projectcustomer').innerHTML = '';
		}
	},
	getImgs : function(galleryid, fill) {

		if (typeof projectLoader.primages == 'undefined' || typeof projectLoader.primages[galleryid] == 'undefined') {
			var galleryrequest = new Request.JSON({
				url: "/entity.get.php?ent=image",
				onComplete : function(imagegal,b){
				    // Sort images on position
				    imagegal['objects'] = imagegal['objects'].sort(sortByPosition);
					var l = imagegal['objects'].length;

					for (var i = 0; i < l; i++) {
						var g = imagegal['objects'][i]['galleryid'];
						if (typeof projectLoader.primages[g] == 'undefined')
							projectLoader.primages[g] = [];
						projectLoader.primages[g][projectLoader.primages[g].length] = imagegal['objects'][i];
					}
					if (galleryid && fill) {
                        console.log(galleryid, fill);
				       projectLoader.getImgs(galleryid, fill);
					}
				}
			}).get();
		} else if (galleryid && fill)
			projectLoader.fillImageBox(galleryid);
	},
	fillImageBox : function(galleryid) {
		var imageString = '';
		var seen = false;
		if (typeof projectLoader.primages[galleryid] != 'undefined') {
			var l = projectLoader.primages[galleryid].length;
			for (var i = 0; i < l; i++) {
				image = projectLoader.primages[galleryid][i];
				if ((typeof image['galleryid'] != 'undefined') && (image['galleryid'] == galleryid)) {
					imageString += '<div id="gallerythumb' + i + '" class="gallerythumb ' + (seen ? '' : 'active') + '">';
					imageString += '<a style="background:url(/image.php?ent=image&amp;id='+ image['imageid'] + '&amp;h=40) no-repeat scroll center center;" onclick="return projectLoader.setGalleryImage(' + image['imageid'] + ',' + galleryid + ')" href="/image.php?ent=image&amp;id=' + image['imageid'] + '&amp;w=420" rel="infobox2" title="' + image['title'] + '"><span class="pop">' + image['caption'] + '</span></a>';
					imageString += '</div>';
					if (!seen) {
						projectLoader.setGalleryImage(image['imageid'],galleryid);
						seen = true;
					}
				}
			}
		}
		if (seen) {
			$('projectimages').innerHTML = '<div id="tipmessagebox2"></div>' + imageString;
			tips2.init();
		} else {
			$('galleryimageholder').innerHTML = '';//Geen afbeeldingen gevonden bij dit project';
		}
	},
	thumbs : {},
	activateThumb : function (id) {
		var a = new RegExp(' active');
		$each($$('.projectthumb'), function(e,key) {
			if (e.className.match(a)) {
				e.className=e.className.replace(a, '');
			}
		});
		if ((e = $('projectthumb'+id)) && !e.className.match(a)) {
			e.className += ' active';
			projectLoader.curthumb = id;
		}
	},
	fadeRegExp : new RegExp(' fade'),
	previewProject : function (id) {
		if (id != this.curthumb && !$('projectthumb'+id).className.match(this.fadeRegExp)) {
			if (projectLoader.show == 1) {
				//projectLoader.togglebox(0);
			}
			projectLoader.activateThumb(id);
			fade = new Fx.Tween('projectright');
			fade.set('opacity',0);
			if (typeof projectLoader.projects[id] != 'undefined') {
				projectLoader.showProjectInPreviewdiv(id);
				fade.start('opacity',1);
			} else {
				var projectrequest = new Request.JSON(
				{
					url: "/dconn/json/entity.get.php?id=" + id + "&ent=bsproject",
					onComplete: function(projectobj){
						if (typeof projectobj != 'undefined') {
							var project = projectobj['objects'][0];
							projectLoader.projects[project['projectid']] = project;
							projectLoader.showProjectInPreviewdiv(id);
							fade.start('opacity',1);
						}
					}
				}).get();
			}
		}
		return false;
	},
	setGalleryImage : function(imageid,galleryid) {
		$('galleryimageholder').set('height',$('galleryimageholder').getHeight());
		$each(projectLoader.primages[galleryid],function(image,key){
			if ($('gallerythumb' + key)) {
				$('gallerythumb' + key).set('class','gallerythumb');
			}
			if (image['imageid'] == imageid) {
				$('galleryimageholder').innerHTML = '<img src="/image.php?ent=image&id=' + image['imageid'] + '&w=420" alt="" title="' + image['title'] + '"/><span id="gallerycaption">' + (image['caption']?image['caption']:image['title']) + '</span>';
				if ($('gallerythumb' + key)) {
					$('gallerythumb' + key).set('class','gallerythumb active');
				}
			}
		});
		return false;
	},
	in_array : function (item, arr) {
		var l = arr.length;
		for (var i = 0; i < l; i++) {
			if (arr[i] == item) {
				return true;
			}
		}
		return false;
	},
	show : 0,
	labels : {},
	addLabeledProject : function(projectid, labelid) {
		if (typeof this.labels[labelid] == 'undefined')
			this.labels[labelid] = [];
		this.labels[labelid][this.labels[labelid].length] = projectid;
		if (typeof this.labels[0] == 'undefined')
			this.labels[0] = [];
		if (!this.in_array(projectid, this.labels[0]))
			this.labels[0][this.labels[0].length] = projectid;// all labels
	},
	tags : {},
	showOnlyLabel : function (labelid, tag) {
		var a = new RegExp(' active');
		var r = new RegExp('label_'+labelid);
		var f = new RegExp(' fade');
		$each($$('.projectthumb'), function(e,key) {
			if (e.className.match(r)) {
				e.className=e.className.replace(f, '');
			} else if (!e.className.match(f)) {
				e.className+=' fade';
			}
		});
		$each($$('.tag'), function(e,key) {
			if (key != tag) {
				e.className=e.className.replace(a, '');
			} else if (!e.className.match(a)) {
				e.className+=' active';
			}
			return false;
		});
		projectLoader.curlabel = labelid > 0 ? labelid : 0;
		return false;
	}
}
var tips1 = {
	tipmessagebox : 'tipmessagebox1',
	re : new RegExp('fade'),
	maxOpacity : 1,
	showMessageBox : function (key) {
		if (tips1.titles[key] && (e = document.getElementsByTagName('a')[key])) {
			if (window.getWidth() < (e.getPosition().x + $(tips1.tipmessagebox).getWidth() + e.getWidth() + 5)) {
				verschil= window.getWidth() - (e.getPosition().x + $(tips1.tipmessagebox).getWidth() + e.getWidth() + 10);
				topPos	= e.getPosition().y + e.getHeight() + 5;
				left	= e.getPosition().x + e.getWidth() + verschil;
			} else {
				topPos	= e.getPosition().y;
				left	= e.getPosition().x + e.getWidth() + 5;
			}
			if ((f = e.getParent()) && !f.className.match(tips1.re) && (t = $(tips1.tipmessagebox))) {
				t.setStyle('top',topPos-9);
				t.setStyle('left',left-42);
				t.innerHTML = tips1.titles[key];
				t.fade(tips1.maxOpacity);
			}
		}
	},
	hideMessageBox : function () {
		$(tips1.tipmessagebox).fade(0);
	},
	init : function() {
		$each($$('a'), function(object,key) {
			if (object.rel == 'infobox1') {
				object.addEvents({
					mouseenter: function() {
						tips1.showMessageBox(key);
					},
					mouseleave: function() {
						tips1.hideMessageBox();
					}
				});
				tips1.titles[key] = object.title;
				object.title = '';
			}
		});
		if (t=$(tips1.tipmessagebox)) {
			t.set('opacity',0);
			t.set('left',-250);
			t.set('top',-100);
		}
	},
	titles : {}
};
var tips2 = {
	tipmessagebox : 'tipmessagebox2',
	re : new RegExp('fade'),
	maxOpacity : 1,
	showMessageBox : function (key) {
		if (tips2.titles[key] && (e = document.getElementsByTagName('a')[key])) {
			if (window.getWidth() < (e.getPosition().x + $(tips2.tipmessagebox).getWidth() + e.getWidth() + 5)) {
				verschil= window.getWidth() - (e.getPosition().x + $(tips2.tipmessagebox).getWidth() + e.getWidth() + 10);
				topPos	= e.getPosition().y + e.getHeight() + 5;
				left	= e.getPosition().x + e.getWidth() + verschil;
			} else {
				topPos	= e.getPosition().y;
				left	= e.getPosition().x + e.getWidth() + 5;
			}
			if ((f = e.getParent()) && !f.className.match(tips2.re) && (t = $(tips2.tipmessagebox))) {
				t.setStyle('top',topPos-9);
				t.setStyle('left',left-42);
				t.innerHTML = tips2.titles[key];
				t.fade(tips2.maxOpacity);
			}
		}
	},
	hideMessageBox : function () {
		$(tips2.tipmessagebox).fade(0);
	},
	init : function() {
		$each($$('a'), function(object,key) {
			if (object.rel == 'infobox2') {
				object.addEvents({
					mouseenter: function() {
						tips2.showMessageBox(key);
					},
					mouseleave: function() {
						tips2.hideMessageBox();
					}
				});
				tips2.titles[key] = object.title;
				object.title = '';
			}
		});
		if (t=$(tips2.tipmessagebox)) {
			t.set('opacity',0);
			t.set('left',-250);
			t.set('top',-100);
		}
	},
	titles : {}
};
window.addEvent('domready', function() {
	projectLoader.getImgs(0,false);
	tips1.init();
	tips2.init();
});

function sortByPosition(a,b) {
    var x = parseInt(a.position);
    var y = parseInt(b.position);

    return((x < y) ? -1 : ((x > y) ? 1 : 0));
}