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


/**
* Fade
*/

function fadeUp(element,red,green,blue) {
	if (element.fade) clearTimeout(element.fade);
	if (red == 255 && green == 255 && blue == 255) {
		element.style.backgroundColor = "#f1f1f1";
		return;
	}
	var newred = red + Math.ceil((255 - red)/10);
	var newgreen = green + Math.ceil((255 - green)/10);
	var newblue = blue + Math.ceil((255 - blue)/10);
	element.style.backgroundColor = "rgb("+newred+","+newgreen+","+newblue+")";
	element.fade = setTimeout(function() { fadeUp(element,newred,newgreen,newblue) },50);
}


/**
* Toggle
*/

var tog = {

	init: function() {

		if (!document.getElementsByTagName) return;
		tog.objLink = new Array();
		tog.objDivs = document.getElementsByTagName('div');
		for (var i=0; i<tog.objDivs.length; i++) {
			if (tog.objDivs[i].className == 'toggle') {
				tog.objDivs[i].style.display = 'none';
				tog.divId = tog.objDivs[i].id + '-l';
				tog.objLink[i] = document.getElementById(tog.divId);
				tog.objLink[i].className = 'listen';
				addEvent(tog.objLink[i], 'click', tog.action, false);
			}
		}

	},

	action: function(e) {

		if (window.event) {
			var elm = window.event.srcElement;
		}else{
			var elm = e.target;
		}
		var divId = elm.id.substring(0, elm.id.lastIndexOf('-l'));
		var objDiv = document.getElementById(divId);
		if (objDiv.style.display == 'none') {
			objDiv.style.display = 'block';
		}else{
			objDiv.style.display = 'none';
		}

	}

}

//addEvent(window, 'load', tog.init, false);


/**
* Disable Submit Button
*/

function disableSubmit(e) {
	var elm = window.event ? window.event.srcElement : e ? e.target : null;
	if (!elm) return;
	elm.disabled=true;
	elm.value='please wait';
	//if (elm.parentNode.parentNode) elm.parentNode.parentNode.submit();
}

function initDisableSubmit() {
	if (!document.getElementsByTagName) return;
	var objSubmit = document.getElementsByTagName('input');
	for (var i=0; i<objSubmit.length; i++)
	{
		if (objSubmit[i].type == 'submit') addEvent(objSubmit[i], 'click', disableSubmit, false);
	}
}

//addEvent (window, 'load', initDisableSubmit, false);