var ElementMaxHeight = function() {
  this.initialize.apply(this, arguments);
}

ElementMaxHeight.prototype = {
  initialize: function(className) {
    this.elements = document.getElementsByClassName(className || 'maxheight');    
    this.textElement = document.createElement('span');
    this.textElement.appendChild(document.createTextNode('A'));
    this.textElement.style.display = 'block';
    this.textElement.style.position = 'absolute';
    this.textElement.style.fontSize = '1em';
    this.textElement.style.top = '-1000px';
    this.textElement.style.left = '-1000px';
    document.body.appendChild(this.textElement);
    this.textElementHeight = document.getDimensions(this.textElement).height;
    var __object = this;
    var __checkFontSize = this.checkFontSize;
    this.checkFontSizeInterval = window.setInterval(function() {return __checkFontSize.apply(__object)}, 500);

    this.expand();

    // Refresh elements height onResize event
    var __expand = this.expand;
    if (window.addEventListener) {
      window.addEventListener('resize', function(event) {return __expand.apply(__object, [( event || window.event)])}, false);
    } else if (window.attachEvent) {
      window.attachEvent('onresize', function(event) {return __expand.apply(__object, [( event || window.event)])});
    }
  },

  expand: function() {
    this.reset();
  	for (var i = 0; i < this.elements.length; i++) {  	
      this.elements[i].style.height = document.getDimensions(this.elements[i].parentNode).height + 'px';
  	}
  },

  reset: function() {
    for (var i = 0; i < this.elements.length; i++) {    
      this.elements[i].style.height = 'auto';
    }
  },

  checkFontSize: function() {
  	var height = document.getDimensions(this.textElement).height;
  	if(this.textElementHeight != height) {
  		this.textElementHeight = height;
  		this.expand();
  	}
  }  
}


if (!!document.evaluate) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, parentElement || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(query.snapshotItem(i));
    return results;
  }
}

document.getElementsByClassName = function(className, parentElement) {
  if (!!document.evaluate) {
    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
    return document._getElementsByXPath(q, parentElement);
  } else {
    var children = (parentElement || document.body).getElementsByTagName('*');
    var elements = [], child;
    for (var i = 0, length = children.length; i < length; i++) {
      child = children[i];
      if (child.className.length != 0 &&
          (child.className == className ||
           child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))) {      
        elements.push(child);
      }
    }
    return elements;
  }
}

document.getDimensions = function (element) {
  var display = element.style.display;
  if (display != 'none' && display != null) { // Safari bug
    return {width: element.offsetWidth, height: element.offsetHeight};
  }

  return {width: originalWidth, height: originalHeight};
}

function touchdown (myInput, defaultText) {
	if (myInput.value == defaultText) {
		myInput.style.textAlign = "left"
		myInput.value = ""
	}
}

function leaveField (myInput, defaultText) {
	if (myInput.value == "") {
		myInput.value = defaultText
	}
}

var xmlHttp

function processForm () {
//	if (!checkFields())
//		return
	xmlHttp = GetXmlHttpObject()
	if (xmlHttp == null) {
		return "Your browser does not support AJAX!"
	}
	var url = "http://www.buckleytribute.com/processContact.php"
	xmlHttp.onreadystatechange = stateChanged
	xmlHttp.open("POST" , url , true)
	xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8;')
	try {
		xmlHttp.send("name=" + escape(document.getElementById("name").value)
			+ "&email=" + escape(document.getElementById("email").value)
			+ "&phone=" + escape(document.getElementById("phone").value)
//			+ "&attending=" + escape(document.getElementById("attending").value)
			+ "&message=" + escape(document.getElementById("message").value))
	}
	catch (e) {
		xmlHttp.send(null)
	}
}

function stateChanged () { 
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.responseText == "OK") {
			alert("Thank you!\nYour message has been submitted.")
		}
	}
}

function GetXmlHttpObject () {
	var xmlHttp = null
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest()
	}
	catch (e) {
		// Internet Explorer
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")
		}
		catch (e) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
		}
	}
	return xmlHttp
}

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 isnull (arg) {
	arg = arg + '';
	return (arg == '' || arg == 'null' || arg == 'undefined')
}

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 validate_email (id) {
	return simpleCheck(id, /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/, "Please enter a valid email address.")
}

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

function checkSignupFields () {
	if (getValue("signup_name").search(/Your.*Name/) != -1 || getValue("signup_name").search(/^\s*$/) != -1) {
		alert("Please enter your name.")
		document.getElementById("signup_name").focus()
		return false
	}
	if (validate_email("signup_email") != "") {
		alert("Please enter a valid email address.")
		document.getElementById("signup_email").focus()
		return false
	}
/*	if (document.getElementById("petition_country").selectedIndex == 0) {
		alert("Please select a country.")
		document.getElementById("petition_country").focus()
		return false
	}
	if (getValue("sendUpdateValue") == "no" && getValue("sendJerusalemValue") == "no" && getValue("sendTempleValue") == "no") {
		alert("Please select at least one option.")
		return false
	}*/
	return true
}

/*	PHP LIST FUNCTIONS BEGIN HERE	*/

var greenElement
var doDots = false

function waitDots () {
	if (!doDots)
		return
	document.getElementById(greenElement + "_waitDots").innerHTML += "."
	if (document.getElementById(greenElement + "_waitDots").innerHTML.length > 5)
		document.getElementById(greenElement + "_waitDots").innerHTML = ""
	setTimeout("waitDots()", 400)
}

function subscribe_stateChanged () {
	if (xmlHttp.readyState == 4) {
		if (xmlHttp.responseText == "OK") {
			alert("Thank you!")
			didSave = true
			document.getElementById("signup_wait").style.display = "none"
			document.getElementById("signup").style.display = ""
		}
		else
			document.getElementById("show_result").innerHTML = xmlHttp.responseText
	}
}

function subscribe () {
	if (!checkSignupFields())
		return
	xmlHttp = GetXmlHttpObject()
	if (xmlHttp == null) {
		alert("Your browser does not support AJAX!")
		return
	}
	document.getElementById("signup").style.display = "none"
	document.getElementById("signup_wait").style.display = ""
	greenElement = "signup"
	doDots = true
	waitDots()
	var url = "http://www.buckleytribute.com/subscribe.php"
	xmlHttp.onreadystatechange = subscribe_stateChanged
	xmlHttp.open("POST" , url , true)
	xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8;')
	xmlHttp.send(
		"email=" + document.getElementById("signup_email").value
		+ "&name=" + document.getElementById("signup_name").value.replace(/ /g, "%20")
		+ "&state=" + document.getElementById("signup_state").value.replace(/ /g, "%20")
		+ "&country=" + document.getElementById("signup_country").value.replace(/ /g, "%20"))
}

function loadAttacher (loadFunc) {
	if (window.addEventListener) {
		window.addEventListener("load", loadFunc, false)
	}
	else if (document.addEventListener) {
		document.addEventListener("load", loadFunc, false)
	}
	else if (window.attachEvent) {
		window.attachEvent("onload", loadFunc)
	}
}

var lgfs = Array()
var nVoices = 1

function init () {
	var i
	for (i = 1; i <= nVoices; i++) {
		lgfs.push("voices" + i)
	}
	if(document.addEventListener) { // Safari or Konqueror or WebKit-based
		window.addEventListener("mousemove" , MovesInWebKit , true);
	}
}

loadAttacher(init)

function doLGF (myObject, myBoolean) {
	document.getElementById("lgf_" + myObject.id).style.display = myBoolean
}

function all_lgfs (event) {
	if (!doLGFs)
		return
	var i
	for (i = 0; i < lgfs.length; i++) {
		if (document.getElementById("lgf_" + lgfs[i].replace(/lgf_/, "")).style.display == "block") {
			if (found(navigator.appName, "Microsoft")) {
				document.getElementById("lgf_" + lgfs[i]).style.left = event.x - (document.getElementById("lgf_" + lgfs[i]).clientWidth / 2)
				document.getElementById("lgf_" + lgfs[i]).style.top = event.y + document.documentElement.scrollTop - document.getElementById("lgf_" + lgfs[i]).clientHeight - 25
			}
			else {
				document.getElementById("lgf_" + lgfs[i]).style.left = event.clientX - (document.getElementById("lgf_" + lgfs[i]).clientWidth / 2) + "px"
				document.getElementById("lgf_" + lgfs[i]).style.top = event.clientY + document.documentElement.scrollTop - document.getElementById("lgf_" + lgfs[i]).clientHeight - 25 + "px"
			}
		}
	}
}

function MovesInWebKit (evt) {
	if (!doLGFs)
		return
	var i
	for (i = 0; i < lgfs.length; i++) {
		if (document.getElementById("lgf_" + lgfs[i].replace(/lgf_/, "")).style.display == "block") {
			document.getElementById("lgf_" + lgfs[i]).style.left = evt.clientX - (document.getElementById("lgf_" + lgfs[i]).clientWidth / 2)
			document.getElementById("lgf_" + lgfs[i]).style.top = evt.clientY + document.body.scrollTop - document.getElementById("lgf_" + lgfs[i]).clientHeight - 25
		}
	}
}

var doLGFs = true

function checkAd () {
	if (document.getElementById("item_selection_1").selectedIndex == 0) {
		alert("Please indicate your ad selection.")
		document.getElementById("item_selection_1").focus()
		return false
	}
	return true
}

function checkCart () {
	if (
		document.getElementById("ad_selection").selectedIndex == 0 &&
		document.getElementById("seat_selection").selectedIndex == 0 &&
		document.getElementById("display_name").value.search(/Your Name/) != -1 &&
		document.getElementById("online_text").value.search(/Your Online Tribute Text/) != -1 &&
		document.getElementById("recommended_urls").value.search(/Recommended URL\(s\)/) != -1
		) {
		alert("Please make a selection.")
		document.getElementById("seat_selection").focus()
		return false
	}
	if (document.getElementById("ad_selection").selectedIndex == 0 && document.getElementById("ad_text").value.search(/Enter Your Print Ad Text Here/) == -1) {
		alert("Please select type of print ad.")
		document.getElementById("ad_text").focus()
		return false
	}
	if (document.getElementById("ad_selection").selectedIndex > 0 && document.getElementById("ad_text").value.length > 1024) {
		alert("Ad text cannot exceed 1,024 characters.")
		document.getElementById("ad_text").focus()
		return false
	}
	if (
		(document.getElementById("online_text").value.search(/Your Online Tribute Text/) == -1 ||
		document.getElementById("recommended_urls").value.search(/Recommended URL\(s\)/) == -1)
		&&
		document.getElementById("display_name").value.search(/Your Name/) != -1) {
		alert("Please enter your name.\n(Enter 'Anonymous' if you do not want your name to be displayed.")
		document.getElementById("display_name").focus()
		return false
	}

	//	INITIALIZE TOTALS
	var i
	for (i = 1; i < 3; i++)
		clearNames(i)
	document.getElementById("item_name_1").name = document.getElementById("item_name_2").name = document.getElementById("item_name_3").name = "dummy"

	var nextItem = 1

	//	ADD VALUES FOR SEAT SELECTION
	if (document.getElementById("seat_selection").selectedIndex > 0) {
		setNames(nextItem)
		document.getElementById("item_name_" + nextItem).value = "Dinner Seats"
		document.getElementById("item_quantity_" + nextItem).value = document.getElementById("seat_selection").value
		document.getElementById("item_price_" + nextItem).value = 500
		nextItem++
	}

	//	ADD VALUES FOR PRINT AD SELECTION
	if (document.getElementById("ad_selection").selectedIndex > 0) {
		setNames(nextItem)
		document.getElementById("item_name_" + nextItem).value = "Print Tribute: " + document.getElementById("ad_selection").options[document.getElementById("ad_selection").selectedIndex].innerHTML.replace(/^.* \- /, "")
		document.getElementById("item_quantity_" + nextItem).value = 1
		document.getElementById("item_price_" + nextItem).value = parseInt(document.getElementById("ad_selection").value)
		if (document.getElementById("ad_text").value.search(/Enter Your Print Ad Text Here/) == -1)
			document.getElementById("item_description_" + nextItem).value = "Print Ad Text: " + document.getElementById("ad_text").value
		nextItem++
	}

	//	ADD VALUES FOR ONLINE TRIBUTE SELECTION
	if (document.getElementById("display_name").value.search(/Your Name/) == -1) {
		setNames(nextItem)
		document.getElementById("item_name_" + nextItem).value = "Online Tribute"
		document.getElementById("item_quantity_" + nextItem).value = 1
		document.getElementById("item_price_" + nextItem).value = 25
		document.getElementById("item_description_" + nextItem).value =
			"Name: " + document.getElementById("display_name").value + 
			(document.getElementById("online_text").value.search(/Your Online Tribute Text/) != -1 ? "" : (". Text: " + document.getElementById("online_text").value)) + 
			(document.getElementById("recommended_urls").value.search(/Recommended URL\(s\)/) != -1 ? "" : (". URLs: " + document.getElementById("recommended_urls").value))
	}
	return true
}

function clearNames (i) {
	var google_fields = new Array("name", "description", "price", "quantity", "currency")
	for (j = 0; j < google_fields.length; j++)
		document.getElementById("item_" + google_fields[j] + "_" + i).name = "dummy"
	document.getElementById("item_quantity_" + i).value = 0
}

function setNames (i) {
	var google_fields = new Array("name", "description", "price", "quantity", "currency")
	for (j = 0; j < google_fields.length; j++)
		document.getElementById("item_" + google_fields[j] + "_" + i).name = document.getElementById("item_" + google_fields[j] + "_" + i).id
}

function showTotal () {
	var myPrice = 0
	if (document.getElementById("seat_selection").selectedIndex > 0) {
		myPrice = myPrice + parseInt(document.getElementById("seat_selection").value) * 500
	}
	if (document.getElementById("ad_selection").selectedIndex > 0) {
		myPrice = myPrice + parseInt(document.getElementById("ad_selection").value)
	}
	if (
		(document.getElementById("display_name").value.search(/Your Name/) == -1 &&
			document.getElementById("display_name").value != "")
		||
		(document.getElementById("online_text").value.search(/Your Online Tribute Text/) == -1 &&
			document.getElementById("online_text").value != "")
		||
		(document.getElementById("recommended_urls").value.search(/Recommended URL\(s\)/) == -1 &&
			document.getElementById("recommended_urls").value != "")
	)
	{
		myPrice = myPrice + 25
	}
	if (myPrice >= 1000)
		myPrice = myPrice.toString().replace(/(...)$/, ",$1")
	document.getElementById("showTotal").innerHTML = myPrice
}

//	CODE TO LIMIT NUMBER OF CHARACTERS, AND SHOW USER HOW MANY CHARACTERS REMAIN

function characterCounter (myField, e) {
	if (window.event) {
		key = window.event.keyCode
		eventType = window.event.type
	}
	else if (e) {
		key = e.which
		eventType = e.type
	}
	else
		return true

	if (eventType == "keydown" && myField.value.length <= 1024)
		saveValue = myField.value 

	nChars = 1024 - myField.value.length

	var BACKSPACE = 8
	var PAGEUP = 33
	var PAGEDOWN = 34
	var END = 35
	var HOME = 36
	var LEFTARROW = 37
	var UPARROW = 38
	var RIGHTARROW = 39
	var DOWNARROW = 40
	var DELETE = 46

	if (key != BACKSPACE && key != PAGEUP && key != PAGEDOWN && key != END && key != HOME && key != LEFTARROW && key != UPARROW && key != RIGHTARROW && key != DOWNARROW && key != DELETE && nChars < 0) {
		if (eventType == "keyup")
			myField.value = saveValue
		if (found(navigator.appName, "Microsoft"))
			return false
		else
			event.preventDefault()
	}
	else
		document.getElementById("nCharacters").innerHTML = nChars
}

var NOCONTEXTPASTE = "To paste into this field, please use <control-v>."

function FFnoContextPaste (event) {
	alert(NOCONTEXTPASTE)
	event.preventDefault()
}

function MSnoContextPaste () {
	alert(NOCONTEXTPASTE)
	return false
}

function noContextPaste (myID) {
	var myObject = document.getElementById(myID)
	if (browserType() == "IE") {
		myObject.oncontextmenu = MSnoContextPaste
	}
	else {
		myObject.addEventListener("contextmenu", FFnoContextPaste, true)
	}
}

function browserType () {
	if (found(navigator.appName, "Microsoft"))
		return "IE"
	if (navigator.userAgent.search(/Safari/i) != -1)
		return "Safari"
	if (navigator.userAgent.search(/Firefox/i) != -1)
		return "FF"
	return "FF"
}

function noPaste () {
	noContextPaste("ad_text")
}

loadAttacher(noPaste)

function check_search_radios () {
	document.getElementById("as_sitesearch").value =
		document.getElementById("search_site").checked ? "buckleytribute.com" : ""
}
