// Enhanced JavaScript Event Calendar
//
// Author:  Rick Pike
// Website: http://calendar.pikesys.com
// Email: calendar@pikesys.com
//'Version 0.3 - (07-May-2004)
//
// based on an earlier script by Kevin Ilsen (http://calendar.ilsen.net or kevin@ilsen.net)

// Configurable values are set to defaults here; you can override them before calling Calendar( ) from your HTML page

var SpecialDay = 1;
var ColorBackground = "#ffffcc";
var ColorSpecialDay = "#D8972F";
var ColorToday = "#AC0202";
var ColorEvent = "#666666";
var showAltDate = false;
var showHolidays = false;
var showAltHoly = false;
var showMsgBox = false;
var showMini = false;
var showNav = true;
var showImages = false;
var showLinks = true;
var msgBoxColor = "#ffcc99";
var navColor = "#f1f1f1";
var imageAlign = "left";
var imageScale = 100;
var altAlign = true;
var DefaultFormat = "custom";
var ExportPage = "";
var PrintPage = "";
var DateFontSize = 4;
var AltDateFormat = "<font color=#999999 size=3>|</font>";
var MonthFormat = "<font size=" + DateFontSize + " color='#006991'><b>|</b></font>";
var AltMonthFormat = "<br><font color=#999999 size=" + DateFontSize / 2 + ">|</font>";
var HolidayFormat = "<font color=#999999 size=2><b><center>|</center></b></font>";
var AltHolyFormat = "<font  size=2><b><center>|</center></b></font>";
var DefaultLayerFormat = "<font size=2>|</font>";
var defaultMsgBox = "Note: The information here may not be current; please confirm dates and times.<p>";
var $a = new Date();
var FirstMonth = GetFullYear($a) * 100 + 1;
var LastMonth = FirstMonth + 11;
var $b = new Array;
var $z = "|";
var $d = 0;
var $e = false;
var $f = new Array;
var $g = new Array;
function Event($h, $i, $j, $k, $l, $m, $n, $o, $p)
{
   this.description = $h;
   if($k)this.link = $k;
   if($l)
   {
      this.image = $l;
      if($m)this.width = $m;
      if($n)this.height = $n;
      if($o)this.align = $o;
      if($p)this.alt = $p;
   }
   this.layer = ($i ? $i : "default");
   if($j)
   {
      if(CheckFormat($j))this.format = $j;
   }
}
function DefineEvent(Date, $q, $r, Image, $s, $t)
{
   AddEvent(Date, $q, "", "", $r, Image, $s, $t, "", "");
}
function AddEvent(Date, $q, Layer, $u, $r, Image, $s, $t, $v, $w)
{
   var i;
   if( ! $g[Date])$g[Date] = new Array;
   i = $g[Date].length;
   $g[Date][i] = new Event($q, Layer, $u, $r, Image, $s, $t, $v, $w);
   $x = Math.floor(Date / 100);
   if($x < FirstMonth)FirstMonth = $x;
   if($x > LastMonth)LastMonth = $x;
   if(Layer && ! $b[Layer])DefineLayer(Layer);
}
;
function Layer($j, $y)
{
   if($j)
   {
      if($j.indexOf("|") > 0)
      {
         this.format = $j;
      }
      else
      {
         alert("Invalid Calendar Format String: " + $j);
      }
   }
   else
   {
      this.format = DefaultLayerFormat;
   }
   ;
   this.show = ($y == "false" ? "false" : "true");
}
;
function DefineLayer($z, $A, $B)
{
   $b[$z] = new Layer($A, $B);
   $d ++ ;
}
;
function arr()
{
   for(var n = 0; n < arr.arguments.length; n ++ )
   {
      this[n + 1] = arr.arguments[n];
   }
}
;
var $Z = new arr("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var $meses = new arr("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
var cookieName = "layerCalendar";
var $D, $E, $x, $F, $G, $H;
function Calendar()
{
   var $I, $J, yr, mo, dy, $K, yearmonth, $L, $M, $N;
   var $O = new arr("Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb");
   var thispage = window.location.pathname;
   var $P = "Put this FREE calendar script on your own site; see <a href=http://calendar.pikesys.com>calendar.pikesys.com</a>.<p>";
   AddMsgBox(0, defaultMsgBox);
   AddMsgBox(0, $P);
   $I = $a.getDate();
   $J = $a.getMonth() + 1;
   initCal($J);
   mo = $F;
   yr = $G;
   yearmonth = $H;
   getLayersVisible();
   $L = new Date($Z[mo] + " 1," + yr);
   $K = $L.getDay();
   $M = NumDaysIn(mo, yr);
   $Q = 1 + ($K + $M - 1) % 7;
   $R = $S = "&nbsp;";
   if(showNav)
   {
      if(yearmonth > FirstMonth)$R = '<a class="navlink" href="'+thispage+'?'+PrevYearMonth(yearmonth)+'">ver ' + $meses[PrevMonth(mo)] + '</a>';
      if(yearmonth < LastMonth)$S += '<a class="navlink" href="'+thispage+'?'+NextYearMonth(yearmonth)+'">ver ' + $meses[NextMonth(mo)] + '</a>';
   }
   ;
   parseFormat(MonthFormat);
   $x = "<TABLE id='agenda_tab'><TR BORDER=0 BGCOLOR=" + navColor + ">";
   $x += "<TD ALIGN=CENTER BGCOLOR=" + navColor + ">" + $R + "</TD>";
   $x += "<TD ALIGN=CENTER COLSPAN=5 >" + $D + $meses[mo] + " " + yr + $E;
   if(showAltDate)
   {
      parseFormat(AltMonthFormat);
      $T = getAltMonth(1, mo, yr, $M);
      $x += $D + ($T ? $T : "") + $E;
   }
   ;
   $x += "</TD><TD ALIGN=CENTER BGCOLOR=" + navColor + ">" + $S + "</TD></TR>";
   document.write($x);
   document.write("<TR BGCOLOR=" + navColor + ">");
   for(var i = 1; i <= 7; i ++ )
   {
      document.write("<TD ALIGN=CENTER WIDTH=14%><span style='font-size:14px;'>" + $O[i] + "</span></TD>");
   }
   ;
   dy = 1;
   document.write("</TR><TR>");
   while(dy <= $M)
   {
      for(var i = 1; i <= 7; i ++ )
      {
         if(dy == 1 && i <= $K)
         {
            if(i == 1)
            {
               if(showMini)
               {
                  document.write("<TD BGCOLOR=" + ColorBackground + ">");
                  MiniMonth(PrevYearMonth(yearmonth));
               }
               else
               {
                  document.write("<TD>&nbsp;");
               }
            }
            else if(showMsgBox && i == 2)
            {
               $U = $K - 1;
               document.write("<TD BGCOLOR=" + navColor + " COLSPAN=" + $U + ">&nbsp;");
               DoMsgBox(yearmonth, $U);
            }
            else if( ! showMsgBox)
            {
               document.write("<TD>&nbsp;");
            }
            ;
            document.write("</TD>");
         }
         else if(dy > $M)
         {
            if(i == 7)
            {
               if(showMini)
               {
                  document.write("<TD BGCOLOR=" + ColorBackground + ">");
                  MiniMonth(NextYearMonth(yearmonth));
               }
               else
               {
                  document.write("<TD>&nbsp;");
               }
            }
            else if(showMsgBox && i == ($Q + 1))
            {
               $U = 6 - $Q;
               document.write("<TD BGCOLOR=" + navColor + " COLSPAN=" + $U + ">&nbsp;");
               DoMsgBox(yearmonth, $U);
            }
            else if( ! showMsgBox)
            {
               document.write("<TD>&nbsp;");
            };
            document.write("</TD>");
         }
         else
         {
            document.write("<TD VALIGN=TOP class='ag_dia'>");
            ShowDate(yr, mo, dy, i, $J, $I);
            document.write("</TD>");
            dy ++ ;
         }
      }
      ;
      document.write("</TR>");
   }
   ;
   if(showNav)
   {
      $R = $S = "&nbsp;";
      if(yearmonth > FirstMonth)$R = '<a class="navlink" href="'+thispage+'?'+PrevYearMonth(yearmonth)+'">ver ' + $meses[PrevMonth(mo)] + '</a>';
      if(yearmonth < LastMonth)$S += '<a class="navlink" href="'+thispage+'?'+NextYearMonth(yearmonth)+'">ver ' + $meses[NextMonth(mo)] + '</a>';
      $x = "<TR BGCOLOR=" + navColor + "><TD ALIGN=CENTER BGCOLOR=" + navColor + ">" + $R + "</TD>";
      $x += "<TD colspan=5 align=center valign=middle><FORM>";
      if(ExportPage)$x += '<a class="navlink" href="'+ExportPage+'?'+yearmonth+'">Export Events Displayed</a>&nbsp;&nbsp;|&nbsp;&nbsp;';
      $x += 'Ir al mes:&nbsp;&nbsp;';
      document.write($x);
      BuildSelectionList(yearmonth, thispage);
      if(PrintPage)document.write('&nbsp;&nbsp;|&nbsp;&nbsp;<a class="navlink" href="'+PrintPage+'?'+yearmonth+'">Print-friendly</a>');
      $x = "</FORM></TD><TD ALIGN=CENTER BGCOLOR=" + navColor + ">" + $S + "</TD>";
      document.write($x + "</TR>");
      if($d > 1)
      {
         document.write("<TR BGCOLOR=" + navColor + "><TD colspan=7 align=center>");
         ChooseLayers(yearmonth, thispage);
         document.write("</TD></TR>");
      }
   }
   ;
   document.write("</TABLE>");
}
;
function ShowDate(yr, mo, dy, $V, $W, $X)
{
   var $Y, $Z, $x, event;
   $x = "<TABLE class='agenda_dia'><TR VALIGN=TOP><TD ALIGN=LEFT WIDTH=10%>";
   $x += "<FONT SIZE=" + DateFontSize;
   $Z = false;
   if((mo == $W) && (dy == $X))
   {
      $x += " COLOR=" + ColorToday;
      $Z = true;
   }
   else if($V == SpecialDay)
   {
      $x += " COLOR=" + ColorSpecialDay;
      $Z = true;
   }
   ;
   $Y = (((yr * 100) + mo) * 100) + dy;
   if($g[$Y])
   {
      if( ! $Z)$x += " COLOR=" + ColorEvent;
   }
   ;
   $x += "><B>" + dy + (dy < 10 ? "&nbsp;" : "") + "&nbsp;</B></FONT></TD>";
   document.write($x);
   if(showAltDate)
   {
      $00 = getAltDate(dy, mo, yr);
      parseFormat(AltDateFormat);
      document.write("<TD ALIGN=RIGHT>" + $D + $00 + $E + "</TD>");
   }
   ;
   document.write("</TR></TABLE>");
   if(showAltHoly)
   {
      $x = getAltHoly(dy, mo, yr);
      if($x)
      {
         parseFormat(AltHolyFormat);
         document.write($D + $x + $E + "<BR>");
      }
   }
   ;
   if(showHolidays)
   {
      $x = holidays(dy, mo, yr);
      if($x)
      {
         parseFormat(HolidayFormat);
         document.write($D + $x + $E + "<BR>");
      }
   }
   ;
   $01 = 0;
   for(j in $g[$Y])
   {
      ev = $g[$Y][j];
      $x = "";
      if($b[ev.layer].show == "true")
      {
         $x += (j > 0 ? "<br>" : "");
         if(ev.image && showImages)
         {
            if(ev.align)
            {
               $o = ev.align;
            }
            else if(altAlign && $01 > 0)
            {
               $o = ($02 == "left" ? "right" : "left");
            }
            else
            {
               $o = imageAlign;
            }
            ;
            $x += '<img src="'+ev.image+(ev.width?'"  width="'+ev.width*imageScale/100:'')+(ev.height?'" height="'+ev.height*imageScale/100:'')+(ev.alt?'" alt="'+ev.alt:'')+'" align="'+$o+'" valign="top">';
            $02 = $o;
            $01 ++ ;
         }
         ;
         $j = "";
         if(ev.format == "layer")
         {
            $j = $b[ev.layer].format;
         }
         else if(ev.format == "custom")
         {
            $j = "";
         }
         else if(ev.format)
         {
            if(CheckFormat(ev.format))$j = ev.format;
         }
         else if(DefaultFormat == "layer")
         {
            $j = $b[ev.layer].format;
         }
         ;
         parseFormat($j);
		 if(ev.image == undefined)
         {
           ev.image = "";
         }
		 /*if(ev.link == "" || ev.link == null || ev.link == "<p></p>" || ev.link == "<p><br /></p>" || ev.link == "<p><br></p>" || ev.link == undefined )
         {
           
		   cad1="";
		   cad2="";
         }*/
		 
		var cad1="<a  href=\"javascript:;\" onclick=\"showtrail3(326,352,'','"+ ev.image + "','" +ev.description +"','" + ev.link + "','det');\">"; 
		var cad2="</a>";
		
		 /*if(ev.link == "" || ev.link == null || ev.link == "<p></p>" || ev.link == "<p><br /></p>" || ev.link == "<p><br></p>" || ev.link == undefined )*/
		 if( ev.link == "<p></p>" )
         {
           
		   cad1="";
		   cad2="";
         }
$x += $D + (ev.link && showLinks ? cad1 + ev.description + cad2 : ev.description) + $E + "<br>";
		 
		
	/*
		$x += $D + (ev.link && showLinks ? "<a  href=\"javascript:;\" onclick=\"showtrail3(326,352,'','"+ ev.image + "','" +ev.description +"','" + ev.link + "','det');\">" + ev.description + "</a>" : ev.description) + $E + "<br>";
				*/																			  
      }
      else
      {
      }
      ;
      document.write("<FONT SIZE=1>" + $x + "</FONT>");
   }
}
;
function exportCal()
{
   var $I, $J, yr, mo, dy, $K, yearmonth, $M;
   $I = $a.getDate();
   $J = $a.getMonth() + 1;
   initCal($J);
   mo = $F;
   yr = $G;
   yearmonth = $H;
   getLayersVisible();
   $M = NumDaysIn(mo, yr);
   $x = "<textarea NAME=\"txt\"  ROWS=20 COLS=75 WRAP=VIRTUAL>";
   $x += '"Subject","Start Date","Start Time","End Date","End Time","All day event","Description","Show time as","Location"\n';
   document.write($x);
   for(dy = 1; dy <= $M; dy ++ )
   {
      $Y = (((yr * 100) + mo) * 100) + dy;
      $03 = mo + "/" + dy + "/" + yr;
      for(j in $g[$Y])
      {
         ev = $g[$Y][j];
         if($b[ev.layer].show == "true")
         {
            $x = qw(ev.description) + "," + qw($03) + ",,,," + qw("true") + ",," + qw("3") + "," + qw("CalendarScript");
            if(ev.description)document.write($x + "\n");
         }
         else
         {
         }
      }
   }
   ;
   document.write("</textarea>");
}
;
function getLayersVisible()
{
   $04 = cookieName + "|";
   $05 = unescape(document.cookie);
   $06 = $05.indexOf($04);
   if($06 >= 0)
   {
      $06 += $04.length;
      $07 = $05.indexOf(";");
      if($07 == - 1)$07 = $05.length;
      var $08 = $05.substring($06, $07).split("|");
      for(i = 0; i < $08.length; i ++ )
      {
         $07 = $08[i].indexOf("=");
         name = $08[i].substring(0, $07);
         $09 = $08[i].substring($07 + 1, $08[i].length);
         if($b[name])$b[name].show = $09;
      }
   }
}
;
function initCal($J)
{
   if( ! $b["default"])DefineLayer("default", DefaultLayerFormat);
   mo = $J;
   yr = GetFullYear($a);
   yearmonth = (yr * 100) + mo;
   if(location.search.length > 1)
   {
      yearmonth = parseInt(location.search.substring(1, location.search.length));
      if(("" + yearmonth).length == 6)
      {
         mo = yearmonth % 100;
         yr = (yearmonth - mo) / 100;
      }
   }
   if(yearmonth < FirstMonth)
   {
      mo = FirstMonth % 100;
      yr = (FirstMonth - mo) / 100;
      yearmonth = FirstMonth;
   }
   ;
   if(yearmonth > LastMonth)
   {
      mo = LastMonth % 100;
      yr = (LastMonth - mo) / 100;
      yearmonth = LastMonth;
   }
   $F = mo;
   $G = yr;
   $H = yearmonth;
}
function qw($0a)
{
   return "&quot;" + $0a + "&quot;";
}
function MiniMonth(yearmonth)
{
   var $L, $K, $M, $0b;
   var $0z = new arr("S", "M", "T", "W", "T", "F", "S");
   mo = yearmonth % 100;
   yr = (yearmonth - mo) / 100;
   $L = new Date($Z[mo] + " 1," + yr);
   $K = $L.getDay();
   $M = NumDaysIn(mo, yr);
   document.write("<b><tt><Font Size=2><div align=center>&nbsp;" + $meses[mo] + "</div></font>");
   $0b = "<font size=1>&nbsp;<u>";
   for(d in $0z)
   {
      $0b += "&nbsp;" + $0z[d] + "&nbsp;";
   }
   ;
   document.write($0b, "</u>");
   dy = 1;
   while(dy <= $M)
   {
      $0b = "<br>";
      for(var i = 1; i <= 7; i ++ )
      {
         if(dy == 1 && i <= $K)
         {
            $0b += "&nbsp;&nbsp;&nbsp;";
         }
         else if(dy > $M)
         {
            break;
         }
         else
         {
            $0b += "&nbsp;" + (dy < 10 ? "&nbsp;" : "") + dy;
            dy ++ ;
         }
      }
      ;
      document.write($0b);
   }
   ;
   document.write("</font></tt></b>");
}
;
function NumDaysIn(mo, yr)
{
   if(mo == 4 || mo == 6 || mo == 9 || mo == 11)return 30;
   else if((mo == 2) && LeapYear(yr))return 29;
   else if(mo == 2)return 28;
   else return 31;
}
;
function LeapYear(yr)
{
   return((yr % 4 == 0 && yr % 100 != 0) || yr % 400 == 0 ? true : false);
}
;
function GetFullYear(d)
{
   var yr = d.getYear();
   return(yr < 1000 ? yr + 1900 : yr);
}
;
function PrevMonth($0d)
{
   return($0d == 1 ? 12 : $0d - 1);
}
;
function NextMonth($0d)
{
   return($0d == 12 ? 1 : $0d + 1);
}
;
function PrevYearMonth($0e)
{
   return($0e % 100 == 1 ? $0e - 100 + 11 : $0e - 1);
  
}
;
function NextYearMonth($0e)
{
   return($0e % 100 == 12 ? $0e - 11 + 100 : $0e + 1);
}
;
function JumpTo($0f, thispage)
{
   var $0g, $0h;
   $0g = $0f.selectedIndex;
   $0h = $0f.form.jumpmonth[$0g].value; document.location = thispage + "?" + $0h;
}
;
function BuildSelectionList($0i, thispage)
{
   var mo, yr, yearmonth;
   yearmonth = FirstMonth;
   $x = "<select name=\"jumpmonth\" size=1 onchange=\"JumpTo(this, '" + thispage + "')\">";
   while(yearmonth <= LastMonth)
   {
      mo = yearmonth % 100;
      yr = (yearmonth - mo) / 100;
      $0j = (yearmonth == $0i ? " selected" : "");
      $x += "<option value=" + yearmonth + $0j + ">" + $meses[mo] + " " + yr;
      yearmonth = NextYearMonth(yearmonth);
   }
   document.write($x + "</select>");
}
function DoMsgBox(yearmonth, $U)
{
   if($f[yearmonth])
   {
      for(j in $f[yearmonth])
      {
         $0k = $f[yearmonth][j];
         if( ! $0k.shown)
         {
            if( ! $0k.minspan || $0k.minspan <= $U)
            {
               $x = "<table border=2 bgcolor=" + msgBoxColor + " align=center>";
               $x += "<TR><TD>" + $0k.message + "</TD></TR></table>";
               document.write($x);
               $0k.shown = true;
               return;
            }
         }
      }
   }
   if($f[0])
   {
      for(j in $f[0])
      {
         $0k = $f[0][j];
         if( ! $0k.shown)
         {
            if( ! $0k.minspan || $0k.minspan <= $U)
            {
               $x = "<table border=2 bgcolor=" + msgBoxColor + " align=center>";
               $x += "<TR><TD>" + $0k.message + "</TD></TR></table>";
               document.write($x);
               $0k.shown = true;
               return;
            }
         }
      }
   }
}
function escramVal(j, k)
{
   var a, b, c, d, e;
   a = '<a href=\"mai';
   c = '\">';
   a += 'lto:';
   b = j + '@';
   e = '</a>';
   b += k;
   d = b;
   return(a + b + c + d + e);
}
function parseFormat($j)
{
   $D = $E = "";
   if($j)
   {
      var $07 = $j.indexOf("|");
      if($07 > 0)
      {
         $D = $j.substring(0, $07);
         $E = $j.substring(1 + $07, $j.length);
      }
   }
}
function CheckFormat(String)
{
   var $0l;
   $0l = (String == "layer" || String == "custom" || String.indexOf("|") > 0);
   if( ! $0l)alert("Invalid Calendar Format String: " + String);
   return $0l;
}
function MsgBox($0m, $0n, $0o)
{
   this.message = $0m;
   this.minspan = ($0n ? $0n : 1);
   if($0o)this.maxspan = $0o;
}
function AddMsgBox(yearmonth, $0m, $0n, $0o)
{
   var i;
   if( ! $f[yearmonth])$f[yearmonth] = new Array;
   i = $f[yearmonth].length;
   $f[yearmonth][i] = new MsgBox($0m, $0n, $0o);
}
function ChooseLayers(yearmonth, thispage)
{
   var i, $0p;
   $x = '<form name="layerform"><b>Filter Events:</b>&nbsp;'; for(i in $b)
   {
      if(i != "default")
      {
         $0p = ($b[i].show == "true" ? " checked" : "");
         parseFormat($b[i].format); $x += $D + '<input type="checkbox" name="'+i+'" value="'+i+'"' + $0p + ' onClick="ChangeLayer(\''+i+'\')">' + i + "&nbsp;" + $E;
      }
   }
   $x += '&nbsp;<input type="button" name="ApplyChanges" value="Apply Changes"' + 'onClick="ApplyLayerChange(\'' + thispage + '\',\'' + yearmonth + '\')">';
   document.write($x + "</form>");
}
function ChangeLayer($i)
{
   $e = true;
   $b[$i].show = document.layerform[$i].checked;
}
function ApplyLayerChange(thispage, yearmonth)
{
   $e = false;
   $05 = cookieName;
   for($i in $b)
   {
      if($i != "default")
      {
         $05 += "|" + $i + "=" + $b[$i].show;
      }
   }
   document.cookie = escape($05);
   document.location = thispage + (yearmonth ? "?" + yearmonth : "");
}



