var Swummm = Class.create();

Swummm.prototype =
{
	initialize: function()
	{
		// start with givinge ie4/mac users a warning
		var ua = navigator.userAgent.toLowerCase(); 
		if((ua.indexOf('mac')!=-1)&&(ua.indexOf("msie")!=-1))
		{
			alert ('U gebruikt Internet Explorer 4 voor de Mac, deze browser wordt helaas niet door onze site ondersteund. Probeert u het a.u.b. met een modernere browser.');
		}

		// initialize classes
		this._ajaxGateway	= 'gateway.php';
		this._checks 		= new CheckBoxes ('lib/img/checkbox_false.png', 'lib/img/checkbox_true.png', 60, 30);
		this._checks.replaceChecks();
		this._popup			= new Popup ();
		if (window.IE_fixes)
		{
			this.ie_fixes 	= new IE_fixes("projectList", "TR");
		}
		
		
		// other stuff
		this.attachGeneralMethods ();
		this.attachListMethods ();
		this.attachMessageMethods ();
		this.hiliteInitialProject(window.current);
		this.setPDFLinkText(window.current);
		
		Nifty("div#header", "fixed-height bottom");
		Nifty("div#thead", "top");
		Nifty("div#css_table", "bottom fixed-height");
		this.reapply();
	},
	
	reapply: function ()
	{
		initLightbox();
		Nifty("div#mess_head", "top");
		var n = $A(document.getElementsByTagName('title'));
		n.each( function (t) { document.title = t.text = 'yuoo! '+$('project_name').innerHTML; } );
		//writeFlvs();
	},
	
	attachGeneralMethods: function ()
	{
		var __class = this;
		var myrules =
		{
			'#download_pdf' : function (element)
			{
				element.__class	= __class;
				element.onclick	= __class.downloadPdf;
			},
			'#contact' : function (element)
			{
				element.onclick 	= __class.openContactWin;
			},
			'#address' : function (element)
			{
				element.onclick 	= __class.openAddressWin;
			}
		};
		Behaviour.register(myrules);
		Behaviour.apply();
	},
	
	attachListMethods : function ()
	{
		var __class = this;
		var myrules =
		{
			'#css_table .tbody a' : function (element)
			{
				element.__class		= __class;
				element.onclick		= null;
				element.style.textDecoration = 'none';	
			},
			'#css_table .tbody div' : function (element)
			{
				element.__class		= __class;
				element.color 		= element.className.substr(2, 6);
				element.onclick		= __class.openProject;
				element.onfocus		= __class.removeFocus;
			},
			'#css_table .thead a' : function (element)
			{
				element.__class		= __class;
				element.onclick		= __class.sortProjectList;
			},
			'#css_table .tbody span' : function (element)
			{
				element.__class		= __class;
				element.onmouseover	= __class.projectMouseover;
				element.onmouseout	= __class.projectMouseout;
			}
		};
		Behaviour.register(myrules);
		Behaviour.apply();
	},
	
	attachMessageMethods : function ()
	{
		var __class = this;
		var myrules =
		{
			'#add_to_pdf': function (element)
			{
				element.__class	= __class;
				element.onclick 	= __class.addToPdf;
			}
		};
		Behaviour.register(myrules);
		Behaviour.apply();
	},
	
	reapply_IE_fixes : function ()
	{
		if (window.IE_fixes)
		{
			this.ie_fixes.reapply();
		}
	},
	
	projectMouseover : function ()
	{
		var c = "h_"+this.parentNode.color+"_hover";
		Element.addClassName (this.parentNode, c);
	},
	
	projectMouseout : function ()
	{
		if (this.parentNode != document.selectedproject)
		{
			var c = "h_"+this.parentNode.color+"_hover";
			Element.removeClassName (this.parentNode, c);
		}
	},
	
	removeFocus: function ()
	{
		if(this.blur)this.blur();
	},
	
	openProject: function ()
	{
		// this.killChildNodes(document.getElementById('message'));
		//var row = this.parentNode.parentNode;
		var row = this;
		var id = row.id.split('_').pop();
		window.current = id;
		this.__class.ajax_getProject (id);
		this.__class.deHiliteAll (this);
		this.__class.hiliteProject(this);
		return false;
	},
	
	killChildNodes: function (n)
	{
		while (n.childNodes.length>0)
		{
			n.removeChild(n.firstChild);
		}
	},
	
	sortProjectList: function ()
	{
		var sort = this.__class.getQueryVal(this.href, 'sort');
		if (sort == window.sort_col) 	window.sort_dir = (window.sort_dir=='asc') ? 'desc':'asc';
		if (sort!=false)
		{
			window.sort_col = sort;
			this.__class.ajax_getProjectList();
		}
		return false;
	},
	
	deHiliteAll: function (ref)
	{
		var tbody = $('tbody');
		for (var i=0; i<tbody.childNodes.length; i++)
		{
			if (tbody.childNodes[i].nodeType == 1)
			{
				var n = tbody.childNodes[i];
				var s = 'h_'+n.color+"_hover";
				Element.removeClassName (n, s);
			}
		}
	},
	
	hiliteProject: function (tr, set_tr)
	{
		if (set_tr!=undefined) var tr=set_tr
		if (tr)
		{
			document.selectedproject = tr;
			var c = "h_"+tr.color+"_hover";
			Element.addClassName(tr, c);
		}
	},
	
	hiliteInitialProject: function (id)
	{
		var el = $("project_"+id);
		this.hiliteProject(null, el);
		window.current = id;
	},
	
	parseQueryString: function (str)
	{
	 	var s = new String(str);
		var query = str.substring(s.indexOf('?')+1);
		var t = new Array();
		var r = new Object();
		t = query.split ("&");
		for (var i=0; i<t.length; i++)
		{
			var c =t[i];
			if (c.indexOf("amp;")==0) c = c.substring(4); // for xhtml compliance
			var tt = c.split("=");
			if (tt.length==2) r[tt[0]] = tt[1];
		}
		return r;
	},
	
	getQueryVal: function (str, key)
	{
		var r = this.parseQueryString (str);
		if (r[key]) return r[key];
		return false;
	},
	
	downloadPdf: function ()
	{
		if($("pdf_form")) 
		{
			var frm = $("pdf_form")
			var inputs = frm.getElementsByTagName ('input');
			var c = 0;
			var t = 0;
			for (var i=0; i<inputs.length; i++)
				if ((inputs[i].type == "checkbox" && inputs[i].checked == true) || inputs[i].type=="hidden") c++;
			if (c==0) 
			{
				var reply = window.confirm('You have not selected any projects.\nPress \'ok\' to add all projects to the pdf\nor press cancel to go back');
				if (reply)
				{
					this.__class.selectAllProjects();
					frm.submit();
				}
			}
			else frm.submit();
		}
		return false;
	},
	
	selectAllProjects: function ()
	{
		if($("pdf_form")) 
		{
			var frm = $("pdf_form")
			var inputs = frm.getElementsByTagName ('input');
			for (var i=0; i<inputs.length; i++) 
			{
				if (inputs[i].type == "checkbox") inputs[i].checked = true;
			}
		}
	},
	
	openContactWin: function ()
	{
		Swummoq._popup.openWin(this.href, 'swummoq_contact', 500, 450);
		return false;
	},
	
	openAddressWin: function ()
	{
		Swummoq._popup.openWin(this.href, 'swummoq_addressbook', 500, 350);
		return false;
	},
	
	setPDFLinkText: function (id)
	{
		if (id==undefined) id = window.current;
		var row = $('project_'+id)
		var i = row.getElementsByTagName('input')
		var r = $('add_to_pdf').firstChild;
		if (i.length > 0 && i[0].checked)
		{
			r.nodeValue = 'remove from pdf';
		}
		else
		{
			r.nodeValue = 'add to pdf' 
		}
	},
	
	addToPdf: function ()
	{
		//var eid = getQueryVal (this.href, "eid");
		var eid = window.current;
		if (eid != "")
		{
			if($("project_"+eid))
			{
				var e = $("project_"+eid).getElementsByTagName("img");
				for (var i=0; i<e.length; i++)
				{
					var n = e[i].id.replace("checkImage", "");
					this.__class._checks.checkChange (n);
					this.__class.reapply_IE_fixes ();
				}
			}
			this.__class.setPDFLinkText(eid)
		}
		return false;
	},
	
	setCounter: function (proj_url)
	{
		frames['counter_iframe'].location.href = proj_url;
	},
	
	// ajax request methods.
	ajax_getProject: function (id)
	{
		var url = this._ajaxGateway;
		var pars = 'ajaxRequest=getProject&id='+id;
		var __class=this;
		//alert (url+'?'+pars)
		var myAjax = new Ajax.Updater (
			{success: 'message'}, 
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onFailure: __class.ajax_Error,
				evalScripts: true
			});
	},
	
	ajax_getProjectList: function ()
	{
		var url = this._ajaxGateway;
		var pars = 'ajaxRequest=getProjectList&sort='+window.sort_col+'&sort_dir='+window.sort_dir;
		var __class=this;
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onComplete: Delegate.make(this,this.ajax_showProjectList),
				onFailure: __class.ajax_Error
			});
	},
	
	// Ajax callback methods
	ajax_showProject: function (data)
	{
		/*var d = data.responseText;
		$('message').innerHTML = d;//data.responseText;*/
		Swummoq.attachMessageMethods ();
		Swummoq.reapply ();
	},
	
	// Ajax callback methods
	ajax_showProjectList: function (data)
	{
		$('tbody').innerHTML = data.responseText;
		Swummoq._checks.replaceChecks();
		Swummoq.attachListMethods ();
		Swummoq.reapply ();
		Swummoq.setSortStyle (window.sort_col, window.sort_dir);
	},
	
	ajax_Error: function (t) {
		alert('Error ' + t.status + ' -- ' + t.statusText);
	},
	
	removeSortStyles : function ()
	{
		var head = $('thead');
		var trs	= head.getElementsByTagName ('span');
		for (var i=0; i<trs.length; i++)
		{
			var tr = trs[i];
			tr.removeClassName ('sort_desc');
			tr.removeClassName ('sort_asc');
		}
	},
	
	setSortStyle : function (sort_col, sort_dir)
	{
		this.removeSortStyles();
		var e;
		if ((e = $('sort_'+sort_col)))
		{
			e.addClassName ('sort_'+window.sort_dir);
		}
	}
};
