

    Utils = {};

Utils.createSelectElement = function(name, value, selected) {
    var option = document.createElement("option");
    option.innerHTML = name;
    option.value = value;
    option.selected = selected;
    return option;
}

Utils.createHiddenField = function(name, value, formId) {
    var input = document.createElement('input');
    input.type = 'hidden';
    input.name = name;
    input.value = value;
    if (formId) {
        document.getElementById(formId).appendChild(input);
    }
    return input;
}

Utils.checkLogin = function() {
    if (document.getElementById("username").value == "" || document.getElementById("password").value == "") {
        alert("Please enter your email address and password");
        return false;
    }
    return true;
}

Utils.checkRegForm = function() {
    var error = "";
    if (document.getElementById("email").value != document.getElementById("confirmEmail").value) {
        error += "Please ensure that your email addresses match\n";
    }

    if (document.getElementById("password").value != document.getElementById("confirmPassword").value) {
        error += "Please ensure that your passwords match\n";
    }

    //validation
    if (document.getElementById("email").value.length < 1) {
        error += "Please ensure your email is greater than 6 letters or numbers\n";
    }

    if (document.getElementById("password").value.length < 6) {
        error += "Please ensure your password is greater than 6 letters or numbers\n";
    }

    if (document.getElementById("firstName").value.length < 1) {
        error += "Please tell us your first name\n";
    }

    if (document.getElementById("surname").value.length < 1) {
        error += "Please tell us your last name\n";
    }

    if (document.getElementById("tel").value.length < 1) {
        error += "Please tell us your phone number\n";
    }

    if (error.length > 0) {
        alert(error);
        return false;
    } else {
        return true;
    }
}

Utils.checkMoreInfo = function() {
    var error = "";

    //validation
    if (document.getElementById("email").value.length < 6) {
        error += "Please ensure your email is greater than 6 letters or numbers\n";
    }

    if (document.getElementById("phone").value.length < 1) {
        error += "Please tell us your phone number\n";
    }

    if (error.length > 0) {
        alert(error);
        return false;
    } else {
        return true;
    }
}

Utils.checkEditProfile = function() {
    var error = "";

    //validation
    if (document.getElementById("firstName").value.length < 1) {
        error += "Please tell us your first name\n";
    }

    if (document.getElementById("surname").value.length < 1) {
        error += "Please tell us your surname\n";
    }

    if (document.getElementById("email").value.length < 6) {
        error += "Please ensure your email is greater than 6 letters or numbers\n";
    }


    if (document.getElementById("tel").value.length < 1) {
        error += "Please tell us your phone number\n";
    }

    if (document.getElementById("address1").value.length < 1) {
        error += "Please tell us your address\n";
    }

    if (document.getElementById("town").value.length < 1) {
        error += "Please tell us the town in which you live\n";
    }

    if (document.getElementById("countyCity").value.length < 1) {
        error += "Please tell us the city or county in which you live\n";
    }

    if (document.getElementById("postcode").value.length < 1) {
        error += "Please tell us your post code\n";
    }

    if (error.length > 0) {
        alert(error);
        return false;
    } else {
        return true;
    }
}

Utils.isIE = function(){
    return navigator.appName.indexOf('Microsoft') > -1;
}

Utils.isIE7 = function() {
    return navigator.userAgent.indexOf("MSIE 7.") > -1;
}

function teaser(idOne, classOne, idTwo, classTwo) {
    document.getElementById(idOne).className = classOne;
    document.getElementById(idTwo).className = classTwo;
}

function justSwapImg(imgSrc, id) {
        document.getElementById(id).src = imgSrc;

}

function validateCommentFields() {
    if (document.getElementById('Comments.text').value != ''){
        Comments.post();
    } else {
        if (document.getElementById('errorMsg').className == 'none red') {
            document.getElementById('errorMsg').className = 'block red';
        }
    }
}

    function redirectInExternalSearch() {
            var width = 900;
            var height= 700;

            var externalSearchTargetPattern = "/kbroker/essex/" +
            "essexcysd/search.spatial?sr=0&as=1&cs=UTF-8&sc=essexlife&sp_scope=essexcsd&sf=&sm=0&nh=10&ha=23&" +
            "zone=yl&tx1=&fl1=category%3A&op1=1&ty1=0&tx2=replacementTextToken&fl2=&op2=1&ty2=0&" +
            "sp_loc=replacementLocationToken&tx4=8047&fl4=sp_distance%3A&op4=1&ty4=0&sp_index=5&op5=1&ty5=0";
            var patternTextReplacement = "replacementTextToken";
            var patternLocationReplacement = "replacementLocationToken";


            var externalSearchTarget = document.getElementById('externalSearchTarget').value ;
            var externalSearchText = document.getElementById("externalSearchText").value ;
            var externalSearchLocation = document.getElementById("externalSearchLocation").value ;

            var replacedPattern = externalSearchTargetPattern.replace(patternTextReplacement,externalSearchText);
            replacedPattern = replacedPattern.replace(patternLocationReplacement,externalSearchLocation);

            var redirectSearchURL = externalSearchTarget + replacedPattern ;

            var image_window = "status,resizable,width=" + width + ",height=" + height + ",left=" + ((screen.width - width)/2) + ",top=50,scrollbars=1";

            window.open(redirectSearchURL, "externalSearchWindow", image_window);
        }

function loadAudioPlayerSWF(mp3FileId){
    var flashvars = {};
    var params = {
        movie: "audio-player.swf",
        quality: "high",
        FlashVars: "playerID="+mp3FileId+"&soundFile=document/"+mp3FileId,
        menu: "false",
        wmode: "transparent"
    };
    var attributes = {};
    swfobject.embedSWF("audio-player.swf", "audioplayer"+mp3FileId, "290", "24", "9.0.0", "", flashvars, params, attributes);

}
    // Style switcher code from http://www.alistapart.com/stories/alternate/
ss = {};
//first one is the default
ss.colors = ['purple','lime','yellow','pink'];
ss.sizes = ['mediumtext','smalltext','largetext'];

ss.isInCollection = function(collection, title) {
    for (var i = 0; i < collection.length; i++) {
        if (collection[i] == title) {
            return true;
        }
    }
    return false;
}

function setActiveStyleSheet(title, color) {
    if(color){
        var img = document.getElementById('illustration');
        var name = img.src.substring(img.src.lastIndexOf("/"),img.src.length);
        img.src = "images/" + title + name;
        img.style.display = 'none';
        img.onload = function(){
            img.style.display = 'block';
        }
    }

    var i, a, main;
    var sheets = color ? ss.colors : ss.sizes;
    for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (ss.isInCollection(sheets, a.getAttribute("title"))) {
            if (a.getAttribute("rel") &&
                a.getAttribute("rel").indexOf("style") != -1 &&
                a.getAttribute("title")) {
                a.disabled = true;
                if (a.getAttribute("title") == title) {
                    a.disabled = false;
                }
            }
        }
    }

    var title = getActiveStyleSheet(color);
    createCookie(color ? "style" : "size", title, 365);
}

function getActiveStyleSheet(color) {
    var i, a;
    var sheets = color ? ss.colors : ss.sizes;
    for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (ss.isInCollection(sheets, a.getAttribute("title"))) {
            if (a.getAttribute("rel") &&
                a.getAttribute("rel").indexOf("style") != -1 &&
                a.getAttribute("title") &&
                !a.disabled
                    ) return a.getAttribute("title");
        }
    }
    return null;
}

function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

window.onload = function(e) {
    var cookie = readCookie("style");
    var title = cookie != null && cookie != "null" ? cookie : ss.colors[0];
    setActiveStyleSheet(title, true);
    var cookie2 = readCookie("size");
    var title2 = cookie2 != null && cookie2 != "null"  ? cookie2 : ss.sizes[0];
    setActiveStyleSheet(title2, false);
}

/*
var cookie = readCookie("style");
var title = cookie != null && cookie != "null" ? cookie : ss.colors[0];
setActiveStyleSheet(title, true);
var cookie2 = readCookie("size");
var title2 = cookie2 != null && cookie2 != "null"  ? cookie2 : ss.sizes[0];
setActiveStyleSheet(title2, false);
*/


    menu = {};
menu.lastLevelOne = null;
menu.lastOver = null;

menu.mouseover = function(id) {
    if (menu.timer != null) {
        clearTimeout(menu.timer);
        menu.timer = null;
    }
    var elm = document.getElementById(id);
    if (menu.isLevel(elm, 1)) {
        if (menu.lastLevelOne != null && menu.lastLevelOne.id != elm.id) {
            menu.showHide(menu.lastLevelOne, false, true);
        }
        menu.lastLevelOne = elm;
    } else {
        if (menu.lastOver != null && menu.lastOver.id != elm.id) {
            menu.showHide(menu.lastOver, false, true);
        }
        menu.lastOver = elm;
    }
    menu.showHide(elm, true);
}

menu.isLevel = function(elm, level) {
    var levelelms = elm.id.split("_");
    if (levelelms.length > 1) {
        return levelelms[1] == '' + level;
    }
    return false;
}

menu.closeAll = function() {
    menu.timer = setTimeout(menu.closeAllTimed, 1000);
}

menu.closeAllTimed = function() {
    menu.showHide(document.getElementById('navigation'), false, true, true);
    menu.lastLevelOne = null;
    menu.lastOver = null;
}

menu.showHide = function(elm, show, cascade, excludeLevelOne) {
    var elms = elm.getElementsByTagName("ul");
    for (var i = 0; i < elms.length; i++) {
        if (excludeLevelOne && menu.isLevel(elms[i], 1)) {
            continue;
        }
        if (!Utils.isIE7() && Utils.isIE()) {
            elms[i].style.visibility = show ? 'visible' : 'hidden';
        } else {
            elms[i].style.display = show ? 'block' : 'none';
        }
        if (cascade == null || !cascade) {
            break;
        }
    }
}

    /*
 * Cross-browser event handling, by Scott Andrew
 */
function addEvent(element, eventType, lamdaFunction, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, lamdaFunction, useCapture);
        return true;
    } else if (element.attachEvent) {
        var r = element.attachEvent('on' + eventType, lamdaFunction);
        return r;
    } else {
        return false;
    }
}

/*
 * Kills an event's propagation and default action
 */
function knackerEvent(eventObject) {
    if (eventObject && eventObject.stopPropagation) {
        eventObject.stopPropagation();
    }
    if (window.event && window.event.cancelBubble ) {
        window.event.cancelBubble = true;
    }

    if (eventObject && eventObject.preventDefault) {
        eventObject.preventDefault();
    }
    if (window.event) {
        window.event.returnValue = false;
    }
}

/*
 * Safari doesn't support canceling events in the standard way, so we must
 * hard-code a return of false for it to work.
 */
function cancelEventSafari() {
    return false;
}

/*
 * Cross-browser style extraction, from the JavaScript & DHTML Cookbook
 * <http://www.oreillynet.com/pub/a/javascript/excerpt/JSDHTMLCkbk_chap5/index5.html>
 */
function getElementStyle(elementID, CssStyleProperty) {
    var element = document.getElementById(elementID);
    if (element.currentStyle) {
        return element.currentStyle[toCamelCase(CssStyleProperty)];
    } else if (window.getComputedStyle) {
        var compStyle = window.getComputedStyle(element, '');
        return compStyle.getPropertyValue(CssStyleProperty);
    } else {
        return '';
    }
}

/*
 * CamelCases CSS property names. Useful in conjunction with 'getElementStyle()'
 * From <http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp>
 */
function toCamelCase(CssProperty) {
    var stringArray = CssProperty.toLowerCase().split('-');
    if (stringArray.length == 1) {
        return stringArray[0];
    }
    var ret = (CssProperty.indexOf("-") == 0)
              ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1)
              : stringArray[0];
    for (var i = 1; i < stringArray.length; i++) {
        var s = stringArray[i];
        ret += s.charAt(0).toUpperCase() + s.substring(1);
    }
    return ret;
}

/*
 * Disables all 'test' links, that point to the href '#', by Ross Shannon
 */
function disableTestLinks() {
  var pageLinks = document.getElementsByTagName('a');
  for (var i=0; i<pageLinks.length; i++) {
    if (pageLinks[i].href.match(/[^#]#$/)) {
      addEvent(pageLinks[i], 'click', knackerEvent, false);
    }
  }
}

/*
 * Cookie functions
 */
function createCookie(name, value, days) {
    var expires = '';
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        var expires = '; expires=' + date.toGMTString();
    }
    document.cookie = name + '=' + value + expires + '; path=/';
}

function readCookie(name) {
    var cookieCrumbs = document.cookie.split(';');
    var nameToFind = name + '=';
    for (var i = 0; i < cookieCrumbs.length; i++) {
        var crumb = cookieCrumbs[i];
        while (crumb.charAt(0) == ' ') {
            crumb = crumb.substring(1, crumb.length); /* delete spaces */
        }
        if (crumb.indexOf(nameToFind) == 0) {
            return crumb.substring(nameToFind.length, crumb.length);
        }
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, '', -1);
}


tabs = ['tab1','tab2','tab3'];
function showHide(id) {
    for (var i = 0; i < tabs.length; i++) {
        if (document.getElementById(tabs[i] + "Area") != null) {
            document.getElementById(tabs[i] + "Area").className = "none";
        }
    }
    document.getElementById(id + "Area").className = "block";
}
function clearInputBox(id) {
  
    if (document.getElementById(id).value == "...or type one here"
            || document.getElementById(id).value == "...or type here"
            || document.getElementById(id).value == "mm/yyyy"
            || document.getElementById(id).value == "dd/mm/yyyy") {
        document.getElementById(id).value = "";
    }
}

function showHideBlock(blockId) {
    if (document.getElementById(blockId).className == 'none') {
        document.getElementById(blockId).className = 'block';
    } else {
        document.getElementById(blockId).className = 'none';
    }
}
    SlideShow = {};

SlideShow.slideIds = [];
SlideShow.currentSlideNumber = 0;
SlideShow.timer = 6000;

SlideShow.init = function() {
    setTimeout(SlideShow.swap, SlideShow.timer);
}

SlideShow.swap = function() {
    if (SlideShow.slideIds.length > 1) {
        var current = document.getElementById(SlideShow.slideIds[SlideShow.currentSlideNumber]);
        current.style.display = 'none';
        //Fade.reset(current.id);

        if (SlideShow.currentSlideNumber < (SlideShow.slideIds.length - 1)) {
            SlideShow.currentSlideNumber++;
        } else {
            SlideShow.currentSlideNumber = 0;
        }
        current = document.getElementById(SlideShow.slideIds[SlideShow.currentSlideNumber]);
        current.style.display = 'block';
    }
    setTimeout(SlideShow.swap, SlideShow.timer);
}



    Fade = {};
Fade = {};

browserName = navigator.appName;
isIE = function() {
    if (browserName == "Microsoft Internet Explorer") {
        return true;
    }
    return false;
}

Fade.max = (isIE()) ? 100 : 1.00;
Fade.inc = (isIE())? 3 : 0.02;
Fade.time = 40;
Fade.id = null;
Fade.fadeOutHandler = null;
Fade.fadeInHandler = null;

Fade.fadeOut = function(id) {
    clearTimeout(Fade.id);
    var elm = document.getElementById(id);                                                                                          
    var opac;
    if (isIE()) {
        if (!elm.filters[0]) {
            return;
        }
        opac = elm.filters[0].opacity;
    } else {
        if (elm.style.MozOpacity) {
            opac = elm.style.MozOpacity != '' ? parseFloat(elm.style.MozOpacity) : 0.8;
        } else {
            opac = elm.style.opacity != '' ? parseFloat(elm.style.opacity) : 0.8;
        }
    }

    if (opac > 0) {
        var val = 0;
        if (isIE()) {
            var tmpVal = (opac - Fade.inc);
            if (tmpVal > Fade.inc && tmpVal< 100) {
                val = tmpVal;
            }
            elm.filters[0].opacity = val;
        } else {
            var tmpVal = (parseFloat(opac) - Fade.inc);
            if (tmpVal > Fade.inc && tmpVal < 1) {
                val = tmpVal;
            }
            elm.style.MozOpacity = val;
            elm.style.opacity = val;
        }
        Fade.id = setTimeout("Fade.fadeOut('" + id + "')", Fade.time);
    } else {
        if (isIE()) {
            elm.filters[0].opacity = 0;
        } else {
            elm.style.MozOpacity = 0;
            elm.style.opacity = 0;
        }
        if (Fade.fadeOutHandler != null) {
            Fade.fadeOutHandler();
            Fade.fadeOutHandler = null;
        }
        if (elm.fadeLocation)
            window.location = elm.fadeLocation;
    }
}

Fade.fadeIn = function(id) {
    var done = false;
    clearTimeout(Fade.id);
    var elm = document.getElementById(id);
    if (isIE()) {
        if (!elm.filters[0]) {
            return;
        }
        opac = elm.filters[0].opacity;
    } else {
        if (elm.style.MozOpacity) {
            opac = (elm.style.MozOpacity != '' && elm.style.MozOpacity != 0) ? parseFloat(elm.style.MozOpacity) : 0;
        } else {
            opac = (elm.style.opacity != '' && elm.style.opacity != 0) ? parseFloat(elm.style.opacity) : 0;
        }
    }

    if (opac < Fade.max) {
        if (isIE()) {
            elm.filters[0].opacity = opac + Fade.inc;
        }
        else {
            var value = parseFloat(opac) + Fade.inc;
            elm.style.MozOpacity = value;

            elm.style.opacity = value;
        }

        Fade.id = setTimeout("Fade.fadeIn('" + id + "')", Fade.time);
    } else {
        if (elm.nextFadeId)
            setTimeout("Fade.fadeIn('" + elm.nextFadeId + "')", Fade.time);
        if(Fade.fadeInHandler != null){
            Fade.fadeInHandler();
            Fade.fadeInHandler = null;
        }
    }
}

Fade.reset = function(id) {
    var elm = document.getElementById(id);
    if (isIE()) {
        if (!elm.filters[0]) {
            return;
        }
        elm.filters[0].opacity = 0;
    }
    else {
        elm.style.MozOpacity = 0;
    }
}

    Comments = {};
Comments.displayElement = 'Comments.displayComments';
Comments.displayPost = 'Comments.displayPost';
Comments.rootArticleId = 'Comments.rootArticleId';
Comments.text = 'Comments.text';
Comments.showhideOnCompose = false;//normally something else shows and hides the element
Comments.showhideOnPost = true;
Comments.refreshOnPost = false;
Comments.hideOnCloseHandler = null; // set this to a function if you want somethign custom to fire
Comments.successMessage = 'Comments.successMessage';
Comments.postShowing = false;

Comments.form = 'Comments.form';
Comments.ajax = false;

Comments.refresh = function() {
    HttpCall.replaceElement('include/article_post.jsp?rootArticleId=' + document.getElementById(Comments.rootArticleId).value, Comments.displayElement);

}

Comments.posted = function() {
    if (Comments.refreshOnPost) {
        Comments.refresh();
    }
    if (Comments.showhideOnPost) {
        document.getElementById(Comments.displayPost).className = "none";
        Comments.postShowing = false;
    }
    if (document.getElementById(Comments.successMessage)) {
        document.getElementById(Comments.successMessage).className = "block";
    }
    if (Comments.hideOnCloseHandler) {
        Comments.hideOnCloseHandler();
    }
}

Comments.composePost = function() {
    //clear the text
    if (Comments.showhideOnCompose) {
        if (!Comments.postShowing) {
            document.getElementById(Comments.displayPost).className = "block";
        } else {
            document.getElementById(Comments.displayPost).className = "none";
        }
        Comments.postShowing = !Comments.postShowing;
    }
    if (document.getElementById(Comments.text)) {
        document.getElementById(Comments.text).value = "";
    }
}

Comments.post = function() {
    if (Comments.ajax) {
        HttpCall.call(document.getElementById(Comments.form), Comments.posted);
    } else {
        //just submit the form
        document.getElementById(Comments.form).submit();
    }
}
    HttpCall = {};
HttpCall.http = false;
if (navigator.appName == "Microsoft Internet Explorer") {
    HttpCall.http = new ActiveXObject("Microsoft.XMLHTTP");
} else {
    HttpCall.http = new XMLHttpRequest();
}

HttpCall.animation = "HttpCallAnimation";

/**
 Just supply a url and an elementId and it set the inner html of the element to be the result of the call to the url
 **/
HttpCall.replaceElement = function(urlOrForm, elmId) {
    HttpCall.call(urlOrForm, function() {
        document.getElementById(elmId).innerHTML = HttpCall.http.responseText;
    });
}

HttpCall.buildURL = function(form) {
    var url = form.action + "?";
    var allElms = form.elements;
    var elm;
    for (var i = 0; i < allElms.length; i++) {
        elm = allElms[i];
        if (elm.name == '' || elm.tagName == 'FIELDSET') {
            continue;
        }
        if (elm.type.toLowerCase() == 'checkbox' && !elm.checked) {
            continue;
        }
        url += elm.name + '=' + elm.value + '&';
    }
    return url;
}

HttpCall.call = function(urlOrForm, onready) {
    if (document.getElementById(HttpCall.animation)) {
        document.getElementById(HttpCall.animation).style.display = 'block';
    }
    var url = (typeof urlOrForm == 'string') ? urlOrForm : HttpCall.buildURL(urlOrForm);
    HttpCall.http.open("GET", url + "&rnd=" + (new Date()).getTime(), true);
    if (onready) {
        HttpCall.http.onreadystatechange = function() {
            if (HttpCall.http.readyState == 4) {
                onready();
                if (document.getElementById(HttpCall.animation)) {
                    document.getElementById(HttpCall.animation).style.display = 'none';
                }
            }
        }
    }

    HttpCall.http.send(null);
}
    var ap_instances = new Array();

function ap_stopAll(playerID) {
	for(var i = 0;i<ap_instances.length;i++) {
		try {
			if(ap_instances[i] != playerID) document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 1);
			else document.getElementById("audioplayer" + ap_instances[i].toString()).SetVariable("closePlayer", 0);
		} catch( errorObject ) {
			// stop any errors
		}
	}
}

function ap_registerPlayers() {
	var objectID;
	var objectTags = document.getElementsByTagName("object");
	for(var i=0;i<objectTags.length;i++) {
		objectID = objectTags[i].id;
		if(objectID.indexOf("audioplayer") == 0) {
			ap_instances[i] = objectID.substring(11, objectID.length);
		}
	}
}

var ap_clearID = setInterval( ap_registerPlayers, 100 );
