hasMedia = true;rooturl = 'http://www.karonia.com/';apiKey = '';//=WW=======================================================
// CheckEmail(obj, classname)
// Basic email validation check, uses timer so it can be 'live'
// Usage: onkeyup=CheckEmail('id_of_inputbox', 'bademail')
//
// inputid		- inputbox element ID
// classname	- classname to add to inputbox if email invalid
//==========================================================
function CheckEmail(inputid, classname) {
	if(checktimer > 0) window.clearTimeout(checktimer);
	checktimer = window.setTimeout('CheckEmail_Callback("'+inputid+'", "'+classname+'")', 1000);
}
function CheckEmail_Callback(inputid, classname) {
	obj = document.getElementById(inputid);
	if(obj.value.length == 0) {
		if(typeof classname !== undefined)
   			obj.removeClass(classname);
   		return true;
	}
	var reg = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test(obj.value) == false) {
		if(typeof classname !== undefined)
			obj.addClass(classname);
		return false;
	} else {
		if(typeof classname !== undefined)
   			obj.removeClass(classname);
   		return true;
	}
}

//=WW=======================================================
// IsValidDate(date, direction)
// Attempts to validate a date. Depending on the date, can 
// take into account dd/mm or mm/dd. Will also accept 2 or 4
// year dates and the use of - or / as the separator.
// Can also check if the date is before/after today.
//
// date			- string to validate
// direction	- optional. if specified will check if the date
//					is before or after today. Specify -1 for
//					before today, 1 for after today.
//
// Returns false if invalid or yyyy-mm-dd if valid.
//==========================================================
function IsValidDate(date, direction) {
	while(date.indexOf('-') > -1) date = date.replace('-', '/');
	while(date.indexOf(' ') > -1) date = date.replace(' ', '');
	date = date.split('/');
	
	if(date.length != 3) return false;
		
	if(isNaN(date[0]) || isNaN(date[1]) || isNaN(date[2])) return false;
		
	date[0] = parseInt(date[0]); date[1] = parseInt(date[1]); date[2] = parseInt(date[2]);
	
	if(date[0] < 1 || date[1] < 1 || date[2] < 1) return false;
	
	if(date[2].toString().length <= 2 && date[2] < parseInt(new Date("yy"))) date[2] = 2000 + date[2];
	else if (date[2].toString().length <= 2) date[2] = 1900 + date[2];
	
	if(date[1] > 12 && date[0] <= 12) {
		t = date[1];
		date[1] = date[0];
		date[0] = t;	
	}
	
	daysinmonths = new Array(31,(((date[2] % 4 == 0) && ( (!(date[2] % 100 == 0)) || (date[2] % 400 == 0))) ? 29 : 28 ),31,30,31,30,31,31,30,31,30,31);
	if(date[1] > 12 || date[0] > daysinmonths[date[1]-1]) return false;
	
	if(date[0].toString().length == 1) date[0] = '0' + date[0].toString();
	if(date[1].toString().length == 1) date[1] = '0' + date[1].toString();
		
	date = date[2] + '-' + date[1] + '-' + date[0];
	
	real_date = new Date(date.replace('-', '/').replace('-', '/'));
	now = new Date();
		
	if(direction == -1) if(real_date > now) return false;
	else if (direction == 1) if(real_date < now) return false;
	
	return date;
}

function clearMainContentArea(){
	var div = new Element('div', {
		'styles': {
			'position': 'absolute',
			'top': 0,
			'left': 0,
			'width': 503,
			'height': 430,
			'overflow': 'hidden',
			'z-index': 1
		}
	});
	div.innerHTML = $('mainContentArea').innerHTML;
	$('mainContentArea').innerHTML = '';
	div.inject($('mainContentArea'));
	div.set('morph', {'onComplete': function(e){e.destroy()}});
	div.morph({'opacity': 0})
}

function createLoadingDiv(divInfo){
	divInfo.styles = $merge({			
					'opacity': 0,
					'background': '#fff',
					'position': 'absolute',
					'z-index': 3,
					'width': 32,
					'height': 32,
					'top': 0,
					'left': 0
				}, divInfo.styles || {});
	
	var loadingDiv = new Element('div', {
		'styles': divInfo.styles,
		'events': divInfo.events || {}
	}).inject(divInfo.container)
	
	setupMorph(loadingDiv);
	
	new Element('img', {
		'width': 32,
		'height': 32,
		'src': rooturl + 'webapp/templates/default/images/loader1.gif',
		'styles': {
			'position': 'absolute',
			'top': loadingDiv.getCoordinates().height / 2 - 16,
			'left': loadingDiv.getCoordinates().width / 2 - 16
		}
	}).inject(loadingDiv);
	
	loadingDiv.morph({'opacity': 0.75});
	
	return loadingDiv;
}

function setupGallery(div){
	var images = div.getElements('img');

    var noPreview = div.hasClass('noPreview');

	if(images.length == 0) return;

	var headers = $('sideBar').getChildren('h2');
	var sideBarWidth = $('sideBar').getCoordinates().width;
	var maxHeight = $('sideBar').getCoordinates().height - (headers.length * headers[0].getCoordinates().height);
	var imageWidth = images[0].width, imageHeight = images[0].height;
	var maxPerRow = Math.floor(sideBarWidth / imageWidth);

	var imagePadding = (sideBarWidth - (maxPerRow * imageWidth)) / (maxPerRow+1);

	new Element('div', {
		'styles': {
			'width': 0,
			'height': 2,
			'position': 'absolute',
			'top': 0,
			'left': 0,
			'background': '#fff'
		}
	}).inject(new Element('div', {
		'class': 'loadingBack',
		'styles': {
			'width': sideBarWidth,
			'height': 2,
			'position': 'absolute',
			'bottom': 0,
			'left': 0,
			'background': '#000',
			'opacity': 0
		}
	}).inject(div, 'bottom'));

	for(var i=images.length - 1; i>=0; i--){
		images[i].setStyles({
			'position': 'absolute',
			'top': maxHeight - imageHeight -  (Math.floor(i / maxPerRow) * imageHeight + (Math.floor(i / maxPerRow) * imagePadding) + imagePadding),
			'left': /*sideBarWidth - imageWidth -*/ (i % maxPerRow * imageWidth + (i % maxPerRow * imagePadding) + imagePadding),
			'z-index': 2,
			'cursor': 'pointer'
		});

		var eLink = images[i].getParent('a');
		images[i].store('url', eLink.href);
		images[i].store('title', eLink.title);
		images[i].replaces(eLink);

        if(!noPreview)
            images[i].addEvent('mouseenter', function(e){
				var img = $(e.target);
				var container = img.getParent('div.content');

				var imgSrc = img.retrieve('url').replace('_full','_medium');

				var loadingDiv = createLoadingDiv({
					'container': container,
					'styles': $merge(img.getCoordinates(container), {'cursor': 'pointer'}),
					'events': {
						'click': function(e){
							var div = $(e.target);
							if(div.get('tag') != 'div') div = div.getParent('div');

							div.retrieve('img').fireEvent('click', {'target': div.retrieve('img')});
						}
					}
				});
				loadingDiv.store('img', img);

				new Asset.image(imgSrc, {
					'class': 'background',
					'onload': function(loadedImage){
						loadingDiv.morph('opacity', 0);
						loadingDiv.destroy.delay(1000, loadingDiv);
						$each(container.getElements('img.background'), function(img){
							img.setStyle('z-index', 0);
							img.destroy.delay(1000, img);
						});
						loadedImage.setStyles({
							'opacity': 0,
							'top': 0,
							'left': 0,
							'position': 'absolute',
							'z-index': 1
						});
						loadedImage.inject(container, 'top');
						loadedImage.morph({'opacity': 1});
					}.bind(this)
				});
			});

            images[i].addEvent('click', function(e){
				if(e.stopPropagation)e.stopPropagation();

				var url = $(e.target).retrieve('url');
				var title = $(e.target).retrieve('title');
				var contentArea = $('mainContentArea');

				clearMainContentArea();

				var loadingDiv = createLoadingDiv({
					'container': contentArea,
					'styles': {
						'width': 503,
						'height': 430
					}
				});

				new Asset.image(url, {
					'onload': function(loadedImage){
						loadingDiv.morph('opacity', 0);
						loadingDiv.destroy.delay(1000, loadingDiv);
						loadedImage.setStyles({
							'opacity': 0,
							'top': 0,
							'left': (503 / 2) - (loadedImage.width / 2),
							'position': 'absolute',
							'z-index': 2
						});
						loadedImage.inject(contentArea, 'top');
						loadedImage.store('title', title);

						loadedImage.set('morph', {'onComplete': function(e){
							var infoDiv = new Element('div', {
								'text': e.retrieve('title'),
								'class': 'imageInfo',
								'styles': {
									'width': e.width - 10,
									'top': e.height,
									'left': e.getStyle('left'),
									'opacity': 0
								}
							}).inject($('mainContentArea'));
							infoDiv.setStyle('top', parseInt(infoDiv.getStyle('top')) - infoDiv.getCoordinates().height);
							infoDiv.morph({'opacity': 1, 'top': e.height})
						}});

						loadedImage.morph({'opacity': 1});
					}.bind(this)
				});
			});
	}
}



function replaceMainContentArea(contentDiv, instant){
   if(!$defined(instant))
      instant = false;

   clearMainContentArea();

   var rawHTML = contentDiv.get('html');
   contentDiv = contentDiv.clone(true);
   contentDiv.set('html', rawHTML);
   contentDiv.inject($('mainContentArea'));
   contentDiv.setStyles({
      'display': 'block',
      'opacity': instant ? 1 : 0,
      'position': 'absolute',
      'top': 0
   });

   if(contentDiv.getElements('.question').length > 0)
      new Accordion(contentDiv.getElements('.question'), contentDiv.getElements('.answer'));

   if(!instant)
      contentDiv.morph.delay(500, contentDiv, {'opacity': 1});
}



function setupContentDiv(title, store){
   var contentDiv = $$('div[title="'+title+'"]');

   if(contentDiv.length == 0)
      return false;

   contentDiv = contentDiv[0];
   contentDiv.removeProperty('title');
   contentDiv.setStyle('display', 'none');
   contentDiv.inject(document.body);

   if($defined(store))
      store.store('content', contentDiv);

   return true;
}



var sideBar = {};

window.addEvent('domready', function(){
	var nav = $('mainNav');
	if(nav) new ULNavigation(nav);
	
	sideBar.element = $('sideBar');
	if(sideBar.element){
		sideBar.headers = sideBar.element.getChildren('h2');
		
		var overallHeight = sideBar.element.getCoordinates().height;
		sideBar.maxHeight = overallHeight - (sideBar.headers.length * sideBar.headers[0].getCoordinates().height);
		
		$each(sideBar.headers, function(header){
			var sibling = header.getNext('div.content');
			if(!sibling) return;
			
			sibling.set('morph', {'fps': 200});
			
			header.store('sibling', sibling);

         var internalLinks = sibling.getElements('a[rel="internal"]');

         $each(internalLinks, function(link){
            var hash = link.href;
            if(link.href.indexOf('#') > -1){
               hash = hash.substring(hash.indexOf('#')+1);

               if(setupContentDiv(hash, link))
                  link.addEvent('click', function(e){
                     e.preventDefault();

                     var contentDiv = $(e.target).retrieve('content', false);
                     if(!contentDiv) return;

                     replaceMainContentArea(contentDiv, 0)
                  });
            }
         });
			
			header.addEvent('click', function(e){
				var header = $(e.target);
				if(e.target.get('tag') != 'h2') header = e.target.getParent('h2');
				
				var sibling = header.retrieve('sibling', false);
				if(!sibling) return;
				sideBar.active = sibling;
				
				sideBar.instant = $defined(e.instant) ? true : false
				
				$each(sideBar.headers, function(h2){
					var div = h2.retrieve('sibling', false);
					if(!div) return;

					h2.setStyle('background-image', 'url(' + rooturl + 'webapp/templates/default/images/sidenav_' + (div == sideBar.active ? 'hide' : 'show') + '.gif' + ')');

					if(sideBar.instant)
						div.setStyle('height', div == sideBar.active ? sideBar.maxHeight : 0);
					else
						div.morph({'height': div == sideBar.active ? sideBar.maxHeight : 0})
				});

				var contentDiv = header.retrieve('content', false);
				if(contentDiv)
				   replaceMainContentArea(contentDiv, sideBar.instant);
			});

			//Take the content for each 'tab' out of the centre page and out of the document flow
         setupContentDiv(header.get('text').replace(/\s/ig, '_'), header);
			
			if(sibling.hasClass('gallery'))
				setupGallery(sibling);
		});
		
		var jumpto = location.hash.substring(1);
		var jumpID = 0;
		for(var i = 0; i < sideBar.headers.length; i++)
			if(sideBar.headers[i].get('text').replace(/\s/ig, '_') == jumpto)
			 jumpID = i;
		sideBar.headers[0].fireEvent('click', {'target': sideBar.headers[jumpID], 'instant': true});
	}
	
	$each($$('.backer'), function(backer) {
		if(backer.getElement('.texteriser')) {
			backer.set('morph', {'duration': 500});
			
			backer.store('height', backer.getCoordinates().height - 5);
			backer.store('maxheight', backer.getElement('.texteriser').getCoordinates().height + backer.getCoordinates().height);
			
			backer.addEvents({
				'mouseenter': function(e){
					var target = $(e.target);
					if(!target.hasClass('backer'))
						target = target.getParent('.backer');
					
					target.morph({'height': target.retrieve('maxheight')})
				},
				'mouseleave': function(e){
					var target = $(e.target);
					if(!target.hasClass('backer'))
						target = target.getParent('.backer');
						
					target.morph({'height': target.retrieve('height')})
				}
			});	
		} else {
			backer.set('morph', {'duration': 250});
			
			backer.store('height', backer.getCoordinates().height - 5);
			backer.store('maxheight', backer.getCoordinates().height + 5);
			
			backer.addEvents({
				'mouseenter': function(e){
					var target = $(e.target);
					if(!target.hasClass('backer'))
						target = target.getParent('.backer');
					
					target.morph({'height': target.retrieve('maxheight')})
				},
				'mouseleave': function(e){
					var target = $(e.target);
					if(!target.hasClass('backer'))
						target = target.getParent('.backer');
						
					target.morph({'height': target.retrieve('height')})
				}
			});	
		}
	});

    if($('map')){
  		Google.createMap('map', {'zoom': 13, 'controls': {'earth': true}} , function(){
  			var marker = {
                'lat': 51.517272,
                'lng': -0.142389,
                'directions': false,
                'directionsContainer': $('mainContent'),
                'directionsComplete': function(a,b,c,d,e){log(a);log('-');log(b);log('-');log(c);log('-');log(d);log('-');log(e)},
  				'infoWindow': '<b>Karonia Ltd</b>,<br />Office 404,<br /> Albany House,<br /> 324 Regent Street<br /> London,<br />W1B 3HH,<br /> UK',
  				'options': {
  					'center': true
  				},
    			'icon': {
    				'top': 55,
    				'left': 40,
    				'shadow': {
    					'src': rooturl+'webapp/templates/default/images/shade.png',
    					'width': 82,
    					'height': 17
    				},
    				'image': {
    					'src': rooturl+'webapp/templates/default/images/pointer.png',
    					'width': 80,
    					'height': 55
    				}
    			}
  			};
  			Google.addMapMarker('map', marker);
  		});
      }
});