if (window.location.search)
	window.location = window.location.href.replace("?", "#");

window.ready = false; //For poor IE

//Check if window has an attached console, example: Firebug, IE Developer Tools
if (!window.console)
{
    //If no Console, create vanilla one so console.log(str) will not fail.
    console = new Object();
    
    console.log = function(str)
    {
        return;
    }
    
    console.error = function(str)
    {
        alert(str);
    }
}

//GLOBALS
var Scroller;
var LoadingAnimation;
var Notify;
var Adornings = $H();

mkGallery = function(g)
{
	//Clean Up hidden items.
	var hiddens = g.getElements('.hidden');
	
	g.canvas = g.getElement('.canvas');
	g.nextButton = g.getElement('.lightbox_buttons .next');
	g.prevButton = g.getElement('.lightbox_buttons .prev');
	g.returnButton = g.getElement('.lightbox_buttons .return');
	g.currentImage = g.getElement('.canvas img');
	
	g.thumbs = g.getElement('.thumbs');
	
	hiddens.each(function(h)
	{
		h.setStyle('display', 'none');
		h.removeClass('hidden');
	});
	
	g.images = JSON.decode($('all_images_json').value);
	for (var i in g.images)
	{
		g.images[i].imgElement = Asset.image(g.images[i].i);
		g.images[i].imgElement.fade('hide');
	};
	
	g.getElements('.thumbs a').each(function(a)
	{
		a.query = AJAXify.buildQueryArray(a.href);
		a.image = this.images[a.query.i];
		
		a.addEvent('click', function(event)
		{
			var g = this.getParent('.gallery');
			
			g.canvas.reveal();
			g.thumbs.dissolve();
			this.image.imgElement.fade('hide').replaces(g.currentImage).fade('in');
			g.currentImage = this.image.imgElement;
			g.currentImage.next = this.image.next;
			g.currentImage.prev = this.image.prev;
			
			if ($type(event)) event.stop();
		});
	}.bind(g));
	
	$$(g.nextButton, g.prevButton).each(function(el)
	{				
		el.setStyle('opacity', '0.1');
		
		el.addEvents({
			'mouseenter': function()
			{
				this.tween('opacity', '0.6');
			},
			'mouseleave': function()
			{
				this.tween('opacity', '0.1');
			}
		});
	});
	g.returnButton.setStyle('opacity', '0.4');
	g.returnButton.addEvents({
		'mouseenter': function()
		{
			this.tween('opacity', '0.6');
		},
		'mouseleave': function()
		{
			this.tween('opacity', '0.4');
		}
	});
	
	g.nextButton.addEvent('click', function(event)
	{
		var nextImage = this.images[this.currentImage.next];
		
		nextImage.imgElement.fade('hide').replaces(this.currentImage).fade('in');
		this.currentImage = nextImage.imgElement;
		this.currentImage.next = nextImage.next;
		this.currentImage.prev = nextImage.prev;
		
		if ($type(event)) event.stop();
	}.bind(g));

	g.prevButton.addEvent('click', function(event)
	{
		var prevImage = this.images[this.currentImage.prev];
		
		prevImage.imgElement.fade('hide').replaces(this.currentImage).fade('in');
		this.currentImage = prevImage.imgElement;
		this.currentImage.next = prevImage.next;
		this.currentImage.prev = prevImage.prev;
		
		if ($type(event)) event.stop();
	}.bind(g));
	
	g.returnButton.addEvent('click', function(event)
	{
		this.thumbs.reveal();
		this.canvas.dissolve();
		
		if ($type(event)) event.stop();
	}.bind(g));
};
Adornings.set('mkGalleries', function(A)
{
	if ($type(A) != 'element')
		A = $(document.body);
		
	A.getElements('.gallery').each(mkGallery);
});

mkLightbox = function(g)
{
	g.images = JSON.decode($('all_images_json').value);
	
	$each(g.images, function(i)
	{
		i.imgElement = Asset.image(i.i);
	});
	
	g.close = function(event)
	{
		g.current.fade('out');
		g.backdrop.fade('out');
		(function() 
		{
			g.backdrop = g.backdrop.dispose();
			g.current = g.current.dispose();
		
			g.fireEvent('lightbox-closed');
		}).delay(500, this);
		
		event.stop();
	}.bind(g);
	
	g.backdrop = new Element('div',
	{
		'styles': {
			'background-color': '#333333',
			'height': '100%',
			'width': '100%',
			'position': 'absolute',
			'top': '0px',
			'left': '0px'
		},
		'opacity': 0,
		'events': {
			'click': g.close
		}
	});
	g.current = new Element('div');
	
	g.getElements('td a').each(function(a, index)
	{
		a.query = AJAXify.buildQueryArray(a.href);
		var thumb = a.getElement('img');
		var image = g.images[a.query.i].imgElement;
		
		var div = new Element('div', {
			'styles': {
				'height': thumb.height,
				'width': thumb.width,
				'overflow': 'hidden',
				'position': 'relative'
			},
		}).adopt(image);
		
		var corners = ['topLeft',
					 'topRight',
					 'bottomLeft',
					 'bottomRight'];
		
		div.scrollImage = new Fx.Move(image, {
			relativeTo: div,
			duration: 2000,
			onComplete: function()
			{
				this.history = this.history || [];
				
				if (this.history.length >= corners.length)
				{
					var temp = this.history.getLast();
					this.history.empty().push(temp);
				}
				
				var corner;
				var corners_temp = $A(corners);
				do {
					corner = corners_temp.getRandom();
					corners_temp.erase(corner);
					
					if (corners_temp.length == 0)
					{
						this.history.empty();
						break;
					}
				} while (this.history.contains(corner))
				
				this.history.push(corner);
				
				this.start.delay(400, this, {position: corner, edge: corner});
			},
			onStart: function()
			{
				if (this.isPaused)
					this.pause();
			},
		});
		
		g.addEvent('lightbox-opened', function()
		{
			g.ignoreEvents = true;
			this.isPaused = true;
			this.pause();
		}.bind(div.scrollImage));
		
		g.addEvent('lightbox-closed', function()
		{
			g.ignoreEvents = false;
			this.isPaused = false;
			this.resume();
		}.bind(div.scrollImage));
		
		a.empty().adopt(div);
		image.position({relativeTo: div});
		
		a.addEvents({
			'click': function(event)
			{
				if ($chk(g.ignoreEvents))
					return false;
				
				g.fireEvent('lightbox-opened');
				
				var self = this.clone()
					.setStyle('position', 'absolute')
					.set('opacity', 0)
					.removeEvents()
					.addEvent('click', g.close);
				
				var div = self.getElement('div');
				var img = div.getElement('img');
				
				$('column').adopt(g.backdrop, self);
				self.setPosition(this.getPosition());
				
				var imgSize = img.getSize();
				
				img.morph({ 'top': 0, 'left': 0});
				div.morph({ 'height': imgSize.y, 'width': imgSize.x});
				
				self.move({position: 'topCenter', offset: {x: -imgSize.x / 2, y: 60}});
				self.get('morph', {link: 'chain'})
				.start({
					'height': imgSize.y,
					'width': imgSize.x,
					'opacity': 1
				})
				.chain(function () 
				{
					g.backdrop.fade(.6);
					g.current = self;
				});
				
				event.stop();
			},
			'mouseenter': function()
			{
				this.getElement('div').scrollImage.isPaused = true;
				this.getElement('div').scrollImage.pause();
			},
			'mouseleave': function()
			{
				this.getElement('div').scrollImage.isPaused = false;
				this.getElement('div').scrollImage.resume();
			},
		});
		
		var corner = corners.getRandom();
		
		div.scrollImage.start.delay(index * 400,div.scrollImage, {position: corner, edge: corner});
		div.scrollImage.history = $splat(corner);
	});
};
Adornings.set('mkLightboxes', function(A)
{
	if ($type(A) != 'element')
		A = $(document.body);
		
	A.getElements('.lightbox').each(mkLightbox);
});

mkBrowser = function(b)
{
	//Clean Up hidden items.
	var hiddens = b.getElements('.hidden');
	
	hiddens.each(function(h)
	{
		h.fade('hide');
		h.removeClass('hidden');
	});
	
	//Back Button
	b.back = b.getElement('.buttonBck');
	b.back.history = new Array();
	b.back.setStyle('cursor', 'default');
	b.back.erase('title');
	
	//Forward Button
	b.forward = b.getElement('.buttonFwd');
	b.forward.history = new Array();
	b.forward.setStyle('cursor', 'default');
	b.forward.erase('title');
	
	b.locations = b.getElements('.location')
	b.locations[0].setStyle('display', 'none');
	b.locations[0].goImg = b.locations[0].getElement('img');
	b.locations.fade('show');
	
	b.tabs = b.getElement('.tabs');
	b.sites = {
		'swtx': b.getElement('#swtx'),
		'pronto': b.getElement('#pronto'),
		'aocr': b.getElement('#aocr'),
		'hsg': b.getElement('#hsg'),
		'favs': b.getElement('#favs')
	};
	b.current = 'favs';
	
	//Wire up Chrome logic
	b.browseTo = function(to)
	{
		if (to != this.current)
		{
			this.back.history.push(this.current);
			this.forward.history.empty();
			this.switchPage(this.current, to);
		}
	};
	b.browseBack = function(event)
	{
		var b = this.getParent('.browser');
		b.forward.history.push(b.current);
		b.switchPage(b.current, this.history.pop());
		if ($type(event)) event.stop();
	};
	b.browseForward = function(event)
	{
		var b = this.getParent('.browser');
		b.back.history.push(b.current);
		b.switchPage(b.current, this.history.pop());
		if ($type(event)) event.stop();
	};
	b.switchPage = function(from, to)
	{
		this.sites[from].fade('out');
		this.sites[to].fade('in');
		this.current = to;
		this.validateNav();
	};
	
	b.validateNav = function()
	{
		if (this.back.history.length > 0)
		{
			this.back.setStyles({
				'background-image': 'url(images/Gallery/BrowserBckBttn.png)',
				'cursor': 'pointer'
			});
			this.back.addEvent('click', this.browseBack);
		}
		else
		{
			this.back.setStyles({
				'background-image': 'url(images/Gallery/BrowserBckBttnDisabled.png)',
				'cursor': 'default'
			});
			this.back.removeEvent('click', this.browseBack);
		}
		
		if (this.forward.history.length > 0)
		{
			this.forward.setStyles({
				'background-image': 'url(images/Gallery/BrowserFwdBttn.png)',
				'cursor': 'pointer'
			});
			this.forward.addEvent('click', this.browseForward);
		}
		else
		{
			this.forward.setStyles({
				'background-image': 'url(images/Gallery/BrowserFwdBttnDisabled.png)',
				'cursor': 'default'
			});
			this.forward.removeEvent('click', this.browseForward);
		}
		
		this.tabs.getElements('a').removeClass('current');
		
		if (this.current == "favs")
		{
			this.locations[0].setStyle('display', 'none');
			this.locations[1].setStyle('display', 'inline-block');
			this.tabs.fade('out');
			
			this.locations[0].href = '#';
			this.locations[0].set('text', '');
			this.locations[0].adopt(this.locations[0].goImg);
		}
		else
		{
			this.locations[0].setStyle('display', 'inline-block');
			this.locations[1].setStyle('display', 'none');
			this.tabs.fade('in');
			
			var url;
			switch(this.current)
			{
				case "swtx":
					url = 'http://www.studioworkstx.com';
					this.tabs.getElement('.swtx').addClass('current');
					break;
				case "pronto":
					url = 'http://www.pronto-delivery.com';
					this.tabs.getElement('.pronto').addClass('current');
					break;
				case "aocr":
					url = 'http://www.aocrgroup.com';
					this.tabs.getElement('.aocr').addClass('current');
					break;
				case "hsg":
					if (this.sites.hsg.getElement('img').src.contains('myMoney'))
						url = 'http://mymoney.hatalasystemsgroup.com/';
					else
						url = 'http://hatalasystemsgroup.com/OnLineOrdering/';
						
					this.tabs.getElement('.hsg').addClass('current');
					break;
				default:
					url = '#';
					break;                            
			}
			
			this.locations[0].href = url;
			this.locations[0].set('text', url);
			this.locations[0].adopt(this.locations[0].goImg);
		}
	};
	
	$$(b.tabs.getElements('a'), b.getElements('#favs a')).each(function(a)
	{
		a.query = AJAXify.buildQueryArray(a.href);
		
		a.addEvent('click', function(event)
		{
			var b = this.getParent('.browser');
			b.browseTo(this.query['c']);
			if ($type(event)) event.stop();
		});
	});
	
	b.getElements('#favs a').each(function(a)
	{
		a.span = a.getElement('span');
		
		a.span.startingHeight = "18";
		a.span.setStyle('height', a.span.startingHeight.toInt());
		a.span.endingHeight = "88";
		
		a.addEvent('mouseenter', function()
		{
			this.span.get('tween', {
				property: 'height',
				link: 'cancel',
				transition: Fx.Transitions.Bounce.easeOut
			}).start(this.span.endingHeight);
		});
		a.addEvent('mouseleave', function()
		{
			this.span.get('tween', {
				property: 'height',
				link: 'cancel',
				transition: Fx.Transitions.Back.easeIn
			}).start(this.span.startingHeight);
		});
	});
	
	b.getElements('.browserContent .thumbs a').each(function(a)
	{
		a.query = AJAXify.buildQueryArray(a.href);
		
		var imgPath = 'images/Gallery/WebDesign/';
		switch (a.query.c)
		{
			case "swtx":
				imgPath += 'StudioW/';
				break;
				
			case "pronto":
				imgPath += 'Pronto/';
				break;
				
			case "aocr":
				imgPath += 'AOCR/';
				break;
				
			case "hsg":
				imgPath += 'InternalWork/';
		}
		
		a.image = Asset.image(imgPath + a.query.i);
		a.image.fade('hide');
		
		a.addEvent('click', function(event)
		{
			var b = this.getParent('.browser');
			var par = b.getElement('#' + this.query.c);
			var img = par.getElement('img');
			if (this.image.src != img.src)
			{
				img.fade('out');
				this.image.replaces(img);
				this.image.fade('in');
			}
			b.validateNav();
			if ($type(event)) event.stop();
		});
	});
};
Adornings.set('mkBrowsers', function(A)
{
	if ($type(A) != 'element')
		A = $(document.body);
		
	A.getElements('.browser').each(mkBrowser);
});

mkMarquee = function(m)
{
	var json = m.getElement('.json');
	if ($type(json))
	{
		m.data = JSON.decode(json.value);
		json.destroy();
	}
	
	var cycle = function(){
		var html;
		var template = "<p>{copy}</p>\n<p>{name}<br />{location}</p>";
		this.history = this.history || $splat(this.get('html').clean());
		
		if (this.history.length == this.data.length)
		{
			var temp = this.history.getLast();
			this.history.empty().push(temp);
		}
		
		var dataTemp = $A(this.data);
		do {
			var data = dataTemp.getRandom();
			dataTemp.erase(data);
			
			html = template.substitute(data);
			
			if (dataTemp.length == 0)
			{
				this.history.empty();
				break;
			}
		} while (this.history.contains(html.clean()))
		
		this.history.push(html.clean());
		
		var fx = new Fx.Tween(this, { link: 'chain'});
		fx.start('opacity', 0).chain(
			function(html,fx)
			{
				this.set('html', html);
				fx.start('opacity', 1);
			}.bind(this, [html,fx])
		);
	};
	
	cycle.periodical(6000,m);
};
Adornings.set('mkMarquees', function(A)
{
	if ($type(A) != 'element')
		A = $(document.body);
		
	A.getElements('.marquee').each(mkMarquee);
});

mkBubble = function(b)
{
	b.set('morph', {duration: 700, link: 'chain'});
	b.set('tween', {duration: 200, link: 'cancel'});
	
	var fn = function(fn)
	{
	};
	
	b.addEvents({
		'mouseenter': function()
		{
			//this.pause();
			this.fade(1);
		},
		
		'mouseleave': function()
		{
			//this.resume();
			this.fade(.8);
		}
	});
	
	(function(){ this.fade(.8); }).delay(1000, b);
	fn.delay(1000, b, fn);
};
Adornings.set('mkBubbles', function(A)
{
	if ($type(A) != 'element')
		A = $(document.body);
		
	A.getElements('.bubble').each(mkBubble);
});

mkSparkle = function(el)
{
    el.removeEvents('mousemove');
	el.addEvents({
		'mousemove': function(event)
		{
			var width = 2 + $random(0,8);
			
			var sparkles = $$('.sparkle');
			var el = $empty;
			
			if (sparkles.length < 50)
			{
				el = new Element('div', {
					'class': 'sparkle',
					'styles': {
						'background-color': 'white',
						'height': 0,
						'width': 0,
						'opacity': 0
					},
					'reveal': {
						mode: 'both'
					}
				}).inject($(document.body));
			}
			else
			{
				el = sparkles[0].setStyles({'width': 0, 'height': 0, 'opacity': 0}).inject(sparkles.getLast(), 'after');
			}
			
			var xOffset = event.client.x + $random(-30,30);
			var yOffset = event.client.y + $random(-30,30);
			
			el.position({
				  position: 'topLeft',
				  offset: {x: xOffset, y: yOffset}
				  });
			new Fx.Morph(el, {link: 'chain'})
				.start({ 
				   'height': width,
				   'width': width,
				   'opacity': .75
				}).wait(50).start({
				   'height': 0,
				   'width': 0,
				   'opacity': 0
				});
		}
	});
};
Adornings.set('mkSparkles', function(A)
{
	if ($type(A) != 'element')
		A = $(document.body);
		
	A.getElements('.sparkles').each(mkSparkle);
});

mkAJAXForm = function(el)
{
	var formHandler = new Request.JSON();
	
	formHandler.setOptions({
        url: 'ajax.php?p=contact',
        method: 'post',
		onRequest: function()
        {
            LoadingAnimation.loop();
        },
        onComplete: function()
        {
            LoadingAnimation.interrupt();
        },
		onSuccess: function(json, text)
		{
			if (json.errors.length || json.warnings.length)
			{
				$each(json.errors, function(error)
				{
					Notify.alert("Error:", error);
				});
				
				$each(json.warnings, function(warning)
				{
					Notify.alert("Warning:", warning);
				});
			}
			else
			{
			    Notify.alert("Sent:", "Thank you for submitting a Contact request.");
			}
		}
	});
	
	var validator = new FormValidator(el, {
		useTitles: true,
		onElementPass: function(e)
		{
			e.highlight('#6c6');
		},
		onElementFail: function(e,fails)
		{
			self = el.get('validator');
			e.highlight('#c66');
			fails.each(function(f)
			{
				var message = self.validators[f].getError(e);
				Notify.alert("Error: '" + e.get('name')+"'", message)
			});
		},
		onFormValidate: function(passes, el, event)
		{
			if (passes) formHandler.send(el);
		}
	});

	el.addEvent('submit', function(e)
	{
		e.stop();
	});
};
Adornings.set('mkAJAXForms', function(A)
{
	if ($type(A) != 'element')
		A = $(document.body);
	
	A.getElements('form.ajax').each(mkAJAXForm);
});

//Prep Content on DomReady status
window.addEvent('domready', function() 
{
    console.log("'DomReady' Event started.");
	
	//Setup Global Objects
	Scroller = new MooScroll();
	Notify = new Roar();
	
	LoadingAnimation = $('loading').animate()
		.tween('opacity', 0.2, {duration: 200, transition: Fx.Transitions.Back.easeIn})
		.serial()
			.tween('opacity', 0.6, {duration: 200, transition: Fx.Transitions.Back.easeIn})
			.tween('opacity', 0.2, {duration: 200, transition: Fx.Transitions.Back.easeIn})
			.delay(200)
			.repeat(2)		
		.end()
		.delay(400);
	window.addEvent('konami', function()
	{
		LoadingAnimation.start();
	});
	
	AJAXify.setOptions({
		url: 'ajax.php',
		onRequest: function()
		{
			LoadFx.dissolve($('content'));
		},
		onSuccess: function(json, text)
		{
			var content = $('content');
			content.set('html', json.content);
			
			$each(json.errors, function(error)
			{
				Notify.alert("Error:", error);
			});
			
			$each(json.warnings, function(warning)
			{
				Notify.alert("Warning:", warning);
			});
			
			LoadFx.hide(content);
			
			LoadFx.reveal({randomize: true, delay: 200});
			
			var sidebar = $('sidebar').getElement('.widget');
			
			if (json.sidebar.clean().stripTags() != sidebar.get('html').clean().stripTags())
			{
				sidebar.get('reveal').dissolve().chain(function()
				{
					this.element.set('html', json.sidebar);
					this.element.getElements('#galleries a').each(AJAXify.morphAnchor.bind(AJAXify));
					this.reveal();
				});
			}
			
			Scroller.addScrollAreas(content.getElements('.scroll'));
			
			Adornings.run(content);
		}
	});
	AJAXify.loading = LoadingAnimation;
	
	//AJAXify
    
    $$('#nav a','#logo','#galleries a').each(AJAXify.morphAnchor.bind(AJAXify));
    	
    if (window.location.hash)
    {
        var qs = AJAXify.buildQueryArray(window.location.hash.substring(1));
        var linkPath = (qs.g)? '#'+qs.p+' #'+qs.g+' a':'#'+qs.p+' a';
		$('content').empty();
        $$(linkPath)[0].fireEvent('click');
    }
	
	//Setup for Opening Animation.
	var columnEl = $('column');
	var logoEl = $('logo');
	logoEl.store('starting-margin-left', logoEl.getStyle('margin-left'));
	logoEl.setStyle('margin-left', 0 - logoEl.getStyle('width').toInt() - columnEl.getStyle('padding-left').toInt());
	
	var loadingEl = $('loading');
	loadingEl.store('starting-margin-right', loadingEl.getStyle('margin-right'));
	loadingEl.setStyle('margin-right', 0 - loadingEl.getStyle('width').toInt()  - columnEl.getStyle('padding-right').toInt());
	
    LoadFx.hide();
	Adornings.run();
	
	window.ready = true; //For poor IE
    
    console.log("'DomReady' Event finished.");
});

//Reveal Content when page is finished loading.
window.addEvent('load', function()
{
    console.log("'Load' Event started.");
	
	//Function Shim for load event because addEvent('load') breaks in IE.
	loadFn = function()
	{
		if (!window.ready)
		{
			console.log("Not Ready yet, delaying Load further.");
			this.delay(100);
			return;
		}
				
		var shimmerFn = function()
		{
			var div = new Element('div', {
				'styles': {
					'position': 'absolute',
					'top': '99px',
					'right': '0px',
					'width': '100%',
					'height': '10px',
					'overflow': 'hidden',
					'border-color': 'white',
					'border-style': 'solid'
				}
			});
			div.inject($(document.body));
					
			var el = new Element('div', {
				'styles': {
					'position': 'absolute',
					'height': '2px',
					'width': '50px',
					'background-color': 'white',
				},
				'tween': {
					transition: Fx.Transitions.Circ.easeIn,
					duration: 1000
				},
				'reveal': {
					duration: 1000,
					transition: Fx.Transitions.Circ.easeIn,
					mode: 'horizontal'
				}
			});
			
			var r = el.clone().setStyles({'top': '0px', 'right': '-50px'});
			var l = el.clone().setStyles({'bottom': '0px', 'left': '-50px'});
			
			l.inject(div).tween('left', $(document.body).getStyle('width').toInt()).nix(true);
			r.inject(div).tween('right', $(document.body).getStyle('width').toInt()).nix(true);
			
			(function(){
				div.setStyles({'border-top-width': '2px', 'opacity': '0.5'});
				new Fx.Morph(div).start({
					'top': '109px',
					'opacity': 0
				}).chain(function() { this.element.destroy();});
			}).delay(1000);
		};
		
		$(document.body).setStyle('visibility', 'visible');
		
		$(document.body).get('tween', {link: 'chain'}).start('margin-top', 0).chain(
			function()
			{
				$('logo').tween('margin-left', $('logo').retrieve('starting-margin-left'));
				$('loading').tween('margin-right', $('loading').retrieve('starting-margin-right'));
				(function(){this.callChain();}).delay(500, this);
			},
			function()
			{
				LoadFx.reveal({randomize: true, delay: 200});
				this.callChain();
			},
			function()
			{
				shimmerFn();
			}
		);
		
		shimmerFn.periodical(6*1000); //6 seconds
	};
	
	if (Browser.Engine.trident)
	{
		console.log("Delaying Load for IE.");
		loadFn.delay(100, loadFn);
	}
	else
	{
		console.log("Not IE, knows how to Load all by itself.");
		loadFn.run();
	}
	
    console.log("'Load' Event finished.");
});

