﻿var Template = new TemplateClass();

//=======================================================================
// Template class.
//=======================================================================
function TemplateClass()
{
	var THIS = this;

	//===================================================================
	// Page load event handler.
	//===================================================================
	this.Page_Load = function Page_Load()
	{
		THIS.SimpleBrowser = (document.getElementById('txtSimpleBrowser').value == 'True');
		THIS.BrowserDetail = document.getElementById('txtBrowserDetail').value;
		THIS.UsingRSSTechnologyNewsFeed = false;
		
		THIS.LockLayer = document.getElementById('LockLayer');
		THIS.Message = document.getElementById('Message');
		
		// Check if the browsers content needs resizing.
		if (THIS.SimpleBrowser)
		{
			window.onresize = THIS.ResizeContent;
			THIS.ResizeContent();
		}
		
		// Start the banner image fading.
		Fade.Start('Banner1', 'Banner2');
		
		var aPage = window.location.href.split('/');
		var strPage = aPage[(aPage.length - 1)];
		
		strPage = strPage.substring(0, strPage.indexOf('.'));

		// Check the page.
		switch (strPage.toUpperCase())
		{
			case '':
				if (window.location.href.replace('http://' + window.location.host, '').toLowerCase() == '/documents/')
				{
					Documents.Page_Load();
				}
				else
				{
					// Home page, retrieve RSS news feed.
					THIS.RSSTechnologyNewsFeed();
				}
				break;

			case 'SITELISTING':
				PageLoad();
				break;
		}
		return;
	}
	
	//===================================================================
	// Login menu click event handler.
	//===================================================================
	this.Login = function Login()
	{
		return;
	}
	
	//===================================================================
	// Load the RSS technology news feed.
	//===================================================================
	this.RSSTechnologyNewsFeed = function RSSTechnologyNewsFeed()
	{
		THIS.UsingRSSTechnologyNewsFeed = true;
		
		var params = new SOAPClientParameters();
		SOAPClient.invoke('/WebServices/Main.asmx', 'RSSTechnologyNewsFeed', params, true, THIS.RSSTechnologyNewsFeedCallBack, null);
		return;
	}

	//===================================================================
	// Load the RSS technology news feed.
	//===================================================================
	this.RSSTechnologyNewsFeedCallBack = function RSSTechnologyNewsFeedCallBack(responseObject, requestObject, sender)
	{
		var aResponse = responseObject.split('|');
		var RSSFeedNewsItemContainer = document.getElementById('RSSFeedNewsItemContainer');
		var objRecordset = new Recordset();

		// Remove all elements from the container.
		while (RSSFeedNewsItemContainer.hasChildNodes())
			RSSFeedNewsItemContainer.removeChild(RSSFeedNewsItemContainer.firstChild);
		
		// Check if an error has occured.
		if (aResponse[0] == 'ERROR')
		{
			var divNoNewsItems = document.createElement('DIV');
			divNoNewsItems.innerHTML = aResponse[1];
			RSSFeedNewsItemContainer.appendChild(divNoNewsItems);
			return;
		}
		
		// Load the XML.
		objRecordset.LoadXML(aResponse[1], 'item');
		
		// Check the record count.
		if (objRecordset.RecordCount == 0)
		{
			var divNoNewsItems = document.createElement('DIV');
			divNoNewsItems.innerHTML = 'There are currently no news items';
			RSSFeedNewsItemContainer.appendChild(divNoNewsItems);
			return;
		}
		
		// Loop through the items.
		while (!objRecordset.EOF())
		{
			if (objRecordset['description'] != null)
			{
				var aNewsItem = document.createElement('A');
				var divNewsItemTitle = document.createElement('DIV');
				var divNewsItemDescription = document.createElement('DIV');
				var divNewsItemCategory = document.createElement('DIV');
				var divNewsItemTime = document.createElement('DIV');
				
				aNewsItem.setAttribute('id', 'NewsItem');
				aNewsItem.setAttribute('href', objRecordset['link']);
				aNewsItem.setAttribute('target', '_blank');
				
				divNewsItemTitle.setAttribute('id', 'NewsItemTitle');
				divNewsItemDescription.setAttribute('id', 'NewsItemDescription');
				divNewsItemCategory.setAttribute('id', 'NewsItemCategory');
				divNewsItemTime.setAttribute('id', 'NewsItemTime');
				
				divNewsItemTitle.innerHTML = objRecordset['title'];
				divNewsItemDescription.innerHTML = objRecordset['description'];
				//divNewsItemCategory.innerHTML = objRecordset['category'];
				divNewsItemTime.innerHTML = objRecordset['pubDate'];

				aNewsItem.appendChild(divNewsItemTitle);
				aNewsItem.appendChild(divNewsItemDescription);
				aNewsItem.appendChild(divNewsItemCategory);
				aNewsItem.appendChild(divNewsItemTime);
				
				RSSFeedNewsItemContainer.appendChild(aNewsItem);
			}
			objRecordset.MoveNext();
		}
		
		// Resize the main content.
		if (THIS.SimpleBrowser)
			THIS.ResizeContent();
		return;
	}

	//===============================================================
	// Submit button event handler.
	//===============================================================
	this.Submit = function Submit()
	{
		var txtName = document.getElementById('txtName');
		var txtEMail = document.getElementById('txtEMail');
		var txtEnquiry = document.getElementById('txtEnquiry');
		
		// Check if the user has entered their name.
		if (txtName.value == '')
		{
			txtName.focus();
			alert('Please enter your name.');
			return;
		}
		
		// Check if the user has entered their email address.
		if (txtEMail.value == '')
		{
			txtEMail.focus();
			alert('Please enter your email address.');
			return;
		}
		else
		{
			// Check if the user has entered a valid email address.
			var pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;

			// Validate the email address.
			if (!pattern.test(txtEMail.value))
			{
				txtEMail.focus();
				txtEMail.value = txtEMail.value;
				alert('Invalid Email Address');
				return;
			}
		}
		
		// Check if the user has entered their enquiry.
		if (txtEnquiry.value == '')
		{
			txtEnquiry.focus();
			alert('Please enter your enquiry.');
			return;
		}
		
		// The form is validated.
		var objForm = document.getElementById('aspnetForm');
		document.getElementById('ctl00_ContentPlaceHolder1_Name').value = document.getElementById('txtName').value;
		document.getElementById('ctl00_ContentPlaceHolder1_Email').value = document.getElementById('txtEMail').value;
		document.getElementById('ctl00_ContentPlaceHolder1_Enquiry').value = document.getElementById('txtEnquiry').value;
		objForm.submit();
		return;
	}

	//===============================================================
	// Reset button event handler.
	//===============================================================
	this.Reset = function Reset()
	{
		var txtName = document.getElementById('txtName');
		var txtEMail = document.getElementById('txtEMail');
		var txtEnquiry = document.getElementById('txtEnquiry');
		
		txtName.value = '';
		txtEMail.value = '';
		txtEnquiry.value = '';
		return;
	}
	
	//===============================================================
	// Resize content.
	//===============================================================
	this.ResizeContent = function ResizeContent()
	{
		var intSideBar = 0;
		var intBrowserOffset = 0;
		
		// Check the browser detail.
		switch (THIS.BrowserDetail)
		{
			case 'Firefox':
			case 'Mozilla':
			case 'AppleMACSafari':
				intBrowserOffset = 5;
				break;
		}
		
		if (THIS.UsingRSSTechnologyNewsFeed)
			var intSideBar = 186;
		
		var MainContent = document.getElementById('MainContent');
		MainContent.style.width = ((document.body.offsetWidth - (26 - intBrowserOffset)) - intSideBar) + 'px';
		MainContent.style.height = (document.body.offsetHeight - 187) + 'px';
		
		var RSSFeedNewsItemContainer = document.getElementById('RSSFeedNewsItemContainer');
		
		if ((RSSFeedNewsItemContainer != undefined) || (RSSFeedNewsItemContainer != null))
		{
			RSSFeedNewsItemContainer.style.width = (174 - intBrowserOffset) + 'px';
			RSSFeedNewsItemContainer.style.top = (35 + intBrowserOffset) + 'px';
			RSSFeedNewsItemContainer.style.height = (document.body.offsetHeight - 216) + 'px';
		}
		return;
	}

	//===============================================================
	// Display a message to the user.
	//===============================================================
	this.DisplayMessage = function DisplayMessage(MessageText)
	{
		// Check if the lock layer is available.
		if ((THIS.LockLayer == undefined) || (THIS.LockLayer == null))
			return;

		// Check if the message text has been set.
		THIS.LockLayer.className = '';
		THIS.Message.className = '';
		THIS.Message.innerHTML = MessageText;
		return;
	}
	
	//===============================================================
	// Clear a current message.
	//===============================================================
	this.ClearMessage = function ClearMessage()
	{
		// Check if the lock layer is available.
		if ((THIS.LockLayer == undefined) || (THIS.LockLayer == null))
			return;

		// Check if the message text has been set.
		THIS.LockLayer.className = 'Hide';
		THIS.Message.className = 'Hide';
		return;
	}
	
	//=====================================================================
	// validEmailAddress checks that the email is address is valid.
	//=====================================================================
	this.validEmailAddress = function validEmailAddress(strEmailAddress)
	{
		//rules:
		//1. Must contain an @ character
		//2. Must contain a . character
		//3. The @ character must not be the first or last character in the string
		//4. The . character must not be the first or last character in the string
		//5. only 1 @ character can exist
		//6. Only uses letters, numbers, . and @ (spaces not allowed)
		//7. . cannot be immediately before or after the @
		//8. Must not be blank
		//9. Must be at least 2 letters after the last .
		//10. character '.' cannot appear 2 or more times consecutively
		//11. Must contain at least 1 . after the @

		//rule 8;
		if (strEmailAddress == "")
			return false;

		var arrAllowedChars = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "@", "-", "_");

		//rule 1;
		if (strEmailAddress.indexOf("@") == -1)
			return false;

		//rule 2;
		if (strEmailAddress.indexOf(".") == -1)
			return false;

		//rule 3;
		if (strEmailAddress.indexOf("@") == 0 || strEmailAddress.charAt(strEmailAddress.length - 1) == "@")
			return false;

		//rule 4;
		if (strEmailAddress.indexOf(".") == 0 || strEmailAddress.charAt(strEmailAddress.length - 1) == ".")
			return false;

		//rule 9;
		if (strEmailAddress[strEmailAddress.length - 1] == "." || strEmailAddress.charAt(strEmailAddress.length - 2) == ".")
			return false;

		//rule 7;
		if (strEmailAddress.indexOf("@.") != -1 || strEmailAddress.indexOf(".@") != -1)
			return false;

		//rule 10;
		if (strEmailAddress.indexOf("..") != -1)
			return false;

		var blnIllegalChars = false;
		var intAtCount = 0; //number of @ characters
		strEmailAddress = strEmailAddress.toLowerCase();
		
		//rule 6 and 5
		for (var intIndex = 0; intIndex < strEmailAddress.length; intIndex++)
		{
			var chrLetter = strEmailAddress.substring(intIndex, intIndex + 1);
			var blnFound = false;
			
			for (var intLetter = 0; intLetter < arrAllowedChars.length; intLetter++)
			{
				var chrValid = arrAllowedChars[intLetter];

				if (chrValid == chrLetter)
				{
					blnFound = true;
					break;
				}
			}

			if (blnFound == false)
			{
				//chrLetter is not a valid letter
				return false; //rule 6
			}

			if (chrLetter == "@")
				intAtCount++;

			if (intAtCount > 1)
				return false; //rule 5
		}

		var strDomain = strEmailAddress.substring(strEmailAddress.indexOf("@") + 1);

		if (strDomain.indexOf(".") == -1)
			return false; //rule 11

		return true;
	}
	
	//=====================================================================
	// DOM loaded event handler.
	//=====================================================================
	this.DOMLoaded = function DOMLoaded()
	{
		document.addEventListener('touchmove', function(e){ e.preventDefault(); });
		myScroll = new iScroll(document.getElementById('scroller'));
		return;
	}
	
	return;
}

try
{
	document.addEventListener('DOMContentLoaded', Template.DOMLoaded);
}
catch(exc)
{
	// Do nothing.
}
