function MSbrowser () {
	return found(navigator.appName, "Microsoft")
}

function getValue (id) {
	return document.getElementById(id).value
}

function setValue (id, value) {
	document.getElementById(id).value = value
}

function found (haystack, needle) {
	return haystack.search(needle) != -1
}

function empty (value) {
	return found(value, /^\s*$/)
}

function isObject (myID) {
	return (document.getElementById(myID) + "").search(/^\[object.*\]$/) != -1
}

function removeWhiteSpace (myObject) {
	setValue(myObject.id, myObject.value.replace(/(^ *| *$)/g, "").replace(/ +/g, " "))
}

function simpleCheck (id, pattern, message) {
	myValue = getValue(id)
	if (empty(myValue))
		return ""
	return found(myValue, pattern) ? "" : message
}

function makeTextRegExp (chars) {
	RE = new RegExp("^[" + LETTERS + chars + "]*$")
	return RE
}

function doConfirm (id, match, message) {
	toMatchValue = getValue(match)
	if (empty(toMatchValue))
		return ""
	return toMatchValue == getValue(id) ? "" : message
}

function validate_emailConfirm (id) {
	return getValue(id) == getValue('email') ? "" :
		"The two emails you have entered do not match."
}

function validate_password (id) {
	myPassword = document.getElementById(id).value
	if (myPassword.length < 6)
		return "Password must contain at least six characters."
	return myPassword.search(/^[a-zA-Z0-9]*$/) == -1 ? "Password must contain only letters and numbers." : ""
}

function validate_passwordConfirm (id) {
	return document.getElementById(id).value == document.getElementById('password').value ? "" :
		"The two passwords you have entered do not match."
}

function validate_phone (id) {
	myObject = document.getElementById(id)
	myObject.value = myObject.value.replace(/ /g, "")
	if (myObject.value.search(/^\(\d{3}\)\d{3}\-\d{4}$/) != -1) {
		myObject.value = myObject.value.replace(/.(...).(.*)/, "$1" + "-" + "$2")
		return ""
	}
}

function validate_genericPhone (id) {
	return simpleCheck(id, /(\d.*){8}/, "Please enter a valid phone number.")
}

function validate_email (id) {
	return getValue(id).
		search(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/) == -1 ?
		"You have entered an invalid email address. Please re-enter" : ""
}
var hebrewString = ""
for (i = 1488; i <= 1514; i++)
	hebrewString += String.fromCharCode(i)

BADTEXT = "Illegal characters, please check and re-enter"
BADCCNUMBER = "Invalid credit card number, please re-enter."
function okay_text (fieldValue) {
//	var RE = new RegExp("^[a-zA-Z0-9 ,\\.\\-\\/\\;\\:!@\\#\\%\\*\\?+=$\\&\\)\\(<>" + hebrewString + "]*$")
	var RE = new RegExp("[0-9A-Za-z\\d\\s\\t\\r\\n\\:\\;\\!\\@\\#\\%\\*\\+\\?\\-\\=\\$,&\\.\\'\"\\(\\)\\[\\]\\/ ²–ÌÀÌÀÀÆ®™•’“" + hebrewString + "]", "g")
		return (fieldValue.search(RE) != -1)
}

function okay_text2 (fieldValue) {
	return fieldValue.search(/^[a-zA-Z0-9 ,\.\-\*'\/]?[a-zA-Z0-9 ,\.\-'\/]*$/) > -1
}

function okay_fieldText (id) {
	return okay_text(getValue(id))
}

function validate_text (id) {
	return okay_fieldText(id) ? "" : BADTEXT
}

function validate_url (id) {
	var RE = new RegExp("^[a-zA-Z0-9,\.\-\/\;\:!@\#\?\+=$\&\)\\(\/]*[^ \%\*]*[a-zA-Z0-9,\.\-\/\;\:!@\#\?\+=$\&\)\\(\/]*$")
	return (getValue(id).search(RE) != -1?"":BADTEXT)
}


function isEmpty (field) {
	return (document.getElementById(field).value.search(/^ *$/)!=-1)
}

function isFull (field) {
	return (document.getElementById(field).value.search(/^ *$/)==-1)
}

function isChecked(field) {
	return (document.getElementById(field).checked)
}


function mod10 (ccNumber) {

/*
VALID #'s
4100000000000001
4111111111111111
4222222222222220
4333333333333339
4444444444444448
4555555555555550
*/
	var ary = new Array(ccNumber.length)
	var i = 0, sum = 0
	for (i = 0; i < ccNumber.length; i++)
		ary[i] = parseInt(ccNumber.charAt(i))
	for (i = ary.length - 2; i >= 0; i -= 2) {
		ary[i] *= 2
		if (ary[i] > 9)
			ary[i] -= 9
	}
	for (i = 0; i < ary.length; i++)
		sum += ary[i]
	return sum % 10 == 0
}

//http://www.sitepoint.com/article/card-validation-class-php

function validate_ccNumber (id) {
	myValue = getValue(id)
	if (isEmpty(id))
		return ""
	testValue = myValue.replace(/[ \-]/g, "")
	switch (getValue("ccType")) {
	case "Visa":
		myReg = /^4\d{12}(\d{3})?$/
		break
	case "Discover":
		pattern = /^6011\d{12}?$/
		break
	case "Mastercard":
		myReg = /^5[1-5]\d{14}$/
		break
	case "Isracard":
		myReg = /^\d{8}$/
		if (found(testValue, myReg)) {
			setValue(id, testValue)
			return ""
		}
		return BADCCNUMBER
		break
	case "American Express":
		myReg = /^3[47]\d{13}?$/
		break
	case "Diners Club":
		myReg = /^3(0[0-5]|[68]\d)\d{11}$/
		break
	}
	if (found(testValue, myReg) && mod10(testValue)) {
		setValue(id, testValue)
		return ""
	}
	return BADCCNUMBER
}


function badCCcode (param) {
	return "Your security code must have " + param +  " digits in it."
}

function validate_ccCode (id) {
	if (getValue("ccType") == "American Express") {
		param = 4
		myReg = /^\d{4}$/
	}
	else {
		param = 3
		myReg = /^\d{3}$/
	}
	return (found(getValue(id), myReg))? "" : badCCcode(param)
}


function removeWhiteSpace (myObject) {
	setValue(myObject.id, myObject.value.replace(/(^ *| *$)/g, "").replace(/ +/g, " "))
}

function checkFields () {
	var invalidField = ""
	var message = ""
	for (var i in fieldIDs) {
		currentObject = document.getElementById(fieldIDs[i])
		if (currentObject.type == "text" || currentObject.type == "textArea")
			removeWhiteSpace(currentObject)
		if (!currentObject.disabled) {
			if (currentObject.type == "hidden") {
				if (requiredFields[i] && radioEmpty(fieldIDs[i])) {
					invalidField = fieldIDs[i] + "_0"
					break
				}
			}
			else if (currentObject.type == "checkbox") {
				if ((requiredFields[i] && !currentObject.checked) ||
					(validateFields[i] &&
					(message = eval("validate_" + validateFields[i] + "('" + fieldIDs[i] + "')")) != "")) {
					invalidField = fieldIDs[i]
					break
				}
			}
			else {
/*				alert(i)
				alert(requiredFields[i])
				alert(fieldIDs[i])
				alert(validateFields[i])
				alert(currentObject)
				alert(currentObject.value)
				alert(empty(currentObject.value))*/

				if ((requiredFields[i] && empty(currentObject.value)) ||
					(validateFields[i] &&
					(message = eval("validate_" + validateFields[i] + "('" + fieldIDs[i] + "')")) != "")) {
					invalidField = fieldIDs[i]
					break
				}
			}
		}
	}
	if (invalidField != "") {
		alert(message == "" ? "Required Field: " + labels[i] : message)
		document.getElementById(invalidField).focus()
		return false
	}
	document.getElementById("formSubmitButton").disabled = true
	return true
}

function doProgram (id) {
	document.getElementById("titleDiv").innerHTML = document.getElementById("title_"+id).value
	document.getElementById("teaserDiv").innerHTML =  document.getElementById("teaser_"+id).value
	document.getElementById("mainTable").style.display = "block"
	document.getElementById("donateButton").href = "do.php?id="+id
}
