﻿// JScript File
//req: Core.js:addOnload()
//req: Core.js:GetXmlHttpObject()
//req: Core.js:getElementsByClass()

// desc: scans for tags with action:showschoolzones and listingid:999999 in class tag.  If found, gets school zones for that listing and populates using a "schooltype : schoolname" format.

addOnload(populateSchoolZones);


function populateSchoolZones() {
	var elements = getElementsByClass("action:showschoolzones","listingid:");
	//alert(elements.length);
	if(elements.length > 0) {
		appendLoadingStatus(elements,"Loading school zones.  Please wait...");
		//getSchoolZonesForElements(elements);
	    
	    for(var i=0;i<elements.length;i++) {
            getSchoolZonesForElements(new Array(elements[i]));
        }
	}
}

function appendLoadingStatus(nodes, statustext) {
    if ( statustext == "" || statustext == null )
        statustext = "Loading...";
        
    for(var i=0;i<nodes.length;i++) {
        if(getElementsByClass("ajaxStatus",nodes[i]).length == 0) {
            //alert("here");
            var div = document.createElement("div");
            div.className = "ajaxStatus";
            nodes[i].appendChild(div);
        }
        //alert(nodes[i].className.match(/\s*listingid:\d+/i)[0].match(/\d+/)[0]);
        getElementsByClass("ajaxStatus",nodes[i])[0].appendChild(document.createTextNode(statustext));
    }
}

function removeLoadingStatus(nodes) {
    for(var i=0;i<nodes.length;i++) {
        //alert(nodes[i].innerHTML);
        if(getElementsByClass("ajaxStatus",nodes[i]).length > 0) {
            //alert("removing");
            var ele = getElementsByClass("ajaxStatus",nodes[i])[0];
            ele.parentNode.removeChild(ele);
        }
    }
}

function populateSchoolZoneElements(elements) {
	var x = xmlDoc.getElementsByTagName("listing");
	//alert(xmlDoc.documentElement.tagName)
	//alert(x.length + " listing nodes");
    for (j=0;j<x.length;j++)
    {
		//alert(x[j].getAttribute("id"));
		//alert(x[j].childNodes.length + " school nodes");
		for(var k=0;k<x[j].childNodes.length;k++) {
			if (x[j].childNodes[k].nodeType != 1) continue;
			var container = document.createElement('div');
			var theData = document.createTextNode(x[j].childNodes[k].nodeName + " school : " + x[j].childNodes[k].firstChild.nodeValue);
			container.appendChild(theData);
			elements[j].appendChild(container);
		}
		
		removeLoadingStatus(new Array(elements[j]));
    }
}

function getSchoolZonesForElements(elements) {
			//alert("need school zone for:" + ListingID);
	
		
		var listingids = new Array();
		
		
		for(var i=0;i<elements.length;i++)
			listingids[listingids.length] = elements[i].className.match(/\s*listingid:\d+/i)[0].match(/\d+/)[0];

		
		//alert("loading school search");
		var url = "/idx/Ajax.aspx?action=getschoolzones&ids=" + listingids.join(",");
        makeSchoolZoneRequest(url);
}





function makeSchoolZoneRequest(url) {
    var xhrSchools = false;
	if (window.XMLHttpRequest) {
		xhrSchools = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
            try {
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e2) {
                    xhr = false;    
                }
            }
		}
	}

	if (xhrSchools) {
	    //alert("xml object created");
		xhrSchools.onreadystatechange = function() {
	        if (xhrSchools.readyState == 4) {
	            //alert("readystate = 4");
	            try {
		            if (xhrSchools.status == 200) {
		                //alert("status = 200");
		                //alert(xhrSchools.responseXML.contentType);
		                if(xhrSchools.responseXML) {
		                    //alert("is xml")
		                    var content = document.createElement("div");
		                    var data = xhrSchools.responseXML.getElementsByTagName("listing");
		                    if(data.length > 0) {
		                        //alert("data.length > 0");
		                        var oNode = getElementsByClass("action:showschoolzones","listingid:" + data[0].getAttribute("id"))[0];
		                        removeLoadingStatus(new Array(oNode));
	                            if(data[0].getElementsByTagName("elementary").length > 0) {
	                                var div = document.createElement("div");
	                                div.appendChild(document.createTextNode("Elementary school : " + getXmlNodeText(data[0].getElementsByTagName("elementary")[0])));
	                                oNode.appendChild(div);   
	                             }   
            		                  
	                            if(data[0].getElementsByTagName("intermediate").length > 0) {
	                                var div = document.createElement("div");
	                                div.appendChild(document.createTextNode("Intermediate school : " + getXmlNodeText(data[0].getElementsByTagName("intermediate")[0])));
	                                oNode.appendChild(div);   
	                             }   
            		                  
	                            if(data[0].getElementsByTagName("middle").length > 0) {
	                                var div = document.createElement("div");
	                                div.appendChild(document.createTextNode("Middle school : " + getXmlNodeText(data[0].getElementsByTagName("middle")[0])));
	                                oNode.appendChild(div);   
	                             }   
            		                  
	                            if(data[0].getElementsByTagName("high").length > 0) {
	                                var div = document.createElement("div");
	                                div.appendChild(document.createTextNode("High school : " + getXmlNodeText(data[0].getElementsByTagName("high")[0])));
	                                oNode.appendChild(div);   
	                             }   
	                             if(data[0].getElementsByTagName("high2008").length > 0) {
	                                var div = document.createElement("div");
	                                div.appendChild(document.createTextNode("Proposed 2008 high school : " + getXmlNodeText(data[0].getElementsByTagName("high2008")[0])));
	                                oNode.appendChild(div);   
	                             }   
            		                  
		                    }
		                }
		                else {
		                    var outMsg = xhrSchools.responseText;
		                }
			            //var outMsg = (xhrSchools.responseXML && xhrSchools.responseXML.contentType=="text/xml") ? xhrSchools.responseXML.getElementsByTagName("listing")[0].getElementsByTagName("high")[0].textContent : xhrSchools.responseText;
		            }
		            else {
			            var outMsg = "There was a problem with the request " + xhrSchools.status;
		            }
		            //alert(outMsg);
		            //document.getElementById("updateArea").innerHTML = outMsg;
		        }
		        catch(e) {
		        }
	        }
		};
		xhrSchools.open("GET", url, true);
		xhrSchools.send(null);
	}
	else {
		//document.getElementById("updateArea").innerHTML = "Sorry, but I couldn't create an XMLHttpRequest";
	}
}

function getXmlNodeText(node) {
    if(node.textContent) {
        return node.textContent;
    } else if(node.text) {
        return node.text;
    } else {
        return false;
    }
}
