/**************************************************************

	Script		: mooSwitch
	Version		: 1.0.5
	Author		: Liam Smart
	Licence		: Open Source MIT Licence
	Usage		: window.addEvent('domready', function(){
					  //call mooSwitch
					  if($$('.mooSwitch').length > 0)//only triggered if 'mooSwitch' class is found on page
					  {
							var initSwitch = new mooSwitch({
								container: $(document.body),//inline font-size style will be applied to this
								linksContainer: $('ChangeTextSize'),//container that holds the text size links (error message will be output here)
								templateContainer: $('ChangeTemplate'),//container that holds the template switch links (error message will be output here)
								smallSize: '52.5%',//small font size
								mediumSize: '62.5%',//medium font size
								largeSize: '72.5%',//large font size
								smallLink: '.mooSwitch li.small a',//link to trigger small font (could be the li, or an image etc.)
								mediumLink: '.mooSwitch li.medium a',//link to trigger medium font (could be the li, or an image etc.)
								largeLink: '.mooSwitch li.large a',//link to trigger large font (could be the li, or an image etc.)
								defaultSize: 'small',//if no cookies are set there must be a default size to set page to (options: 'small','medium','large')
								templateOne: './styles/TemplateOne.css',//path to template one stylesheet
								templateTwo: './styles/TemplateTwo.css',//path to template two stylesheet
								alertsPos: 'bottom',//where to inject the alerts relative to the containers specified (allowed: 'top','bottom','after','before' see: http://mootools.net/docs/Element/Element#Element:inject)
								speed: 400//duration the transition will take
					  		}).start();
					  };
				});

**************************************************************/

//start mooSwitch class
var mooSwitch = new Class({
	
	//implements
	Implements:[Options],

	//options
	options:{
		container: $(document.body),//inline font-size style will be applied to this
		linksContainer: $('ChangeTextSize'),//container that holds the text size links (error message will be output here)
		templateContainer: $('ChangeTemplate'),//container that holds the template switch links (error message will be output here)
		smallSize: '52.5%',//small font size
		mediumSize: '62.5%',//medium font size
		largeSize: '72.5%',//large font size
		smallLink: '.mooSwitch li.small a',//link to trigger small font (could be the li, or an image etc.)
		mediumLink: '.mooSwitch li.medium a',//link to trigger medium font (could be the li, or an image etc.)
		largeLink: '.mooSwitch li.large a',//link to trigger large font (could be the li, or an image etc.)
		defaultSize: 'small',//if no cookies are set there must be a default size to set page to (options: 'small','medium','large')
		templateOne: './styles/TemplateOne.css',//path to template one stylesheet
		templateTwo: './styles/TemplateTwo.css',//path to template two stylesheet
		alertsPos: 'bottom',//where to inject the alerts relative to the containers specified (allowed: 'top','bottom','after','before' see: http://mootools.net/docs/Element/Element#Element:inject)
		speed: 400//duration the transition will take
	},
	
	//initialization
	initialize:function(options)
	{
		//set options
		this.setOptions(options);
	},
	
	//detect whether or not cookies are enabled
	start:function()
	{
		//set font size to small as default
		var myCookieSizeSet = Cookie.write('mooSwitchTest','1',{duration:365});
		var myCookieSizeRead = Cookie.read('mooSwitchTest');
		var myCookieSaved = Cookie.read('mooSwitchSaved');
			
		//if cookie above was not successfully set then display error div but only if first visit
		if(myCookieSizeRead == 1 && myCookieSaved == null)
		{
			//build div as first time user with cookies enabled
			if(this.options.linksContainer != null)//prevent an error if linksContainer isnt specified
			{
				var cookieAlert = new Element('div').inject(this.options.linksContainer,this.options.alertsPos);

				cookieAlert.addClass('mooSwitchAlertGreen');
				cookieAlert.set('html','<p>Your settings will be saved from now on!</p>');
			}
			else if(this.options.templateContainer != null)//try template links container
			{
				var cookieAlert = new Element('div').inject(this.options.linksContainer,'after');
				cookieAlert.addClass('mooSwitchAlertGreen');
				cookieAlert.set('html','<p>Your settings will be saved from now on!</p>');
			}
			else//just inject it at top of container
			{
				var cookieAlert = new Element('div').inject(this.options.container,'top');
				cookieAlert.addClass('mooSwitchAlertGreen');
				cookieAlert.set('html','<p>Your settings will be saved from now on!</p>');
			};
				
			//set cookie so this loop isnt triggered for another year
			Cookie.write('mooSwitchSaved','1',{duration:365});
		}
		else if(myCookieSizeRead == null)
		{
			//build enable cookie alert div as cookies disabled
			if(this.options.linksContainer != null)//prevent an error if linksContainer isnt specified
			{
				var cookieAlert = new Element('div').inject(this.options.linksContainer,'after');
				cookieAlert.addClass('mooSwitchAlertRed');
				cookieAlert.set('html','<p>You need to enable cookies for settings to be saved!</p>');
			}
			else if(this.options.templateContainer != null)//try template links container
			{
				var cookieAlert = new Element('div').inject(this.options.linksContainer,'after');
				cookieAlert.addClass('mooSwitchAlertRed');
				cookieAlert.set('html','<p>You need to enable cookies for settings to be saved!</p>');
			}
			else//just inject it at top of container
			{
				var cookieAlert = new Element('div').inject(this.options.container,'after');
				cookieAlert.addClass('mooSwitchAlertRed');
				cookieAlert.set('html','<p>You need to enable cookies for settings to be saved!</p>');
			};
		};
		
		//call next function
		this.setCookies();
	},
	
	//start building the collapsibles
	setCookies:function()
	{
		//set up size variables
		var myCookieSize = Cookie.read("mooSwitchSize");
		var myCookieTemplate = Cookie.read("mooSwitchTemplate");
		var smallA = $$(this.options.smallLink);
		var mediumA = $$(this.options.mediumLink);
		var largeA = $$(this.options.largeLink);
		var templateOne = $$(".mooSwitch li.TemplateOne a");
		var templateTwo = $$(".mooSwitch li.TemplateTwo a");
		var morphTextSize = new Fx.Morph(this.options.container,{duration:this.options.speed,transition:Fx.Transitions.linear,'unit':'%'});
		
		//check to see if a template was ever set
		if(myCookieTemplate == null)
		{
			//set cookie to default template one so rest of class will work and set variable
			Cookie.write('mooSwitchTemplate','One',{duration:365});
			myCookieTemplate = Cookie.read("mooSwitchTemplate");
		};
		
		//set link selected class to selected depending on cookie value
		if(myCookieSize == "large")
		{
			//change selected states
			smallA.removeClass('selected');
			mediumA.removeClass('selected');
			largeA.addClass('selected');
			
			//change text size
			this.options.container.setStyle('font-size',this.options.largeSize);
		}
		else if(myCookieSize == "medium")
		{
			//change selected states
			smallA.removeClass('selected');
			mediumA.addClass('selected');
			largeA.removeClass('selected');
			
			//change text size
			this.options.container.setStyle('font-size',this.options.mediumSize);
		}
		else if(myCookieSize == "small")
		{
			//change selected states
			smallA.addClass('selected');
			mediumA.removeClass('selected');
			largeA.removeClass('selected');
			
			//change text size
			this.options.container.setStyle('font-size',this.options.smallSize);
		}
		else if(myCookieSize != null)
		{
			//change text size since it must be a percentage value for second template
			this.options.container.setStyle('font-size',myCookieSize+'%');
		}
		else
		{
			//if its default template & no cookie-size revert to default option
			if(myCookieTemplate == 'One')
			{
				if(this.options.defaultSize == 'large')
				{
					Cookie.write('mooSwitchSize',this.options.defaultSize,{duration:365});
					largeA.addClass('selected');
					this.options.container.setStyle('font-size',this.options.largeSize);
				}
				else if(this.options.defaultSize == 'medium')
				{
					Cookie.write('mooSwitchSize',this.options.defaultSize,{duration:365});
					mediumA.addClass('selected');
					this.options.container.setStyle('font-size',this.options.mediumSize);
				}
				else
				{
					Cookie.write('mooSwitchSize',this.options.defaultSize,{duration:365});
					smallA.addClass('selected');
					this.options.container.setStyle('font-size',this.options.smallSize);
				};
			};
		};
		
		//set up events for each link to set cookie value
		//small
		smallA.addEvents
		({
			'click': function(event)
			{
				//prevent default
				event.preventDefault();
				
				//morph text size and set cookie
				if(myCookieTemplate == 'One')
				{
					//set cookie
					Cookie.write('mooSwitchSize','small',{duration:365});
					
					//set font size
					morphTextSize.start({
						'font-size': this.options.smallSize
					});
					
					//change selected states
					smallA.addClass('selected');
					mediumA.removeClass('selected');
					largeA.removeClass('selected');
				}
				else
				{
					if(this.options.container.getStyle('font-size').toInt() >= this.options.smallSize.toInt())
					{
						//set cookie
						Cookie.write('mooSwitchSize',this.options.container.getStyle('font-size').toInt()-5,{duration:365});
						
						//set font size
						morphTextSize.start({
							'font-size': this.options.container.getStyle('font-size').toInt()-5+'%'
						});
					};
				};
			}.bind(this)
		},this);

		//medium
		mediumA.addEvents
		({
			'click': function(event)
			{
				//prevent default
				event.preventDefault();
				
				//morph text size and set cookie
				if(myCookieTemplate == 'One')
				{
					//set cookie
					Cookie.write('mooSwitchSize','medium',{duration:365});
					
					//set font size
					morphTextSize.start({
						'font-size': this.options.mediumSize
					});
					
					//change selected states
					smallA.removeClass('selected');
					mediumA.addClass('selected');
					largeA.removeClass('selected');
				};
			}.bind(this)
		},this);
		
		//large
		largeA.addEvents
		({
			'click': function(event)
			{
				//prevent default
				event.preventDefault();
				
				//morph text size and set cookie
				if(myCookieTemplate == 'One')
				{
					//set cookie
					Cookie.write('mooSwitchSize','large',{duration:365});
					
					//set font size
					morphTextSize.start({
						'font-size': this.options.largeSize
					});
					
					//change selected states
					smallA.removeClass('selected');
					mediumA.removeClass('selected');
					largeA.addClass('selected');
				}
				else
				{
					if(this.options.container.getStyle('font-size').toInt() <= this.options.largeSize.toInt())
					{
						//set font size
						morphTextSize.start({
							'font-size': this.options.container.getStyle('font-size').toInt()+5+'%'
						});
						
						//set cookie
						Cookie.write('mooSwitchSize',this.options.container.getStyle('font-size').toInt()+5,{duration:365});
					};
				};
			}.bind(this)
		},this);
		
		//set link to selected depending on cookie value
		if(myCookieTemplate == "Two")
		{
			//change selected states
			templateOne.removeClass('selected');
			templateTwo.addClass('selected');
			
			//change template
			var myCSS = new Asset.css('./styles/TemplateTwo.css',{id:'TemplateTwo',title:'TemplateTwo'});
		}
		else
		{
			//change selected states
			templateOne.addClass('selected');
			templateTwo.removeClass('selected');
		};
		
		//set up events for each link to set cookie value
		//template one
		templateOne.addEvents
		({
			'click': function(event)
			{
				//prevent default
				event.preventDefault();
				
				//check to make sure mot already on this template
				if(myCookieTemplate != 'One')
				{
					//set cookie
					Cookie.write('mooSwitchTemplate','One',{duration:365});
					
					//set template
					var myCSS = new Asset.css(this.options.templateOne,{id:'TemplateOne'});
					
					//change selected states
					templateOne.addClass('selected');
					templateTwo.removeClass('selected');
					
					//refresh page
					window.location.reload();
				};
			}.bind(this)
		},this);
		
		//template two
		templateTwo.addEvents
		({
			'click': function(event)
			{
				//prevent default
				event.preventDefault();
				
				//check to make sure mot already on this template
				if(myCookieTemplate != 'Two')
				{
					//set cookie
					Cookie.write('mooSwitchTemplate','Two',{duration:365});
					
					//set template
					var myCSS = new Asset.css(this.options.templateOne,{id:'TemplateTwo'});
					
					//change selected states
					templateOne.removeClass('selected');
					templateTwo.addClass('selected');
					
					//refresh page
					window.location.reload();
				};
			}.bind(this)
		},this);
	}
});