/*
DESCRIPTION: These functions find the position of an tag in a document,
so other elements can be positioned relative to it.
COMPATIBILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small
positioning errors - usually with Window positioning - occur on the
Macintosh platform.
FUNCTIONS:
getAnchorPosition(anchorname)
Returns an Object() having .x and .y properties of the pixel coordinates
of the upper-left corner of the anchor. Position is relative to the PAGE.
getAnchorWindowPosition(anchorname)
Returns an Object() having .x and .y properties of the pixel coordinates
of the upper-left corner of the anchor, relative to the WHOLE SCREEN.
NOTES:
1) For popping up separate browser windows, use getAnchorWindowPosition.
Otherwise, use getAnchorPosition
2) Your anchor tag MUST contain both NAME and ID attributes which are the
same. For example:
3) There must be at least a space between for IE5.5 to see the
anchor tag correctly. Do not do with no space.
*/
var desnivelGlobalX = 220;
var desnivelGlobaly = 170;
var tamanhoLayout = 980;
// getAnchorPosition(anchorname)
// This function returns an object having .x and .y properties which are the coordinates
// of the named anchor, relative to the page.
function getAnchorPosition(anchorname) {
// This function will return an Object with x and y properties
var useWindow = false;
var coordinates = new Object();
var x = 0,y = 0;
// Browser capability sniffing
var use_gebi = false, use_css = false, use_layers = false;
if (document.getElementById) {
use_gebi = true;
}
else if (document.all) {
use_css = true;
}
else if (document.layers) {
use_layers = true;
}
// Logic to find position
if (use_gebi && document.all) {
x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
}
else if (use_gebi) {
var o = document.getElementById(anchorname);
x = AnchorPosition_getPageOffsetLeft(o);
y = AnchorPosition_getPageOffsetTop(o);
}
else if (use_css) {
x = AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
y = AnchorPosition_getPageOffsetTop(document.all[anchorname]);
}
else if (use_layers) {
var found = 0;
for (var i = 0; i < document.anchors.length; i++) {
if (document.anchors[i].name == anchorname) {
found = 1;
break;
}
}
if (found == 0) {
coordinates.x = 0;
coordinates.y = 0;
return coordinates;
}
x = document.anchors[i].x;
y = document.anchors[i].y;
}
else {
coordinates.x = 0;
coordinates.y = 0;
return coordinates;
}
coordinates.x = x;
coordinates.y = y;
return coordinates;
}
// getAnchorWindowPosition(anchorname)
// This function returns an object having .x and .y properties which are the coordinates
// of the named anchor, relative to the window
function getAnchorWindowPosition(anchorname) {
var coordinates = getAnchorPosition(anchorname);
var x = 0;
var y = 0;
if (document.getElementById) {
if (isNaN(window.screenX)) {
x = coordinates.x - document.body.scrollLeft + window.screenLeft;
y = coordinates.y - document.body.scrollTop + window.screenTop;
}
else {
x = coordinates.x + window.screenX + (window.outerWidth - window.innerWidth) - window.pageXOffset;
y = coordinates.y + window.screenY + (window.outerHeight - 24 - window.innerHeight) - window.pageYOffset;
}
}
else if (document.all) {
x = coordinates.x - document.body.scrollLeft + window.screenLeft;
y = coordinates.y - document.body.scrollTop + window.screenTop;
}
else if (document.layers) {
x = coordinates.x + window.screenX + (window.outerWidth - window.innerWidth) - window.pageXOffset;
y = coordinates.y + window.screenY + (window.outerHeight - 24 - window.innerHeight) - window.pageYOffset;
}
coordinates.x = x;
coordinates.y = y;
return coordinates;
}
// Functions for IE to get position of an object
function AnchorPosition_getPageOffsetLeft(el) {
var ol = el.offsetLeft;
while ((el = el.offsetParent) != null) {
ol += el.offsetLeft;
}
return ol;
}
function AnchorPosition_getWindowOffsetLeft(el) {
return AnchorPosition_getPageOffsetLeft(el) - document.body.scrollLeft;
}
function AnchorPosition_getPageOffsetTop(el) {
var ot = el.offsetTop;
while ((el = el.offsetParent) != null) {
ot += el.offsetTop;
}
return ot;
}
function AnchorPosition_getWindowOffsetTop(el) {
return AnchorPosition_getPageOffsetTop(el) - document.body.scrollTop;
}
// ------------------------------------------------------------------
// These functions use the same 'format' strings as the
// java.text.SimpleDateFormat class, with minor exceptions.
// The format string consists of the following abbreviations:
//
// Field | Full Form | Short Form
// -------------+--------------------+-----------------------
// Year | yyyy (4 digits) | yy (2 digits), y (2 or 4 digits)
// Month | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
// | NNN (abbr.) |
// Day of Month | dd (2 digits) | d (1 or 2 digits)
// Day of Week | EE (name) | E (abbr)
// Hour (1-12) | hh (2 digits) | h (1 or 2 digits)
// Hour (0-23) | HH (2 digits) | H (1 or 2 digits)
// Hour (0-11) | KK (2 digits) | K (1 or 2 digits)
// Hour (1-24) | kk (2 digits) | k (1 or 2 digits)
// Minute | mm (2 digits) | m (1 or 2 digits)
// Second | ss (2 digits) | s (1 or 2 digits)
// AM/PM | a |
//
// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
// Examples:
// "MMM d, y" matches: January 01, 2000
// Dec 1, 1900
// Nov 20, 00
// "M/d/yy" matches: 01/20/00
// 9/2/00
// "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
// ------------------------------------------------------------------
var MONTH_NAMES = new Array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro', 'Jan', 'Feb', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez');
var DAY_NAMES = new Array('Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'S�bado', 'Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sab');
function LZ(x) {
return(x < 0 || x > 9 ? "" : "0") + x
}
// ------------------------------------------------------------------
// isDate ( date_string, format_string )
// Returns true if date string matches format of format string and
// is a valid date. Else returns false.
// It is recommended that you trim whitespace around the value before
// passing it to this function, as whitespace is NOT ignored!
// ------------------------------------------------------------------
function isDate(val, format) {
var date = getDateFromFormat(val, format);
if (date == 0) {
return false;
}
return true;
}
// -------------------------------------------------------------------
// compareDates(date1,date1format,date2,date2format)
// Compare two date strings to see which is greater.
// Returns:
// 1 if date1 is greater than date2
// 0 if date2 is greater than date1 of if they are the same
// -1 if either of the dates is in an invalid format
// -------------------------------------------------------------------
function compareDates(date1, dateformat1, date2, dateformat2) {
var d1 = getDateFromFormat(date1, dateformat1);
var d2 = getDateFromFormat(date2, dateformat2);
if (d1 == 0 || d2 == 0) {
return -1;
}
else if (d1 > d2) {
return 1;
}
return 0;
}
// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// The format string uses the same abbreviations as in getDateFromFormat()
// ------------------------------------------------------------------
function formatDate(date, format) {
format = format + "";
var result = "";
var i_format = 0;
var c = "";
var token = "";
var y = date.getYear() + "";
var M = date.getMonth() + 1;
var d = date.getDate();
var E = date.getDay();
var H = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds();
var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
// Convert real date parts into formatted versions
var value = new Object();
if (y.length < 4) {
y = "" + (y - 0 + 1900);
}
value["y"] = "" + y;
value["yyyy"] = y;
value["yy"] = y.substring(2, 4);
value["M"] = M;
value["MM"] = LZ(M);
value["MMM"] = MONTH_NAMES[M - 1];
value["NNN"] = MONTH_NAMES[M + 11];
value["d"] = d;
value["dd"] = LZ(d);
value["E"] = DAY_NAMES[E + 7];
value["EE"] = DAY_NAMES[E];
value["H"] = H;
value["HH"] = LZ(H);
if (H == 0) {
value["h"] = 12;
}
else if (H > 12) {
value["h"] = H - 12;
}
else {
value["h"] = H;
}
value["hh"] = LZ(value["h"]);
if (H > 11) {
value["K"] = H - 12;
} else {
value["K"] = H;
}
value["k"] = H + 1;
value["KK"] = LZ(value["K"]);
value["kk"] = LZ(value["k"]);
if (H > 11) {
value["a"] = "PM";
}
else {
value["a"] = "AM";
}
value["m"] = m;
value["mm"] = LZ(m);
value["s"] = s;
value["ss"] = LZ(s);
while (i_format < format.length) {
c = format.charAt(i_format);
token = "";
while ((format.charAt(i_format) == c) && (i_format < format.length)) {
token += format.charAt(i_format++);
}
if (value[token] != null) {
result = result + value[token];
}
else {
result = result + token;
}
}
return result;
}
// ------------------------------------------------------------------
// Utility functions for parsing in getDateFromFormat()
// ------------------------------------------------------------------
function _isInteger(val) {
var digits = "1234567890";
for (var i = 0; i < val.length; i++) {
if (digits.indexOf(val.charAt(i)) == -1) {
return false;
}
}
return true;
}
function _getInt(str, i, minlength, maxlength) {
for (var x = maxlength; x >= minlength; x--) {
var token = str.substring(i, i + x);
if (token.length < minlength) {
return null;
}
if (_isInteger(token)) {
return token;
}
}
return null;
}
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val, format) {
val = val + "";
format = format + "";
var i_val = 0;
var i_format = 0;
var c = "";
var token = "";
var token2 = "";
var x,y;
var now = new Date();
var year = now.getYear();
var month = now.getMonth() + 1;
var date = 1;
var hh = now.getHours();
var mm = now.getMinutes();
var ss = now.getSeconds();
var ampm = "";
while (i_format < format.length) {
// Get next token from format string
c = format.charAt(i_format);
token = "";
while ((format.charAt(i_format) == c) && (i_format < format.length)) {
token += format.charAt(i_format++);
}
// Extract contents of value based on format token
if (token == "yyyy" || token == "yy" || token == "y") {
if (token == "yyyy") {
x = 4;
y = 4;
}
if (token == "yy") {
x = 2;
y = 2;
}
if (token == "y") {
x = 2;
y = 4;
}
year = _getInt(val, i_val, x, y);
if (year == null) {
return 0;
}
i_val += year.length;
if (year.length == 2) {
if (year > 70) {
year = 1900 + (year - 0);
}
else {
year = 2000 + (year - 0);
}
}
}
else if (token == "MMM" || token == "NNN") {
month = 0;
for (var i = 0; i < MONTH_NAMES.length; i++) {
var month_name = MONTH_NAMES[i];
if (val.substring(i_val, i_val + month_name.length).toLowerCase() == month_name.toLowerCase()) {
if (token == "MMM" || (token == "NNN" && i > 11)) {
month = i + 1;
if (month > 12) {
month -= 12;
}
i_val += month_name.length;
break;
}
}
}
if ((month < 1) || (month > 12)) {
return 0;
}
}
else if (token == "EE" || token == "E") {
for (var i = 0; i < DAY_NAMES.length; i++) {
var day_name = DAY_NAMES[i];
if (val.substring(i_val, i_val + day_name.length).toLowerCase() == day_name.toLowerCase()) {
i_val += day_name.length;
break;
}
}
}
else if (token == "MM" || token == "M") {
month = _getInt(val, i_val, token.length, 2);
if (month == null || (month < 1) || (month > 12)) {
return 0;
}
i_val += month.length;
}
else if (token == "dd" || token == "d") {
date = _getInt(val, i_val, token.length, 2);
if (date == null || (date < 1) || (date > 31)) {
return 0;
}
i_val += date.length;
}
else if (token == "hh" || token == "h") {
hh = _getInt(val, i_val, token.length, 2);
if (hh == null || (hh < 1) || (hh > 12)) {
return 0;
}
i_val += hh.length;
}
else if (token == "HH" || token == "H") {
hh = _getInt(val, i_val, token.length, 2);
if (hh == null || (hh < 0) || (hh > 23)) {
return 0;
}
i_val += hh.length;
}
else if (token == "KK" || token == "K") {
hh = _getInt(val, i_val, token.length, 2);
if (hh == null || (hh < 0) || (hh > 11)) {
return 0;
}
i_val += hh.length;
}
else if (token == "kk" || token == "k") {
hh = _getInt(val, i_val, token.length, 2);
if (hh == null || (hh < 1) || (hh > 24)) {
return 0;
}
i_val += hh.length;
hh--;
}
else if (token == "mm" || token == "m") {
mm = _getInt(val, i_val, token.length, 2);
if (mm == null || (mm < 0) || (mm > 59)) {
return 0;
}
i_val += mm.length;
}
else if (token == "ss" || token == "s") {
ss = _getInt(val, i_val, token.length, 2);
if (ss == null || (ss < 0) || (ss > 59)) {
return 0;
}
i_val += ss.length;
}
else if (token == "a") {
if (val.substring(i_val, i_val + 2).toLowerCase() == "am") {
ampm = "AM";
}
else if (val.substring(i_val, i_val + 2).toLowerCase() == "pm") {
ampm = "PM";
}
else {
return 0;
}
i_val += 2;
}
else {
if (val.substring(i_val, i_val + token.length) != token) {
return 0;
}
else {
i_val += token.length;
}
}
}
// If there are any trailing characters left in the value, it doesn't match
if (i_val != val.length) {
return 0;
}
// Is date valid for month?
if (month == 2) {
// Check for leap year
if (( (year % 4 == 0) && (year % 100 != 0) ) || (year % 400 == 0)) { // leap year
if (date > 29) {
return 0;
}
}
else {
if (date > 28) {
return 0;
}
}
}
if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
if (date > 30) {
return 0;
}
}
// Correct hours value
if (hh < 12 && ampm == "PM") {
hh = hh - 0 + 12;
}
else if (hh > 11 && ampm == "AM") {
hh -= 12;
}
var newdate = new Date(year, month - 1, date, hh, mm, ss);
return newdate.getTime();
}
// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d MMM d, y MMM d,y y-MMM-d d-MMM-y MMM d
// M/d/y M-d-y M.d.y MMM-d M/d M-d
// d/M/y d-M-y d.M.y d-MMM d/M d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------
function parseDate(val) {
var preferEuro = (arguments.length == 2) ? arguments[1] : false;
generalFormats = new Array('y-M-d', 'MMM d, y', 'MMM d,y', 'y-MMM-d', 'd-MMM-y', 'MMM d');
monthFirst = new Array('M/d/y', 'M-d-y', 'M.d.y', 'MMM-d', 'M/d', 'M-d');
dateFirst = new Array('d/M/y', 'd-M-y', 'd.M.y', 'd-MMM', 'd/M', 'd-M');
//dateFirst = new Array('dd-MM-yyyy', 'd/M/y', 'd-M-y', 'd.M.y', 'd-MMM', 'd/M', 'd-M');
var checkList = new Array('generalFormats', preferEuro ? 'dateFirst' : 'monthFirst', preferEuro ? 'monthFirst' : 'dateFirst');
var d = null;
for (var i = 0; i < checkList.length; i++) {
var l = window[checkList[i]];
for (var j = 0; j < l.length; j++) {
d = getDateFromFormat(val, l[j]);
if (d != 0) {
return new Date(d);
}
}
}
return null;
}
/*
DESCRIPTION: This object allows you to easily and quickly popup a window
in a certain place. The window can either be a DIV or a separate browser
window.
COMPATIBILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
positioning errors - usually with Window positioning - occur on the
Macintosh platform. Due to bugs in Netscape 4.x, populating the popup
window with \n";
return result;
}
// Return a string containing all the calendar code to be displayed
function CP_getCalendar() {
var now = new Date();
// Reference to window
if (this.type == "WINDOW") {
var windowref = "window.opener.";
}
else {
var windowref = "";
}
var result = "";
// If POPUP, write entire HTML document
if (this.type == "WINDOW") {
result += "
Calendar" + this.getStyles() + "\n";
result += '\n';
}
else {
result += '\n';
result += '\n';
result += '\n';
}
// Code for DATE display (default)
// -------------------------------
if (this.displayType == "date" || this.displayType == "week-end") {
if (this.currentDate == null) {
this.currentDate = now;
}
if (arguments.length > 0) {
var month = arguments[0];
}
else {
var month = this.currentDate.getMonth() + 1;
}
if (arguments.length > 1 && arguments[1] > 0 && arguments[1] - 0 == arguments[1]) {
var year = arguments[1];
}
else {
var year = this.currentDate.getFullYear();
}
var daysinmonth = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
if (( (year % 4 == 0) && (year % 100 != 0) ) || (year % 400 == 0)) {
daysinmonth[2] = 29;
}
var current_month = new Date(year, month - 1, 1);
var display_year = year;
var display_month = month;
var display_date = 1;
var weekday = current_month.getDay();
var offset = 0;
offset = (weekday >= this.weekStartDay) ? weekday - this.weekStartDay : 7 - this.weekStartDay + weekday;
if (offset > 0) {
display_month--;
if (display_month < 1) {
display_month = 12;
display_year--;
}
display_date = daysinmonth[display_month] - offset + 1;
}
var next_month = month + 1;
var next_month_year = year;
if (next_month > 12) {
next_month = 1;
next_month_year++;
}
var last_month = month - 1;
var last_month_year = year;
if (last_month < 1) {
last_month = 12;
last_month_year--;
}
var date_class;
if (this.type != "WINDOW") {
result += "\n';
result += '\n';
result += '\n';
for (var j = 0; j < 7; j++) {
result += '' + this.dayHeaders[(this.weekStartDay + j) % 7] + ' | \n';
}
result += ' \n';
for (var row = 1; row <= 6; row++) {
result += '\n';
for (var col = 1; col <= 7; col++) {
var disabled = false;
if (this.disabledDatesExpression != "") {
var ds = "" + display_year + LZ(display_month) + LZ(display_date);
eval("disabled=(" + this.disabledDatesExpression + ")");
}
var dateClass = "";
if ((display_month == this.currentDate.getMonth() + 1) && (display_date == this.currentDate.getDate()) && (display_year == this.currentDate.getFullYear())) {
dateClass = "cpCurrentDate";
}
else if (display_month == month) {
dateClass = "cpCurrentMonthDate";
}
else {
dateClass = "cpOtherMonthDate";
}
if (disabled || this.disabledWeekDays[col - 1]) {
result += ' ' + display_date + ' | \n';
}
else {
var selected_date = display_date;
var selected_month = display_month;
var selected_year = display_year;
if (this.displayType == "week-end") {
var d = new Date(selected_year, selected_month - 1, selected_date, 0, 0, 0, 0);
d.setDate(d.getDate() + (7 - col));
selected_year = d.getYear();
if (selected_year < 1000) {
selected_year += 1900;
}
selected_month = d.getMonth() + 1;
selected_date = d.getDate();
}
result += ' ' + display_date + ' | \n';
}
display_date++;
if (display_date > daysinmonth[display_month]) {
display_date = 1;
display_month++;
}
if (display_month > 12) {
display_month = 1;
display_year++;
}
}
result += ' ';
}
var current_weekday = now.getDay() - this.weekStartDay;
if (current_weekday < 0) {
current_weekday += 7;
}
result += '\n';
result += ' \n';
if (this.disabledDatesExpression != "") {
var ds = "" + now.getFullYear() + LZ(now.getMonth() + 1) + LZ(now.getDate());
eval("disabled=(" + this.disabledDatesExpression + ")");
}
//if (disabled) {
/* uncomment line above and comment line below to correct the bug about disabling the current day when there are days disabled */
if (disabled || this.disabledWeekDays[current_weekday + 1]) {
result += ' ' + this.todayText + '\n';
}
else {
result += ' ' + this.todayText + '\n';
}
result += ' \n';
result += ' | |
\n';
}
// Code common for MONTH, QUARTER, YEAR
// ------------------------------------
if (this.displayType == "month" || this.displayType == "quarter" || this.displayType == "year") {
if (arguments.length > 0) {
var year = arguments[0];
}
else {
if (this.displayType == "year") {
var year = now.getFullYear() - this.yearSelectStartOffset;
}
else {
var year = now.getFullYear();
}
}
if (this.displayType != "year" && this.isShowYearNavigation) {
result += "";
result += '\n';
result += ' << | \n';
result += ' ' + year + ' | \n';
result += ' >> | \n';
result += '
\n';
}
}
// Code for MONTH display
// ----------------------
if (this.displayType == "month") {
// If POPUP, write entire HTML document
result += '
\n';
}
// Code for QUARTER display
// ------------------------
if (this.displayType == "quarter") {
result += '
\n';
for (var i = 0; i < 2; i++) {
result += '';
for (var j = 0; j < 2; j++) {
var quarter = ((i * 2) + j + 1);
result += ' Q' + quarter + '
| ';
}
result += '
';
}
result += '
\n';
}
// Code for YEAR display
// ---------------------
if (this.displayType == "year") {
var yearColumnSize = 4;
result += "";
result += '\n';
result += ' << | \n';
result += ' >> | \n';
result += '
\n';
result += '\n';
for (var i = 0; i < yearColumnSize; i++) {
for (var j = 0; j < 2; j++) {
var currentyear = year + (j * yearColumnSize) + i;
result += '' + currentyear + ' | ';
}
result += '';
}
result += '
\n';
}
// Common
if (this.type == "WINDOW") {
result += "\n";
}
return result;
}
//simplifying this using a function of ours
function calendar (name, desnivelX, desnivelY, tamanhoLayoutDefinir) {
//creating new calendar
var cal = new CalendarPopup(name);
if(desnivelX != undefined && desnivelX != '')
desnivelGlobalX = parseInt(desnivelX);
if(desnivelY != undefined && desnivelY != '')
desnivelGlobalY = parseInt(desnivelY);
if(tamanhoLayoutDefinir != undefined && tamanhoLayoutDefinir != '')
tamanhoLayout = parseInt(tamanhoLayoutDefinir);
//setting configs
cal.setCssPrefix("calendar");
cal.showNavigationDropdowns();
cal.offsetX = 20;
cal.offsetY = -5;
//cal.setWeekStartDay(1);
//cal.setDisabledWeekDays(0, 6);
//return configured calendar
return cal;
}