function popup(mylink, windowname) {
  if (! window.focus)return true;
  var href;
  if (typeof(mylink) == 'string')
     href=mylink;
  else
     href=mylink.href;
  window.open(href, windowname, 'width=400,height=200,scrollbars=yes');
  return false;
}


function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

function insertAfter(newElement,targetElement) {
  var parent = targetElement.parentNode;
  if (parent.lastChild == targetElement) {
    parent.appendChild(newElement);
  } else {
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}

function addClass(element,value) {
  if (!element.className) {
    element.className = value;
  } else {
    newClassName = element.className;
    newClassName+= " ";
    newClassName+= value;
    element.className = newClassName;
  }
}

/* set up history.back links */
function historyBack() {
    if (! document.getElementsByTagName) return;
    var links = document.getElementsByTagName("a");
    for (var c=0; c<links.length; c++) {
        var anchorlink = links[c];
        if (anchorlink.getAttribute("rel") == "previous") {
            anchorlink.onclick = function() {
                                this.href='javascript:history.back()';
                                //return false;
                             }
        }
    }
}

/*
open external link targets in new (_blank) window
params: pass a specific array of anchor elements (e.g. all within a certain container),
else function defaults to all anchors with rel='external'
*/
function externalLinks(targetAnchors) {
    if (!document.getElementsByTagName) return;
    if(! targetAnchors) {
        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.parentNode.className=='external')) anchor.target = "_blank";
        }
    } else {
        var anchors = targetAnchors;
        for (var i=0; i<anchors.length; i++) {
            var anchor = anchors[i];
            anchor.target = "_blank";
        }
    }
}

/* print */
function printPage() {
    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") == "print") {
        anchor.onclick = function() {
                                    window.print();
                                    return false;
                                    }
        }
    }
}

/* Check that an email address is valid based on RFC 821 (?) */
function isValidEmail(address) {
    if (address != '' && address.search) {
        if (address.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
            return true;
        } else return false;
    } else return true;
}

function isValidPhone(NumStr, String) {
    for(var Idx=0; Idx<NumStr.length; Idx++) {
        var Char = NumStr.charAt(Idx);
        var Match = false;

        for(var Idx1=0; Idx1<String.length; Idx1++)
        {
            if(Char == String.charAt (Idx1))
                Match = true;
        }

        if (!Match)
            return false;
    }
    return true;
}

addLoadEvent(historyBack);
addLoadEvent(externalLinks);
addLoadEvent(printPage);
//addLoadEvent(validateforms);


// Fire Events on DOM Ready
Object.extend(Event, {
  _domReady : function() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;

    if (this._timer)  clearInterval(this._timer);

    this._readyCallbacks.each(function(f) { f() });
    this._readyCallbacks = null;
},
  onDOMReady : function(f) {
    if (!this._readyCallbacks) {
      var domReady = this._domReady.bind(this);

      if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", domReady, false);

        /*@cc_on @*/
        /*@if (@_win32)
            document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") domReady();
            };
        /*@end @*/

        if (/WebKit/i.test(navigator.userAgent)) {
          this._timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) domReady();
          }, 10);
        }

        Event.observe(window, 'load', domReady);
        Event._readyCallbacks =  [];
    }
    Event._readyCallbacks.push(f);
  }
});


// Contact Us - Directions Tabs
Event.onDOMReady(function() {
	if($('contactUsDirections') != null) {
		// Hide all
		$$('#contactUsDirections .directionsBox').invoke('hide');

		// Check for anchor/fragment
		var frag = window.location.toString().split("#")[1];
		if($(frag) != null) {
			$($(frag).parentNode).show();
			$($$("a[href=#"+frag+"]")[0].parentNode).addClassName('active');
		} else {
			$$('#contactUsDirections .directionsBox')[0].show();
			$($$("a[href=#directionsMap]")[0].parentNode).addClassName('active');
		}

		// Setup link events
		$$('#contactUsDirections ul.tabs a').each(function(a) {
			a.observe('click', function(e) {
				$$('#contactUsDirections .directionsBox').invoke('hide');
				$($(this.href.split("#")[1]).parentNode).show();

				// Set active link
				$$('#contactUsDirections ul.tabs li.active').invoke("removeClassName", "active");
				$(this.parentNode).addClassName('active');
			}.bindAsEventListener(a));
		});

		// Load Map
		if (GBrowserIsCompatible()) {
			var bubbleHTML = "<h2>Address:</h2><p><strong>Stevenson College</strong><br />Bankhead Avenue<br />Edinburgh EH11 4DE<br />0131 535 4630</p><p><a href='http://maps.google.co.uk/maps?q=EH11+4DE&hl=en&ie=UTF8&ll=55.926221,-3.290019&spn=0.016542,0.05579&z=15&iwloc=addr&ct=directions-to'>Get Directions to here</a>";
			var map = new GMap2(document.getElementById("mapHolder"));
			map.setCenter(new GLatLng(55.926221,-3.290019), 15);
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());

			var marker = new GMarker(new GLatLng(55.926221,-3.290019));
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(bubbleHTML);
			});
			map.addOverlay(marker);
			marker.openInfoWindowHtml(bubbleHTML);
		}

	}
});



/*
addPrintLink function by Roger Johansson, www.456bereastreet.com
*/
var addPrintLink = {
	init:function(sTargetEl,sLinkText) {
		if (!document.getElementById || !document.createTextNode) {return;} // Check for DOM support
		if (!document.getElementById(sTargetEl)) {return;} // Check that the target element actually exists
		if (!window.print) {return;} // Check that the browser supports window.print
		var oTarget = document.getElementById(sTargetEl);
		var oLink = document.createElement('a');
		oLink.id = 'print-link'; // Give the link an id to allow styling
		oLink.href = '#'; // Make the link focusable for keyboard users
		oLink.appendChild(document.createTextNode(sLinkText));
		oLink.onclick = function() {window.print(); return false;} // Return false prevents the browser from following the link and jumping to the top of the page after printing
		oTarget.appendChild(oLink);
	},
/*
addEvent function included here for portability. Replace with your own addEvent function if you use one.
*/
/* addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html */
	addEvent:function(obj, type, fn) {
		if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
		else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() {obj["e"+type+fn](window.event);}
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	}
};