addEvent(window, "load", cal_init);

var onImgArray = new Array();
var offImgArray = new Array();

function addEvent(element, eventType, fn, useCapture) {

    if (element.addEventListener){
        element.addEventListener(eventType, fn, useCapture);
        return true;
    } else if (element.attachEvent){
        var r = element.attachEvent("on"+eventType, fn);
        return r;
    }
}

function cal_init() {
	testDate = getParameter('date');
    if (testDate == null || testDate == "") cal_init_by_date(new Date());
	else {
		cal_init_by_date(new Date(testDate));
	}
}

function cal_init_by_date(today) {

    // Determine year and Advent start date
    // Month is 0-11
    var nov = 10;
    var year = (today.getMonth() < nov? today.getFullYear()-1: today.getFullYear());
    // Advent is the first Sunday after November 27
    var nov27 = new Date(year, nov, 27 );
    var xmas  = new Date(year, 11, 25 );
    // getDay() returns the day of the week, 0 - 6
    var nov27offset = 7 - nov27.getDay();
    var adventStart = new Date(nov27.getTime());
    adventStart.setDate(nov27.getDate() + nov27offset);
    var dayCount = Math.round((xmas - adventStart)/(1000 * 60 * 60 * 24));

    setTextById ('header',"<h2><span>The St. Margaret Mary Advent Calendar<br /><br />for " + today.toLocaleDateString()+"</span></h2>");

    var i = 0;
    var dayPtr = adventStart;
    for (i = 0; i <= dayCount; i++) {
        var divElem = getElemById('day'+i);
        var chillens = (divElem.childNodes)?divElem.childNodes:divElem.NodeList;
        var mm = dayPtr.getDate();
        mm = mm + "";
        if (mm.length == 1) mm = '0' + mm;
        var mmyy = (dayPtr.getMonth()+1).toString() + mm;
        var monthName = (dayPtr.getMonth()==10)?"November":"December";
        var j = 0;
        var spanChild = null;
        var anchorChild = null;
        var imgChild = null;
        var j = 0;
        for (j = 0; j < chillens.length; j++) {
            if (chillens[j].nodeName == 'SPAN') spanChild = chillens[j];
            if (chillens[j].nodeName == 'A') {
                anchorChild = chillens[j];
                var gchillens = (anchorChild.childNodes)?anchorChild.childNodes:anchorChild.NodeList;
                for (k = 0; k < gchillens.length; k++) {
                    if (gchillens[k].nodeName == "IMG") imgChild = gchillens[k];
                }
            }
        }
        spanChild.innerHTML = monthName + " " + dayPtr.getDate();
        
        imgChild.alt = 'Day ' + i;
		
        if (today.getTime() >= dayPtr.getTime()) {
            addEvent(imgChild,"mouseover",mouseIn);
            addEvent(imgChild,"mouseout",mouseOut);
            var a=new Image(75,108); a.src=imgChild.src;
            offImgArray['day'+i]=a;
            a=new Image(75,108); a.src="images/Doors-annimation-" + mmyy + ".gif";
            onImgArray['day'+i]=a;
            anchorChild.href= anchorChild.href.replace('no_peeking',mmyy);
        }
        dayPtr.setDate(dayPtr.getDate() + 1); 
        divElem.style.display = "block";
    }
    getElemById('calendar').style.visibility = "visible";
}

function mouseIn(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt) {
		var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		if (elem) {
			elem.src = onImgArray[elem.parentNode.parentNode.id].src; 
		}
	}
}

function mouseOut(evt) {
	evt = (evt) ? evt : ((event) ? event : null);
	if (evt) {
		var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		if (elem) {
			elem.src = offImgArray[elem.parentNode.parentNode.id].src;
		}
	}
}

function getElemById (idPtr) {

    if (document.getElementById(idPtr)) {
        return document.getElementById(idPtr);
    }
    if (document.getElementsByTagName(idPtr)) {
        return document.getElementsByTagName(idToSet)[0];
    }
    if (document.all.tags(idPtr)) {
        return document.all.tags(idPtr)[0];
    }
    return null;
}

function setTextById (idToSet,newTitle) {

    if (document.getElementById(idToSet)) {
        document.getElementById(idToSet).innerHTML = newTitle;
    } else if (document.getElementsByTagName(idToSet)) {
        document.getElementsByTagName(idToSet)[0].innerHTML = newTitle;
    } else if (document.all.tags(idToSet)) {
        document.all.tags(idToSet)[0].innerHTML = newTitle;
    }
}


// setStyleById: given an element id, style property and
// value, apply the style.
// args:
// i - element id
// p - property
// v - value
//
function setStyleById(i, p, v) {
    var n = document.getElementById(i);
    n.style[p] = v;
    }

// setStyleByClass: given an element type and a class selector,
// style property and value, apply the style.
// args:
// t - type of tag to check for (e.g., SPAN)
// c - class name
// p - CSS property
// v - value
var ie = (document.all) ? true : false;
function setStyleByClass(t,c,p,v){
    var elements;
    if(t == '*') {
        // '*' not supported by IE/Win 5.5 and below
        elements = (ie) ? document.all : document.getElementsByTagName('*');
    } else {
        elements = document.getElementsByTagName(t);
    }
    for(var i = 0; i < elements.length; i++){
        var node = elements.item(i);
        for(var j = 0; j < node.attributes.length; j++) {
            if(node.attributes.item(j).nodeName == 'class') {
                if(node.attributes.item(j).nodeValue == c) {
                    eval('node.style.' + p + " = '" +v + "'");
                }
            }
        }
    }
}

function getParameter( parm )
{
  parm = parm.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+parm+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return unescape(results[1]).replace(/^\"/,"").replace(/\"$/,"")
}