function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0

   var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


function jumpto(url){location = url;}

function SetupPage(page)
{
	if($('topnav')) {
		lis = $('topnav').getElementsByTagName('li');
		for(i=0; i<lis.length; i++) {
			as = lis[i].getElementsByTagName('a');
			if(as.length > 0 && lis[i].getElementsByTagName('ul').length == 0) {
				lis[i].style.cursor = 'pointer';	
				$(lis[i]).addEvent('click', jumpto.create({'arguments': as[0].href}));
			}
		}	
	}
	
	$each($$('input.date'), function(el){
		new Calendar(el, {'format': 'd/m/Y'});							 
	});
	
	switch(page) {
		case 'news':
		case 'book':
		case 'articles':
		case 'reviews':
			if($('nav_cs')) {
				lis = $('nav_cs').getElementsByTagName('li');
				for(i=0; i<lis.length; i++) {
					lis[i].style.cursor = 'pointer';	
					$(lis[i]).addEvent('click', jumpto.create({'arguments': lis[i].getElementsByTagName('a')[0].href}));
				}
			}
			break;
	}	
	
}

function CreatePassword(field1,field2) {
	field1 = $(field1);
	field2 = $(field2);
    if (parseInt(navigator.appVersion) <= 3) {
        alert("Sorry this only works in 4.0+ browsers");
        return true;
    }
	
	field1.type="text";
	field2.type="text";

    var length=8;
    var sPassword = "";

    var noPunction = true;
    var randomLength = false;

    if (randomLength) {
        length = Math.random();

        length = parseInt(length * 100);
        length = (length % 7) + 6
    }


    for (i=0; i < length; i++) {

        numI = getRandomNum();
        if (noPunction) { while (checkPunc(numI)) { numI = getRandomNum(); } }

        sPassword = sPassword + String.fromCharCode(numI);
    }

    field1.value = sPassword
	field2.value = sPassword

    return true;
}

function getRandomNum() {

    // between 0 - 1
    var rndNum = Math.random()

    // rndNum from 0 - 1000
    rndNum = parseInt(rndNum * 1000);

    // rndNum from 33 - 127
    rndNum = (rndNum % 94) + 33;

    return rndNum;
}

function checkPunc(num) {

    if ((num >=33) && (num <=47)) { return true; }
    if ((num >=58) && (num <=64)) { return true; }
    if ((num >=91) && (num <=96)) { return true; }
    if ((num >=123) && (num <=126)) { return true; }

    return false;
}

function newsletterSignup(){
	var email = $('newsletter_email').value;
	
	new Ajax('index.php', {method: 'post', data: 'email='+email, onComplete: function(t){
		if(t=='bademail') {
			alert('Please enter a valid email address');
		}else if(t=='subscribed'){
			$('subscribe').innerHTML = 'Thank you for subscribing!';
		}else if(t=='exists'){
			alert('Email address already exists in the database.')
		} else{
			alert("There was an error processing your request.\nPlease try again later.");
		}
	}}).request();
}

//=DT=======================================================
//	Function: CheckAll                                      
//	fmobj	= form element                                  
//	chk		= value - checked/unchecked                     
//                                                          
//	Example: CheckAll(document.forms['browse'],this.checked)
//	Desc:  Ticks/unticks all checkboxes within a given form.
//==========================================================
function CheckAll(fmobj, chk) {
  for (var i=0;i<fmobj.elements.length;i++) {
    var e = fmobj.elements[i];
    if ((e.name != 'allbox') && (e.type=='checkbox')) {
      e.checked=chk;
    }
  }
}

//externalLinks converts rel=external into new window
function externalLinks() {
	if (!document.getElementsByTagName) return;
 	var anchors = document.getElementsByTagName("a");
 	for (var i=0; i<anchors.length; i++) {
   		var anchor = anchors[i];
   		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
     		anchor.target = "_blank";
 	}
}
window.onload = externalLinks;

function setupEventImages()
{
  var eImageHolders = $$('div.imgViewerHolder');
  if (eImageHolders.length == 0) return;
  
    $each(eImageHolders, function(obj){
								  
      var eThumbs = obj.getElement('div.thumbs');
      if(!eThumbs) return;
      var eLinks = eThumbs.getChildren('a');

	  obj.getElement('div.photoBox').setStyle('height', obj.getElement('div.photoBox').getElement('img').getProperty('height')+'px');
      
      $each(eLinks, function(link){
        new Asset.image(link.getProperty('href'));
        link.addEvent('click', function(e){
          e.stop();
          
          var eTarget = $(e.target);
          if(eTarget.get('tag') == 'img') eTarget = eTarget.getParent('a');
          var ePhotoBox = eTarget.getParent('div.imgViewerHolder').getElement('div.photoBox');
          
          $each(ePhotoBox.getElements('img'), function(img){img.morph({'opacity': 0})});
		  
		  var iWidth = eTarget.getProperty('rel').split(',')[0];
		  var iHeight = eTarget.getProperty('rel').split(',')[1];
		  var iMargin = (440-iWidth) / 2;
          
          var eImg = new Element('img', {
            'src': eTarget.href,
            'width': iWidth,
            'height': iHeight,
            'styles': {
              'position': 'absolute',
              'opacity': 0,
			  'margin-left': iMargin + 'px'
            }
          });
		  
		  ePhotoBox.morph({'height': iHeight});
          
          eImg.get('morph').addEvent('onComplete', function(e){
            if(e.getStyle('opacity') == 0) e.destroy();
          });
          
          eImg.inject(ePhotoBox);
          eImg.morph({'opacity': 1});
        });
      });
    });
}


/*********************
 *    CALENDAR EVENTS
 *********************/
var asMonths = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var curDate;
var eCalendar;

function daysInMonth(dDate) {return (new Date(dDate.getYear(), dDate.getMonth()+1, 0)).getDate();}

function jumpToDate(sDate){
	window.location = pgURL+'?date='+sDate;
}

function setCalendar(dDate){
	curDate = dDate;
	eCalendar.getElement('thead').getElements('td')[1].set('text', asMonths[dDate.getMonth()]);

	var aeTD = eCalendar.getElement('tbody').getElements('td');
	var i, j;
	var iDaysInMonth = daysInMonth(dDate);
	var offset = (new Date(dDate.getFullYear(), dDate.getMonth(), 1)).getDay();
	var iLastMonthEndDate = new Date(dDate.getFullYear(), dDate.getMonth(), 0).getDate();
	
	aeTD.each(function(eTD){
		eTD.addEvents({
			'mouseenter': function(e){$(e.target).addClass('hover')},
			'mouseleave': function(e){$(e.target).removeClass('hover')}
		});
	});

	for(i=offset-1;i>=0;i--){
		aeTD[i].setProperty('class', 'diffMonth');
		aeTD[i].set('text', iLastMonthEndDate-(offset-i-1));
		aeTD[i].setStyle('cursor', 'auto');
		aeTD[i].removeEvents('click');
	}
	
	for(i=1; i<=iDaysInMonth; i++){
		aeTD[i+offset-1].set('text', i);
		aeTD[i+offset-1].setProperty('class', '');
		aeTD[i+offset-1].setStyle('cursor', 'auto');
		aeTD[i+offset-1].removeEvents('click');
		if((new Date(dDate.getFullYear(), dDate.getMonth(), i)).toLocaleDateString() == (new Date()).toLocaleDateString()) aeTD[i+offset-1].addClass('today');
		$each(aeEntryDates, function(dEntryDate){
			if(dEntryDate.toLocaleDateString() == (new Date(dDate.getFullYear(), dDate.getMonth(), i)).toLocaleDateString()) {
				aeTD[i+offset-1].addEvent('click', jumpToDate.pass(dEntryDate.getDate() + '/' + (dEntryDate.getMonth()+1) + '/' + dEntryDate.getFullYear()));
				aeTD[i+offset-1].setProperty('class', 'hasEntry');
				aeTD[i+offset-1].setStyle('cursor', 'pointer');
			}
		});
	}
	
	eCalendar.getElement('tbody').getChildren('tr')[5].setStyle('display', i+offset < 37 ? 'none' : 'table-row');
	
	for(j=i+offset-1;j<aeTD.length;j++) {
		aeTD[j].setProperty('class', 'diffMonth');
		aeTD[j].set('text', j-i-offset+2);
		aeTD[j].setStyle('cursor', 'auto');
		aeTD[j].removeEvents('click');
	}
}

function setupGallery(){
	if(!$('galleryImages')) return;
	var j = 0;
	$each($('galleryImages').getElements('div'), function(d, i){
		j=i;
		d.set('morph', {'link': 'ignore'});
		d.setStyle('left', 123 *i);
		d.getElement('img').addEvent('click', function(e){
			var data = d.getElement('img').getProperty('lowsrc').split('|');
			new Asset.image(data[0],{'onload': function(e){
				$('captionArea').getElement('p').set('text', d.getElement('img').getProperty('alt'));
				var oldimgs = $('largeArea').getElements('img');
				var dimensions = scaleDimensions(parseInt(data[1]), parseInt(data[2]), 726, 350);
				var img = new Element('img', {'src': e.src, 'width': dimensions.width, 'height': dimensions.height, 'styles': {'opacity':0, 'position': 'absolute', 'top': dimensions.top+10, 'left': dimensions.left}});											
				img.inject('largeArea');
				setupMorph(img);
				img.morph({opacity:1});
				$each(oldimgs, function(i){i.morph({opacity:0})});
			}});
		});
		d.getElement('img').setStyles({
			'top': (130/2) - (d.getElement('img').getProperty('height') / 2),
			'left': (123/2) - (d.getElement('img').getProperty('width') / 2)
		});
	});	
	
	$try(function(){$('galleryImages').getFirst('div').getElement('img').fireEvent('click')});
}

function gallGo(whichway){
	if(!$('galleryImages')) return;
	
	if(whichway == 1 && parseInt($('galleryImages').getFirst('div').getStyle('left')) == 0) return;
	if(whichway == -1 && parseInt($('galleryImages').getLast('div').getStyle('left')) == 492) return;
	
	$each($('galleryImages').getElements('div'), function(d, i){
		d.morph({'left': parseInt(d.getStyle('left')) + (whichway*123)});
	});	
}

function scaleDimensions(objectWidth, objectHeight, maxWidth, maxHeight)
{
	var object = {'ratio': maxWidth / objectWidth};
	if(maxHeight / objectHeight < object.ratio) object.ratio = maxHeight / objectHeight;
	
	object.width = objectWidth * object.ratio;
	object.height = objectHeight * object.ratio;
	object.left = (maxWidth / 2) - (object.width / 2);
	object.top = (maxHeight / 2) - (object.height / 2);
	
	return object;
}

function setupMorph(eElement, sDisplayStyle)
{
	if(!$defined(sDisplayStyle)) sDisplayStyle = 'block';
	eElement = $(eElement);
	eElement.setStyle('opacity', 0);
	eElement.get('morph').addEvents({
		'onStart': function(e){if(e.getStyle('opacity') == 0) e.setStyle('display', sDisplayStyle);},
		'onComplete': function(e){if(e.getStyle('opacity') == 0) e.setStyle('display', 'none');}
	});
}

window.addEvent('domready', function(){

	setupGallery();
	
	setupEventImages();
	
	eCalendar = $('calendar');
	if(!eCalendar) return;
	var dToday = new Date();
	curDate = dToday;
	
	if(aeEntryDates[0] == '') aeEntryDates = [];
			
	eCalendar.getElement('thead').getElements('td').each(function(td,i){if(i==0||i==2){
		td.setStyle('cursor', 'pointer');
		td.addEvent('click', function(){setCalendar(new Date(curDate.getFullYear(), curDate.getMonth()+(i-1), curDate.getDate()))});
	}});
	
	
		$each(aeEntryDates, function(sEntryDate, i){
			var d = sEntryDate.split('/');
			if(d[1] != '10' && d[1] != '11' & d[1] != '12') d[1] = d[1].replace('0','');
			aeEntryDates[i] = new Date(d[0], parseInt(d[1])-1, d[2]);
		});
	

	setCalendar(dToday);
});
