﻿var arrPlaceMarks = [];
var kmlObject = null;
var intPlaceMarks = 0;
var idLookupTable = [];
var lon_x = 0;
var lat_y = 0;
var geocoder = null;


// Gets the value of the searchKey from the NodeData 
// of a TreeNode.
//

function GetKeyValue(searchKey) {
    // Get a handle to the selected TreeNode.

    var treenode = GetSelectedNode();

    // Validate the node handle.

    if (null == treenode || undefined == treenode)
        return null;

    // Get the node's NodeData property's value.

    var nodeDataAry = treenode.getAttribute('nodeData');

    if (null == nodeDataAry || undefined == nodeDataAry)
        return null;

    nodeDataAry = nodeDataAry.split(';');

    if (null == nodeDataAry || undefined == nodeDataAry ||
         0 >= nodeDataAry.length)
        return null;

    var count = 0;
    var returnValue = null;

    while (count < nodeDataAry.length) {
        var workingItem = nodeDataAry[count];

        if (0 >= workingItem.length) {
            count++;
            continue;
        }

        // Split the string into its key value pairs.

        var kv = workingItem.split('=');

        if (1 >= kv.length) {
            count++;
            continue;
        }

        var key = kv[0];
        var kValue = kv[1];

        if (key != searchKey) {
            count++;
            continue;
        }

        returnValue = kValue;
        break;
    }

    return returnValue;
}

// Gets a handle to the TreeView's selected node.

//

function GetSelectedNode() {
    var tree = GetTreeHandle();
    var treeNode;

    if (null == tree || undefined == tree)
        return null;

    treeNode = tree.getTreeNode(tree.selectedNodeIndex);

    if (null == treeNode || undefined == treeNode)
        return null;

    return treeNode;
}

// Gets a handle to the TreeView.

//

function GetTreeHandle() {
    var tree;
    var treeName = 'tvControl';

    // Get a handle to the TreeView.

    tree = document.getElementById(treeName);

    if (null == tree || undefined == tree)
        return null;

    return tree;
}

function blah() {
   // var obj = window.event.srcElement;
    var treeNodeFound = false;
    var blah = window.event.srcElement;
    
    alert("test2");

}

function checkall() {
    for (i = 0; i < document.form1.elements.length; i++) {
        var j = i;
        if (document.form1.elements[i].type == "checkbox") {
            var myTreeNode = document.form1.elements[i];
            if (myTreeNode.checked) {
                var myValueField = myTreeNode.nextSibling.value;
                if (myValueField) {
                    toggleNetworkLink(myTreeNode, myTreeNode.checked, true);
                    uncheckall();
                    myTreeNode.checked = true;
                    return;
                }
            }
        }
    }

    var lookAt = ge.createLookAt('');
    ////            lon_x = point.x;
    ////            lat_y = point.y;
    lookAt.set(32, -89, 1000000, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 0, 20000);
    ge.getView().setAbstractView(lookAt);
}

function uncheckall() {
    for (i = 0; i < document.form1.elements.length; i++) {
        if (document.form1.elements[i].type == "checkbox") {
            var myTreeNode = document.form1.elements[i];
            if (myTreeNode.checked) {
                myTreeNode.checked = false;
            }
        }
    }
}

function SelectAllChildNodes(e) {
    //debugger;
    if (window.event) e = window.event; 
    var obj = e.srcElement? e.srcElement : e.target; 
//    var obj = window.event.srcElement;
    var treeNodeFound = false;
    var childFound = false;

    var checkedState;
    if (obj.tagName == "INPUT" && obj.type == "checkbox") {
        var treeNode = obj;
        checkedState = treeNode.checked;
        do {
            obj = obj.parentNode;
        } while (obj.tagName != "TABLE")

        var parentTreeLevel = obj.rows[0].cells.length;
        var parentTreeNode = obj.rows[0].cells[0];
        var tables = obj.parentNode.getElementsByTagName("TABLE");
        var numTables = tables.length;
        if (numTables >= 1) {
            for (iCount = 0; iCount < numTables; iCount++) {
                if (tables[iCount] == obj) {
                    treeNodeFound = true;
                    iCount++;
                    if (iCount == numTables) {
                        toggleNetworkLink(treeNode, false, false);
                        toggleNetworkLink(treeNode, checkedState, true);
                        return;
                    }
                }
                if (treeNodeFound == true) {
                    var childTreeLevel = tables[iCount].rows[0].cells.length;
                    if (childTreeLevel > parentTreeLevel) {
                        var cell = tables[iCount].rows[0].cells[childTreeLevel - 1];
                        var inputs = cell.getElementsByTagName("INPUT");
                        toggleNetworkLink(inputs[0], false, false);
                        toggleNetworkLink(inputs[0], checkedState, false);
                        inputs[0].checked = checkedState;
                        childFound = true;
                    }
                    else {
                        if (!childFound) {
                            toggleNetworkLink(treeNode, false, false);
                            toggleNetworkLink(treeNode, checkedState, true);

                        }
                        
                        return;
                    }
                }
            }
        }
    }
}

function SelectAllChecked() {
    //debugger;
  
    var obj = e.srcElement ? e.srcElement : e.target;
    //    var obj = window.event.srcElement;
    var treeNodeFound = false;
    var childFound = false;

    var checkedState;
    if (obj.tagName == "INPUT" && obj.type == "checkbox") {
        var treeNode = obj;
        checkedState = treeNode.checked;
        do {
            obj = obj.parentNode;
        } while (obj.tagName != "TABLE")

        var parentTreeLevel = obj.rows[0].cells.length;
        var parentTreeNode = obj.rows[0].cells[0];
        var tables = obj.parentNode.getElementsByTagName("TABLE");
        var numTables = tables.length;
        if (numTables >= 1) {
            for (iCount = 0; iCount < numTables; iCount++) {
                if (tables[iCount] == obj) {
                    treeNodeFound = true;
                    iCount++;
                    if (iCount == numTables) {
                        toggleNetworkLink(treeNode, checkedState, true);
                        return;
                    }
                }
                if (treeNodeFound == true) {
                    var childTreeLevel = tables[iCount].rows[0].cells.length;
                    if (childTreeLevel > parentTreeLevel) {
                        var cell = tables[iCount].rows[0].cells[childTreeLevel - 1];
                        var inputs = cell.getElementsByTagName("INPUT");
                        toggleNetworkLink(inputs[0], checkedState, false);
                        inputs[0].checked = checkedState;
                        childFound = true;
                    }
                    else {
                        if (!childFound)
                            toggleNetworkLink(treeNode, checkedState, true);

                        return;
                    }
                }
            }
        }
    }
}


function toggleNetworkLink(input, checkedState, zoomTo) {

    var valueField = input.nextSibling.value;

    //    var id = input.id.replace("CheckBox", "");
    id = input.id;
//    var spanElement = document.getElementById(id);
//    var value = spanElement.value;
    var values = valueField.split(";#");
    var valueArray = [];
    

    for (i = 0; i < values.length; i++) {

        valueArray[values[i].split(",#")[0]] = values[i].split(",#")[1];

    }


  /*  alert(value); */

    if (checkedState)
        createPlacemark(id, valueArray, zoomTo);
    else
        removePlacemark(id);


}

function removePlacemark(id) {
    id = idLookupTable[id];

    var features =
ge.getGlobe().getFeatures().getChildNodes();
    for (var i = 0; i < features.getLength(); i++) {
        if (features.item(i).getId() == id) {
            ge.getFeatures().removeChild(features.item(i));
            break;
        } else {
            continue;
        }
    }
}



function createPlacemark(value, valueArray, zoomTo) {
    var rand_no = Math.random();
    var id = value + rand_no;
    idLookupTable[value] = id;
    // create icon style for the placemark
    var icon = ge.createIcon('');
    icon.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
    var style = ge.createStyle('');
    style.getIconStyle().setIcon(icon);





    var geocodeLocation = valueArray['location'];



    geocoder.getLatLng(geocodeLocation, function(point) {
        if (point) {

            var point2 = ge.createPoint('');

            point2.setLatitude(point.y);
            point2.setLongitude(point.x);
            //point2.setLatitude(32);
            //point2.setLongitude(-89);
            // create the point placemark and add it to Earth
            var pointPlacemark = ge.createPlacemark(id);
            pointPlacemark.setName(valueArray['title']);
            pointPlacemark.setGeometry(point2);
            pointPlacemark.setDescription("<a href='http://bejarchcom0.web702.discountasp.net/Gallery.aspx?title=" + valueArray['title'] + "'><img border=0 src='http://bejarchcom0.web702.discountasp.net/" + valueArray['image'] + "' /></a><br>" + valueArray['description']);
            pointPlacemark.setStyleSelector(style);
            ge.getFeatures().appendChild(pointPlacemark);

            if (zoomTo) {
                var lookAt = ge.createLookAt('');
                ////            lon_x = point.x;
                ////            lat_y = point.y;
                lookAt.set(point.y, point.x, 10, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 20000);
                ge.getView().setAbstractView(lookAt);
            }
        }
    });
    
////    alert(lon_x);
////    alert(lat_y);
////    var geocoder = new google.maps.ClientGeocoder();
////    geocoder.getLatLng(geocodeLocation, function(point) {
////        if (point) {
////            x = point.x;
////            y = point.y;
////        }
////    });



////    var lookAt = ge.createLookAt('');
////    lookAt.set(y, x, 10, ge.ALTITUDE_RELATIVE_TO_GROUND,
////               0, 60, 20000);
////    ge.getView().setAbstractView(lookAt);

}

function OnTreeClick(evt)
{
    var src = window.event != window.undefined ? window.event.srcElement : evt.target;
    alert(evt.valueOf() + evt.checked);
   // alert(src.firstChild.checked);
 
//    if (src.firstChild.checked)
//        alert("true");
//    else
//        alert("false");
        
//    var nodeClick = src.tagName.toLowerCase() == "a";
//    if(nodeClick)
//    {
//        var nodeText = src.innerText;
//        var nodeValue = GetNodeValue(src);
//        alert("Text: "+nodeText + "," + "Value: " + nodeValue);
//    }
//return false; //uncomment this if you do not want postback on node click
}
function GetNodeValue(node)
{
    var nodeValue = "";
    var nodePath = node.href.substring(node.href.indexOf(",")+2,node.href.length-2);
    var nodeValues = nodePath.split("\\");
    if(nodeValues.length > 1)
        nodeValue = nodeValues[nodeValues.length - 1];
    else
        nodeValue = nodeValues[0].substr(1);

return nodeValue;
}

function createNetworkLink() {
    var url = 'http://localhost/earthApi/bej.kml';
google.earth.fetchKml(ge, url, finished);


// in this sample we will attempt
// to fetch a  KML file and show it

    // first create the KmlLink
//    var link = ge.createLink('');
//    link.setHref('http://kml-samples.googlecode.com' +
//             '/svn/trunk/kml/NetworkLink/placemark.kml');

//    // create the network link and add it to Earth
//    var networkLink = ge.createNetworkLink('');
//    networkLink.setDescription('NetworkLink open to fetched content');
//    networkLink.setName('Open NetworkLink');
//    networkLink.setFlyToView(true);
//    networkLink.setLink(link);
//    ge.getFeatures().appendChild(networkLink);
}

//traverseNodes(KmlFeature node) 
// Credit to: Fraser Chapman
//Recursively iterates through the KmlDocument
//makes the menu using folder names as headings and placemark names as links
function traverseNodes(node) {
    if (node.getFeatures().hasChildNodes()) {
        var subNodes = node.getFeatures().getChildNodes();
        var length = subNodes.getLength();
        for (var i = 0; i < length; i++) {
            var eachSubNode = subNodes.item(i);
            var nodeType = eachSubNode.getType();
            var nodeName = eachSubNode.getName();
            switch (nodeType) {
                case 'KmlFolder':
                 /*   if (nodeName != 'Projects Folder') {
                        strMenuHtml += '<b class="folderHeading">' + nodeName + '</b><br />';
                    }*/
                    traverseNodes(eachSubNode); //recurse..
                    break;
                case 'KmlPlacemark':
                    arrPlaceMarks[intPlaceMarks] = eachSubNode;
                   /* strMenuHtml += '<a href="javascript:getProject(\'' + intPlaceMarks + '\')">' + nodeName + '</a><br />';*/
                    /*
                    google.earth.addEventListener(eachSubNode, "click", function(event) {
                    event.stopPropagation();
                    event.preventDefault();
                    getProject(intPlaceMarks);
                    });
                    */
                    intPlaceMarks++;
                    break;
                case 'KmlScreenOverlay':
                default:
                    break;
            }
        }
    }
}


function finished(object) {
    if (!object) {
        alert('bad or NULL kml');
        return;
    }
    kmlObject = object;
 

    ge.getFeatures().appendChild(object);
    var la = ge.createLookAt('');
    la.set(37.77976, -122.418307, 25, ge.ALTITUDE_RELATIVE_TO_GROUND,
         180, 60, 500);
    ge.getView().setAbstractView(la);

   // traverseNodes(kmlObject);
}

