/**
 * Dynamic HTML effects
 */

/**
 * Base href without anchor
 */
var SiteNavHilite = 0;
var Href = location.href;
if(Href.indexOf('#') != -1)
	Href = Href.substring(0,Href.indexOf('#'));

/**
 * Global footprint map (plus more within domready fn below)
 */
MapGlobal_Elements = [];
function MapGlobal_over(el)
{
	for(var i = 0;i < MapGlobal_Elements.length;i++)
	{
		if(MapGlobal_Elements[i].hasClass('Inactive'))
			continue;
		if(MapGlobal_Elements[i] != el)
		{
			MapGlobal_Elements[i].getElement('.Popup').fade('out');
			MapGlobal_Elements[i].removeClass('Active');
		}
		else
		{
			MapGlobal_Elements[i].getElement('.Popup').fade('in');
			MapGlobal_Elements[i].addClass('Active');
		}
	}
}
function MapGlobal_out(el)
{
	if(el.hasClass('Inactive'))
		return;
	el.getElement('.Popup').fade('out').get('tween').chain(function(){ el.removeClass('Active'); });
}

/**
 * Reset file button
 * As stand alone function (was problems with cloning)
 */
function reset_file_btn(ID)
{
	$(ID + '_prompt').style.display = 'inline-block';
	$(ID + '_value').innerHTML = '';
	$(ID + '_value').style.display = 'none';
	$(ID + '_temp').style.display = 'block';

	var el = $(ID);
	var el2 = el.clone(false,true).cloneEvents(el);
	$(ID).dispose();
	el2.inject(ID + '_btn');
}

/**
 * Reset uploaded file button
 * As stand alone function (was problems with cloning)
 */
function reset_file_temp_btn(ID)
{
	$(ID + '_prompt').style.display = 'inline-block';
	$(ID + '_TEMP_FILE').value = '';
	$(ID + '_value').style.display = 'block';
	$(ID + '_temp').style.display = 'none';
	$(ID + '_temp').innerHTML = '';
}

// // // // // // // // // // // // // // // //

window.addEvent('domready', function() {	

/**
 * Navigation highlights
 */
$(document.body).getElements('.Nav-'+page_id).each(function(el,i){
	el.getParent().addClass('On');
});
$(document.body).getElements('.Nav a').each(function(el,i){
	if(Href == el.href)
		el.getParent().addClass('On');

	//@hack highlight parent items - rough for now
	//test is: if has child parts of URL and is not first item
	if(Href.indexOf(el.href+'/') == 0 && el.getParent() != el.getParent().getParent().children[0])
		el.getParent().addClass('On');
});

/**
 * Make whole area of Action Buttons clickable
 */
$('Content').getElements('.Action-Btn').each(function(el,i){
	el.style.cursor = 'pointer';
	el.addEvent('click',function(){
		window.location.href = this.getElement('a').href;
	});
});

/**
 * Highlight context nav items
 */
$('Content').getElements('.Context-Nav a').each(function(el,i){
	if(Href == el.href)
		el.getParent().addClass('Active');
});

/**
 * File input fields
 */
$('Content').getElements('input[type=file]').each(function(el,i){
	el.addEvent('change',function(){
		var s = this.value;
		if(s.indexOf('/') > -1 || s.indexOf('\\') > -1)
			var m = s.match(/(.*)[\/\\]([^\/\\]+\.[a-zA-Z0-9_-]+)$/);
		else
			var m = new Array();
		s = (m.length > 1)? m[2]:s;
		if(s.length > 24)
			s = s.substring(0,11) + '...' + s.substring(s.length - 11,s.length);
		
		s = 'You have selected: '+s;
		s+= ' (<a href="#">remove</a>)';
		$(this.id + '_value').innerHTML = s;
		$(this.id + '_value').getElement('a').addEvent('click',function(){
			var ID = this.getParent().id.substring(0,this.getParent().id.length-6);
			reset_file_btn(ID);
			return false;
		});
		$(this.id + '_value').style.display = 'block';
		$(this.id + '_temp').style.display = 'none';
		$(this.id + '_prompt').style.display = 'none';
	});
	
	el.addEvent('focus',function(){
		this.getParent().addClass('Active');
	});

	el.addEvent('blur',function(){
		this.getParent().removeClass('Active');
	});

	var elTemp = $(el.id + '_temp');
	if(elTemp && elTemp.innerHTML)
	{
		elTemp.innerHTML+= ' (<a href="#">remove</a>)';
		$(el.id + '_prompt').style.display = 'none';
		elTemp.getElement('a').addEvent('click',function(){
			var ID = this.getParent().id.substring(0,this.getParent().id.length-5);
			reset_file_temp_btn(ID);
			return false;
		});
	}
});

/**
 * Sector tiles
 */
$('Content').getElements('.Sectors-Tiles a').each(function(el,i){
	el.fade('out');
	el.getParent().addEvent('mouseover',function(){
		this.getElement('a').fade('in');
	});
	el.getParent().addEvent('mouseout',function(){
		this.getElement('a').fade('out');
	});
});

/**
 * Global Footprint map
 */
MapGlobal_Elements = $(document.body).getElements('#Map-Global-1 li');

MapGlobal_Elements.each(function(el,i){
	el.addEvent('mouseover',function(){
		MapGlobal_over(this);
	});
	el.addEvent('mouseout',function(){
		MapGlobal_out(this);
	});
});

if(MapGlobal_Elements.length && $('Map-Global-1-Filter'))
{
	$('Map-Global-1-Filter').addEvent('change',function(){
		for(var i = 0;i < MapGlobal_Elements.length;i++)
		{
			MapGlobal_Elements[i].removeClass('Active');
				MapGlobal_Elements[i].getElement('.Popup').fade('hide');
			if(!MapGlobal_Elements[i].hasClass(this.value))
			{
				MapGlobal_Elements[i].addClass('Inactive');
			}
			else
			{
				MapGlobal_Elements[i].getElement('.Popup').fade('hide');
				MapGlobal_Elements[i].removeClass('Inactive');
			}
		}
	
		for(var i = 0;i < MapGlobal_Elements.length;i++)
		{
			if(MapGlobal_Elements[i].hasClass(this.value))
			{
				MapGlobal_Elements[i].addClass('Active');
				MapGlobal_Elements[i].getElement('.Popup').fade(Browser.ie? 'show':'in');
				break;
			}
		}
	});
	$('Map-Global-1-Filter').fireEvent('change');
}

/**
 * Panel filter sub-lists
 */
$(document.body).getElements('.Content-Sidebar .Panel-Contents.Filter .Parent').each(function(el,i){
	el.Slide = new Fx.Slide(el.getElement('ul'),{
		
	});
	if(el.hasClass('Open'))
		el.Slide.slideIn();
	else
		el.Slide.hide();
	el.getElement('ul').style.display = 'block';
	el.getElement('a').addEvent('click',function(){
		var Parent = this.getParent();
		Parent.Slide.toggle();
		this.blur();
		if(Parent.Slide.open)
			Parent.removeClass('Open');
		else
			Parent.addClass('Open');
		return false;
	});
});

/**
 * List item titles
 */
$(document.body).getElements('.List-Item h2').each(function(el,i){
	if(el.getSize().y < 40)
		el.addClass('Short-Title');
});

/**
 * Handle Ajax-based forms
 */
$(document.body).getElements('form.Request-Enabled').each(function(form_el,form_i){

	form_el.addEvent('submit',function(){
		
		this.getElement('button[type=submit]').blur();
		this.set('send',{
			url: this.action + (this.action.indexOf('?') == -1? '?':'&') + 'return=ajax',
			async: false,
			onRequest:function(){
				this.Form.addClass('Loading');
				this.Form.getElement('.Form-Msg').set('text','');
				this.Form.getElements('input,select,textarea').each(function(el,el_i){
					el.set('disabled',true);
				});
			},
			onComplete:function(json){
				var Time = new Date();
				var Form = this.Form;
				var Diff = Time.getTime() - Form.Timestart;
				var json = (arguments.length >= 1 && json)? json:'';
				(function(){
					Form.removeClass('Loading');
					if(json)
					{
						json = JSON.decode(json);
						var ResultError = json.result == 'error'? true:false;
						var Msg = Form.getElement('.Form-Msg');
						Msg.innerHTML = json.msg;

						Msg.removeClass('Error');
						if(ResultError)
							Msg.addClass('Error');
						Msg.Color = Msg.set('style','');//reset colour
						Msg.Color = Msg.getStyle('color');

						Msg.tween('color','#fafafa').get('tween').chain(function(){
							Msg.tween('color',Msg.Color);
						});

						Form.getElements('input,select,textarea').each(function(el,el_i){
							var Parent = el.getParent();
							Parent.removeClass('Field-Error');
							el.set('disabled',false);
							for(var i = 0;i < json.error_types.length;i++)
							{
								if(json.error_types[i].field == el.name)
								{
									Parent.addClass('Field-Error');
									Parent.getElement('.Label-Field-Error-Note span em').set('text',json.error_types[i].error);
									break;
								}
							}
						});

						if(!ResultError && json.download)
							window.location = json.download;

						if(!ResultError)
							Form.reset();
					}
				}).delay((1000 - Diff > 0)? 1000 - Diff:0);
			},
			onFailure:function(){
				this.Form.removeClass('Loading');
				var Msg = Form.getElement('.Form-Msg');
				Msg.innerHTML = 'An error has occured, please try again later';
				Msg.removeClass('Error');
				if(json.result == 'error')
					Msg.addClass('Error');
				Msg.Color = Msg.getStyle('color');
				Msg.tween('color','#fafafa').get('tween').chain(function(){
					Msg.tween('color',Msg.Color);
				});
			}
		});
		this.get('send').Form = this;
		var Time = new Date();
		this.Timestart = Time.getTime();
		this.send();
		return false;
	});

});

/**
 * Title back links
 */
$(document.body).getElements('.Link-Back').each(function(el,i){
	if(document.referrer && document.referrer.indexOf(window.location.hostname) != -1)
	{
		//@todo: just for links? (which are base link, e.g news, but use js for news/tag, news/year etc)
		if(el.href && document.referrer.indexOf(el.href) == 0)
		{
			el.addEvent('click',function(){
				history.go(-1);
				return false;
			});
			//el.addStyle('cursor','pointer');
			el.style.cursor = 'pointer';
		}
	}
});

/**
 * Scroll to active panel
 * 
 * Usually set to active after a form post (page reload).
 * Expexts just one active panel at a time.
 */
var el = $(document.body).getElement('.Panel-Active');
if(el && el.id)
{
	//hide other panels -- @todo: will probably need to review this
	ActivePanel = el.getParent();
	ActivePanel.getParent().getChildren().each(function(el,i){
		if(ActivePanel != el)
			el.setStyle('display','none');
		else
		{
			el.setStyle('display','block');
			var child_el = el.getElement('.Panel');
			if(child_el)
			{
				child_el.removeClass('Panel-Inactive');
				child_el.setStyle('display','block');
			}
		}
	});

	window.location = Href+'#'+el.id;
	scrollTo(0,0);
	var scrollFx = new Fx.Scroll(window);
	(function() { scrollFx.toElement(el,'y'); }).delay(200);
}

/**
 * Flashing message
 * 
 * Note using color to avoid IE Clear Text text issues with opacity animations.
 */
$(document.body).getElements('.Msg-Flash').each(function(el,i){
	el.Color = el.getStyle('color');
	el.Neutral = '#fafafa';
	el.tween('color',el.Neutral).get('tween').chain(function(){
		el.tween('color',el.Color).get('tween').chain(function(){
			el.tween('color',el.Neutral).get('tween').chain(function(){
				el.tween('color',el.Color);
			});
		});
	});
});

/**
 * Show form loading
 */
$(document.body).getElements('form').each(function(el,i){
	if(el.hasClass('Request-Enabled'))
		return;
	el.addEvent('submit',function(){
		this.addClass('Loading');
		return true;
	});
});

/**
 * Hide inactive panels
 */
$(document.body).getElements('.Panel-Inactive').each(function(el,i){
	el.setStyle('display','none');
});
$(document.body).getElements('.Link-Panel-Inactive').each(function(el,i){
	if(el.href.indexOf('#') != -1)
	{
		el.linkID = el.href.substring(el.href.indexOf('#')+1,el.href.length);
		el.addEvent('click',function(el,i){
			if(this.linkID && $(this.linkID))
			{
				var F = $(this.linkID);
				$(this.linkID).getParent().getChildren().each(function(el,i){
					if(F != el)
						el.setStyle('display','none');
					else
					{
						el.setStyle('display','block');
						var child_el = el.getElement('.Panel');
						if(child_el)
						{
							child_el.removeClass('Panel-Inactive');
							child_el.setStyle('display','block');
						}
					}
				});
			}
		});
	}
});

/**
 * Set feature client buttons
 */
$(document.body).getElements('.Feature-Appt .Appointments .List a.Button2').each(function(el,i){
	el.Ref = el.getParent().getElement('.Title span').innerHTML;
	el.linkID = el.href.substring(el.href.indexOf('#')+1,el.href.length);
	el.addEvent('click',function(){
		var Input = $(el.linkID).getElement('form input[name=appointments_ref]');
		Input.value = el.Ref;
	});
});


/**
 * Scroll-to links
 */
$(document.body).getElements('a.ScrollTo').each(function(el,i){

	el.addEvent('click',function(){
		Target = this.id.substring(3,this.id.length);
		var scrollFx = new Fx.Scroll(window);
		scrollFx.toElement($(Target),'y');
		return false;
	});

});

//end window.addEvent()
});


