Void = function(){}
if(!console) {var console = {log: Void}}

function openMap()
{
	window.open("map.html", "Map", "width=456,height=456,scrollbars=no,resizable=no");
}
function openCurrentEvents() {
	window.open("currentEvents.html", "Map", "width=406,height=606,scrollbars=no,resizable=no");
}
function echeck(str) {

	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   displayErrorMessage(str + " is an invalid email address");
	   return false
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   displayErrorMessage(str + " is an invalid email address")
	   return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
	    displayErrorMessage(str + " is an invalid email address")
	    return false
	}

	 if (str.indexOf(at,(lat+1))!=-1){
	    displayErrorMessage(str + " is an invalid email address")
	    return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
	    displayErrorMessage(str + " is an invalid email address")
	    return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
	    displayErrorMessage(str + " is an invalid email address")
	    return false
	 }
	
	 if (str.indexOf(" ")!=-1){
	    displayErrorMessage(str + " is an invalid email address")
	    return false
	 }
	return true					
}

function ValidateForm(which){
	var isValid = true;
	var emailIDs=$(which).find("input[@validation='email']");
	emailIDs.each(function(index, item) {
		var emailID = $(item);
		var val = Required(item);
		if (val) {
			$(item).removeClass("error");
			
			if (echeck(emailID.val())==false){
				emailID.value="";
				emailID.focus();
				emailID.addClass("error");
				if (isValid) {
					isValid = false;
				}
			}else {
				emailID.removeClass("error");
			}
			$(item).focus(function(){
				$(this).removeClass("error");
			});
			$(item).blur(function(){
				if (echeck($(this).val()) == false) {
					$(this).addClass("error");
				}else {
					$(this).removeClass("error");
				}
			});
		}
		else {
			if (isValid) {
				isValid = false;
			}
		}
		
	});
	var requireds=$(which).find("input[@validation='required']");
	requireds.each(function(index, item) {
		var val = Required(item);
		if (val) {
			$(item).removeClass("error");
		}
		else {
			if (isValid) {
				isValid = false;
			}
		}
		
	});
	var requireds=$(which).find("select[@validation='required']");
	requireds.each(function(index, item) {
		var val = Required(item);
		if (val) {
			$(item).removeClass("error");
		}
		else {
			if (isValid) {
				isValid = false;
			}
		}
		
	});
	var requireds=$(which).find("textarea[@validation='required']");
	requireds.each(function(index, item) {
		var val = Required(item);
		if (val) {
			$(item).removeClass("error");
		}
		else {
			if (isValid) {
				isValid = false;
			}
		}
	});
	return isValid;
}
 
function Required(item) {
	isValid = true;
	var reqItem = $(item);
	if ((reqItem.val()==null)||(reqItem.val()=="")){
		//reqItem.focus();
		reqItem.addClass("error");
		displayErrorMessage("Please provide a value for the highlighted field(s) before sending");
		isValid = false;
	}else {
		reqItem.removeClass("error");
	}
	reqItem.focus(function(){
		$(this).removeClass("error");
	});
	reqItem.blur(function(){
		Required(this);
	});
	return isValid;
}
 
var $Config = {
	"defaultWait": 2500,
	"MessageTypes": ["#messageContainer .okMessage", "#messageContainer .errorMessage", "#messageContainer .infoMessage", "#messageContainer .warningMessage"],
	"AjaxContainerIdPrefix": "#AjaxActionContainer_"
};
//var $Config = configObject;

function displayErrorMessage(message){
	var msg = "<div class=\"warningMessage\">" + message + "</div><br />";
	$("#messageContainer").html(msg);
}

function displayOkMessage(message){
	var msg = "<div class=\"okMessage\">" + message + "</div><br />";
	$("#messageContainer").html(msg);
}

function redirect(url) {
	location.href = url;
}

function download(url, id) {
	var iframe = document.getElementById(id);
	if(!iframe) {return;}
	iframe.src = url;
}

function hideMessages() {
	for (var i = 0; i < $Config.MessageTypes.length; i++) {
		var messages = $($Config.MessageTypes[i]);
		messages.each(function(item){
			var thisRef = $(this); 
			setTimeout(function(){
				thisRef.hide("slow");
			}, $Config.defaultWait);
		});
	}
}

function stripeUserTable() {
	$("table.userTable tr td").each(function(index, item){
		
		$(this).mouseover(function(){
			$(this).parent().addClass("hover")
		});
		$(this).mouseout(function(){
			$(this).parent().removeClass("hover")
		});
	});
	//console.log($("table.userTable tr").not("tr.hidden"));
	$(document).find("table.userTable tr").not("tr.hidden").each(function(index, item){
		if(index % 2 != 0) {
			$(item).addClass("alt");
		}else {
			$(item).removeClass("alt");
		}
		
	});
		
}

var AjaxActionCollection = new Object();

function setUpNewAjaxActionCollectionItem(id) {
	if (!AjaxActionCollection[$Config.AjaxContainerIdPrefix + id]) {
		AjaxActionCollection[$Config.AjaxContainerIdPrefix + id] = new Object();
		AjaxActionCollection[$Config.AjaxContainerIdPrefix + id].id = $Config.AjaxContainerIdPrefix + id;
		AjaxActionCollection[$Config.AjaxContainerIdPrefix + id].itemId = id;
		AjaxActionCollection[$Config.AjaxContainerIdPrefix + id].container = $(AjaxActionCollection[$Config.AjaxContainerIdPrefix + id].id);
	}
	return AjaxActionCollection[$Config.AjaxContainerIdPrefix + id];
}

function clearAjaxActionCollectionItem(id){
	AjaxActionCollection[$Config.AjaxContainerIdPrefix + id] = null;
}

function getAjaxActionCollectionItem(id){
	return AjaxActionCollection[$Config.AjaxContainerIdPrefix + id];
}

function saveAjax(id, link){
	
	var obj = getAjaxActionCollectionItem(id);
	
	if (ValidateForm(obj.container)) {
		$(link).parent().html("<a onclick=\"setUpAjaxEdit('" + obj.ajaxUrl + "', " + id + ", this)\" href=\"javascript:;\">edit</a> ")
		
		var thisData = new Object();
		thisData["isAjax"] = "true";
		thisData["id"] = obj.itemId;
		obj.textboxes.each(function(index, item){
			thisData[item.name] = obj.container.find("input[@name='" + item.name + "']").val();
		});
		obj.checkboxs.each(function(index, item){
			thisData[item.name] = (obj.container.find("input[@name='" + item.name + "']:checked").val()) ? "true" : "false";
		});
		
		$.ajax({
			url: obj.ajaxUrl,
			data: thisData,
			dataType: "text",
			success: function(data){
				displayOkMessage(data);
				hideMessages();
				resetEditForm(obj.itemId);
			}
		});
	}
}

function resetEditForm(id) {
	//console.log("resetting " + id)
	var obj = getAjaxActionCollectionItem(id);
	obj.container.removeClass("active");
	var textboxes = obj.container.find("input[@type='text']");
	textboxes.each(function(index, item) {
		var ref = $(this);
		ref.parent().html("<input type='hidden' name='" + item.name + "' value='" +  item.value + "' />" + item.value);
	});
	
	clearAjaxActionCollectionItem(id);
}

function sendPreviewEmail(id, url) {
	var thisData = new Object();
	thisData["isAjax"] = "true";
	thisData["action"] = "preview";
	thisData["id"] = id;
	$.ajax({
		url: url,
		data: thisData,
		dataType: "text",
		success: function(data){
			setTimeout(function() {
				displayOkMessage(data);
				hideMessages();
			}, 100);
		}
	});
}

function deleteItem(url, id, what) {
	var obj = setUpNewAjaxActionCollectionItem(id);
	if(confirm("are you sure you want to delete " + what + "?")) {
		var thisData = new Object();
		thisData["isAjax"] = "true";
		thisData["id"] = obj.itemId;
		thisData["action"] = "delete";
		$.ajax({
			url: url,
			data: thisData,
			dataType: "text",
			success: function(data){
				setTimeout(function() {
					obj.container.addClass("hidden");
					obj.container.hide();
					displayOkMessage(data);
					hideMessages();
					stripeUserTable();
				}, 100);
			}
		});
		
	}
	
	obj.container.removeClass("active");
}

function cancelEdit(id) {
	var obj = setUpNewAjaxActionCollectionItem(id);
	
	obj.container.removeClass("active");
	obj.container.removeClass("hover");
	obj.container.html(obj.oldHML);
	
}

function setUpAjaxEdit(ajaxUrl, id, link){
	var obj = setUpNewAjaxActionCollectionItem(id);
	obj.container.addClass("active");
	obj.oldHML = obj.container.html();
	obj.ajaxUrl = ajaxUrl;
	$(link).parent().html("<a onclick=\"saveAjax(" + id + ", this)\" id=\"" + obj.id +  "_UpdateLink\" href=\"javascript:;\">update</a>&nbsp;&nbsp;<a onclick=\"cancelEdit(" + id + ")\" id=\"" + obj.id +  "_CancelLink\" href=\"javascript:;\">cancel</a>")
	
	obj.oldLink = $(link).parent().html();
	
	obj.UpdateLink = obj.container.find(obj.id +  "_UpdateLink");
	
	obj.checkboxs = obj.container.find("input[@type='checkbox']");
	obj.textboxes = obj.container.find("input[@type='hidden']");
	
	obj.textboxes.each(function(index, item) {
		var ref = $(this);
		ref.parent().html("<input size='30' type='text' validation='" + $(this).attr("validation") + "' name='" + item.name + "' value='" +  item.value + "' />");
	});
}

function addFormValidators() {
	$("form.useValidators").each(function(index, item){
		$(this).submit(function(){
			return ValidateForm(this);
		});
	});
}

function initNav() {
	var aTags = $("#nav li a");
	aTags.each(function(index, item) {
		var item = $(item);
		if (item.attr("href") != window.location.href.substring(window.location.href.lastIndexOf("/") + 1)) {
			item.hover(function(){
				var img = $(this).find("img");
				img.attr("src", img.attr("src").replace("_off", "_over"));
			}, function(){
				var img = $(this).find("img");
				img.attr("src", img.attr("src").replace("_over", "_off"));
			});
		}else {
			var img = $(this).find("img");
				img.attr("src", img.attr("src").replace("_off", "_over"));
		}
	});
	var button = $("input.button");
	button.hover(function(){
				button.attr("src", button.attr("src").replace("_off", "_over"));
			}, function(){
				button.attr("src", button.attr("src").replace("_over", "_off"));
			});
}

$(document).ready(function() {
	
	initNav()
	
	hideMessages();
	
	addFormValidators();
	
	stripeUserTable();
	
	$("input[@id='startDate']").datepicker(); 
	$("input[@name='endDate']").datepicker();
	
});
