// JavaScript Document

var joy = {};

joy.headers = {
    "SEASON" : "Upcoming Camp Seasons",
    "VOLUNTEER" : "Volunteer Opportunities",
    "TRAINING" : "Upcoming Counselor Trainings",
    "JCTRAINING" : "Upcoming JC Trainings"
}

joy.printSchedule = function(pageType, target) {
    var xmlFile = "schedule.xml";
	var pageType = pageType.toLowerCase() || "standard";
    var xslFile = "xml/" + pageType + ".xsl";
	joy.displayResult(xmlFile, xslFile, target);
	/*if (window.XMLHttpRequest)
      {
      xhttp=new XMLHttpRequest();
      }
    else // Internet Explorer 5/6
      {
      xhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xhttp.open("GET",xmlFile,false);
    xhttp.send("");
    xmlDoc=xhttp.responseXML; 
    
    var outStr = "";
    if (pageType == "standard") {
        outStr = joy.getStandardText(xmlDoc);
    } else if (pageType == "full") {
        var nodeNameArray = ["SEASON","VOLUNTEER","TRAINING","JCTRAINING"];
        for (var h=0; h<nodeNameArray.length; h++) {
            var nodeList = xmlDoc.selectNodes(".//EVENT[@type='"+nodeNameArray[h]+"']");
            for (var i=0; i<nodeList.length; i++)
                outStr += joy.getFullText(nodeList[i], (i == 0) ? true : false);
        }
    } else if (pageType == "support") {
        outStr = joy.getSupportText(xmlDoc);
    } else if (pageType == "jctraining") {
        outStr = joy.getJcTrainingText(xmlDoc);
    } else if (pageType == "counselortraining") {
        outStr = joy.getCounselorTrainingText(xmlDoc);
    }
    return outStr;*/
}

joy.getStandardText = function(node) {
    var outStr = "";
    outStr += ("<h2>Upcoming Camp Schedule</h2>");
    outStr += "<ul type='disc'>";
    var y=node.getElementsByTagName(".//EVENT[@type='SESSION']");
    for (j=0;j<y.length;j++) {
        var val = y[0].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue;
        outStr += "<li><strong>"+val+"</strong></li>";
        outStr += "<ul type='disc'>";
        val = y[0].getElementsByTagName("DATE")[0].childNodes[0].nodeValue;
        outStr += "<li>"+val+"</li>";
        outStr += "</ul>";
    }
    outStr += "</ul>";
    return outStr;
}

joy.getSupportText = function(xmlDoc) {
    var outStr = "";
    outStr += ("<h2>Upcoming Support Events</h2>");
    outStr += ("<ul type='disc'>");
    var x=xmlDoc.getElementsByTagName(".//EVENT[@type='VOLUNTEER']");
    for (i=0;i<x.length;i++) {
        var node = x[i].getElementsByTagName("TITLE")[0];
        outStr += "<li><strong>"+node.childNodes[0].nodeValue+"</strong></li>";
        outStr += "<ul type='disc'>";
        node = x[i].getElementsByTagName("DATE")[0];
        outStr += "<li>Date: "+node.childNodes[0].nodeValue+"</li>";
        node = x[i].getElementsByTagName("TIME")[0];
        outStr += "<li>Time: "+node.childNodes[0].nodeValue+"</li>";
        outStr += "</ul>";
      }
    outStr += ("</ul>");
    return outStr;
}

joy.getJcTrainingText = function(xmlDoc) {
    var outStr = "";
    var nodeNames = ["DATE","TITLE","TIME","LOCATION","ADDRESS","DESCRIPTION"];
    outStr += ("<h2>Upcoming Junior Counselor Trainings</h2>");
    outStr += ("<ul type='disc'>");
    var x=xmlDoc.selectNodes(".//EVENT[@type='JCTRAINING']");
    for (i=0;i<x.length;i++) {
        var links = x[i].getElementsByTagName("TITLE");
        if (links.length > 0) {
            var node = links[0];
            outStr += "<li><strong>"+node.childNodes[0].nodeValue+"</strong></li>";
            outStr += "<ul type='disc'>";
            for (var j = 0; j<nodeNames.length; j++) {
                links = x[i].getElementsByTagName(nodeNames[j]);
                if (links.length > 0) {
                    node = links[0];
                    outStr += "<li>" + joy.capitolize(node.nodeName) + ": " + node.childNodes[0].nodeValue + "</li>";
                }
            }
            /*links = x[i].getElementsByTagName("LINK");
            if (links.length > 0) {
                node = links[0];
                outStr += "<li><a href='../test/js/" + node.childNodes[0].nodeValue + "'>View details</a></li>";
            }*/
            outStr += "</ul>";
        }
    }
    outStr += ("</ul>");
    return outStr;
}

joy.getCounselorTrainingText = function(xmlDoc) {
    var outStr = "";
    var nodeNames = ["DATE","TITLE","TIME","LOCATION","ADDRESS","DESCRIPTION"];
    outStr += ("<h2>Upcoming Counselor Trainings</h2>");
    outStr += ("<ul type='disc'>");
    var x=xmlDoc.selectNodes(".//EVENT[@type='TRAINING']");
    for (i=0;i<x.length;i++) {
        var links = x[i].getElementsByTagName("TITLE");
        if (links.length > 0) {
            var node = links[0];
            outStr += "<li><strong>"+node.childNodes[0].nodeValue+"</strong></li>";
            outStr += "<ul type='disc'>";
            for (var j = 0; j<nodeNames.length; j++) {
                links = x[i].getElementsByTagName(nodeNames[j]);
                if (links.length > 0) {
                    node = links[0];
                    outStr += "<li>" + joy.capitolize(node.nodeName) + ": " + node.childNodes[0].nodeValue + "</li>";
                }
            }
            /*links = x[i].getElementsByTagName("LINK");
            if (links.length > 0) {
                node = links[0];
                outStr += "<li><a href='../test/js/" + node.childNodes[0].nodeValue + "'>View details</a></li>";
            }*/
            outStr += "</ul>";
        }
      }
    outStr += ("</ul>");
    return outStr;
}

joy.getFullText = function(newXmlNode, firstLevel) {
    var xmlNode = newXmlNode;
    var firstLevel = (typeof firstLevel == "boolean") ? firstLevel : false;
    var outStr = "";
    //check node type
    switch (xmlNode.nodeType) {
        //element
        case 1:
            outStr += "<div style='margin-top:10px;margin-left:15px'>";
            if (firstLevel) {
                outStr += "<hr />";
                outStr += "<h3>" + joy.headers[xmlNode.nodeName] + "</h3>";
            } else if (xmlNode.childNodes[0].nodeType == 1) {
                outStr += "<hr />";
            } else {
                outStr += "<p><strong>" + joy.capitolize(xmlNode.nodeName) + "</strong>";
            }
            break;
        //attribute
        case 5:
            outStr += "<h3>Attribute</h3>";
            break;
        //text node
        case 3: 
            outStr += ": " + joy.capitolize(xmlNode.nodeValue) + "</p>";
            break;
    }
    if (xmlNode.hasChildNodes) {
        for (var i=0; i < xmlNode.childNodes.length; i++) {
            outStr += joy.getFullText(xmlNode.childNodes[i]);
        }
        outStr += "</div>";
    }
    return outStr;
}

joy.capitolize = function(str) {
    return str.slice(0,1).toUpperCase() + str.slice(1).toLowerCase();    
}

joy.isInFuture = function(dateStr) {
    var dateArray = dateStr.split("/");
    var endDate = new Date();
    endDate.setFullYear(dateArray[0], dateArray[1]-1, dateArray[2]);
    var now = new Date();
    return (endDate > now);
}

joy.loadXMLDoc = function(dname) {
    if (window.XMLHttpRequest) {
      xhttp=new XMLHttpRequest();
    } else {
      xhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET",dname,false);
    xhttp.send("");
    return xhttp.responseXML;
}

joy.displayResult = function(xmlPath, xslPath, target) {
    xml=joy.loadXMLDoc(xmlPath);
    xsl=joy.loadXMLDoc(xslPath);
    // code for IE
    if (window.ActiveXObject) {
      ex=xml.transformNode(xsl);
      document.getElementById(target).innerHTML = ex;
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument) {
      xsltProcessor=new XSLTProcessor();
      xsltProcessor.importStylesheet(xsl);
      resultDocument = xsltProcessor.transformToFragment(xml,document);
      document.getElementById(target).appendChild(resultDocument);
    }
}

joy.checkPassword = function() {
	return (prompt("Enter Admin password:","") == "c4mpj0y");
}
