

	function httpObj()
	{
		var xH;
		if(window.XMLHttpRequest)
		{
		   xH = new XMLHttpRequest();
		}
		else if (window.ActiveXObject)
		{
		   xH = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return xH;
	}
	
	function retDoc(str)
    {
        if (document.implementation && document.implementation.createDocument) // Mozilla
        {
            var XDoc = new DOMParser().parseFromString(str,'text/xml');
        }
        else if (window.ActiveXObject) // IE
        {
            var XDoc = new ActiveXObject("Microsoft.XMLDOM");
            XDoc.loadXML(str)
        }
        
        return XDoc;
    } 

	function sendX(serviceName,param,fnExecute)
	{
		httpX=httpObj();
		if (document.layers) {netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");}
		if (httpX)
		{
			h=document.location.href.substring(0,document.location.href.indexOf(8,"/"));
			jaxURL="/webserv/jaxport.asmx/"+serviceName
			httpX.onreadystatechange = fnExecute;		
			httpX.open("POST", jaxURL, true);
			httpX.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
			httpX.send(param);
		}
		else
		{
			alert("Error: Could not creat XML Transport Object.");
		}
	}
	
    var httpX=httpObj();

    
    function doDevilPost()
    {
        showHide("dvThankyou");
        
        //int siteid, string complaint, string video, int image, int ranktype, int rank, string url, string podcasturl, double Longitude, double Latitude)
        if (typeof siteid != "undefined") 
        {

            processXml = function()
            {
                if (httpX.readyState == 4)
                {
                    retXML = httpX.responseXML;
                    getDevilPosts(0, 0, siteid, 0);
                    
                }
            }
            var guid = readCookie("guid");
            if (document.getElementById("complaint").value.length < 1)
            {
                alert("You didn't write anything...try again?");
                return;
            }

            if (document.getElementById("complaint").value.length > 333)
            {
                alert("Too Long.  Erase a few characters and try again...");
                return;
            }
            
            
            sendX("DevilPost", "guid=" + guid + "&siteid=" + siteid + "&complaint=" + escape(document.getElementById("complaint").value) + "&video=" + document.getElementById("txVideo").value + "&image=-1&ranktype=5&rank=1&url=&podcasturl=&Longitude=0&Latitude=0", processXml);
            document.getElementById("complaint").value = "";
            document.getElementById("txVideo").value = "";
            //document.getElementById("togyoutube").style.display = "none";          
        }
    }

    function sortNumber(firstnum,secondnum)
    {
        return firstnum - secondnum;
    }


    function getDevilPosts(ptype, ptypeid, siteid, last)
    {
        var defaultTop = 10;
        posttype = ptype;
        processXml = function()
        {
            if (httpX.readyState == 4)
            {
                if (last == 0)
                {
                    document.getElementById("dvOutput").innerHTML = "";
                }

                var imageExtensions = new Array(".gif", ".png", ".jpg");
                retXML = httpX.responseXML;
                npns = retXML.getElementsByTagName("npn");
                var ids = new Array();
                gid("dvMore").style.display = (npns.length < defaultTop) ? "none" : "block";

                for (i = 0; i < npns.length; i++)
                {
                    var node = npns[i];
                    var review = node.getElementsByTagName("review")[0];
                    var revText = "";
                    var plainRevText = "";
                    if ((review != null) && (review.firstChild != null))
                    {
                        revText = review.firstChild.nodeValue;
                        plainRevText = revText;
                        var tmprev = revText.split(" ");
                        for (tr = 0; tr < tmprev.length; tr++)
                        {
                            if ((tmprev[tr].substring(0, 1) == "@") && (tmprev[tr].toLowerCase() != "@anonymous"))
                                tmprev[tr] = "@<a href='/" + tmprev[tr].substring(1) + "'>" + tmprev[tr].substring(1) + "</a>";
                        }
                        revText = tmprev.join(" ");
                    }
                    else
                        revText = "This user hasn't REALLY been in pain...";

                    var userid = parseInt(review.getAttribute("uid"));
                    var fave = parseInt(review.getAttribute("fave"));
                    var faveclass = (fave == 0) ? "dvFavorite" : "dvFavorite_set";
                    var usernamenode = node.getElementsByTagName("username");
                    var username = "Anonymous";
                    var imageextension;
                    if ((usernamenode != null) && (usernamenode[0] != null) && (usernamenode[0].firstChild))
                    {
                        username = usernamenode[0].firstChild.nodeValue;
                        avextension = parseInt(usernamenode[0].getAttribute("avimgex"));
                    }
                    var replaceIMG = "/image/devil/noprofile.gif";
                    if (avextension > -1)
                    {
                        replaceIMG = "/uimage/50/" + userid + imageExtensions[avextension];
                    }

                    var slug = node.getElementsByTagName("slug")[0];
                    var shortURL = node.getElementsByTagName("shortURL")[0];
                    var shortURLText="";
                    if ((shortURL != null) && (shortURL.firstChild != null) && (shortURL.firstChild.nodeValue != null))
                        shortURLText = shortURL.firstChild.nodeValue;
                    var slugUrl="";
                    if ((slug !=null) && (slug.firstChild!=null) && (slug.firstChild.nodeValue!=null))
                        slugUrl= "http://www." + currDomainName + ".com/shriek/" + slug.firstChild.nodeValue;
                    var tmprevTxt = plainRevText;
                    while (tmprevTxt.indexOf("&quot;") > -1)
                    {
                        tmprevTxt = tmprevTxt.replace("&quot;", "");
                    }
                    var twitterSlugUrl = escape(tmprevTxt.substring(0, 140 - (shortURLText.length + 1)) + " " + shortURLText);
                    //var user = (parseInt(review.getAttribute("uid")) == 0) ? "Anonymous" : "Not Anonymous";
                    var timestamp = review.getAttribute("created");
                    var rid = review.getAttribute("rid");
                    ids[ids.length] = rid;
                    var dv = escape(document.getElementById("dvOutputProto").innerHTML);
                    dv = dv.replace("CONTENT", revText).replace("LINKUSERNAME", (username.toLowerCase() != "anonymous") ? ("/" + username) : "javascript:alert('Alas, anonymous users have no profile.')").replace("AVUSERNAME", username).replace("NAME", username).replace("TIMESTAMP", timestamp).replace("AVPIC", replaceIMG).replace("FAVECLASS", faveclass).replace("FBSLUGURL", slugUrl).replace("TWITTERSLUGURL", twitterSlugUrl);

                    while (dv.indexOf("RIDPROTO") > -1)
                    {
                        dv = dv.replace("RIDPROTO", rid)
                    }


                    var video = node.getElementsByTagName("video");
                    if ((video != null) && (video[0] != null) && (video[0].firstChild != null) && (video[0].firstChild.nodeValue.indexOf("youtube") > -1))
                    {
                        dv = dv.replace("VIDEO", video[0].firstChild.nodeValue);
                        dv = dv.replace("VIDEOOBJ", getVideoObject(video[0].firstChild.nodeValue));
                    }
                    else
                    {
                        dv = dv.replace("dvVideoLaunch", "hide");
                        dv = dv.replace("VIDEOOBJ", "");
                    }



                    document.getElementById("dvOutput").innerHTML += unescape(dv);
                }
                lastid = ids.sort(sortNumber)[0] - 1;
            }
        }

        processUsers = function()
        {
            if (httpX.readyState == 4)
            {
                if (last == 0)
                {
                    document.getElementById("dvOutput").innerHTML = "";
                }
                
                var imageExtensions = new Array(".gif", ".png", ".jpg");
                retXML = httpX.responseXML;
                users = retXML.getElementsByTagName("user");
                var ids = new Array();

                for (i = 0; i < users.length; i++)
                {
                    var node = users[i];
                    var review = node.getElementsByTagName("review")[0];
                    var revText = "";
                    if ((review != null) && (review.firstChild != null))
                    {
                        revText = review.firstChild.nodeValue;
                        var tmprev = revText.split(" ");
                        for (tr = 0; tr < tmprev.length; tr++)
                        {
                            if ((tmprev[tr].substring(0, 1) == "@") && (tmprev[tr].toLowerCase() != "@anonymous"))
                                tmprev[tr] = "@<a href='/" + tmprev[tr].substring(1) + "'>" + tmprev[tr].substring(1) + "</a>";
                        }
                        revText = tmprev.join(" ");
                    }
                    else
                        revText = "This user hasn't REALLY been in pain...";

                    var uid = parseInt(node.getAttribute("uid"));
                    var timestamp = "Began following " + node.getAttribute("created");
                    var followsCurrent = parseInt(node.getAttribute("followsCurrent"));
                    var followclass = (followsCurrent == 0) ? "dvFollow" : "dvFollow_set";
                    var usernamenode = node.getElementsByTagName("username");
                    var username = "Anonymous";
                    var avextension;
                    if ((usernamenode != null) && (usernamenode[0] != null) && (usernamenode[0].firstChild))
                    {
                        username = usernamenode[0].firstChild.nodeValue;
                        avextension = parseInt(usernamenode[0].getAttribute("avimgex"));
                    }
                    var replaceIMG = "/image/devil/noprofile.gif";
                    if (avextension > -1)
                    {
                        replaceIMG = "/uimage/50/" + uid + imageExtensions[avextension];
                    }

                    //var user = (parseInt(review.getAttribute("uid")) == 0) ? "Anonymous" : "Not Anonymous";
                    var faveid = review.getAttribute("faveid");
                    ids[ids.length] = faveid;
                    var dv = escape(document.getElementById("dvUserProto").innerHTML);
                    dv = dv.replace("CONTENT", revText).replace("LINKUSERNAME", username).replace("AVUSERNAME", username).replace("NAME", username).replace("TIMESTAMP", timestamp).replace("AVPIC", replaceIMG).replace("FOLLOWCLASS", followclass);
                    while (dv.indexOf("UIDPROTO") > -1)
                    {
                        dv = dv.replace("UIDPROTO", uid)
                    }

                    document.getElementById("dvOutput").innerHTML += unescape(dv);
                }
                lastid = ids.sort(sortNumber)[0] - 1;
            }
        }
        var namecookie = readCookie("ai");
        if (namecookie == "undefined") namecookie = 0;
        if (ptype == 0)
            sendX("getTopNPN", "NPNID=" + siteid + "&cookie=" + namecookie + "&top=" + 10 + "&last=" + last, processXml);
        if (ptype == 1)
            sendX("getTopNPNByUser", "NPNID=" + siteid + "&cookie=" + namecookie + "&oUser=" + ptypeid + "&top=" + 10 + "&last=" + last, processXml);
        if (ptype == 2)
            sendX("getTopNPNFromFollowing", "NPNID=" + siteid + "&cookie=" + namecookie + "&top=" + 10 + "&last=" + last, processXml);
        if (ptype == 3)
            sendX("getFollowers", "cookie=" + namecookie + "&oUser=" + ptypeid + "&top=" + 10 + "&last=" + last, processUsers);
        if (ptype == 4)
            sendX("getFollowing", "cookie=" + namecookie + "&oUser=" + ptypeid + "&top=" + 10 + "&last=" + last, processUsers);  
        if (ptype == 5)
            sendX("getTopNPNToUser", "NPNID=" + siteid + "&cookie=" + namecookie + "&top=" + 10 + "&last=" + last, processXml);
        if (ptype == 6)
            sendX("getTopNPNUserFavorites", "NPNID=" + siteid + "&cookie=" + namecookie + "&top=" + 10 + "&last=" + last, processXml);       
        if (ptype == 7)
            sendX("getMessages", "NPNID=" + siteid + "&cookie=" + namecookie + "&top=" + 10 + "&last=" + last, processXml);        
    }

    function setDefaultTimeline(tl, obj)
    {
        processResponse = function()
        {
            if (httpX.readyState == 4)
            {
                if (obj.getAttribute("class") == "aTimelineLink2Default")
                    return;
                else
                {
                    retXML = httpX.responseXML;
                    node = retXML.getElementsByTagName("boolean")[0];
                    nodeval = node.firstChild.nodeValue;
                    if (nodeval == "true")
                    {
                        obj.setAttribute("class", "aTimelineLink2Default");
                        var altObj = (obj.getAttribute("id") == "aMainDefault") ? gid("aFollowerDefault") : gid("aMainDefault");
                        altObj.setAttribute("class", "aTimelineLink2SetDefault");
                    }
                }
            }
        }
        var namecookie = readCookie("ai");
        sendX("updateDefaultTimeline", "cookie=" + namecookie + "&defaultTimeline=" + (tl == 'f' ? 1 : 0), processResponse);
    }
    

	function dorate(rating,objid,objtype,uid,sid)
	{
	    var types=new Array("","a_","q_","r_","u_","c_");
		updatefield=function()
		{
		    if (httpX.readyState==4)
		    {
		        retXML=httpX.responseXML;
		        rateNode=retXML.getElementsByTagName("RATING")[0];  
		        good=rateNode.getAttribute("GOOD");
		        bad=rateNode.getAttribute("BAD");
                nodeid="cnt_" + types[objtype]+objid;
                dvNode=document.getElementById(nodeid);
                stylebold="class='bold'";
                dvNode.innerHTML="(" + good + ") <span " + ((good >= bad) ? stylebold : "") + ">cool</span> . <span " + ((good <= bad) ? stylebold : "") + ">lame</span> (" + bad + ")</div>";
		    }
		}
		sendX("Rating","rating="+rating+"&objectID="+objid+"&objectType="+objtype+"&userID="+uid+"&sessionID="+sid,updatefield);
    }

    function dorateGUID(rating, objid, objtype)
    {
        updatefield = function()
        {
            if (httpX.readyState == 4)
            {
                retXML = httpX.responseXML;
                rateNode = retXML.getElementsByTagName("RATING")[0];
                good = rateNode.getAttribute("GOOD");
                bad = rateNode.getAttribute("BAD");
                
                nodeid = "cnt_" + types[objtype] + objid;
                dvNode = document.getElementById(nodeid);
                stylebold = "class='bold'";
                dvNode.innerHTML = "(" + good + ") <span " + ((good >= bad) ? stylebold : "") + ">cool</span> . <span " + ((good <= bad) ? stylebold : "") + ">lame</span> (" + bad + ")</div>";
            }
        }
        var cookie = readCookie("ai");
        sendX("RatingGUID", "rating=" + rating + "&objectID=" + objid + "&objectType=" + objtype + "&cookie=" + cookie, updatefield);
    }

	function dofave(obj, objid, objtype)
	{
		updatefave=function()
		{
		    if (httpX.readyState==4)
		    {
		        retXML=httpX.responseXML;
		        rateNode=retXML.getElementsByTagName("FAVE")[0];  
		        isfv=rateNode.getAttribute("ISFAVE");
		        obj.innerHTML="<img src='/image/fave_" + ((isfv==1)?"on":"off") + ".png'>";
		        window.status="Favorite saved.";
		    }
		}
		var cookie = readCookie("ai");
		if (cookie != null)
		{
		    sendX("favoriteGuid", "objectID=" + objid + "&objectType=" + objtype + "&cookie=" + cookie, updatefave);
		}
		else
		{
		    alert("You must be logged in to add a favorite. If you've never registered, go ahead, we're not looking.");
		}	    
	}

	function dofaveGUID(obj,objid, objtype)
	{
	    updatefave = function()
	    {
	        if (httpX.readyState == 4)
	        {
	            retXML = httpX.responseXML;

	            if (obj.getAttribute("class").indexOf("_set") > -1)
	                obj.className = obj.className.replace("_set", "");
	            else
	                obj.className = obj.className + "_set";

	            window.status = "Favorite saved.";
	        }
	    }
	    var cookie = readCookie("ai");
	    if (cookie !=null)
	    {
	        sendX("favoriteGuid", "objectID=" + objid + "&objectType=" + objtype + "&cookie=" + cookie, updatefave);
	    }
	    else
	    {
	        alert("You must be logged in to add a favorite. If you've never registered, go ahead, we're not looking.");
	    }	    
	}
	
	function addtag(obj,objid,objtype,sid)
	{   
	    tagstr=obj.value;
	    obj.value="";
	    sendtag=function()
	    {	        

	        if (httpX.readyState==4)
	        {
	            retXML=httpX.responseXML;
	            rateNode=retXML.getElementsByTagName("TAG")[0];  
	            saved=rateNode.getAttribute("SAVED");
	            if (saved==1)
	            {
	                obj.parentNode.innerHTML="Tag Saved.";
	            }
	            else
	            {
	                obj.parentNode.innerHTML="Tag Save Error.";
	            }
	            
	        }
	    }
	    var cookie = readCookie("ai");
	    if (cookie !=null)
	    {
	        sendX("tag","tag="+tagstr+"&objectID="+objid+"&objectType="+objtype+"&cookie="+cookie+"&sessionID="+sid,sendtag);
	    }
	    else
	    {
	        alert("You must be logged in to add a tag. If you've never registered, go ahead, we're not looking.");
	    }	 
	}	
	
	function tagSend(objid,objtype,uid,sid)
	{		    
        obj=document.getElementById("tagput_" + objid + "_" + objtype);
        addtag(obj,objid,objtype,uid,sid);	       
	
	}
	
	function tagFilter(str)
	{
	    return str.replace(" ","");
	}
	
	
	
	var ancont=new Array();	
	function anPn(i,v) // stores propernoun
	{
	    this.id=i;
	    this.val=v;	    
	}
	
	function getDyn(o,prefix,keycode)
	{
	
	    switch (keycode)
	    {
    	    case 38:
    	    
    	        break;
    	    case 40:
    	    
    	        break;
    	    case 13:
    	        if (document.location.href.toLowerCase().indexOf("/default.aspx")>0)
                {
                    pptid=gidval(((prefix==null)?"":prefix)+"hdNoun_ID");
                    pnid=gidval(((prefix==null)?"":prefix)+"hdProperNoun_ID");
                    document.location.href="reviewList.aspx?n=" + pptid + "&p=" + pnid;
                }    	        
    	        break;
    	    default:
    	        if ((ancont[o.value.charAt(0)]!=null) && (ancont[o.value.charAt(0)].length>0))
	            {
	                pdfa(o.value,prefix);
	            }
	            else  if ((ancont[o.value.charAt(0)]==null))
                {            	
                   oVal=o.value;	                              
                   doDyn(oVal,prefix);	               
                }
    	        break;
	    }
	}
	
	function resetDyn(prefix)
	{
	    var pptid = gid(prefix+"hdNoun_ID");
	    var pnid = gid(prefix+"hdProperNoun_ID");
	    pptid.value="";
	    pnid.value="";
	    var txt=gid(prefix+"inProperNounString");
	    txt.value="";
	    ancont=new Array();
	    pn=gid("pnouns")
	    pn.innerHTML="";
	    pn.style.display="none";
	    gid("dynamicnames").innerHTML="";
	}
	
	function doDyn(o,prefix)
    {   
        pnounspan=gid("pnouns");
        pptid=gidval(((prefix==null)?"":prefix)+"hdNoun_ID");
                
        if (o.length>=1)
        {
            c=o.charAt(0);
            
            if (ancont[c]!=null) // if it's already cached. no need to go get it again.
            {
                pdfa(c);
                return;
            }            
            
	        popnouns=function()
	        {	   
	            if (httpX.readyState==4)
	            {
	                retXML=httpX.responseXML;	                
	                nnodes=retXML.getElementsByTagName("pn");
	                ancont[c]=new Array();
	                ancont[c][0]=new anPn(0,""); 
	                if (nnodes.length>0)
	                {	    	                              
	                    for (i=0;i<nnodes.length;i++)
	                    {
	                        id=nnodes[i].getAttribute("pnid");
	                        val=nnodes[i].getAttribute("val");	                        
	                        ancont[c].push(new anPn(id,val)); // effectively a cache for the letter	                     
	                    }
	                    pdfa(o,prefix);
	                }
	                else
	                {
	                    pnounspan.style.display="none"; 
	                }
	            }
	        }
	        sendX("propernoun","noun_ID="+pptid+"&characters="+c.replace("~"," "),popnouns);
	    }
	    else
	    {
	        pnounspan.style.display="none";
	    }
    }
    
    function pdfa(c,prefix) // populate dynamic list from ancont 
    {
        firstchar=c.charAt(0);
        var strlinks="";
        if (ancont[firstchar]!=null)
        {
            clen=c.length;
            for (lt=0;lt<ancont[firstchar].length;lt++)
            {   
                if (c.toLowerCase()==ancont[firstchar][lt].val.substring(0,clen).toLowerCase())
                {
                    strlinks+=" " + pnlink( ancont[firstchar][lt].id,ancont[firstchar][lt].val,((prefix==null)?"":prefix) );	                    
                }
            }
            pnounspan.innerHTML=strlinks;
            pnounspan.style.display="block";
        }
    }
    
    function pnlink(n,v,prefix)
    {
        return "<a href='#' onclick='setpnid(" + n + ",\"" + v + "\",\"" + prefix + "\");return false;'>" + unescape(v) + "</a><br>";
    }
    
    function setpnid(propnounid,val,prefix)
    {
        gid(prefix+"hdProperNoun_ID").value=propnounid;
        gid(prefix+"inProperNounString").value=val;
        gid("pnouns").innerHTML="";
        gid("pnouns").style.display="none";
        gid(prefix+"inProperNounString").focus();
    }
    var uidcache=new Array();
    function showminiprof(uid)
    {
        if (!gid("ProfileInfo"))
        {
            if (parseInt(uid)!='NaN')
            {
                dvprof=document.createElement("div");
                // add code to locate right of the event                
                dvprof.style.position='absolute';
                dvprof.style.top=curry+"px";                
                dvprof.style.left=((currx>100)?"240px":"70px");
                dvprof.setAttribute("id","ProfileInfo");
                dvprof.style.width="238px";
                dvprof.style.height="133px";
                dvprof.style.backgroundImage="url(/image/miniBG.png)";
                document.body.appendChild(dvprof);
                
                
	            showprof=function()
	            {	   
	                if (httpX.readyState==4)
	                {
	                    retXML=httpX.responseXML;
	                    unode=retXML.getElementsByTagName("user")[0];
	                    if (unode!=null)
	                    {
	                        strInfo='<span class="mpHead">' + unode.getAttribute("u") + '</span>';
	                        strInfo+='<span class="mpAvatar"><img src="/uimage/50/' + ((parseInt(uid)!='NaN')?uid:"default") + '.jpg"></span>';
	                        strInfo+='<span class="mpQuestion">' + unode.getAttribute("q") + '</span>';
	                        strInfo+='<span class="mpAnswer">' + unode.getAttribute("a") + '</span>';
	                        strInfo+='<span class="mpReview">' + unode.getAttribute("r") + '</span>';
	                        strInfo+='<span class="mpComment">' + unode.getAttribute("r") + '</span>';
	                        strInfo+='<span class="mpFaved">' + unode.getAttribute("f") + '</span>';
	                        strInfo+='<span class="mpCool">' + unode.getAttribute("c") + '</span>';
	                        strInfo+='<span class="mpLame">' + unode.getAttribute("l") + '</span>';
	                    
	                    /*
	                    strInfo="<table><tr><td>" + unode.getAttribute("u") + " <img src='image/fave_on.gif' />" + unode.getAttribute("f") + "</td>" +
	                             "<td><img src='image/pop.gif' /></td><td>"+unode.getAttribute("c")+"</td><td><img src='image/drop.gif' /></td><td>"+unode.getAttribute("l")+"</td>" +
	                             "<td><td><img src='image/sr_3.gif' />"+unode.getAttribute("r")+"<img src='image/sr_2.gif' />"+unode.getAttribute("q")+"<img src='image/sr_1.gif' />"+unode.getAttribute("a")+"</td></tr></table>";	                         
	                    */
	                    dvprof.innerHTML=strInfo;
	                    
    	                uidcache[uid]=strInfo;	
    	                }
    	                else
    	                {
    	                    alert("Could not connect to profile server :" + httpX.responseText);                   
    	                }
	                }
	            }
	            if (uidcache[uid]==null)
	            {
	                dvprof.innerHTML="<img src='/image/wait.gif' />";
	                sendX("ProfileInfo","uid="+uid,showprof);
	            }
	            else
	            {
	                dvprof.innerHTML=uidcache[uid];
	            }
	        }
	    }
    }
    
    function hideminiprof()
    {
        delnode=gid("ProfileInfo");
        if (delnode)
        {
            delnode.parentNode.removeChild(delnode);
        }
    }
    
    function updateLocDD(o,dd)
    {
        
        var parent_val = o.options[o.options.selectedIndex].value;
        var parent_id=o.getAttribute("id");
        var prefix= parent_id.substring(0,parent_id.lastIndexOf("_")+1);
        var sel=gid(prefix+dd); // ddcity, ddstate etc,
        var selhash=new Array();
        
        
        selhash["ddCity"]="cityByState";
        selhash["ddState"]="stateByCountry";
        var idname=parent_id.replace(prefix+"dd","")+"_ID";
        
        if (typeof sel == "object")
        {
            sel.options.length=0;
        }
        else
        {
            alert("can't find select box");
        }
        

        if (parent_id.indexOf("Country")>0)
        {
            gid(prefix + "ddCity").options.length=0;
        }
        
        popSel = function()
        {
            if (httpX.readyState==4)
	        {
	           retXML=httpX.responseXML;	                
	           nnodes=retXML.getElementsByTagName("nd");
	           for (i=0;i<nnodes.length;i++)
	           {
	                sel.options[i] = new Option(nnodes[i].attributes[1].value,nnodes[i].attributes[0].value);
	           } 
	        }
        }      
        sendX( selhash[dd], idname+"="+parent_val , popSel );
    }


    function getFirstChildVal(fcNode)
    {
        if (fcNode.firstChild!=null)
        {
            return fcNode.firstChild.value;
        }
        else
        {
            return "";
        }
    }
    
    function LocationSelectorGeoCodeCountry(latitude,longitude,outfunc)
    {
        this.ready=false;
        /*  <geonames>
          <neighbourhood>
          <countryCode>US</countryCode> 
          <countryName>United States</countryName> 
          <adminCode1>NY</adminCode1> 
          <adminName1>New York</adminName1> 
          <adminCode2>061</adminCode2> 
          <adminName2>New York County</adminName2> 
          <city>New York City-Manhattan</city> 
          <name>Central Park</name> 
          </neighbourhood>
          </geonames> 
         
        */
        window.status="obtaining geocode info";
        
        popInfo = function()
        {
             if (httpX.readyState==4)
	        {
	           retXML=httpX.responseXML;
	           //alert(httpX.responseText)
	           countryCode=getFirstChildVal(retXML.getElementsByTagName("countryCode")[0]);
	           countryName=getFirstChildVal(retXML.getElementsByTagName("countryName")[0]);
	           adminCode1=getFirstChildVal(retXML.getElementsByTagName("adminCode1")[0]);
	           adminCode2=getFirstChildVal(retXML.getElementsByTagName("adminCode2")[0]);
	           adminName1=getFirstChildVal(retXML.getElementsByTagName("adminName1")[0]);
	           adminName2=getFirstChildVal(retXML.getElementsByTagName("adminName2")[0]);
	           city=retXML.getElementsByTagName("name")[0].firstChild.nodeValue;
	           cityid=retXML.getElementsByTagName("chaThinkIDs")[0].getAttribute("city_id");
	           stateid=retXML.getElementsByTagName("chaThinkIDs")[0].getAttribute("state_id");
	           countryid=retXML.getElementsByTagName("chaThinkIDs")[0].getAttribute("country_id");
	           
	           gid(locationSelectorPrefix+"hdCountry").value=countryName;
	           gid(locationSelectorPrefix+"hdState").value=adminName1;
	           gid(locationSelectorPrefix+"hdCity").value=city;
	           gid(locationSelectorPrefix+"hdLongitude").value=longitude;
	           gid(locationSelectorPrefix+"hdLatitude").value=latitude;
	           gid(locationSelectorPrefix+"hdCity").value=cityid;
	           gid(locationSelectorPrefix+"hdState").value=stateid;
	           gid(locationSelectorPrefix+"hdCountry").value=countryid;
	           
	           window.status="geocode info obtained";
	           
	        }
	        this.ready=true;
        }
        
        sendX("getNeighborhood", "latitude=" + latitude + "&longitude=" + longitude , popInfo );
    }

