/* site.js - standard site Javascripts */

function get_field(name){
	var rx = RegExp(name + "=([^&]*)");
	var match = document.location.search.match(rx);
	if(!match) return "";
	/* match[0] will be the whole name=value entry, the actual value is in match[1] */
	return match[1];
} // function get_field


// Fetches the Menus Text
function f_FetchMenuBar(ipType) {
	var vDiv = $('SiteMenuDiv');
	
	// Use an Ajax call to get, set and display the Address details
	new Ajax.Request('lib/ajax.php?action=fetch&type='+ipType, {
	evalJS: false,
	onCreate: function(){ vDiv.innerHTML = '<img src="image/site/spinner01.gif" alt="Loading..." />'; },
	onComplete: function (transport) {
		vDiv.innerHTML='';
		var vUL;
		if (transport.responseText.isJSON()) {
			var vJSON = transport.responseText.evalJSON();
			// Use the JSON to create the Guest Objects & Message Objects
			var vResponse = vJSON.Response[0].Result;
			var vMessages = vJSON.Response[1].Message;
			if (vMessages[0].msgtype == "Success") {
				vDiv.innerHTML='';
				// If the get was OK
				vResponse.each( function(item, index) {
					var vLink;

					vSpan=$(document.createElement('span'));

					if (index>0) {
						var vImg = $(document.createElement('img'));
						vImg.src = 'image/site/white_dot.gif';
						vImg.alt = '|';
						vImg.className = 'menuseparator';
						vDiv.appendChild(vImg);
					}	

					vLink=$(document.createElement('a'));
					vLink.id='menulink'+index;
					vLink.href='#';
					vLink.innerHTML=item.page_menutext;
					vLink.observe('click',function(event){
						event.stop();
						
						// Clear the Error / Success div
						if ($('errorDiv')) { $('errorDiv').innerHTML = ''; }
						if ($('successDiv')) { $('successDiv').innerHTML = ''; }
						
						var vObj;
						switch(item.page_type) {
						case 'text':
						case 'attractions':
						case 'contact':
						case 'external':
							vObj = new Object();
							vObj.PageID = item.page_id;
							vObj.PageType = item.page_type;
							f_FetchPageText(vObj);
							break;
						}
					});
					vSpan.appendChild(vLink);
					vDiv.appendChild(vSpan);
				});
			} // success
		}  // if Is JSON
	} // onComplete

	}); // new Ajax.Request		
} // function f_fetchMenuBar

//Fetches the Page Text from URL
function f_FetchThumbnails() {

	vPhotoDiv=$('carousel-content');

	// Use an Ajax call to get, set and display the Address details
	new Ajax.Request('lib/ajax.php?action=fetch&type=thumbnails', {
	evalJS: false,
	onCreate: function(){
		vPhotoDiv.innerHTML = '<img src="image/site/spinner01.gif" alt="Loading..." />';
	},
	onComplete: function (transport) {
		// Hide the spinner
		vPhotoDiv.innerHTML = ''; 
		if (transport.responseText.isJSON()) {
			var vJSON = transport.responseText.evalJSON();
			// Use the JSON to create the Guest Objects & Message Objects
			var vResponse = vJSON.Response[0].Result;
			var vMessages = vJSON.Response[1].Message;
			if (vMessages[0].msgtype == "Success") {
				// If the get was OK
				vResponse.each(function(item, index){
					var vDiv = document.createElement('div');
					vDiv.id='imagediv_'+index;
					vDiv.className='slide';
					vDiv.title='Click on the image to enlarge';
					var vA = document.createElement('a');
					vA.id = 'image_a_'+index;
					vA.href = 'javascript: f_ShowImage(\'$(\'image_'+index+'\')\')';
					var vImg = $(document.createElement('img'));
					vImg.src = vResponse[index];
					vImg.alt = "Image: " + vResponse[index];
					vImg.className='imgover';
					vImg.style.width='144px';
					vImg.style.height='110px';
					// Place on the page
					vPhotoDiv.appendChild(vDiv);
					vDiv.appendChild(vA);
					vA.appendChild(vImg); 

					vImg.observe('mouseover', function(event) {
						event.stop();
						f_PointerToHand(vImg);
					});

					vImg.observe('click', function(event) {
						event.stop();
						f_ShowImage(vImg);
					});

				}); // each

				// initialise the Rollover
				if (window.initRollovers) { initRollovers(); }

				// initialise the carousel
				new Carousel('carousel-wrapper', $$('#carousel-content .slide'), $$('a.carousel-control', 'a.carousel-jumper'));
			} // success
		}  // if Is JSON
	} // onComplete

	}); // new Ajax.Request	

} // function f_fetchThumbnails

//Fetches the Page Text
function f_FetchPageText(ipObj) {

	var vPageID = '';
	var vPageVersion = '';
	var vPageType = '';
	var vEmailType = '';

	if (ipObj.PageID) { vPageID = ipObj.PageID; }
	if (ipObj.PageVersion) { vPageVersion = ipObj.PageVersion; }
	if (ipObj.PageType) { vPageType = ipObj.PageType; }
	if (ipObj.EmailType) { vEmailType = ipObj.EmailType; }

	var vUrl = 'lib/ajax.php?action=fetch&type=pagetext&pageid='+vPageID+'&pagever='+vPageVersion+'&pagetype='+vPageType+'&pageemail='+vEmailType;
	
	// Use an Ajax call to get, set and display the details
	new Ajax.Request(vUrl, {
	evalJS: false,
	onCreate: function(){ 
		// Hide the IE6 No More div
		if($('ie6nomorediv')) { $('ie6nomorediv').style.display='none'; }
		// Get new Thumbnails
		if($('SitePhotos').style.display!='block'){ $('SitePhotos').style.display='block'; f_FetchThumbnails(); }
		// Initialise Page
		f_InitialisePage('<div style="text-align: center; width: 100%; margin-top: 10px;"><img src="image/site/spinner01.gif" alt="Loading..." />');
	},
	onComplete: function (transport) {
		// Hide the spinner
		f_InitialisePage('');
		if (transport.responseText.isJSON()) {
			var vJSON = transport.responseText.evalJSON();
			// Use the JSON to create the Guest Objects & Message Objects
			var vResult   = vJSON.Response[0].Result;
			var vMessages = vJSON.Response[1].Message;
			if (vMessages[0].msgtype == "Success") {
				switch(vPageType) {
				case 'external':
					window.location.href = vResult[0].text;
					break;
				default:
					// If the get was OK
					f_PlaceText(vResult[0]);

					// If the e-mail page
					if (vPageType == 'email') {
						if ($('emailtype')) {
							$('emailtype').value = vEmailType;
							var vElts=document.getElementsByTagName('h4');
							switch(vEmailType) {
							case 'enquiries':
								vElts[0].innerHTML += ' to the Proprietors';
								break;
							case 'webmaster':
								vElts[0].innerHTML += ' to the Webmaster';
								break;
							default:
								break;
							}
						} // if elt
					} // if e-mail page
					break;
				} // switch
			} // success
		}  // if Is JSON
	} // onComplete
	}); // new Ajax.Request		
} // function f_fetchPageText

function f_InitialisePage(ipPageText) {
	// Initialise the page fields
	var vResp = new Object();
	vResp.text = ipPageText;
	vResp.id = '';
	vResp.version = 1;
	vResp.maxver = 1;
	f_PlaceText(vResp);
}

//Captcha
function f_GetCaptcha( ipDestElt ) {
	
	// Try to log in
    var vUrl = 'lib/ajax.php?action=fetch&type=captcha&targetdiv='+ipDestElt;
	new Ajax.Updater(ipDestElt, vUrl, {
		evalJS: false,
		onCreate: function () {
		  $(ipDestElt).innerHTML = "";
		}, // onCreate
		onComplete: function (transport) {
 		}  // onComplete
	}); // new Ajax.Request
}  // f_GetCaptcha

function f_PointerToHand ( ipElt ) {
	try { ipElt.style.cursor = "pointer"; } catch (err) {
		try { ipElt.style.cursor = "hand"; } catch (err2) { }
	}
} // f_PointerToHand

function f_ShowImage(ipImg) {

	// Get the Image
	var vImg = $(document.createElement('img'));
	vImg.id='largeimage';
	vImg.src=ipImg.src.replace(/_o/g,'').replace(/_thumb/g,'');
	vImg.alt=ipImg.alt.replace(/_o/g,'').replace(/_thumb/g,'');
	f_ShowOverMask(vImg);
}

function f_ShowOverMask(ipElt) {

	f_Mask();

	var vDiv = $(document.createElement('div'));
	vDiv.id = 'ViewImageCenter';
	vDiv.style.position='absolute';
	vDiv.style.top='0px';
	vDiv.style.left='0px';
	vDiv.className = 'ViewImageCenter';
	$('SiteHolder').appendChild(vDiv);
	f_ApplyViewportOffsets(vDiv);

	var vImgDiv = $(document.createElement('div'));
	vImgDiv.id = "ViewImage";
	vImgDiv.className = "ViewImage";
	
	var vImgX = $(document.createElement('img'));
	vImgX.id='imgx';
	vImgX.src='image/site/x.jpg';
	vImgX.alt='Close';
	vImgDiv.appendChild(vImgX);

	vDiv.appendChild(vImgDiv);
	vImgDiv.appendChild(ipElt);
	
	document.body.appendChild(vDiv);
	
	vImgX.observe('click', function(event){
		event.stop();
		vDiv.remove();
		ipElt.remove();
		f_Unmask();
	});

	vImgX.observe('mouseover', function(event){
		event.stop();
		f_PointerToHand ( vImgX );
	});
}

function f_Mask() {
	// Show an Element over a mask
	var vMask = $(document.createElement('div'));
	vMask.id = 'mask';
	vMask.style.position='absolute';
	vMask.style.top='0px';
	vMask.style.left='0px';
	document.body.appendChild(vMask);

	// Apply any Offsets to the viewport
	f_ApplyViewportOffsets(vMask);

	// Remove the scroller from the viewport
	document.body.style.overflow='hidden';
}

function f_ApplyViewportOffsets(ipElt) {
	// Move the Mask with the Viewport
	var vTop  = ipElt.style.top.replace(/px/g,'');
	var vLeft = ipElt.style.left.replace(/px/g,'');

	ipElt.style.top  = parseFloat(vTop) + parseFloat(document.viewport.getScrollOffsets().top) + 'px';
	ipElt.style.left = parseFloat(vLeft) + parseFloat(document.viewport.getScrollOffsets().left) + 'px';
}

function f_Unmask() {
	if ($('mask')) {
		$('mask').remove();
		document.body.style.overflow='auto';
	}
}

function f_CheckLinks() {
	// Check in case we need to call the page to compose an e-mail
	var vElts = $('SiteText').getElementsByTagName('a');
	var vLoop = 0;
	var vElt;
	var vBaseHref = document.getElementsByTagName('base')[0].href;
	for (vLoop=0;vLoop<vElts.length;vLoop++) {
		vElt = $(vElts[vLoop]);
		var vObj = new Object();
		// What is the href for?
		if (vElt.href=='mailto:webmaster@localhost') {
			vElt.observe('click', function(event){
				event.stop();
				vObj.PageType = 'email';
				vObj.EmailType = 'webmaster';
				f_FetchPageText(vObj);
			});
		}
		else if (vElt.href=='mailto:enquiries@localhost') {
			vElt.observe('click', function(event){
				event.stop();
				vObj.PageType = 'email';
				vObj.EmailType = 'enquiries';
				f_FetchPageText(vObj);
			});
		}
		else if (vElt.href.match(vBaseHref)) {
			// It's an internal link
			var vHref = vElt.href.replace(vBaseHref,'');
			// If for Contact Us page
			if (vHref=='contact.html') { 
				vElt.observe('click', function(event) {
					event.stop();
					vObj.PageType = 'contact';
					f_FetchPageText(vObj);
				});
			}  // if contact.html
		}
	}

	// Check in case we need to submit an e-mail
	if ($('emailform')!=null && $('emailform')!=undefined) {
		try { vElts = $('emailform').getElementsByTagName('input'); } catch (e) { }
		vLoop = 0;
		vElt = '';
		for (vLoop=0;vLoop<vElts.length;vLoop++) {
			vElt = $(vElts[vLoop]);
			// What is the input for?
			switch(vElt.type) {
			case 'submit':
				vElt.observe('click', function(event){
					f_SubmitEmail($('emailform'));
					event.stop();
				});
				break;
			default:
				break;
			} // switch
		} // for
	} // if form exists
} // f_CheckLinks

function f_CheckCaptcha() {
	var vElt = $('captchacell');
	if (vElt != undefined && vElt != null) { 
		f_GetCaptcha( vElt.id ); 
	}
}
function f_SubmitEmail(ipFormElt) {

	var vErrMsg = '';

	if (f_ValidateEmail()==true) {
		// Use an Ajax call to get, set and display the details
		new Ajax.Request('lib/ajax.php?action=commit&type=email', {
		evalJS: false,
		postBody: ipFormElt.serialize(),
		onCreate: function(){ 
			f_Mask();
			$('errorDiv').innerHTML = '';
			$('successDiv').innerHTML = '';
		},
		onComplete: function (transport) {
			f_Unmask(); 
			if (transport.responseText.isJSON()) {
				var vJSON = transport.responseText.evalJSON();
				// Use the JSON to create the Message Objects
				var vMessages = vJSON.Response[0].Message;
				if (vMessages[0].msgtype == "Success") {
					// If the get was OK
					$('successDiv').innerHTML = vMessages[0].msgtext;
					ipFormElt.disable();
				} // success
				else {
					vErrMsg = 'The following errors must be corrected:<ul>';
					vMessages.each(function(item, index) {
						vErrMsg+='<li>'+vMessages[0].msgtext+'</li>';
					}); // each
					$('errorDiv').innerHTML = vErrMsg;
					vErrMsg += '</ul>';
				} // fail
			}  // if Is JSON
		} // onComplete
		}); // new Ajax.Request	
	}
}

function f_ValidateEmail() {
	var vErrMsg='';
	var vErrors='';

	if ($F('emailname').strip()=='') {
		vErrMsg='<li>You must fill in your Name</li>';
		vErrors+=vErrMsg;
	}
	if ($F('emailaddress').strip()=='') {
		vErrMsg='<li>You must fill in your E-mail Address</li>';
		vErrors+=vErrMsg;
	} else {
		/* Check e-mail is valid */
		var vFilter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
		if (!vFilter.test($F('emailaddress').strip())) {
			vErrMsg='<li>Email must be valid</li>';
			vErrors+=vErrMsg;
		}
	}
	if ($F('emaillocation').strip()=='') {
		vErrMsg='<li>You must fill in your Location</li>';
		vErrors+=vErrMsg;
	}
	if ($F('emailtext').strip()=='') {
		vErrMsg='<li>You must type some Comments</li>';
		vErrors+=vErrMsg;
	}
	if ($F('attempt').strip()=='') {
		vErrMsg='<li>You must enter the Verification Code</li>';
		vErrors+=vErrMsg;
	}

	if (vErrors!='') { $('errorDiv').innerHTML = 'You must correct the following errors:<ul>'+vErrors+'</ul>'; }

	return vErrors=='';
}  // f_ValidateEmail

function f_MapsMouseoverHand() {
	var vElts = document.getElementsByClassName('mapimg');
	var vLoop = 0;
	if (vElts) {
		for (vLoop=0;vLoop<vElts.length;vLoop++) {
			f_PointerToHand ( $(vElts[vLoop]) );
		} // for
	} // vElts

	if ($('submitdir')) { f_PointerToHand ( $('submitdir') ); }
} // f_MapsMouseoverHand


