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;
  }
}

/* patch IE's 'guillotine bug' (on teasers containing floated images) by inserting 'clearing' dd only in that browser */
function patchGuillotineBug() {
    if (! document.all) return;
    if(window.opera) return false;
    if (! document.getElementsByTagName) return;
    defn_lists = document.getElementsByTagName('dl');
    for (var i=0; i<defn_lists.length; i++) {
        list = defn_lists[i];
        if (list.className.indexOf('teaser') != -1) {
            var clearer = document.createElement("dd");
            addClass(clearer,'clear');
            var cleartext = document.createTextNode(" ");
            clearer.appendChild(cleartext);
            list.appendChild(clearer);
        }
    }
}

/* patch IE's lack of CSS support for :hover, by assigning replacement .hover class dynamically */
function applyHover(targetArray) {
    var items = targetArray;
    for (i=0; i<items.length; i++) {
        node = items[i];
        node.onmouseover=function() {
            this.className+=" hover";
        }
        node.onmouseout=function() {
            this.className=this.className.replace(" hover", "");
        }
    }
}

function applyRollover (element) {
    element.onmouseover = function() {
        position = this.src.lastIndexOf('.');
        origImg = this.src.substring(0,position);
        rolloverImg = origImg+'-h.gif';
        this.src = rolloverImg;
    }
    element.onmouseout = function() {
        position = this.src.lastIndexOf('-');
        origImg = this.src.substring(0,position);
        rolloverImg = origImg+'.gif';
        this.src = rolloverImg;
    }
}

/* 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;
                                    }
        }
    }
}

function rollImageSubmits() {
    /* grab elements and apply events */
    if (!document.getElementsByTagName) return;
    var inputs = document.getElementsByTagName("input");
    for (var i=0; i<inputs.length; i++) {
        var inp = inputs[i];
        if (inp.getAttribute('type')=="image") {
            applyRollover(inp);
        }
    }
}

function applySubmitHover() {
    if (!document.getElementsByTagName) return;
    if (document.all) {
        if(window.opera) return false;
        var submits = new Array();
        var inputs = document.getElementsByTagName("input");
        for (i=0; i<inputs.length; i++) {
            var inp = inputs[i];
            if(inp.getAttribute('type')=='submit') {
                submits[submits.length] = inp;
            }
        }
        applyHover(submits);
    }
}

function applyResetHover() {
    if (!document.getElementsByTagName) return;
    if (document.all) {
        if(window.opera) return false;
        var resets = new Array();
        var inputs = document.getElementsByTagName("input");
        for (i=0; i<inputs.length; i++) {
            var inp = inputs[i];
            if(inp.getAttribute('type')=='reset') {
                resets[resets.length] = inp;
            }
        }
        applyHover(resets);
    }
}

function toggleSearchValue() {
    if (! document.getElementById) return;
    if (! document.getElementById('term')) return;
    var terminput = document.getElementById('term');
    var originalValue = terminput.value;
    terminput.onclick= function() {
	                        this.value='';
                       }
    terminput.onblur = function() {
	                        if(this.value=='') {
                                this.value=originalValue;
                            }
                       }
}

function checkQueryString() {
    if (! document.getElementById) return;
    if (! document.getElementById('search')) return;
    var form = document.getElementById('search');
    form.onsubmit = function() {
                            if ( document.forms["search"].sq.value == "Search..." || document.forms["search"].sq.value == "" ) {
    	                        alert("Please enter your search term first.");
    	                        document.forms["search"].sq.value = "";
                          	    document.forms["search"].sq.focus();
                          	    return false;
	                        } else {
                                return true;
                        	}
                        }
}

/* Check that an email address is valid based on RFC 821 (?) */
function isValidEmail(address) {
    if(!address) return false;
    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;

}

function isValidName(NameStr, String) {
    for(var Idx=0; Idx<NameStr.length; Idx++) {
        var Char = NameStr.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;

}

/*
   validation:::
   check required fields have been filled
   check email fields have a valid email address
   check username and password fields are at least 6 chars long
*/
function validateforms() {
    if(! document.getElementsByTagName) return false;
    var forms = document.getElementsByTagName("form");
    for (var i=0;i<forms.length;i++) {
        f = forms[i];
        if(f.name!='search') {
            f.onsubmit = function() {
                for (var j=0;j<f.length;j++) {
                    el = f.elements[j];
                    if (el.type=='text' || el.type=='password') {
                        if (el.name.match('email')) {
                            if (! isValidEmail(el.value)) {
                                alert("Please supply a valid email address in the format you@yourdomain.com");
                                el.focus();
                                addClass(el,'required');
                                return false;
                            }
                        } else if ( el.name.match('firstname') || el.name.match('surname') ) {
                            if (! isValidName(el.value,"1234567890 ")) {
                                alert("Please supply a valid " + el.name + " (containing no numbers).");
                                el.focus();
                                addClass(el,'required');
                                return false;
                            }
                        } else if (el.name.match('phone') || el.name.match('fax') || el.name.match('mobile') || el.name.match('day') || el.name.match('month') || el.name.match('year')) {
                            if (! isValidPhone(el.value,"1234567890+- ")) {
                                if(el.name.indexOf('number') != -1) {
                                    elname = el.name;
                                } else {
                                    elname = el.name + " number";
                                }
                                alert("Please supply a valid " + elname + ".");
                                el.focus();
                                addClass(el,'required');
                                return false;
                            }
                        }
                    }
                }
            }
        }
    }
}

function getWindowHeight() {
var windowHeight=0;
if (typeof(window.innerHeight)=='number') {
windowHeight=window.innerHeight;
}
else {
if (document.documentElement&&
document.documentElement.clientHeight) {
windowHeight=
document.documentElement.clientHeight;
}
else {
if (document.body&&document.body.clientHeight) {
windowHeight=document.body.clientHeight;
}
}
}
return windowHeight;
}

function setFooter() {
	if (document.getElementById) {
		var windowHeight=getWindowHeight();
		if (windowHeight>0) {

			if(!document.getElementById('container-2') || !document.getElementById('bottom')) return;

			var contentHeight=document.getElementById('container-2').offsetHeight;
			var footerElement=document.getElementById('bottom');
			var footerHeight=footerElement.offsetHeight;
			if (windowHeight-(contentHeight+footerHeight)>=0) {
				footerElement.style.position='relative';
				footerElement.style.top=(windowHeight-(contentHeight+footerHeight))+'px';
			}
			else {
				footerElement.style.position='static';
			}
		}
	}
}

/* preload rollover image */
imageLocation = 'http://'+location.hostname+'/images/';
var form_submit = new Image();
form_submit.src = imageLocation + "form/form-go-h.gif";

/* add load events */
//addLoadEvent(patchGuillotineBug);
addLoadEvent(historyBack);
addLoadEvent(externalLinks);
addLoadEvent(printPage);
addLoadEvent(rollImageSubmits);
//addLoadEvent(applySubmitHover);
addLoadEvent(applyResetHover);
addLoadEvent(toggleSearchValue);
addLoadEvent(checkQueryString);
addLoadEvent(validateforms);

Event.observe(window,'load',function(){
	$$('a[rel="popup"]').each(function(s){
		Event.observe(s,'click',function(e){
			Event.stop(e);
			window.open(s.href,'newwin','top=0,left=0,width=729,height=570,resizable=1,scrollbars=1');
		});
	});
});


addLoadEvent(setFooter);
window.onresize = function() {
  setFooter();
}
