Element.observe(window,'load',init);

function init() {
	// update height of footer
	initFooter();

	// update links
	initTopLinks();

	// window updates
	initWindowUpdates();

	// for WORK page
	$('work-listing') ? initWork() : '';

	// for EXPERTISE page
	$('expertise-listing') ? initExpertise() : '';

	// for CONTACT page
	$('contact') ? initContact() : '';

	// for HOME page
	$('home') ? initHome() : '';

	//contact expertise-listing work-listing home
}

function initHome() {
	
	_PAGES_LOADED[1] = true;
	
	var colors = new Array('#ccff99','#cc99ff','#ff99cc');
	var highlights = new Array('#99ff66','#9966ff','#ff6699');
	var i = 0;
	// animate 3 boxes
	$$('div#home-header div.featured').each(function(e) {
		new Effect.Morph(e, { style: 'background: '+colors[i]+';' , queue: 'parallel' });
		e.setAttribute('featured-offset',i);
		e.setAttribute('def-color',colors[i]);
		e.setAttribute('hl-color',highlights[i]);
		debug('initHome','set offset: '+i);
		Event.observe(e,'mouseover',function(evt) {
			var caller = getParentObject(evt.element(),'featured-offset');
			if (caller != null) {
				$(caller).setStyle({ background: caller.getAttribute('hl-color') });
			}
		});
		Event.observe(e,'mouseout',function(evt) {
			var caller = getParentObject(evt.element(),'featured-offset');
			if (caller != null) {
				$(caller).setStyle({ background: caller.getAttribute('def-color') });
			}
		});
		Event.observe(e,'click',function(evt) {
			if (!_FEATURED_ACTIVE) {
				var caller = getParentObject(evt.element(),'featured-offset');
				if (caller != null) {
					// first load content
					var uri = $(caller).getAttribute('id').split('-').pop();
					uri += '.php';
					uri = _DOMAIN + '/content/clients/'+uri;
					debug('clickEvent','URI:'+uri);
					var a = new Ajax.Request(uri, {
						method: 'get',
						onComplete: function(transport) {
							if (transport.status == 200) {
								$('featured-wrapper').setStyle({ display: 'none' });
								$('featured-wrapper').removeClassName('hidden');
								var regex = /\<img(.?){1,}\/\>/ig;
								$('featured-wrapper').innerHTML = transport.responseText.replace(regex, '');
								if ($('featured-wrapper').innerHTML.length > _FEATURED_MAX_LENGTH) {

									var diff = $('featured-wrapper').innerHTML.length - _FEATURED_MAX_LENGTH;
									var objDescription = $$('div#featured-wrapper div.description')[0];
									var s = objDescription.select('p');

									var str = "";
									s.each(function(p) {
										str += p.innerHTML+'||';
									});
									var updated = str.substr(0,_FEATURED_MAX_LENGTH);
									
									var para = updated.split('||');
									objDescription.innerHTML = '';

									for (var j=0; j<para.length; j++) {
										objDescription.innerHTML += '<p>';
										if (eval(j+1) == para.length) {
											objDescription.innerHTML += para[j]+'..[more]</p>';
										}
										else {
											objDescription.innerHTML += para[j]+'</p>';
										}
									}
								}
								$$('div#featured-wrapper div.description')[0].innerHTML += '<p><a href="/work" rel="internal">View all clients</a> : <a href="/close" rel="function">Close</a></p>';
								attachLinkHandlers();
								var e = new Effect.Appear('featured-wrapper', { queue: 'end' });

							}
							else {
								alert('whoops');
							}
						}
					});

					// show modal animation while ajax load
					showModal(caller);
				}
			}
		});
		i++;
	});
}
function showModal(obj) {
	if (!_FEATURED_ACTIVE) {
		var offset = obj.getAttribute('featured-offset');
		_FEATURED_OFFSET = offset;
		var marginOffset = eval(offset * obj.getWidth()) + eval(offset * 20);
		$('featured-highlighter').setStyle({ display: 'none', margin: '0 0 0 '+marginOffset+'px', width: obj.getWidth()+'px', height: obj.getHeight()+'px' });
		$('featured-highlighter').removeClassName('hidden');

		new Effect.Appear('featured-highlighter', { duration: 0.5, queue: 'end' });
//		$('featured-highlighter').setStyle({ zIndex: '99999' });
		new Effect.Morph('featured-highlighter', { style: 'width: 600px; height: 360px; margin-left: 130px; margin-top: 10px', queue: 'end', duration: 1.0 });

		$$('div.overlay').each(function(e) {
			e.setStyle({ height: $('edgestate').getHeight()+'px', display: 'none' });
			e.removeClassName('hidden');
			var b = new Effect.Appear(e, { delay: 1.5, from: 0.0, to: 0.7, duration: 0.5, queue: 'parallel' });

			Event.observe(e, 'click', modalClose);
		});
		_FEATURED_ACTIVE = true;

		// load content
	}
}
function modalClose() {
	if (_FEATURED_ACTIVE) {
		_FEATURED_ACTIVE = false;
		var marginLeft = eval(_FEATURED_OFFSET * 278) + eval(_FEATURED_OFFSET * 20);
		new Effect.Fade('featured-wrapper', { duration: 0.5, queue: 'end' });
		new Effect.Morph('featured-highlighter', { style: 'width: 278px; height: 150px; margin-top: 0; margin-left: '+marginLeft+'px', queue: 'end', duration: 0.5 });
		new Effect.Fade('featured-highlighter', { queue: 'end', duration: 0.5 });

		$$('div.overlay').each(function(e) {
			var b = new Effect.Fade(e, { delay: 0.5, from: 0.7, to: 0.0, duration: 0.5, queue: 'parallel' });
		});
	}
}
// using an object, test based on an attribute
function getParentObject(objTest,attribute) {
	var objParent = objTest;
	var attVal = objTest.getAttribute(attribute);
	if (attVal == null) {
		var anc = objTest.ancestors();
		for (var i=0; i<anc.length; i++) {
			if (anc[i].getAttribute(attribute) != null) {
				attVal = anc[i].getAttribute(attribute);
				objParent = anc[i]
				break;
			}
		}
	}
	return objParent;
}
function initWork() {
	
	_PAGES_LOADED[2] = true;
	
	$$('a[rel="work"]').each(function(obj) {
		obj.setAttribute('linkuri', obj.href.split('#').pop());
		
		$(obj).observe('click',function(e) {

			var pageName = e.element().getAttribute('linkuri');
			var obj = e.element();
			if (pageName == null) {
				var anc = obj.ancestors();
				pageName = -1;
				for (var i=0; i<anc.length; i++) {
					if (anc[i].getAttribute('linkuri') != null) {
						pageName = anc[i].getAttribute('linkuri');
						break;
					}
				}
			}
			if (pageName != -1) {
				if (_CURRENT_WORK_PAGE != null) {
					var f = Effect.Fade(_CURRENT_WORK_PAGE, { from: 1.0, to: 0.0, queue: 'end' });
				}
				$(pageName).setStyle({ display: 'none' });
				$(pageName).removeClassName('hidden');
				var a = Effect.Appear(pageName, { from: 0.0, to: 1.0, queue: 'end' });
				_CURRENT_WORK_PAGE = pageName;
			}
			Event.stop(e);
		});
	});
}
// deactivate links
function toggleLock(lockID, setting) {
	// if enable lock
	_LOCK_TOGGLES[lockID] = setting;
}
function checkLock(lockID) {
	return ((_LOCK_TOGGLES[lockID] == null) || !_LOCK_TOGGLES[lockID]);
}

function initWindowUpdates() {
	loaderUpdatePosition();
	window.onresize = function() {
		footerUpdateOffset();
		contentUpdateWidths();
		loaderUpdatePosition();
		overlayUpdatePosition();
	}
}
function overlayUpdatePosition() {
	$$('div.overlay').each(function(e) {
		e.setStyle({ height: $('edgestate').getHeight()+'px' });
		if (!_FEATURED_ACTIVE) { 
			e.setStyle({ display: 'none' }); 
		}
	});
}
function initFooter() {
	footerUpdateOffset();
}
function loaderUpdatePosition() {
	var vpWidth = document.viewport.getWidth();
	var loaderWidth = $('loader').getWidth();

	var posLeft = eval(vpWidth / 2) - eval(loaderWidth / 2);

	$('loader').setStyle({ top: '300px', left: posLeft+'px' });
}
function footerUpdateOffset() {
	var vpHeight = document.viewport.getHeight();

	// get footer position
	var fTop = $('footer').positionedOffset().top;

	// update footer height
	var hOffset = vpHeight - fTop;
	$('footer').setStyle({ height: hOffset+'px' });
}
function debug(fn,notes) {
	$('debug') ? $('debug').innerHTML += '<strong>'+fn+'</strong><br />'+notes+'<br /><br />' : '';
}
function contentUpdateWidths() {
	$$('div.content-area').each(function(obj) {
		obj.setStyle({ width: eval(document.viewport.getWidth()) + 'px' });
	});
	$('scroll').setStyle({ width: eval(document.viewport.getWidth() * 4)+'px' }); // width of all 4 pages

	_CURRENT_PAGE == '' ? _CURRENT_PAGE = 'home' : '';

	for (i=0; i<_PAGES.length; i++) {
		debug('contentUpdateWidths','comparing: '+_CURRENT_PAGE+' AND '+_PAGES[i]);
		if (_CURRENT_PAGE == _PAGES[i]) {
			_CURRENT_OFFSET = i-1;
		}
	}
	var dist = eval(document.viewport.getWidth()*(_CURRENT_OFFSET));
	$('scroll').setStyle({ left: -eval(document.viewport.getWidth() * _CURRENT_OFFSET)+'px' });
}
function initTopLinks() {
	
	_CURRENT_PAGE = location.href.split('/').pop();
	_CURRENT_PAGE == '' ? _CURRENT_PAGE = 'home' : '';
	debug('initTopLinks','updating _CURRENT_PAGE: '+_CURRENT_PAGE);

	contentUpdateWidths();
	
	attachLinkHandlers();

	$$('div.content-area').each(function(obj) {
		obj.removeClassName('hidden');
	});
}
function attachLinkHandlers() {

	$$('a[rel="function"]').each(function(obj) {
		var f = obj.getAttribute('href').split('/').pop();
		if (f == 'close') {
			Event.observe(obj,'click',function(e) {
				modalClose();
				Event.stop(e);
			});
		}
	});
	$$('a[rel="internal"]').each(function(obj) {

		obj.setAttribute('rel','');

		$(obj).observe('click',function(e){
			//debug('clickHandler','about to check if ajax lock is on...');
		// ensure animation is not locked
			if (_AJAX_LOCK == 'off') {
				//debug('clickHandler','lock is off...');

				if (_FEATURED_ACTIVE) {
					modalClose();
				}
				var pageNew = e.element().href.split('/');
				var pageName = pageNew.pop();
				if (_CURRENT_PAGE != pageName) {

					var count = 0;
					var newOffset = 1;
					var currentOffset = 1;
					try  {
						pageTracker._trackPageview('/'+pageName);
					}
					catch(e) { }

					debug('pageName', pageName);
					_PAGES.each(function(val) {
						if (pageName == val) {
							newOffset = count;
							_LOAD_OFFSET = count;
						}
						if (_CURRENT_PAGE == val) {
							currentOffset = count;
						}
						count++;
					});
					debug('_LOAD_OFFSET',_LOAD_OFFSET);
					_MOVE_OFFSET = newOffset - currentOffset;
					_CURRENT_PAGE = pageName;
					// check if loaded 
					if (!_PAGES_LOADED[newOffset]) {

						// show loader
						$('loader').removeClassName('hidden');

						_AJAX_LOCK = 'on';
						_PAGES_LOADED[newOffset] = true;
						if (_PAGES[_LOAD_OFFSET] == null) {
							newOffset = 1;
							_LOAD_OFFSET = 1;
						}
						var uri = _DOMAIN + '/content/' + _PAGES[newOffset] + '.php';

						debug('url','requesting: '+uri);
						var a = new Ajax.Request(uri, {
							method: 'get',
							onComplete: function(transport) {
								if (transport.status == 200) {
									debug('url','recieved response');
									var content = transport.responseText;

									$$('div#page-'+_PAGES[_LOAD_OFFSET]+' div.content-wrap')[0].innerHTML = content;

									debug('url','_LOAD_OFFSET: '+_LOAD_OFFSET);
									_LOAD_OFFSET == 1 ? initHome() : '';
									_LOAD_OFFSET == 2 ? initWork() : '';
									_LOAD_OFFSET == 3 ? initExpertise() : '';
									_LOAD_OFFSET == 4 ? initContact() : '';
									// hide loader
									_MSIE ? setTimeout(function() { $('loader').addClassName('hidden') }, 1000) : $('loader').addClassName('hidden');
									var eOut = new Effect.Move('scroll', { x: -eval(document.viewport.getWidth()*_MOVE_OFFSET), queue: 'end' });
									_LOAD_OFFSET = 0;
									setTimeout(function() { _AJAX_LOCK = 'off' }, 1000);
								}
								else {
									alert('Transport error!');
									_AJAX_LOCK = 'off';
								}
							}
						});
					}
					else {
						// move
						var eOut = new Effect.Move('scroll', { x: -eval(document.viewport.getWidth()*_MOVE_OFFSET), queue: 'end' });
						
					}
					$('content').setStyle({ overflow: 'hidden' });
				}
				Event.stop(e);
			}
			else {
				debug('clickHandler','lock is on...');
			}
		});
	});
}


function initExpertise() {
	
	_PAGES_LOADED[3] = true;
	
	$$('div[id*="content-"]').each(function(e) {
		e.setStyle({ display: 'none' });
		e.removeClassName('hidden');
	});
	$$('div[id*="toggle"]').each(function(e) {
		e.setAttribute('toggle-id',e.getAttribute('id'));
		Event.observe(e,'click',function(evt) {
			var toggle = evt.element().getAttribute('toggle-id');
			var obj = evt.element();
			if (toggle == null) {
				var anc = obj.ancestors();
				toggle = -1;
				for (var i=0; i<anc.length; i++) {
					if (anc[i].getAttribute('toggle-id') != null) {
						toggle = anc[i].getAttribute('toggle-id');
						break;
					}				
				}
			}
			if (toggle != -1) {
				var content = toggle.split('toggle\-').pop();
				
				var objContent = $('content-'+content);
				var t = Effect.toggle(objContent,'blind');
			}
		});
	});
}
function initContact() {

	_PAGES_LOADED[4] = true;
	
	$('contact-button').disabled = true;

	// enable google map
	if (GBrowserIsCompatible()) {
		var gMap;
		gMap = new GMap2($('google-map'));
		gMap.setCenter(new GLatLng(49.262218,-123.178604), 13);

		// create amoph icon
		var esIcon = new GIcon(G_DEFAULT_ICON);
		esIcon.image = _DOMAIN+"/images/es.png";

		gMarker = new GMarker(new GLatLng(49.252274,-123.178604), { icon: esIcon });
/*
		GEvent.addListener(gMarker, 'click', function() {
			gMarker.openExtInfoWindow(gMap, "simple", "this is some html", { beakOffset: 3 });
		});*/
		gMap.addOverlay(gMarker);

		// add controls
		//gMap.addControl(new GSmallMapControl());


		
	}
	var i = 0;
	_VALIDATION.each(function(e) {
		$(e.fieldname).setAttribute('offset',i);
		Event.observe(e.fieldname,'blur',function(evt) {
			var obj = _VALIDATION[evt.element().getAttribute('offset')];
			if (obj.regex != null) {
				if (!obj.regex.test(evt.element().value)) {
					setStatus(evt.element().getAttribute('id'), false);
				}
				else {
					setStatus(evt.element().getAttribute('id'), true);
				}
			}
			else {
				(typeof obj.validation == 'function') ? obj.validation() : '';
			}
			checkValid();
		});
		Event.observe(e.fieldname,'mouseover',function(evt) {
			var obj = _VALIDATION[evt.element().getAttribute('offset')];
			var elm = evt.element();
			if ($(obj.fieldname).hasClassName('error')) {
				// show error
				
				// get top right position of object
				var t = elm.positionedOffset().top + $('content').positionedOffset().top;
				var l = elm.positionedOffset().left;

				// set container options
				$$('div#error p')[0].innerHTML = obj.errormsg;
				$$('div#error p')[1].innerHTML = obj.format;

				// get container size
				var h = $('error').getDimensions().height;

				// get obj width
				var w = $(elm).getDimensions().width;

				while (l > document.viewport.getWidth()) {
					l -= document.viewport.getWidth();
				}

				$('error').setStyle({ top: t-h+'px', left: l+w+'px' });
				var s = Effect.Appear('error', { duration: 0.0 });

//				$('error').setStyle({ display: '' });
//				var s = Effect.Grow('error', { direction: 'bottom-left', duration: 0.3, queue: 'end' });
			}
		});
		Event.observe(e.fieldname,'mouseout',function(evt) {
			var obj = _VALIDATION[evt.element().getAttribute('offset')];
			if ($(obj.fieldname).hasClassName('error')) {
				//var s = Effect.Shrink('error', { direction: 'bottom-left', duration: 0.3, queue: 'end' });
//				var s = Effect.Hide('error');
				$('error').setStyle({ display: 'none' });
			}
		});
		i++;
	});
	Event.observe('contact-button','click',function(evt) {
		$('contact-button').disabled = true;
		var pairs = new Array();
		$$('input[type="text"],textarea').each(function(e) {
			pairs.push(e.getAttribute('id')+'='+escape(e.value));
		});
		$$('select').each(function(e) {
			var val = e.options[e.selectedIndex].value;
			pairs.push(e.getAttribute('id')+'='+escape(val));
		});
		var querystring = pairs.join('&');
		var uri = _DOMAIN + '/includes/contact.php?' + querystring;

		var r = new Ajax.Request(uri, {
			method: 'get',
			onComplete: function(transport) {
				if (transport.status == 200) {
					
					var xmldoc = transport.responseXML;
					//check if valid
					var submission = xmldoc.getElementsByTagName('successful')[0];

					var success = submission.firstChild.data;

					if (success == 'yes') {
						alert('Thank-you for your request!\n\nWe will contact you shortly if you require a response.');
						// disable form

						$$('input[type="text"],textarea,select').each(function(e) {
							e.disabled = true;
						});
					}
					else {
						alert('There has been an error with your submission. Please alert info@edgestate.com if this persists and notify us of the error.\n\nThank you!');
						$('contact-button').disabled = false;
					}
				}
				else {
					alert('There has been a transport error with your submission. Please try again, but alert info@edgestate.com if this persists and notify us of the error.\n\nThank you!');
					$('contact-button').disabled = false;
				}
			}
		}); 

	});
	Event.observe('security-code','focus',function(evt) {
		$('contact-button').disabled = true;
	});

	$('error').setStyle({ display: 'none' });
	$('error').removeClassName('hidden');

}
function checkValid() {
	var valid = true;
	_VALIDATION.each(function(e) {
		(valid && e.valid) ? valid = true : valid = false;
	});

	valid ? $('contact-button').disabled = false : $('contact-button').disabled = true;
}


function setStatus(obj,tf) {
	tf ? $(obj).removeClassName('error') : $(obj).removeClassName('valid');
	tf ? $(obj).addClassName('valid') : $(obj).addClassName('error');

	_VALIDATION.each(function(e) {
		e.fieldname == obj ? e.valid = tf : '';		
	});
}
