// jquery ajax setup
/*
$.ajaxSetup({
  contentType: "application/x-www-form-urlencoded; charset=utf-8"
});
*/


// the meat

rl = {
	
	
	contentCache : new Array(),
	tabGroups : new Array(),
	
	
	getForm : function (act, formid)
	{
		// get url
		var url = baseurl + act + formid.replace("_", "__") + "/";
		
		// add timestamp to prevent caching
		var d = new Date();
		url = url + "ts__" + d.getTime() + "/";
		
		var b = document.getElementById(formid+"_editbtn");
		var f = document.getElementById(formid+"_holder");
		
		// hide content & button
		b.style.display = "none";
		
		// show loader
		this.contentCache[formid] = f.innerHTML;
		this._showLoader(f);
		
		
		// loadform
		this._loadForm( formid, url);
		
		return false;
	},



	submitForm : function (id)
	{
		var f, form, types, action, flds, i, j, c, b, data, url, successfunc, p, nam;

		f = document.getElementById(id+"_holder");
		b = document.getElementById(id+"_editbtn");

		p = this;
		form = document.getElementById(id);
		
		if (form.action.indexOf(window.location.href) == 0)
		{
			action = form.action.substr(window.location.href.length);
		}
		else
		{
			action = form.action;
		}
		
		
		url = baseurl + action;

		// get data from form fields
		types = new Array( "input", "textarea", "select" );
		data = {};
		for (i=0;i<types.length;i++)
		{
			flds = f.getElementsByTagName(types[i]);
			for (j=0;j<flds.length;j++)
			{
				if (flds[j].type == "radio" || flds[j].type == "checkbox")
				{
					if (flds[j].checked.toString() == "true")
					{
						if (flds[j].name.indexOf("[]") > -1)
						{
							nam = flds[j].name.substr( 0, flds[j].name.lastIndexOf("[]") );
							if (!data[nam])
								data[nam] = flds[j].value;
							else
								data[nam] += "_" + flds[j].value;
						}
						else
						{
							data[flds[j].name] = flds[j].value;
						}
					}
				}
				else
				{
					data[flds[j].name] = flds[j].value;
				}
				
			}
		}
		

		// remove form
		f.innerHTML = "";
		this._showLoader(f);

		// do ajax
		successfunc = function (obj)
		{
			f.innerHTML = obj.xml.getElementsByTagName("response")[0].firstChild.nodeValue;
			p._addFormButtons(id);
		};

		//$.post( url, data, successfunc );
		
		$_().ajax({
			url : url,
			method: "POST",
			data : data,
			ondata : successfunc
		});
		
		return false;
	},
	
	
	
	cancelForm : function (id)
	{
		var f, form, types, flds, i, j, c, b, data, url, successfunc, p;

		f = document.getElementById(id+"_holder");
		b = document.getElementById(id+"_editbtn");

		f.innerHTML = this.contentCache[id];
		b.style['display'] = "block";
		
		return false;
	},
	
	
	
	_addFormButtons : function (formid)
	{
		var form = document.getElementById(formid);
		
		if (form)
		{
			var p = this;
			
			var cancel = document.createElement("a");
			cancel.href="#";
			cancel.className = "btn_cancel";
			cancel.onclick = function () { return p.cancelForm(formid); };
			cancel.appendChild( document.createTextNode("cancel") );
			
			var submit = document.createElement("a");
			submit.className = "btn_submit";
			submit.href="#";
			submit.onclick = function () { return p.submitForm(formid); };
			submit.appendChild( document.createTextNode("submit") );
			
			var div = document.createElement("div");
			div.className = "btnbar";
			
			div.appendChild( submit );
			div.appendChild( cancel );
			
			form.appendChild( div );
			
			form.onsubmit = function () { return p.submitForm(formid); };
		}
		else
		{
			// success!
			this.contentCache[formid] = document.getElementById(formid+"_holder").innerHTML;
			document.getElementById(formid+"_editbtn").style['display'] = "block";
		}
	},
	
	
	
	_loadForm : function (formid, url)
	{
		var p = this;
		
		$_().ajax({
			url : url,
			ondata : function (obj)
			{
				var e = document.getElementById(formid+"_holder");
				e.innerHTML = obj.xml.getElementsByTagName("response")[0].firstChild.nodeValue;
				p._addFormButtons(formid);
			}
		});
		
	},
	
	
	
	_showLoader : function (ele)
	{
		ele.innerHTML = '<img src="'+baseurl+'assets/img/ajax-loader.gif" width="16" height="16" />'
	},
	
	
	
	// photo form
	
	
	
	getUploadForm : function (formid,cb,id)
	{
		// open an iframe in form_photo_holder
		document.getElementById("form_"+formid+"_holder").innerHTML = "<div class='iframe_holder' scrolling='no' scrollbars='no'><iframe src='"+baseurl+"fileupload/__getform/form__"+formid+"/cb__"+cb+"/id__"+id+"/'></iframe></div>";
		return false;
	},
	
	
	
	closePhotoForm : function (file, formid)
	{
		// remove form
		document.getElementById("form_photo_holder").innerHTML = "";
		
		// show img
		if (file)
		{
			var photo = document.getElementById("userphoto");
			photo.src = photo.src.substring(0,photo.src.lastIndexOf("/")+1) + file;
		}
		
		return false;
	},
	
	
	
	closeUploadForm : function (file, formid)
	{
		// remove form
		document.getElementById("form_"+formid+"_holder").innerHTML = "";
		
		// show img
		if (file)
		{
			var img = document.getElementById(formid+"_img");
			if (img)
				img.src = img.src.substring(0,img.src.lastIndexOf("/")+1) + file;
		}
		
		return false;
	},
	
	
	closeTrailerForm : function (file, formid)
	{
		// remove form
		document.getElementById("form_"+formid+"_holder").innerHTML = "";
		
		// has file been uploaded
		if (file)
		{
			$_("trailerinfo").loadContent( baseurl + "project/__trailerinfo/hash__"+file+"/" );
			
			// remove edit button
			//
			$_("form_projecttrailer_editbtn").hide();
		}
	},
	
	
	
	// tabs
	
	
	initTabs : function (tabs, acttab)
	{
		var i, tab, a, gn, content, group, p, act;
		
		p = this;
		group = new Array();
		gn = this.tabGroups.length;
		act = 0;
		
		// first item is active
		// loop through tabs, init tab buttons, hide content
		for (i=0;i<tabs.length;i++)
		{
			tab = document.getElementById("tab_"+tabs[i]);
			content = document.getElementById("content_"+tabs[i]);
			
			a = tab.getElementsByTagName("a")[0];
			a.href = "#";
			a.id = "tb"+gn+"_"+i;
			a.onclick = function () { return p.activateTab(gn,this.id.substring(this.id.lastIndexOf("_")+1)); };
			
			group[i] = {tab:tab, content:content};
			
			if (acttab == tabs[i])
				act = i;
		}
		
		this.tabGroups[gn] = group;
		
		this.activateTab( gn, act );
	},
	
	
	
	activateTab : function (gn, act)
	{
		var i, group;
		
		group = this.tabGroups[gn];
		
		for (i=0;i<group.length;i++)
		{
			if (i==act)
			{
				group[i].tab.className = "active";
				group[i].content.style['display'] = "block";
			}
			else
			{
				group[i].tab.className = "";
				group[i].content.style['display'] = "none";
			}
		}
		
		return false;
	},
	
	
	
	// show trailer
	
	
	showTrailer : function ( url )
	{
		var d = new Date();
		this.showVideo( baseurl + "assets/projecttrailers/" + url + ".flv?" + d.getTime() );
		return false;
	},
	
	
	
	showVideo : function ( url, blackout, id, autoplay )
	{
		if (blackout===undefined)
			blackout = true;
		if (id===undefined)
			id = "videoplayer";
		if (autoplay===undefined)
			autoplay = "true";
		
		if (blackout)
			this.blackout().empty().appendElement("div", {id:"trailerholder"}, "", true).appendElement("a", {className:"close", href:"#", onclick:function () { return rl.killBlackout(); } }, "[x]").appendElement("div", {id:id}, "Adobe Flash Player 9 is required to view videos!")
		
		var so = new SWFObject( baseurl + "assets/flash/videoplayer.swf", id, "490", "400", "9", "#000000");
   		so.addParam("wmode", "transparent");
   		so.addParam("allowFullScreen", "true");
   		so.addVariable( "file", url );
   		so.addVariable( "width", "480" );
   		so.addVariable( "height", "360" );
   		so.addVariable( "autoplay", autoplay );
   		so.write(id);
		return false;
	},
	
	
	
	embedPlayers : function ()
	{
		var vid = 0;
		var func = function ()
		{
			var txt = $(this).text();
			if( txt.lastIndexOf('.') == -1 )
				return;
			
			var ending = txt.substring( txt.lastIndexOf('.') );
			if ( ending!='.flv' && ending!='.f4v' )
				return;
		
			$(this).attr('id', 'rlembed'+vid);
			$(this).addClass('rlembed');
			
			var url = txt;
			if (url.substring(0,4) != 'http' )
				url = baseurl+'assets/'+url;
			
			rl.showVideo( url, false, 'rlembed'+vid, 'false' );
			vid++;
		}
		
		$('#main .pagecontent p > em').each( func );
		$('#frontpagenews ..cont p > em').each( func );
	},
	
	
	
	blackout : function ()
	{
		if (document.getElementById("blackout"))
			return document.getElementById("blackout");
		return $_("body").appendElement("div", {id:"blackout"}, "", true).style( "height", $_().utils.pageSize().pageHeight + "px" );
	},
	
	
	
	killBlackout : function ()
	{
		$_("blackout").remove();
		return false;
	},
	
	
	// ajax content
	
	
	loadContent : function (ele, url)
	{
		$_(ele).loadContent(url);
		return false;
	}
};





rl.funding = {
		
		idfunding : null,
		
		init : function ( $idfunding )
		{
			this.idfunding = $idfunding;
			
			this.parseGuide();
			this.parseEvents();
			this.parseCountries();
			this.parseTypes();
			this.parseEligibleCandidates();
		},
		// guide editing
		
		parseGuide : function ()
		{
			$('h1 a.edit').click( function (ev) { ev.preventDefault(); rl.funding.editGuide() } );
		},

		loadGuide : function ()
		{
			$('#guide').load( baseurl + 'funding/__guide/id__'+this.idfunding+'/snippet__1/', null, this.parseGuide );
		},
		
		editGuide : function ()
		{
			$('#guide').load( baseurl + 'funding/__editguide/id__'+this.idfunding+'/', null, function () { rl.funding.handleGuideFormLoad() } );
		},

		handleGuideFormLoad : function ()
		{
			$('#guide form').ajaxForm( {target:'#guide', success:rl.funding.handleGuideFormResponse} );
			$('#guide form').append( '<div class="buttonbar"><a class="btn_submit" href="#">submit</a><a class="btn_cancel" href="#">cancel</a></div>' );
			$('#guide form a.btn_cancel').click( function (ev) { ev.preventDefault(); rl.funding.loadGuide(); } );
			$('#guide form a.btn_submit').click( function (ev) { ev.preventDefault(); $(this).parents('form').submit() } );
		},

		handleGuideFormResponse : function ()
		{
			// if form has been posted again (invalid)
			rl.funding.handleGuideFormLoad();
			// if guide have been returned
			rl.funding.parseGuide();
		},
		
		
		
		// funding guide events --------
		
		loadEvents : function ()
		{
			$('#events').load( baseurl + 'funding/__events/id__'+this.idfunding+'/', null, this.parseEvents );
		},
		
		parseEvents : function ()
		{
			$('#eventadd a').click( function (ev) { ev.preventDefault(); rl.funding.addEvent() } );
			$('#events td.opt a.edit').click( function (ev) { ev.preventDefault(); rl.funding.editEvent( $(this).attr('title') ) } );
			$('#events td.opt a.del').click( function (ev) { ev.preventDefault(); if (confirm('Are you sure?')) { rl.funding.deleteEvent( $(this).attr('title') ); } } );
		},
		
		addEvent : function ()
		{
			$('#events').load( baseurl + 'funding/__addevent/id__'+this.idfunding+'/', null, function () { rl.funding.handleEventFormLoad( rl.funding.handleAddFormResponse ) } );
		},
		
		editEvent : function ( $id )
		{
			$('#events').load( baseurl + 'funding/__editevent/id__'+this.idfunding+'/idevent__'+$id+'/', null, function () { rl.funding.handleEventFormLoad( rl.funding.handleEditFormResponse ) } );
		},
		
		handleEventFormLoad : function ( callback )
		{
			$('#events form').ajaxForm( {target:'#events', success:callback} );
			$('#events form').append( '<div class="buttonbar"><a class="btn_submit" href="#">submit</a><a class="btn_cancel" href="#">cancel</a></div>' );
			$('#events form a.btn_cancel').click( function (ev) { ev.preventDefault(); rl.funding.loadEvents(); } );
			$('#events form a.btn_submit').click( function (ev) { ev.preventDefault(); $(this).parents('form').submit() } );
		},
		
		handleAddFormResponse : function (response)
		{
			// if form has been posted again
			rl.funding.handleEventFormLoad( rl.funding.handleAddFormResponse );
			// if events have been returned
			rl.funding.parseEvents();
		},
		
		handleEditFormResponse : function (response)
		{
			// if form has been posted again
			rl.funding.handleEventFormLoad( rl.funding.handleEditFormResponse );
			// if events have been returned
			rl.funding.parseEvents();
		},

		deleteEvent : function ( $id )
		{
			$('#events').load( baseurl + 'funding/__deleteevent/id__'+this.idfunding+'/idevent__'+$id+'/', null, this.parseEvents );
		},
		
		
		
		// funding guide countries --------

		parseCountries : function ()
		{
			$('#countryadd a').click( function (ev) { ev.preventDefault(); rl.funding.addCountry() } );
			$('#countries ul a.del').click( function (ev) { ev.preventDefault(); rl.funding.removeCountry( $(this).attr('title') ) } );
			$('#countries li.region a').click( function (ev) { ev.preventDefault(); rl.funding.editRegion() } );
		},
		
		editRegion : function ()
		{
			$('#countries').load( baseurl + 'funding/__editregion/id__'+this.idfunding+'/', null, function () { rl.funding.handleRegionFormLoad() } );
		},
		
		editRegionCancel : function ()
		{
			$('#countries').load( baseurl + 'funding/__countries/id__'+this.idfunding+'/', null, function () { rl.funding.parseCountries() } );

		},

		handleRegionFormLoad : function ()
		{
			var callback = function () {};
			$('#countries form').ajaxForm( {target:'#countries', success:rl.funding.handleRegionFormResponse} );
			$('#countries form').append( '<div class="buttonbar"><a class="btn_submit" href="#">submit</a><a class="btn_cancel" href="#">cancel</a></div>' );
			$('#countries form a.btn_cancel').click( function (ev) { ev.preventDefault(); rl.funding.editRegionCancel(); } );
			$('#countries form a.btn_submit').click( function (ev) { ev.preventDefault(); $(this).parents('form').submit() } );
		},
		
		handleRegionFormResponse : function ()
		{
			// if form has been posted again
			rl.funding.handleRegionFormLoad();
			// if events have been returned
			rl.funding.parseCountries();
		},
		
		addCountry : function ()
		{
			$('#countryadd').hide();
			$('#countryaddform').load( baseurl + 'funding/__addcountry/id__'+this.idfunding+'/', null, function () { rl.funding.handleCountryFormLoad() } );
		},

		addCountryCancel : function ()
		{
			$('#countryadd').show();
			$('#countryaddform').html('');
		},

		handleCountryFormLoad : function ()
		{
			var callback = function () {};
			$('#countryaddform form').ajaxForm( {target:'#countries', success:rl.funding.handleCountryFormResponse} );
			$('#countryaddform form').append( '<div class="buttonbar"><a class="btn_submit" href="#">submit</a><a class="btn_cancel" href="#">cancel</a></div>' );
			$('#countryaddform form a.btn_cancel').click( function (ev) { ev.preventDefault(); rl.funding.addCountryCancel(); } );
			$('#countryaddform form a.btn_submit').click( function (ev) { ev.preventDefault(); $(this).parents('form').submit() } );
		},
		
		handleCountryFormResponse : function ()
		{
			// if form has been posted again
			rl.funding.handleCountryFormLoad();
			// if events have been returned
			rl.funding.parseCountries();
		},
		
		removeCountry : function ($id)
		{
			$('#countries').load( baseurl + 'funding/__removecountry/id__'+this.idfunding+'/idcountry__'+$id+'/', null, function () { rl.funding.parseCountries() } );
		},
		
		
		
		// funding guide types --------
		
		parseTypes : function ()
		{
			$('#fundingtypeadd a').click( function (ev) { ev.preventDefault(); rl.funding.addType() } );
			$('#fundingtypes ul a.del').click( function (ev) { ev.preventDefault(); rl.funding.removeType( $(this).attr('title') ) } );
		},
		
		addType : function ()
		{
			$('#fundingtypeadd').hide();
			$('#fundingtypeaddform').load( baseurl + 'funding/__addtype/id__'+this.idfunding+'/', null, function () { rl.funding.handleTypeFormLoad() } );
		},
		
		addTypeCancel : function ()
		{
			$('#fundingtypeadd').show();
			$('#fundingtypeaddform').html('');
		},
		
		handleTypeFormLoad : function ()
		{
			var callback = function () {};
			$('#fundingtypeaddform form').ajaxForm( {target:'#fundingtypes', success:rl.funding.handleTypeFormResponse} );
			$('#fundingtypeaddform form').append( '<div class="buttonbar"><a class="btn_submit" href="#">submit</a><a class="btn_cancel" href="#">cancel</a></div>' );
			$('#fundingtypeaddform form a.btn_cancel').click( function (ev) { ev.preventDefault(); rl.funding.addTypeCancel(); } );
			$('#fundingtypeaddform form a.btn_submit').click( function (ev) { ev.preventDefault(); $(this).parents('form').submit() } );
		},
		
		handleTypeFormResponse : function ()
		{
			// if form has been posted again
			rl.funding.handleTypeFormLoad();
			// if events have been returned
			rl.funding.parseTypes();
		},
		
		removeType : function ($id)
		{
			$('#fundingtypes').load( baseurl + 'funding/__removetype/id__'+this.idfunding+'/idtype__'+$id+'/', null, function () { rl.funding.parseTypes() } );
		},
		
		
		
		// funding eligible candidates --------
		
		parseEligibleCandidates : function ()
		{
			$('#eligiblecandidateadd a').click( function (ev) { ev.preventDefault(); rl.funding.addEligibleCandidate() } );
			$('#eligiblecandidates ul a.del').click( function (ev) { ev.preventDefault(); rl.funding.removeEligibleCandidate( $(this).attr('title') ) } );
		},
		
		addEligibleCandidate : function ()
		{
			$('#eligiblecandidateadd').hide();
			$('#eligiblecandidateaddform').load( baseurl + 'funding/__addeligiblecandidate/id__'+this.idfunding+'/', null, function () { rl.funding.handleEligibleCandidateFormLoad() } );
		},
		
		addEligibleCandidateCancel : function ()
		{
			$('#eligiblecandidateadd').show();
			$('#eligiblecandidateaddform').html('');
		},
		
		handleEligibleCandidateFormLoad : function ()
		{
			var callback = function () {};
			$('#eligiblecandidateaddform form').ajaxForm( {target:'#eligiblecandidates', success:rl.funding.handleEligibleCandidateFormResponse} );
			$('#eligiblecandidateaddform form').append( '<div class="buttonbar"><a class="btn_submit" href="#">submit</a><a class="btn_cancel" href="#">cancel</a></div>' );
			$('#eligiblecandidateaddform form a.btn_cancel').click( function (ev) { ev.preventDefault(); rl.funding.addEligibleCandidateCancel(); } );
			$('#eligiblecandidateaddform form a.btn_submit').click( function (ev) { ev.preventDefault(); $(this).parents('form').submit() } );
		},
		
		handleEligibleCandidateFormResponse : function ()
		{
			// if form has been posted again
			rl.funding.handleEligibleCandidateFormLoad();
			// if events have been returned
			rl.funding.parseEligibleCandidates();
		},
		
		removeEligibleCandidate : function ($id)
		{
			$('#eligiblecandidates').load( baseurl + 'funding/__removeeligiblecandidate/id__'+this.idfunding+'/idtype__'+$id+'/', null, function () { rl.funding.parseEligibleCandidates() } );
		}
};

