var appStage = 1;


if(!document.getElementsByClassName){
	document.getElementsByClassName = function(class_name) {
		var docList = this.all || this.getElementsByTagName('*');
		var matchArray = new Array();

		//Create a regular expression object for class
		var re = new RegExp("(?:^|\\s)"+class_name+"(?:\\s|$)");
		for (var i = 0; i < docList.length; i++) {
			if (re.test(docList[i].className) ) {
				matchArray[matchArray.length] = docList[i];
			}
		}

		return matchArray;
	}//eof annonymous function
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

String.prototype.trim = function ()
{
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function bulkStyle(arElems, style, form)
{
	form = $(form);
	for(var i=0;i<arElems.length;i++)
	{
		if(form == null)
			$(arElems[i]).setStyle(style);
		else
			$(form.elements[arElems[i]]).setStyle(style);
	}
}

function getRadioValue(button)
{
	oCol = document.getElementsByName(button);
	for(elem = 0; elem < oCol.length; elem++)
	{
		if(oCol[elem].checked)
		{
			return oCol[elem].value;
		}
	}
	return "";
}

/*
function getFormString(elements){
	
	var strValue="";
	for(var i=0;i<elements.length;i++)
	{
		oElem = document.getElementById(elements[i]);
		switch(oElem.type)
		{
			case "text":
			case "textarea":
			case "select-one":
				strValue += "i" + oElem.name + "=" + escape(oElem.value) + "&";
				break;
			case "radio":
				strValue += "i" + oElem.name + "=" + escape(getRadioValue(oElem.name)) + "&";
				break;
		}
	}
	
	return strValue+"foo=bar";
}*/

function getFormString(form, elements){
	
	var strValue="";
	for(var i=0;i<elements.length;i++)
	{
		//oElem = document.getElementById(elements[i]);
		oElem = $(form.elements[elements[i]]);
		switch(oElem.type)
		{
			case "text":
			case "textarea":
			case "select-one":
			case "hidden":
				strValue += "i" + oElem.name + "=" + encodeURIComponent(oElem.value) + "&";
				break;
			case "radio":
				strValue += "i" + oElem.name + "=" + encodeURIComponent(getRadioValue(oElem.name)) + "&";
				break;
			case "checkbox":
				if(oElem.checked)
					strValue += "i" + oElem.name + "=" + encodeURIComponent(oElem.value) + "&";
					
		}
	}
	
	return strValue+"foo=bar";
}

function getFormStringStd(elements){
	
	var strValue="";
	for(var i=0;i<elements.length;i++)
	{
		//oElem = document.getElementById(elements[i]);
		oElem = elements[i];
		switch(oElem.type)
		{
			case "text":
			case "textarea":
			case "select-one":
			case "hidden":
				strValue += oElem.name + "=" + encodeURIComponent(oElem.value) + "&";
				break;
			case "radio":
				strValue += oElem.name + "=" + encodeURIComponent(getRadioValue(oElem.name)) + "&";
				break;
		}
	}
	
	return strValue+"foo=bar";
}

function submitContact(form){
	form = $(form);
	var arReq = new Array('name', 'email');
	var arRet = new Array(), j=0;

	for(var i=0;i<arReq.length;i++){
		if($(form.elements[arReq[i]]).value.trim()==""){
			arRet[j] = arReq[i];
			j++;
		}
	}
	if(arRet.length>0){
		$('dvError').update('Please fill in all required fields.');
		$('dvError').show();
		bulkStyle(arRet,{'border':'1px solid red'}, form);
		return false;
	}
		
	if (window.XMLHttpRequest)
	{
	// code for IE7+, Firefox, Chrome, Opera, Safari
		oRequest=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
	// code for IE6, IE5
		oRequest=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	oRequest.open("POST", "/docontact.php", false);
	oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	var strPost = getFormString(form, new Array('name', 'email', 'phone', 'comments'));
	oRequest.send(strPost);
	
	if(oRequest.responseText=="1"){
		$('frmContact').hide();
		$('dvError').hide();
		$('dvConfirmation').show();
	}else{
		$('dvError').update('An error has occured. Please try again later.<div style="font-size:8pt;font-weight:normal;border:1px solid #000099;">' + oRequest.responseText + '</div>');
		$('dvError').show();
		$('frmContact').hide();
	}
	
	$('inpsubmit').writeAttribute("disabled", "");
	
	return false;
}

function submitKaddish(form){
	form = $(form);
	var arReq = new Array('memname', 'date', 'fullname', 'email');
	var arRet = new Array(), j=0;

	for(var i=0;i<arReq.length;i++){
		if($(form.elements[arReq[i]]).value.trim()==""){
			arRet[j] = arReq[i];
			j++;
		}
	}
	if(arRet.length>0){
		$('dvError').update('Please fill in all required fields.');
		$('dvError').show();
		bulkStyle(arRet,{'border':'1px solid red'}, form);
		return false;
	}
		
	if (window.XMLHttpRequest)
	{
	// code for IE7+, Firefox, Chrome, Opera, Safari
		oRequest=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
	// code for IE6, IE5
		oRequest=new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	oRequest.open("POST", "/dokaddish.php", false);
	oRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	var strPost = getFormString(form, new Array('memname', 'date', 'fullname', 'email', 'subscribe'));
	oRequest.send(strPost);
	
	if(oRequest.responseText=="1"){
		form.hide();
		$('dvError').hide();
		$('dvConfirmation').show();
	}else{
		$('dvError').update('An error has occured. Please try again later.<div style="font-size:8pt;font-weight:normal;border:1px solid #000099;">' + oRequest.responseText + '</div>');
		$('dvError').show();
		form.hide();
	}
	
	$('btnSubmit').writeAttribute("disabled", "");
	
	return false;
}

function getEvent(e){
	return e || window.event;
}


function numbersOnly(e){
var keynum;

	if(window.event)
		keynum = e.keyCode;
	else if(e.which)
		keynum = e.which;
		
	var numcheck = /\d/
	return numcheck.test(String.fromCharCode(keynum));
}


function getXMLDoc(nodeName){
var xmlDoc;

	if(document.implementation.createDocument != null){
		xmlDoc = document.implementation.createDocument('', nodeName, null);
	}else{
		xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
		xmlDoc.appendChild(xmlDoc.createElement(nodeName));
	}
	
	return xmlDoc;
}

function xmlToString(xml){
	try{
		return new XMLSerializer().serializeToString(xml);
	}catch(e){
		return xml.xml.trim();
	}
}

function JSONObject(){
	this["@@TEXT"] = "";
	this.toString = function(){
		return this["@@TEXT"];
	}
	
	this.query = function(path){ //Allows XPath-like querying of a JSON object (only allows '=' operator for now)
		var i, j, ndTmp = this, arNodes = path.split("/"), strBuff, rgxTest = /\[.+(?=\])/, strEq;
		var ndReturn = new JSONObject(), retName;
		
		if(rgxTest.test(arNodes[arNodes.length - 1]))
			retName = arNodes[arNodes.length - 1].substring(0, arNodes[arNodes.length - 1].search(rgxTest));
		else
			retName = arNodes[arNodes.length - 1];
		ndReturn[retName] = new Array();

		for(i = 0; i < arNodes.length; i++){
			if(arNodes[i].length == 0)
				continue;
			
			if(rgxTest.test(arNodes[i])){//There is a bracketed equation
				strEq = rgxTest.exec(arNodes[i])[0].substring(1);
				arNodes[i] = arNodes[i].substring(0, arNodes[i].search(rgxTest));
				
				if(ndTmp[arNodes[i]] == null)
					return ndReturn;
				
				for(j = 0; j < ndTmp[arNodes[i]].length; j++){
					if(ndTmp[arNodes[i]][j][strEq.split("=")[0]] == strEq.split("=")[1]){
						ndReturn[retName][ndReturn[retName].length] = ndTmp[arNodes[i]][j];
					}
				}
			}else{
				if(ndTmp[arNodes[i]] == null)
					return ndReturn;
				
				for(j = 0; j < ndTmp[arNodes[i]].length; j++){
					ndReturn[retName][ndReturn[retName].length] = ndTmp[arNodes[i]][j];
				}
			}
		}
		
		return ndReturn;
	}
}

function XMLToJSON(node){
var returner, i, strBuff = "", newNode;

	//try{
		returner = new JSONObject();
		
		if(node.nodeType == 9 /*DOCUMENT_NODE*/)
			newNode = node.documentElement;
		else
			newNode = node;
		
		if(newNode.attributes){ //IE does not have "attributes" property for text nodes
			for(i = 0; i < newNode.attributes.length; i++){
				returner["@" + newNode.attributes[i].name] = newNode.attributes[i].value;
			}
		}
		
		//returner["@@TEXT"] = "";
		
		for(i = 0; i < newNode.childNodes.length; i++){
			var curNode = newNode.childNodes[i];
			switch(curNode.nodeType){
				case 1: //ELEMENT_NODE:
					if(returner[curNode.nodeName] == null)
						returner[curNode.nodeName] = new Array();
						returner[curNode.nodeName][returner[curNode.nodeName].length] = XMLToJSON(curNode);

					break;
				
				case 3: //TEXT_NODE:
					if(curNode.nodeValue.trim().length > 0 || curNode.parentElement.childNodes.length == 1){
						returner["@@TEXT"] += curNode.nodeValue.trim() + " ";
					}
					break;
					
				case 4: //CDATA_SECTION_NODE:
					if(returner["@@CDATA"] == null)
						returner["@@CDATA"] = new Array();
					returner["@@CDATA"][returner["@@CDATA"].length] = curNode.nodeValue;
			}
		}
		
		returner["@@TEXT"] = returner["@@TEXT"].trim();
		return returner;
	//}catch(e){
	//	return null;
	//}
	
}


function dialogBox(title, width, height){
	if(isNaN(width) && width != null)
		throw new Error("Invalid width value");
	if(isNaN(height) && height != null)
		throw new Error("Invalid height value");
	if(title == null)
		title = "";
		
	var dialog = this;
	
	var oDlg = $(document.createElement("div"));
	oDlg.className = "dialog";
	oDlg.style.display = "none";
	if(!isNaN(width))
		oDlg.style.width = width + 'px';		
	if(!isNaN(height))
		oDlg.style.height = height + 'px';
		
	var oTitle = $(document.createElement("div"));
	oTitle.className = "dialogTitle";
	oTitle.appendChild(document.createTextNode(title));
	oTitle.onselectstart = function(){
		getEvent(event).returnValue = false;
		return false;
	};
	oDlg.appendChild(oTitle);
	
	var oClose = $(document.createElement("div"));
	oClose.className = "dialogClose";
	oClose.onclick = function(){
		dialog.hide();
	};
	oClose.appendChild(document.createTextNode('X'));
	oDlg.appendChild(oClose);
	
	var oMain = $(document.createElement("div"));
	oMain.className = "dialogMain";
	oDlg.appendChild(oMain);
	
	var oOverlay = $(document.createElement("div"));
	oOverlay.className = "dialogOverlay";
	oOverlay.style.display = "none";
	document.body.appendChild(oOverlay);
	window.addEventListener("resize", function(){oOverlay.style.width=document.documentElement.clientWidth+'px';oOverlay.style.height=document.documentElement.clientHeight+'px';});
	
	this.dialog = oDlg;
	this.mainDiv = oMain;
	
	this.show = function(){
		document.body.style.overflow = "hidden";
		oOverlay.style.width=document.documentElement.clientWidth+'px';
		oOverlay.style.height=document.documentElement.clientHeight+'px';
		oOverlay.show();
		oDlg.appear({afterSetup: function(){
			oDlg.style.top = ((document.documentElement.clientHeight / 2) - (oDlg.offsetHeight / 2)) + 'px';
			oDlg.style.left = ((document.documentElement.clientWidth / 2) - (oDlg.offsetWidth / 2)) + 'px';
			new Draggable(oDlg, {handle: oTitle});
		}});
		
	}
	this.hide = function(){
		document.body.style.overflow = "auto";
		oOverlay.fade();
		oDlg.fade();
	}
	
	document.body.appendChild(this.dialog);
	
}


function createKaddishForm()
{
	var oKaddish, oDiv, oParent, lblTemp, inpTemp, i;
	var arFields = [
		{
			name:	'memname',
			label:	'Name (Hebrew name if known):',
			type:	'text'
		},
		{
			name:	'date',
			label:	'Yahrzeit / Date of Passing:',
			type:	'text'
		},
		{
			name:	'fullname',
			label:	'Your Name:',
			type:	'text'
		},
		{
			name:	'email',
			label:	'Your Email Address:',
			type:	'text'
		},
		{
			name:	'subscribe',
			label:	'Yes, please notify me of updates and special offers',
			type:	'checkbox',
			checked:'true',
			value:	'Yes'
		},
		{
			value:	'Submit Request',
			type:	'submit',
			name:	'submit'
		}
	];
	
	oKaddish = new dialogBox('Free Kaddish');
	
	oParent = $(oKaddish.mainDiv.appendChild(document.createElement("div")));
	oParent.style.margin = "18px";
	oDiv = $(oParent.appendChild(document.createElement("div")));
	oDiv.style.marginBottom = "12px";
	oDiv.style.fontWeight = "bold";
	oDiv.style.textAlign = "center";
	oDiv.update('Have kaddish recited in memory of your loved one!');
	oDiv = $(oParent.appendChild(document.createElement("div")));
	oDiv.id = "dvError";
	oDiv = $(oParent.appendChild(document.createElement("div")));
	oDiv.id = "dvConfirmation";
	oForm = $(oParent.appendChild(document.createElement("form")));
	oForm.action = "http://www.example.com";
	oForm.method = "get";
	oForm.id = "frmFreeKaddish";
	oForm.onsubmit=function()
	{
		getEvent(event).returnValue=false;
		
		return false;
	};
	
	for(i = 0; i < arFields.length; i++)
	{
		oDiv = $(oForm.appendChild(document.createElement("div")));
		
		switch(arFields[i].type)
		{
			case "checkbox":
				//break;
			case "submit":
				oDiv.style.textAlign = "center";
				break;
			default:
				if(arFields[i].label != null)
				{
					lblTemp = $(oDiv.appendChild(document.createElement("label")));
					lblTemp.setAttribute("for", "inp" + arFields[i].name);
					lblTemp.update(arFields[i].label);
					$(oDiv.appendChild(document.createElement("br")));
				}
		}
		
		inpTemp = $(oDiv.appendChild(document.createElement("input")));
		if(arFields[i].name)
		{
			inpTemp.id = 'inp' + arFields[i].name;
			inpTemp.name = arFields[i].name;
		}
		if(arFields[i].value)
			inpTemp.value = arFields[i].value;
		if(arFields[i].type)
			inpTemp.type = arFields[i].type;
		
		switch(arFields[i].type)
		{
			case "checkbox":
				if(arFields[i].checked)
					inpTemp.checked = true;
				if(arFields[i].label != null)
				{
					lblTemp = $(oDiv.appendChild(document.createElement("label")));
					lblTemp.setAttribute("for", "inp" + arFields[i].name);
					lblTemp.update(arFields[i].label);
				}
				break;
			case "submit":
				inpTemp.onclick = function(){submitKaddish(oForm);};
			default:
		}
			
		$(oDiv.appendChild(document.createElement("br")));
	}
	
	return oKaddish;
}






