rosehill/html/js/functions.js

164 lines
4.5 KiB
JavaScript

/**
* @copyright Copyright (C) 2006-2008 City of Bloomington, Indiana. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.txt
* @author Cliff Ingham <inghamn@bloomington.in.gov>
*/
var FRAMEWORK = {};
/* A handy function for doing pop-up confirmations when deleting something */
FRAMEWORK.deleteConfirmation = function (url)
{
if (confirm("Are you really sure you want to delete this?\n\nOnce deleted it will be gone forever."))
{
document.location.href = url;
return true;
}
else { return false; }
};
/**
* Used for navigating between multiple forms that contain information
* for one object, and are displayed as tabs. Each of the forms must have
* a hidden field for the tab and action, each with the appropriate id.
* Also each of the forms must use the same id in the form tag
* @param id form The id of the form tag
* @param string tab The name of the next tab to display
* @param string action The function to call in the controller for the forms
*/
FRAMEWORK.processTabbedForm = function (form,tab,action)
{
if (action === 'save') { document.getElementById('continue').value = 'false'; }
document.getElementById('tab').value = tab;
document.getElementById('action').value = action;
document.getElementById(form).submit();
};
/* The following function creates an XMLHttpRequest object useful for doing AJAX stuff */
FRAMEWORK.getXMLHttpRequestObject = function ()
{
var request;
var browser = navigator.appName;
if (browser === "Microsoft Internet Explorer") { request = new ActiveXObject("Microsoft.XMLHTTP"); }
else { request = new XMLHttpRequest(); }
return request;
};
FRAMEWORK.getFormValues = function (form)
{
var params = "";
for(var i=0; i<form.elements.length; i++)
{
switch(form.elements[i].type)
{
case "text":
params += form.elements[i].name + "=" + escape(form.elements[i].value) + ";";
break;
case "select-one":
params += form.elements[i].name + "=" + form.elements[i].options[form.elements[i].selectedIndex].value + ";";
break;
}
}
//Remove the trailing semicolon before returning
return params.substr(0,(params.length - 1));
};
/**
* Limits a given form field to a given number of characters
* @param field The DOM element for the field to limit
* @param maxNumChars The maximum number of characters you want to allow
*/
FRAMEWORK.limit = function (field,maxNumChars)
{
if (field.value.length > maxNumChars)
{
field.value = field.value.substring(0,maxNumChars);
}
}
/**
* A Date Picker built off the YUI Calendar
* This requires the YUI Toolkit
* @param element The form input to put the chosen date
*/
FRAMEWORK.calendarInit = true;
FRAMEWORK.popupCalendar = function (element)
{
if (!document.getElementById("popupDatePicker"))
{
var div = document.createElement("div");
div.setAttribute("id","popupDatePicker");
div.setAttribute("class","yui-skin-sam");
element.form.appendChild(div);
}
FRAMEWORK.dateField = element;
if (FRAMEWORK.calendarInit)
{
FRAMEWORK.calendarInit = false;
FRAMEWORK.popupDatePicker = new YAHOO.widget.Calendar("popupDatePicker",{"close":true});
FRAMEWORK.popupDatePicker.selectEvent.subscribe(FRAMEWORK.dateSelectionHandler,FRAMEWORK.popupDatePicker,true);
}
else
{
if (element.value != "")
{
FRAMEWORK.popupDatePicker.select(element.value);
dates = FRAMEWORK.popupDatePicker.getSelectedDates();
if (dates.length > 0)
{
date = dates[0];
FRAMEWORK.popupDatePicker.cfg.setProperty("pagedate",(date.getMonth()+1 + "/" + date.getFullYear()));
}
else { alert("Invalid date"); }
}
}
var xy = YAHOO.util.Dom.getXY(element);
xy[0] += 20;
xy[1] += 20;
YAHOO.util.Dom.setXY ("popupDatePicker", xy, false);
FRAMEWORK.popupDatePicker.render();
FRAMEWORK.popupDatePicker.show();
}
FRAMEWORK.dateSelectionHandler = function (type,args,obj)
{
FRAMEWORK.dateField.value = args[0][0][1] + "/" + args[0][0][2] + "/" + args[0][0][0];
FRAMEWORK.popupDatePicker.hide();
}
/**
* Makes sure dates are correct. Returns false on dates like Feb 30
* The months are zero based, so January is 0 and December is 11
*
* @param int month (0=Jan, 11=Dec)
* @param int day
* @param int year
*/
FRAMEWORK.validateDate = function (month,day,year)
{
var date = new Date(year,month,day);
if (year != date.getFullYear()) {
alert('Year is not valid!');
return false;
}
if (month != date.getMonth()) {
alert('Month is not valid!');
return false;
}
if(day != date.getDate()) {
alert('Day is not valid!');
return false;
}
return true;
};