﻿// AJAXLib v. 1.0
// author: Jacek Karaszewski, http://www.karaszewski.com/tools/ajaxlib/
// licenced under Creative Commons Attribution 2.5 License

// public

//loadXMLDoc("LCYoga.xml", callbackFunction, true);

// function loadXMLDoc(xml_url, function_name, ignore_white)
function loadXMLDoc(url, callFunc, ignoreWhite) {
	functionToCall = callFunc;
	stripWS = ignoreWhite;
	xmlRequestObj = window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")
	xmlRequestObj.onreadystatechange = processXML;
	xmlRequestObj.open("GET", url, true);
	xmlRequestObj.setRequestHeader("Cache-Control", "no-cache");
    xmlRequestObj.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );	
	xmlRequestObj.send(null);
}

// private

var myString = "";
var patDate = /\d{1,}\/\d{1,}\/\d{1,}/;
var patURL = /\{.+\}/;

function is_ws(nod) {
	return !(/[^\t\n\r ]/.test(nod.data));
}

function findWhiteSpace(node, nodeNo) {
	for (i=0; i<node.childNodes.length; i++) {
		if (node.childNodes[i].nodeType == 3 && is_ws(node.childNodes[i])) {
			nodesToDelete[nodesToDelete.length] = node.childNodes[i]
		}
		if (node.childNodes[i].hasChildNodes()) {
			findWhiteSpace(node.childNodes[i], i);
		}
	}
	node = node.parentNode;
	i = nodeNo;
}

function stripWhiteSpace(node) {
	nodesToDelete = Array();
	findWhiteSpace(node, 0);
	for(i=nodesToDelete.length-1;i>=0;i--) {
		nodeRef = nodesToDelete[i];
		nodeRef.parentNode.removeChild(nodeRef)
	}
}

function isNull(initValue, returnValue)
{
  if (initValue == null)
    {
    return returnValue;
    }
  else
    {
    return initValue;
    }
}

function processXML() {
	if (xmlRequestObj.readyState == 4 && (xmlRequestObj.status == 200 || xmlRequestObj.status == 304)) {
		if(stripWS) {
			stripWhiteSpace(xmlRequestObj.responseXML);
		}
		resultXML = xmlRequestObj.responseXML;
		functionToCall()
	}
}

function traverse(tree) {
if(tree.hasChildNodes() || tree.nodeType != 3) { 
   document.write('<ul><li>'); 
   document.write('<b>'+tree.nodeName+' : </b>');
   myString = myString + tree.nodeName + ' : '
   for(var i=0; i<tree.childNodes.length; i++) 
     traverse(tree.childNodes[i]); 
   document.write('</li></ul>'); 
 } 
 else
//  myString = myString + tree.nodeValue.replace(/#/g, "<br />"));
   document.write(tree.nodeValue);
}

function initTraverse() { 
	if ((document.title.search("Welcome") != -1) || (document.title.search("Upcoming Workshops") != -1))
	{
		loadXMLDoc("LCYoga.xml", callbackFunction, false);
	}
	else
	{
		return;
	}
}


function xmlValue(x, j, tagName)
{
if (x[j].getElementsByTagName(tagName)[0].hasChildNodes())
		{ 
		return(x[j].getElementsByTagName(tagName)[0].childNodes[0].nodeValue);
		}
	else
		{
		return("");
		}
}



function callbackFunction() {
	if (document.title.search("Welcome") != -1) {
		display(resultXML, "Preface", "preface");
//		display(resultXML, "NewsItem", "news");
		}
	else if (document.title.search("Upcoming Workshops") != -1) {
		display(resultXML, "Workshop", "workshops");
		}
}

function display(xmlDoc, tagName, elementID)
{
var x = resultXML.getElementsByTagName(tagName);
var myString = "";
for (var i=0;i<x.length;i++)
	{
	var DateFrom = xmlValue(resultXML.getElementsByTagName(tagName), i, "DisplayFrom");
	var DateTo = xmlValue(resultXML.getElementsByTagName(tagName), i, "DisplayTo");
	var Title = xmlValue(resultXML.getElementsByTagName(tagName), i, "Title");
	var Description = xmlValue(resultXML.getElementsByTagName(tagName), i, "Description");
	if (patURL.test(Description)) {
		var myDesc = Description;
		var myURL = patURL.exec(Description)[0].split("|");
		var myURL1 = myURL[0].slice(1);
		var myURL2 = myURL[1].slice(0, myURL[1].length - 1);
		Description = Description.slice(0, Description.indexOf("{")) + "<a href='" + myURL2 + "' target='_blank'>" + myURL1 + "</a>";
		}
	
	
	if (tagName == "Workshop") {var eventDate = xmlValue(resultXML.getElementsByTagName(tagName), i, "EventDate");} else {var eventDate = "";}	
	if (tagName == "Retreat") {var eventDateFrom = xmlValue(resultXML.getElementsByTagName(tagName), i, "EventDateFrom");} else {var eventDateFrom = "";}
	if (tagName == "Retreat") {var eventDateTo = xmlValue(resultXML.getElementsByTagName(tagName), i, "EventDateTo");} else {var eventDateTo = "";}
	if (tagName == "Workshop") {var Anchor = xmlValue(resultXML.getElementsByTagName(tagName), i, "Anchor");} else {var Anchor = "";}	
	if (tagName == "Workshop" || tagName == "Retreat") {var Location = xmlValue(resultXML.getElementsByTagName(tagName), i, "Location");} else {var Location = "";}	
	if (tagName == "Workshop") {var eventTime = xmlValue(resultXML.getElementsByTagName(tagName), i, "EventTime");} else {var eventTime = "";}
	if (tagName == "Workshop") {var Picture = xmlValue(resultXML.getElementsByTagName(tagName), i, "Picture");} else {var Picture = "";}
	if (tagName == "NewsItem") {var Link = xmlValue(resultXML.getElementsByTagName(tagName), i, "Link");} else {var Link = "";}
	if (tagName == "Workshop") {var BookingForm = xmlValue(resultXML.getElementsByTagName(tagName), i, "BookingForm");} else {var BookingForm = "";}	
	if (tagName == "Workshop" || tagName == "Retreat") {var Cost = xmlValue(resultXML.getElementsByTagName(tagName), i, "Cost");} else {var Cost = "";}
	var Updated = xmlValue(resultXML.getElementsByTagName(tagName), i, "Updated");
	if (enable(DateFrom, DateTo)) {
		switch (tagName)
			{
			case "Preface":
				myString = myString + "<img src='images/hr.gif' alt='' /><p><strong>" + Title + "</strong><br />" + Description.replace(/~/g, "<br />") + "<br /><strong>Om Shanti<br />Lisa x</strong><br /></p>";
				break;
			case "NewsItem":
				myString = myString + "<table class='newsitem'><tr><td colspan='2'><strong>" + Title + "</strong></td></tr><tr><td colspan='2'>" + Description.replace(/~/g, "<br />") + "</td></tr><tr><td><p class='updated'>Updated: " + fullDate(Updated, "Short") + "</p></td><td><p class='clickhere'><a href='" + Link + "'>Click here for further info...</a></p></td></tr></table>";			
				break;
			case "Workshop":
				if (BookingForm != "") {BookingForm = "<p class='clickhere1'><a href='bookingforms/" + BookingForm + "' title='Click here to open the booking form...' target='_blank'>Click here to open the booking form...</a></p>";} else {BookingForm = "&nbsp;";} 
				myString = myString + "<table class='workshopitem'><tr><td><h3>" + fullDate(eventDate, "Full2") + "</h3></td><td><a name='" + Anchor + "'>&nbsp;</a><h2>" + Title + "</h2></ br><h3>" + Location + "</h3></td><td><h3>" + eventTime + "</h3></td></tr><tr><td rowspan='2'><img alt='Workshop Picture' longdesc='Workshop Picture' src='images/" + Picture + "' /></td><td colspan='2'><p class='desc'>" + Description.replace(/~/g, "<br />") + "</p></td></tr><tr><td colspan='2'><p class='updatedright'>Updated: " + fullDate(Updated, "Short") + "</p></td></tr><tr><td colspan='2'>" + BookingForm + "</td><td class='just_right'><strong>" + Cost + "</strong></td></tr></table>";						
				break;			
			default:
				myString = ""		
			}
//		myString = myString + fullDate(eventDateFrom) + " : " + fullDate(eventDateTo) + " : " + Title + " : " + Description.replace(/~/g, "<br />") + " : " + Link + " : " + Cost + " : " + fullDate(Updated) + "<br /><br />";
		}
	if (i < x.length - 1 && (tagName == "NewsItem" || tagName == "Workshop")) {myString = myString + "<img src='images/hr.gif' alt='' />";}
	}
document.getElementById(elementID).innerHTML = myString;
}  


function enable(myDateFrom, myDateTo)
{
var today = new Date();
if (myDateFrom == null || myDateFrom == ""){myDateFrom = today.getDate() + "/" + (today.getMonth() + 1) + "/" + today.getFullYear();}
if (myDateTo == null || myDateTo == ""){myDateTo = today.getDate() + "/" + (today.getMonth() + 1) + "/" + today.getFullYear();}
//alert(DateFrom + " " + DateTo);
var vDateFrom = myDateFrom.split("/");
var vDateTo = myDateTo.split("/");
var vFromDay = (vDateFrom[0]);
var vFromMonth = (vDateFrom[1]) - 1;
var vToDay = (vDateTo[0]);
var vToMonth = (vDateTo[1]) - 1;
if (vDateFrom.length == 3 && vDateTo.length == 3) {
	var vFromYear = (vDateFrom[2]);
	var vToYear = (vDateTo[2]);
	var fullDateFrom = new Date();
	var fullDateTo = new Date();
	fullDateFrom.setFullYear(vFromYear, vFromMonth, vFromDay);
	fullDateTo.setFullYear(vToYear, vToMonth, vToDay);
}
var today = new Date();
if (today >= fullDateFrom && fullDateTo >= today)
	{
	return true;
	}
	else
	{
	return false;
	}
}

function fullDate(myDate, myFormat)
{
var daysofweek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var monthNamesShort = new Array("Jan","Feb","Mar","Apr","May","June","July","Aug","Sept","Oct","Nov","Dec");
var monthNums = new Array("01","02","03","04","05","06","07","08","09","10","11","12");

if (myDate == "now")
{
	var now = new Date();
	var day = now.getDate();
	var month = now.getMonth();
	var year = now.getYear();
	var today = now.getDay();
}
else if (patDate.test(myDate))
{
	var vDate = myDate.split("/");
	var day = vDate[0];
	var month = vDate[1] - 1;
	var year = vDate[2];
	var vFullDate = new Date();
	vFullDate.setFullYear(year, month, day);
	var today = vFullDate.getDay();
}
else
{
	return ("");
}

if (myFormat == "Short")
{
	return (Math.round(day) + " " + monthNamesShort[month] + " " + year);
}
else if (myFormat == "Full2")
{
	return (daysofweek[today] + "</h3></ br><h3>" + day + Nths(day) + " " + monthNames[month] + " " + year);
}
else
{
	return (daysofweek[today] + " " + day + Nths(day) + " " + monthNames[month] + " " + year);
}



}

function Nths(day)
{
    if (day == 1 || day == 21 || day == 31) return 'st';
    if (day == 2 || day == 22) return 'nd';
    if (day == 3 || day == 23) return 'rd';
    return 'th';
}












