
function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}


function isPattern(formField,pattern) {
	var pattern = pattern || formField.getAttribute('pattern');
	var regExp = new RegExp("^"+pattern+"$","");
	var correct = regExp.test(formField.value);
	if (!correct && formField.getAttribute('patternDesc')){
		correct = formField.getAttribute('patternDesc');
	}
	return correct;
}


function isPostCode(formField) {
	return isPattern(formField,"\\d{4}\\s*\\D{2}");
}


function isInt(formField) {
	return isPattern(formField,"\\d+");
}


function isFilled(elm){
	if (elm.value == "") return false;
	else return true;
}


function foundMatch(formField,pattern) {
	var re = new RegExp(pattern);
	if (formField.value.match(re)) {
		return true;
	} else {
		return false;
	}
}


function showMatch() {
	var re = new RegExp(document.demoMatch.regex.value);
	var m = re.exec(document.demoMatch.subject.value);
	if (m == null) {
		return false; // no match
	} else {
		var s = "Match at position " + m.index + ": ";
		for (i = 0; i < m.length; i++) {
		  s = s + m[i] + "\n";
		}
		return s;
	}
}


function isIntOLD(elm){
	var elmstr = elm.value + "";
	if (elmstr == "") return false;
	for (var i=0; i < elmstr.length; i++){
		if (elmstr.charAt(i) < "0" ||
			elmstr.charAt(i) > "9"){
				return false;
		}
	}
	return true;
}


// general purpose function to see if a suspected numeric input is a positive number
function isDec(elm) {
	var inputVal = elm.value
	oneDecimal = false;
	inputStr = inputVal.toString();
	if (inputStr == "") return false;
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i);
		if (oneChar == "." && !oneDecimal) {
			if(inputVal.length < 2){ return false;}
			oneDecimal = true;
			continue;
		}
		if (oneChar < "0" || oneChar > "9") {
			return false;
		}
	}
	return true;
}

	
function isEmail(elm){
	if (elm.value.indexOf("@") != "-1" &&
		elm.value.indexOf(".") != "-1" &&
		elm.value != "")
			return true;
	else return false;
}


// cycles through all buttons of a radio button group
// and returns the value (if any) of the checked button;
function getRadioValue(radioGroup) {
	for (var i = 0; i < radioGroup.length; i++) {
		if (radioGroup[i].checked) {
			return radioGroup[i].value;
		}	
	}
	return "";
}


function stopDefault( e ) {
    // Prevent the default browser action (W3C)
    if ( e && e.preventDefault ) e.preventDefault();
	
    // A shortcut for stoping the browser action in IE
	else window.event.returnValue = false;
    return false;
}

function stopBubble(e) {
    // If an event object is provided, then this is a non-IE browser
    if ( e && e.stopPropagation && e.preventDefault ){
        // and therefore it supports the W3C stopPropagation() method
        e.stopPropagation();
        e.preventDefault();
	} else {
        // Otherwise, we need to use the Internet Explorer way of cancelling event bubbling
        window.event.cancelBubble = true;
        window.event.returnValue = false;
	}
	//alert('fired');
	return false;
}