// Global vars    

var wardID;
var wardName;
var landmark = "";
var landmarkName = "";
var landmarkTotal = "";
var blueIcon;
var map;   //the Map variable declared globally.
var oldMarker;
var pageSize = 10;
var currentPageIndex = 0;
var totalComplaints;
var currentDisplayedComplaints;
var isMyComplaintsSelected = false;
var previousZoomLevel;
var previousMapType;
var LatitudeOfWard;
var LongitudeOfWard;
var latitudeOfLastComplaintRegistered;
var longitudeOfLastComplaintRegistered;
var lastComplaintRegistered = false;
var defaultZoomLevel = 14;
var defaultLatitude = 18.52;
var defaultLongitude = 73.85;
//for displaying same category of complaints after postback - Brijesh
var defaultComplaintType = "All";
var complaintType = "";
var pmcComplaintTypeCookie = "PMC_COMPLAINT_TYPE_VALUE";
var pmcMyComplaints = "PMC_MY_COMPLAINTS_VALUE";
var defaultMapType = "Hybrid";
var mapType;

//For xml file reading
//Complaints
var xmlComplaints;
var xmlLat = new Array();
var xmlLng = new Array();
var xmlCompStatusId = new Array();
var xmlStatusType = new Array();
var xmlComment = new Array();
var xmlLocation = new Array();
var xmlUserName = new Array();
var xmlLoginId = new Array();
var xmlDate = new Array();
var xmlCompNo = new Array();
var xmlCompCategory = new Array();
var xmlDesc = new Array();
var xmlImgPath = new Array();
var xmlCompWard = new Array();
var xmlLandmark = new Array();
//status
var xmlStatus;
var xmlStatusID = new Array();
var xmlStatusName = new Array();
//category
var xmlCategory;
var xmlCategoryID = new Array();
var xmlCategoryName = new Array();
//landmark
var xmlLandmarks;
var xmlLandmarkID = new Array();
var xmlLandmarkName = new Array();
var xmlLandmarkWardID = new Array();
var xmlLandmarkWardName = new Array();
var xmlLandmarkLat = new Array();
var xmlLandmarkLng = new Array();
//ward
var xmlWards;
var xmlWardID = new Array();
var xmlWardName = new Array();
var xmlWardLat = new Array();
var xmlWardLng = new Array();
var isXMLRead = false;
var completed = new Array(5);

//for getting the index of current complaint
var currentComplaintIndex;
// define extensions of the files that can be uploaded
var extArray = new Array(".gif", ".jpg", ".png", ".bmp", ".jpeg", ".jpe", ".tif");

        
// Create and initialize the landmark icon properties. 
var landmarkBaseIcon = new GIcon(); 
landmarkBaseIcon.iconSize = new GSize(10, 15); 
landmarkBaseIcon.iconAnchor = new GPoint(5, 5);
landmarkBaseIcon.infoWindowAnchor = new GPoint(12, 8);  
landmarkBaseIcon.infoShadowAnchor = new GPoint(12, 8); 

var landmarkIcon = new GIcon(landmarkBaseIcon);
landmarkIcon.image ="../Images/" + get_cookie("landmarkImage");

// create and initialize mapbusy icon
var gBusyIcon = new GIcon();
gBusyIcon.image = "../Images/" + get_cookie("mapBusyIconImage");
//gBusyIcon.iconSize = new GSize(30, 30);
gBusyIcon.iconSize = new GSize(50, 50);
gBusyIcon.iconAnchor = new GPoint(24, 24);
gBusyIcon.infoWindowAnchor = new GPoint(5, 1);


// Create and initialize the base icon properties. 
var baseIcon = new GIcon(); 
baseIcon.iconSize = new GSize(16, 16); 
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(20, 15);  
baseIcon.infoShadowAnchor = new GPoint(20, 15); 

//define different icons of different categories 
// for Potholes
var potholeIcon = new GIcon(baseIcon);
potholeIcon.image = "../Images/" + get_cookie("potholeImage");
var waterLoggingIcon = new GIcon(baseIcon);
waterLoggingIcon.image = "../Images/" + get_cookie("waterLoggingImage");
var drainCleaningIcon = new GIcon(baseIcon);
drainCleaningIcon.image = "../Images/" + get_cookie("drainCleaningImage");
var otherIcon = new GIcon(baseIcon);
otherIcon.image = "../Images/" + get_cookie("othersImage");
var standardIcon = new GIcon(baseIcon);
standardIcon.image = "../Images/" + get_cookie("standardImage");


//get cookie value
function get_cookie(cookie_name)
{     
    var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
    if ( results )
         return ( unescape ( results[2] ) );
    else
         return null;
}   
//method is used to center the map on selected ward.

function panToWard()
{
    map.setZoom(previousZoomLevel);
    //map.setMapType(G_HYBRID_MAP);
    map.panTo(new GLatLng(LatitudeOfWard,LongitudeOfWard));//set center of map to ward.                
}

function limitAttach(form, file) 
{
    allowSubmit = false;
    if (!file) return 1;
    while (file.indexOf("\\") != -1)
        file = file.slice(file.indexOf("\\") + 1);
    
    ext = file.substr(file.length-4, file.length).toLowerCase();
    
    for (var i = 0; i < extArray.length; i++) 
    {
        if (extArray[i] == ext) {allowSubmit = true; break; }
    }
    
    if (!allowSubmit) 
    {
        window.alert("Please upload files that end in types:  " + (extArray.join(", ")) + "\nPlease select a new "+ "file to upload and submit again.");
        return 0;
    }
    else { return 1; }
}

function GetNearestLandmark(landmarkCount, lat, lon)
{
    //debugger;
    //Create an array to hold the radial distances of all tha landmarks
    var radialDistance = new Array(landmarkCount);

    //use two variables one to hold the shortest radial distance 
    //and the other to hold the array index of this shortest distance
    var shortestDist;
    var shortestIndex;
    shortestIndex = 0;
    
    //iterate through all the landmarks and find their corresponding distance from the point selected by the user
    for(var i=0;i<landmarkCount;i++)
    {
        radialDistance[i] = Math.sqrt(Math.pow((lat-xmlLandmarkLat[i]),2)+Math.pow((lon-xmlLandmarkLng[i]),2));
    }

    shortestDist = radialDistance[0];
    for(var j =0;j<landmarkCount; j++)
    {
        if(radialDistance[j] < shortestDist)
        {
            shortestDist = radialDistance[j];
            shortestIndex =j; 
        }
    }
    return shortestIndex;
}

//function for create a tabbed marker
function createTabbedMarker(point, tabbedArray,  i) 
{
    var tabbedMarker = new GMarker(point);
    switch (xmlCompCategory[i]) 
    {
        case "Potholes": 
          tabbedMarker = new GMarker(point, potholeIcon);
          break;
        case "WaterLogging": 
          tabbedMarker = new GMarker(point, waterLoggingIcon);
          break; 
        case "DrainCleaning": 
          tabbedMarker = new GMarker(point, drainCleaningIcon);
          break; 
        case "Other": 
          tabbedMarker = new GMarker(point, otherIcon);
          break; 
    }
    
    
    
    // add "mouseover" listener to the marker
    GEvent.addListener(tabbedMarker, "mouseover", function() 
    {
      tabbedMarker.openInfoWindowTabsHtml(tabbedArray);
    });
    // add click listener to the marker
    GEvent.addListener(tabbedMarker, "click", function() 
    {
      tabbedMarker.openInfoWindowTabsHtml(tabbedArray);
    });
    
    // add closeinfowindow listener to marker. This listener is used to recreate the marker once it'll closed.
   
    GEvent.addListener(tabbedMarker, "infowindowclose", function() 
    {
      map.removeOverlay(tabbedMarker);
      addComplaintsToMap(i);
    });
   
    return tabbedMarker;
}

//function for when the user clicks on the map to create a marker
function createMarker(point, html) 
{
    var marker = new GMarker(point, standardIcon);
    // add "mouseover" listener to the marker
    GEvent.addListener(marker, "mouseover", function() 
    {
      marker.openInfoWindowHtml(html);
    });
    
    GEvent.addListener(marker, "click", function() 
    {
      marker.openInfoWindowHtml(html);
    });
    
    return marker;
}
 
// function for checking the location field
function checkFields(txt)
{
    if(txt=="") 
    { 
        window.alert("Location is required. ");
        var reply=1; 
    }
    else 
    { 
       var reply=0;
    }
    return reply;
}

// function for checking the comment field
function checkFieldComment(txt)
{
    if(txt=="") 
    { 
        window.alert("Comment is required.");
        var reply=1; 
    }
    else 
    { 
       var reply=0;
    }
    return reply;
}
// function for checking the description field
function cleanDescription(adescription)
{
    var topOfLoop = adescription.length;
    for(i=0; i<topOfLoop; i++)
    {
        if(adescription.indexOf(String.fromCharCode(34)) > -1){  // remove double quot
           adescription = adescription.replace(String.fromCharCode(34),'\"');}
        if(adescription.indexOf(String.fromCharCode(39)) > -1){  // remove single quot 
           adescription = adescription.replace(String.fromCharCode(39),'\'');}
        if(adescription.indexOf(String.fromCharCode(60)) > -1){  // remove Less Than '<' sign
           adescription = adescription.replace(String.fromCharCode(60),'[');}
        if(adescription.indexOf(String.fromCharCode(62)) > -1){  // remove Greater Than '>' sign
           adescription = adescription.replace(String.fromCharCode(62),']');}
    }
    return adescription;
}

//Function added for confirmation before deleting the complaints-Brijesh
function con(eventField)
{
   display.eventType.value = "1";
   return confirm("Are you sure, you want to delete this complaint?");
}

//Function for setting the action for updateLocation and saving the complaint details in cookie  -Brijesh
function updateLocation(compNo)
{
   display.eventType.value = "2";
   
   //Save in cookie
    var latOfComp, lonOfComp;
    
    for(var index = 0; index < xmlComplaints.length; index++)
    {
            if(xmlCompNo[index] == compNo)
            {
                latOfComp = xmlLat[index];
                lonOfComp = xmlLng[index];
            }
    }
    
    var cookie_data = "latitudeOfCompalint=" + latOfComp + "&longitudeOfComplaint=" + lonOfComp + "&ComplaintModified"; 
    var cookie_string = "pmcMapComplaintCookie=" + escape(cookie_data);
    document.cookie = cookie_string;
}

//Function for setting the action for updateDescription and saving the complaint details in cookie  -Brijesh
function modifyDescriptionAndPhoto(compNo)
{
    var latOfComp, lonOfComp;
    
    for(var index = 0; index < xmlComplaints.length; index++)
    {
            if(xmlCompNo[index] == compNo)
            {
                latOfComp = xmlLat[index];
                lonOfComp = xmlLng[index];
            }
    }
    
    var cookie_data = "latitudeOfCompalint=" + latOfComp + "&longitudeOfComplaint=" + lonOfComp + "&ComplaintModified"; 
    var cookie_string = "pmcMapComplaintCookie=" + escape(cookie_data);
    document.cookie = cookie_string;

}
//function for provides full description of the complaint
function detailedDescription(i)
{
    var shortDiv = document.getElementById('ShortDiv');
    var shortSpan = document.getElementById('shortDescription');
   // shortDiv.innerHTML = '<textarea id="txtareaDescription" cols="30" rows="5" readonly="readonly" class="normal_text">' + xmlDesc[i] + '</textarea>';
    //shortDiv.style.display = 'none';
    
    var txtElm = document.createElement("textarea");
    txtElm.setAttribute("id", "FullDescription");
    txtElm.setAttribute("class", "normal_text");
    txtElm.setAttribute("cols", "30");
    txtElm.setAttribute("rows", "6");
    txtElm.innerHTML = xmlDesc[i];
	shortDiv.replaceChild(txtElm, shortDiv.firstChild);
}

// Add logged Complaint onto the map
function addComplaintsToMap(i)
{
    var str = "Are you sure, you want to delete this complaint?";
    var htmlOfComplaint = "";
    var htmlForDescription = "";
    var htmlForImage = "";
    var htmlForStatus = "";
    var complaintid = xmlCompNo[i];
    currentComplaintIndex = i;
        
    if(isAdministrator == "1")//If admin is logged in, he can edit the status tab
    {
        //html for status tab
        htmlForStatus = '<div id="ShortDiv" style="width:350px;"><form name="statusForm" enctype="multipart/form-data" method="POST" action="statusChange.aspx" onSubmit="if(!checkFieldComment(statusForm.Comments.value)){statusForm.Comments.value = cleanDescription(statusForm.Comments.value); statusForm.submit();} else{return false;}">\
                         <table cellspacing="0" cellpadding="0"><tr class="normal_text_bold"><td style="width: 260px">Current Status: </td><td>' + xmlStatusType[i] + '</td></tr><tr><td class="normal_text">Update Status of complaint:</td><td class="normal_text"><select name="theStatus" style="width: 142px"> ';//<tr class="header_b"> <td colspan="2">Welcome Administrator! </td></tr>

        // break for adding status in dropdown list
        for(var index = 0; index < xmlStatus.length; index++)
        {
            htmlForStatus = htmlForStatus + '<option value="' + xmlStatusID[index] + '">' + xmlStatusName[index] + '</option>';
        }
        //continue with html
        htmlForStatus = htmlForStatus + '</select></td></tr><tr><td colspan="2"></td></tr><tr><td class="normal_text">Comment:(This will be shown to the user as "Response from PMC")</td><td><textarea id="Comments" name="Comments" cols="15" rows="3"></textarea></td></tr><tr><td colspan = "3" align="center"><input type="submit" value="Save" title="Save changes" onclick="modifyDescriptionAndPhoto(complaintidvar.value);" /></td></tr><tr><td><input type="hidden" name="complaintidvar" value="' + complaintid + '" /></td></tr></table></form></div>';
    }
    else
    {
        //Status tab is non editable for users(getting the comment is left)
        if(xmlComment[i].length == 0)  //If comment is not available -11 April 08. Prashant  
            htmlForStatus ='<div id="ShortDiv" style="width:350px;"><span id="lblStatus" class="normal_text_bold">Status of complaint:"'+ complaintid +'"<br></span><table cellspacing="0" cellpadding="0"><tr><td colspan="2" class="normal_text">Complaint status: '  + xmlStatusType[i] +'</td></tr><tr><td colspan="2" class="normal_text"><br><span id="comment" class="normal_text">Response from PMC:&nbsp;' +  "Not available." +'</span></td></tr><br /></table></div>';
        else
            htmlForStatus ='<div id="ShortDiv" style="width:350px;"><span id="lblStatus" class="normal_text_bold">Status of complaint:"'+ complaintid +'"<br></span><table cellspacing="0" cellpadding="0"><tr><td colspan="2" class="normal_text">Complaint status: '  + xmlStatusType[i] +'</td></tr><tr><td colspan="2" class="normal_text"><br><span id="comment" class="normal_text">Response from PMC:&nbsp;' + xmlComment[i]  +'</span></td></tr><br /></table></div>';
        
    }
    
    if (xmlImgPath[i]!= "")
    {
        //html for image tab
        htmlForImage = '<div style="width:350px;"><table cellpadding="0" cellspacing="0" border="0"><tr><td><img src="../ClientUploadedFiles/' + xmlImgPath[i] + '" width="170px" height="100px"/></td></tr></table></div>';
        
    }
    else
    {   
        //html for image tab
        htmlForImage = '<div style="width:350px;"><table cellpadding="0" cellspacing="0" border="0"><tr><td><span id="shortDescription" class="normal_text_bold">' + "Photo not available" + '</span></td></tr></table></div>';
        
    }
    //html for description tab
    if(xmlDesc[i].length > 250)
        htmlForDescription = '<div id="ShortDiv" style="width:350px;"><span id="lbldesc" class="normal_text_bold">Description of complaint:</br></span><span id="shortDescription" class="normal_text">' + xmlDesc[i].slice(0, 250)  + '<br /><a id="readMoreAnchor" class="normal_text_link" href="javascript:void(0);" onclick="detailedDescription(' + i + ')" title="Click to view complete description">more...</a></span></div>';
    if(xmlDesc[i].length == 0)  //If description is not available  
        htmlForDescription = '<div id="ShortDiv" style="width:350px;"><span id="shortDescription" class="normal_text_bold">' + "Description not available"  + '<br /></span></div>';
    else
        htmlForDescription = '<div id="ShortDiv" style="width:350px;"><span id="lbldesc" class="normal_text_bold">Description of complaint:<br/></span><span id="shortDescription" class="normal_text">' + xmlDesc[i]  + '<br /></span></div>';
    
    //html for summary tab
    htmlOfComplaint = '<div style="width:350px;"><span id="lblHeader" class="header_b">Complaint registered by ' + xmlUserName[i] + '</span><br /><table><tr><td colspan="2" class="normal_text_bold"><span class="normal_text">On : ' + xmlDate[i] + '</span></td></tr><tr class="normal_text"><td >Complaint Number :</td><td >' + xmlCompNo[i] + '</td></tr><tr class="normal_text"><td >Category :</td><td >' + xmlCompCategory[i] + '</td></tr><tr class="normal_text"><td>Location :</td><td>' + xmlLocation[i] + '</td></tr><tr><td></td></tr></table></div>';//<tr class="normal_text"><td>Status : </td><td>' + xmlStatusType[i] + '</td></tr>
    
    if(xmlUserName[i] == userName)//If complaint belong to the logged in user
    {
        if(xmlCompStatusId[i] == 10 || xmlCompStatusId[i] == 12)
        {
            //html for status tab
            htmlForStatus = '<div id="ShortDiv" style="width:350px;"><form name="display" method="post" action="EscalateComplaint.aspx"><table cellspacing="0" cellpadding="0"><tr><td colspan="2" class="normal_text">Complaint status: '  + xmlStatusType[i] +'</td></tr><tr><td colspan="2" class="normal_text"><input type="submit" value="Escalate" title="Reopen this complaint" /><input type="hidden" name="complaintidvar" value="' + complaintid + '"/></td></tr><br /></div>';
        }
        if (xmlImgPath[i] == "")
        {
            //html for image tab
            htmlForImage = '<form name="photoForm" enctype="multipart/form-data" method="POST" action="uploadPhoto.aspx" onSubmit="if(limitAttach(photoForm, photoForm.uploadPhoto.value)){photoForm.uploadPhoto.value = cleanDescription(photoForm.uploadPhoto.value) ; photoForm.submit()} else{return false;}"> <div style="width:350px;"><span id="photo" class="normal_text_bold">' + "Photo was not uploaded" + '</span></br><table cellpadding="0" cellspacing="0" border="0"><tr><td></br></td></tr><tr><td class="normal_text">Upload Photo Now:</td><td class="normal_text" colspan="2"><INPUT type="file" size="15" id="uploadPhoto" name="PhotoUploader"/></td></tr><tr><td></br></td></tr><tr><td colspan="2" align="center"><input id="btnSavePhoto" type="submit" value="Save" onclick="modifyDescriptionAndPhoto(complaintidvar.value);" title="Save photo" /></td></tr><tr><td><input type="hidden" name="complaintidvar" value="' + complaintid + '" /></td></tr></table></div></form>';
        }
        else
        {
            //html for image tab
            htmlForImage = '<form name="photoForm" enctype="multipart/form-data" method="POST" action="uploadPhoto.aspx" onSubmit="if(limitAttach(photoForm, photoForm.uploadPhoto.value)){photoForm.uploadPhoto.value = cleanDescription(photoForm.uploadPhoto.value) ; photoForm.submit()} else{return false;}"><div style="width:350px;"><table cellpadding="0" cellspacing="0" border="0"><tr><td><img src="../ClientUploadedFiles/' + xmlImgPath[i] + '" width="170px" height="100px"/></td></tr></table><table cellpadding="0" cellspacing="0" border="0"><br/><tr><td class="normal_text">Upload new Photo:</td><td class="normal_text" colspan="2"><INPUT type="file" size="15" id="uploadPhoto" name="PhotoUploader"/></td></tr><tr><td colspan="2" align="center"><input id="btnSavePhoto" type="submit" value="Save" onclick="modifyDescriptionAndPhoto(complaintidvar.value);" title="Save photo" /></td></tr><tr><td><input type="hidden" name="complaintidvar" value="' + complaintid + '" /></td></tr></table></div></form>';
        }
        //html for summary tab
        htmlOfComplaint = '<div id="ShortDiv" style="width:350px;"><form name="display" enctype="multipart/form-data" method="POST" action="delete.aspx" onSubmit="if(!checkFields(display.locationOfComplaint.value)){display.locationOfComplaint.value = cleanDescription(display.locationOfComplaint.value); display.submit()} else {return false;}"><table cellspacing="0" cellpadding="0" width="95%"><tr><td colspan="2"><table cellspacing="0" cellpadding="0" width="100%"><tr><td class="header_b" align="left">Complaint registered by ' + xmlUserName[i] + '<br /><span class="normal_text">On : ' + xmlDate[i] + '</span></td><td align="right"><input id="btndelete" type="submit" value="Delete" onclick="return con();" title="Delete this complaint" /></td></tr></table></td></tr><tr class="normal_text"><td >Complaint Number :</td><td >' + xmlCompNo[i] + '</td></tr><tr class="normal_text"><td >Category :</td><td >' + xmlCompCategory[i] + '</td></tr><tr class="normal_text"><td >Location :</td><td><textarea  name="locationOfComplaint" cols="24" rows="2">' + xmlLocation[i] + '</textarea></td></tr><tr><td colspan="2" align="center"><input type="hidden" name="complaintidvar" value="' + complaintid + '" /></td></tr><tr class="normal_text"><td colspan="2" align="center"><input type="Submit" value="Update location" name="updLocation" title="Save changes" onclick="updateLocation(complaintidvar.value);" ></td></tr></table><input type="hidden" name="eventType" value="2" /></form></div>';
        
        //html for description tab
        if(xmlDesc[i].length == 0)
            htmlForDescription = '<form name="descForm" enctype="multipart/form-data" method="POST" action="updateDescription.aspx" onSubmit="descForm.desc.value = cleanDescription(descForm.desc.value); descForm.submit()"><div id="ShortDiv" style="width:350px;"><table cellpadding="0" cellspacing="0" border="0"><tr class="normal_text_bold"><td>Description was not entered</td></tr><tr><td colspan="2" class="normal_text"><textarea name="desc" id="desc" cols="30" rows="6">' + xmlDesc[i] + '</textarea></td></tr><tr><td colspan = "3" align="center"><input type="submit" value="Update description" title="Save changes" onclick="modifyDescriptionAndPhoto(complaintidvar.value);" /><input type="hidden" name="complaintNumber" value="' + xmlCompNo[i] + '" /></td></tr><tr><td colspan="2" align="center"><input type="hidden" name="complaintidvar" value="' + complaintid + '" /></td></tr></table</div></form>';
        else
            htmlForDescription = '<form name="descForm" enctype="multipart/form-data" method="POST" action="updateDescription.aspx" onSubmit="descForm.desc.value = cleanDescription(descForm.desc.value); descForm.submit()"><div id="ShortDiv" style="width:350px;"><span id="lbldesc" class="normal_text_bold">Description of complaint:<br/></span><table cellpadding="0" cellspacing="0" border="0"><tr><td colspan="2" class="normal_text"><textarea name="desc" id="desc" cols="30" rows="6">' + xmlDesc[i] + '</textarea></td></tr><tr><td colspan = "3" align="center"><input type="submit" value="Update description" title="Save changes" onclick="modifyDescriptionAndPhoto(complaintidvar.value);" /><input type="hidden" name="complaintNumber" value="' + xmlCompNo[i] + '" /></td></tr><tr><td colspan="2" align="center"><input type="hidden" name="complaintidvar" value="' + complaintid + '" /></td></tr></table</div></form>';
    }
    
    var summaryTab = new GInfoWindowTab("Summary", htmlOfComplaint);
    var descriptionTab = new GInfoWindowTab("Description", htmlForDescription);
    var imageTab = new GInfoWindowTab("Image", htmlForImage);
    var statusTab = new GInfoWindowTab("Status", htmlForStatus);
    
    tabbedArray = new Array(summaryTab, descriptionTab, imageTab,statusTab);
    //code ends for status tab
    
    var lati = xmlLat[i];
    var longi = xmlLng[i];
    var point = new GLatLng(lati,longi); 
    
    var marker = createTabbedMarker(point, tabbedArray, i);
    
    var minZoom = 9;
    var maxZoom = 18;
    markerIcon = marker.getIcon();
    
    if(typeOfComplaint == 'All') 
    {
        map.addOverlay(marker);
        if(lastComplaintRegistered)
        {
            if(latitudeOfLastComplaintRegistered == lati && longitudeOfLastComplaintRegistered == longi)
            {
                marker.openInfoWindowTabsHtml(tabbedArray);
                lastComplaintRegistered = !lastComplaintRegistered;
            }
        }
        currentDisplayedComplaints++;
    }
    else if(typeOfComplaint == "Potholes" && markerIcon.image == "../Images/" + get_cookie("potholeImage"))
    {
        map.addOverlay(marker);
        if(lastComplaintRegistered)
        {
            if(latitudeOfLastComplaintRegistered == lati && longitudeOfLastComplaintRegistered == longi)
            {
                marker.openInfoWindowTabsHtml(tabbedArray);
                lastComplaintRegistered = !lastComplaintRegistered;
            }
        }
        currentDisplayedComplaints++;
    }
    else if(typeOfComplaint == "WaterLogging" && markerIcon.image == "../Images/" + get_cookie("waterLoggingImage"))
    {
        map.addOverlay(marker);
        if(lastComplaintRegistered)
        {
            if(latitudeOfLastComplaintRegistered == lati && longitudeOfLastComplaintRegistered == longi)
            {
                marker.openInfoWindowTabsHtml(tabbedArray);
                lastComplaintRegistered = !lastComplaintRegistered;
            }
        }
        currentDisplayedComplaints++;
    }
    else if(typeOfComplaint == "DrainCleaning" && markerIcon.image == "../Images/" + get_cookie("drainCleaningImage"))
    {
        map.addOverlay(marker);
        if(lastComplaintRegistered)
        {
            if(latitudeOfLastComplaintRegistered == lati && longitudeOfLastComplaintRegistered == longi)
            {
                marker.openInfoWindowTabsHtml(tabbedArray);
                lastComplaintRegistered = !lastComplaintRegistered;
            }
        }
        currentDisplayedComplaints++;
    }
    else if(typeOfComplaint == "Other" && markerIcon.image == "../Images/" + get_cookie("othersImage"))
    {
        map.addOverlay(marker);
        if(lastComplaintRegistered)
        {
            if(latitudeOfLastComplaintRegistered == lati && longitudeOfLastComplaintRegistered == longi)
            {
                marker.openInfoWindowTabsHtml(tabbedArray);
                lastComplaintRegistered = !lastComplaintRegistered;
            }
        }
        currentDisplayedComplaints++;
    }
    
}

//function displays a busy marker on map
var busy = false;
function showMapLoading(flag) 
{
    //Check the flag and also check if already busy marker is added or not
	if (flag && busy == false) 
	{
		gBusyMarker = new GMarker(map.getCenter(), gBusyIcon);
		map.addOverlay(gBusyMarker);
		busy = true;    //after adding the busy marker make the busy icon true
	} 
	else 
	{
		// add a little delay before removing the busy-marker
		window.setTimeout('removeBusyMarker()',1000);
	}
}

//function removes the busy marker.
function removeBusyMarker()
{
	gBusyMarker.remove();
	busy = false;   //after removing the busy marker make the busy flag as false
}

// Add landmark' icons to the map
function addLandmarksToMap()
{
    var mgrOptions = { borderPadding: 50, maxZoom: 18, trackMarkers: true };
    var markerMgr = new GMarkerManager(map,mgrOptions);
    for(var j = 0; j < xmlLandmarks.length; j++)
    {
        var lati = xmlLandmarkLat[j];
        var longi = xmlLandmarkLng[j];
        var point = new GLatLng(lati,longi); 
        var marker =new GMarker(point, { icon:landmarkIcon, title:xmlLandmarks[j], clickable:false }); 
        var minZoom = 9;
        var maxZoom = 18;
        markerMgr.addMarker(marker,minZoom,maxZoom);
        map.addOverlay(marker);                        
    }
}

// function for open new infowindow with register complaint form
function openFormForLogComplaint(point)
{
    var matchll = /\(([-.\d]*), ([-.\d]*)/.exec( point );
    if ( matchll )
    { 
        var lon = parseFloat( matchll[2] );
        var lat = parseFloat( matchll[1] );
        lat = lat.toFixed(6);
        lon = lon.toFixed(6);
        
        //Condition added to restrict the user to register complaint within Pune boundary only
        if(lat >= 18.40 && lat <= 18.61 && lon >=73.55 && lon <= 74.10)
        {
            var nearestLandmarkIndex = GetNearestLandmark(xmlLandmarks.length, lat, lon);
            //debugger;
            var nearestLandmark = xmlLandmarkName[nearestLandmarkIndex];
            var idOfLandmark = xmlLandmarkID[nearestLandmarkIndex];
            var ward = xmlLandmarkWardName[nearestLandmarkIndex];
            var wardID = xmlLandmarkWardID[nearestLandmarkIndex];
            
            var html = '<body onload="javascript: document.getElementById(\"location\").focus();">\
                        <form name="complaintForm" enctype="multipart/form-data" method="POST" action="ComplaintRegister_Confirm.aspx" onSubmit="if((!checkFields(complaintForm.location.value))&&(limitAttach(complaintForm, complaintForm.uploadPhoto.value))) {complaintForm.description.value = cleanDescription(complaintForm.description.value); complaintForm.location.value = cleanDescription(complaintForm.location.value); complaintForm.uploadPhoto.value = cleanDescription(complaintForm.uploadPhoto.value); complaintForm.submit()} else { return false; }">\
                            <p>\
                                <table>\
                                    <tr>\
                                        <td align="center" colspan = "3" class="header_b"> Welcome! '+userName+', register your complaint.</td>\
                                    </tr>\
                                    <tr>\
                                        <td class="normal_text">\
                                            <INPUT TYPE="hidden" NAME="userName" VALUE="'+userName+'">\
                                            <INPUT TYPE="hidden" NAME="theLatitude" VALUE="'+lat+'">\
                                            <INPUT TYPE="hidden" NAME="theLongitude" VALUE="'+lon+'">\
                                            <INPUT TYPE="hidden" NAME="wardId" value="'+wardID+'">\
                                            <INPUT TYPE="hidden" NAME="nearlandmarkId" value="'+idOfLandmark+'">\
                                            <INPUT TYPE="hidden" NAME="theWard" VALUE="'+ward+'">Ward:'+ward+'\
                                        </td>\
                                        <td align="center" class="normal_text">\
                                            <INPUT TYPE="hidden" NAME="nearlandmark" VALUE="'+nearestLandmark+'">\
                                            Nearest Landmark:'+nearestLandmark+'\
                                        </td>\
                                    </tr>\
                                    <tr>\
                                        <td class="normal_text">Location:</td>\
                                        <td class="normal_text" colspan="2"><textarea name="location" id="location" rows="2" cols="23"></textarea></td>\
                                    </tr>\
                                    <tr>\
                                        <td class="normal_text" >Category:</td>\
                                        <td class="normal_text">\
                                            <select name="theType" style="width: 121px">';
            // break for adding categories in dropdown list
            for(var i = 0; i < xmlCategory.length; i++)
            {
                html = html + '<option value="' + xmlCategoryID[i] + '">' + xmlCategoryName[i] + '</option>';
            }
            //continue with html
            html = html + '&nbsp;</select>\
                                        </td>\
                                    </tr>\
                                    <tr>\
                                        <td class="normal_text">Upload Photo:</td>\
                                        <td class="normal_text" colspan="2"><INPUT type="file" size="15" width="120px" id="uploadPhoto" name="PhotoUploader"/></td>\
                                    </tr>\
                                    <tr>\
                                        <td class="normal_text">Description:</td>\
                                        <td class="normal_text" colspan="2"><textarea name="description" id="description" rows="2" cols="23"></textarea>\
                                            <INPUT type="hidden" name="MAX_FILE_SIZE" value="409600">\
                                        </td>\
                                    </tr>\
                                    <tr>\
                                        <td colspan = "3" align="center">\
                                            <input type="submit" value="SEND" />&nbsp;&nbsp;&nbsp;<input type="reset" value="CLEAR" />\
                                        </td>\
                                    </tr>\
                                </table>\
                            </p>\
                        </form>\
                        </body>';
            // end of html creation.
            
            var newMarker = createMarker(point, html);
            var mgrOptionsNew = { borderPadding: 50, maxZoom: 18, trackMarkers: true };
            //creating a marker manager and adding markers to it to be displayed for zoom level 9 and 18.
            var markerMgrNew = new GMarkerManager(map,mgrOptionsNew);
            markerMgrNew.addMarker(newMarker,9,18);
            map.addOverlay(newMarker);                                
            // var GInfoWindowOptions.maxWidth(50);
            //var infoWinOptsNew = { maxWidth:5 };
            newMarker.openInfoWindowHtml(html);
            oldMarker = newMarker;
        }
        else
        {
            alert("SORRY! You cannot register complaint outside Pune");
	        map.panTo(new GLatLng(18.52, 73.85));//Display center of Pune on the map.
        }
         
    } 
    else
    { 
        window.alert = "<b>Error extracting info from</b>:" + point + ""; 
    }
}

//toggle filter panel
var filterHeight;
var helpHeight;
var isFilterPanelOpened = false;
var isHelpPanelOpened = false;
function toggleFilterPanel(divId)
{            
    var d = getObject(divId);
    if(divId == 'divHelp')
    {
        var imgElm = getObject('helpUpDown');
        if (isHelpPanelOpened)
        {
            imgElm.setAttribute("src", "../Images/collapse.jpg");
            d.style.display = 'block';
        }
        else
        {
            imgElm.setAttribute("src", "../Images/expand.jpg");
            d.style.display = 'none';
        }
        isHelpPanelOpened = !isHelpPanelOpened;
    }
    else
    {
        var imgElm = getObject('filterUpDown');
        var trElm = getObject('trFilterImage');
        if (isFilterPanelOpened)
        {
            imgElm.setAttribute("src", "../Images/collapse.jpg");
            d.style.display = 'block';
        }
        else
        {
            imgElm.setAttribute("src", "../Images/expand.jpg");
            d.style.display = 'none';
        }
        isFilterPanelOpened = !isFilterPanelOpened;
    }
}


var click = false;
var nMarker1;
var point1;

// function draws the map and some features / tools as soon as the page is loaded
function Load() 
{
    GetComplaintData();
    GetStatusData();
    GetCategoryData();
    GetLandmarkData();
    GetWardData();
    
    // colispe leftpan navigation's items other then complaints group
    var imgPar='find';
    for(i=0;i<7;i++)
    {
        var finalId=imgPar+i;
        if(document.getElementById(finalId))
        {
            var linkid='Img123'+i;
            var divid='Menu123'+i;
            toggleExceptOne(linkid,divid);
            break;
        }
    }  
    
    // chk the leftpan navigation's status
    var checkStatus=get_cookie('ppkcookie2');
    if(checkStatus=='hide')
    {
        toggleOnLoad();
    }
    toggleFilterPanel('divFilters'); // close filter panel of maps
    toggleFilterPanel('divHelp');
    
    //loadWardsToDropdowns();
    if (GBrowserIsCompatible()) 
    {
        loadMapPreferences();
        map = new GMap2(document.getElementById("Gmap"));
        map.setCenter(new GLatLng(18.52, 73.85), 12); //center to pune and zoom level is 12     
        map.addControl(new GMapTypeControl());
        map.addControl(new GLargeMapControl());
        map.disableDoubleClickZoom();
        map.enableScrollWheelZoom();
        
        //Code added to load the map of previously saved type 
        if(mapType == "Satellite")
            map.setMapType(G_SATELLITE_MAP);
        else if(mapType == "Hybrid")    
            map.setMapType(G_HYBRID_MAP);
        else if(mapType == "Map")    
            map.setMapType(G_NORMAL_MAP);
        
        panToWard(); //center to pune and zoom level is 12
       
        //alert('bfr afterreading()');
        window.setTimeout('afterReading()', 5000) ;             
    }
    else
    {
        alert('Sorry your browser does not support GMap');
    }
}


//Method for single click event
function clicked()
{
    if(!nMarker1)
    {
        if(userName == '#$^')
        {
            var infoHtml = '<p><form name="myForm" action="../Home/Login.aspx" method="post"><table><tr><td align="center" class="normal_text">Please <b>Login</b> to log a complaint</td></tr><tr><td align="center"><br><input type="hidden" name="RequestPagePath" id="hiddenfield" value="' + currentPage + '" /><input type="submit" name="btnLogin" value="Login" title="Click to login"  /></td></tr></table></form></p>';
            map.openInfoWindowHtml(map.getCenter(),infoHtml);
        }
        else
        {
            var zoomLevel = map.getZoom();
            //allowing marking complaints only for the zoom range.
            if(zoomLevel >=9 && zoomLevel <=18)
            {
                if(!nMarker1)
                {
                    if (!oldMarker)
                    {
                        openFormForLogComplaint(point1);
                    }
                    else
                    {
                        map.removeOverlay(oldMarker);
                        openFormForLogComplaint(point1);
                    }
                }
            }
            else 
            {
                if(zoomLevel <9)
                {
                    alert('Please zoom in to log a complaint');
                }
                else if(zoomLevel>18)
                {
                    alert('Please zoom out to log a complaint');
                }
            }
        }
   }
}


// loads initial ward list to ward dropdown box
function loadWardsToDropdowns()
{
    var wardDropdown = document.CreateMarkers.wardList;
    for(var i = 0; i < xmlWards.length; i++)
	{
		wardDropdown.options[i + 1] = new Option(xmlWardName[i], xmlWardID[i]);
	}
}

// function to pan map to ward selected
function wardListChanged()
{
    var landmarkDropdown = document.CreateMarkers.landmarkList;
    var wardDropdown = document.CreateMarkers.wardList;
    var selectedWardValue = wardDropdown.options[wardDropdown.selectedIndex].value;
    landmarkDropdown.options.length = 0;
    if(selectedWardValue == 0)
        landmarkDropdown.options[0] = new Option('-- No Landmark --', -1);
    else
    {
        LatitudeOfWard = xmlWardLat[wardDropdown.selectedIndex - 1];
        LongitudeOfWard = xmlWardLng[wardDropdown.selectedIndex - 1];
        panToWard();
        var i = 1;
        landmarkDropdown.options[0] = new Option('-- Select Landmark --', -1);
        for(var j = 0; j < xmlLandmarks.length; j++)
        {
            if(xmlLandmarkWardID[j] == selectedWardValue)
            {
                landmarkDropdown.options[i] = new Option(xmlLandmarkName[j], j);
                i++;
            }
        }
        if(i == 1)
            landmarkDropdown.options[0] = new Option('-- No Landmark --', 0);
    }
}

// function to panning map to respective landmark
function landmarkListChanged()
{
    var index = document.CreateMarkers.landmarkList.options[document.CreateMarkers.landmarkList.selectedIndex].value;
    
    if(index != -1)
    {
        LatitudeOfWard = xmlLandmarkLat[index];
        LongitudeOfWard = xmlLandmarkLng[index];
        panToWard();
    }
}

// function for display only logged user's complaints of all categories
function showMyComplaints(category)
{
    typeOfComplaint = category;
    isMyComplaintsSelected = true;
    if(userName != '#$^')
    {
        map.clearOverlays();
        
        showMapLoading(true);//for displaying the busy icon
        
        addLandmarksToMap();
        currentDisplayedComplaints = 0;
        
        for(var i = 0; i < xmlComplaints.length; i++)
        {
            if(xmlUserName[i] == userName)
                addComplaintsToMap(i);
        }
        var totalComplaintSpan = getObject('spanTotal');
        var currentCount = getObject('spanInitialCount');
        var categorySpan = getObject('spanCategory');
        var endLabelSpan = getObject('spanEndLabel');
        categorySpan.style.display = 'inline';
        categorySpan.innerHTML = ' of your '
        totalComplaintSpan.innerHTML = currentDisplayedComplaints + ' ';
        currentCount.innerHTML = currentDisplayedComplaints + ' ';
        endLabelSpan.innerHTML = " logged by you";
      //  fillPageDropdown(currentDisplayedComplaints);
    }
    showMapLoading(false);
}

// function for display complaints for all categories and users
function showAllComplaints()
{
    isMyComplaintsSelected = false;
    typeOfComplaint = "All";
    map.clearOverlays();
    
    showMapLoading(true);//for displaying the busy icon
    addLandmarksToMap();
    for(var i = 0; i < xmlComplaints.length; i++)
    {
        addComplaintsToMap(i);
    }
    var totalComplaintSpan = getObject('spanTotal');
    var currentCount = getObject('spanInitialCount');
    var categorySpan = getObject('spanCategory');
    var endLabelSpan = getObject('spanEndLabel');
    categorySpan.style.display = 'none';
    totalComplaintSpan.innerHTML = xmlComplaints.length + ' ';
    currentCount.innerHTML = xmlComplaints.length + ' ';
    endLabelSpan.innerHTML = " complaints";
    //fillPageDropdown(complaintNumberOfComplaint.length);
    
    showMapLoading(false);
}

//function draws complaints on the map for category passed as an argument
function showComplaints(category)
{
    complaintType = category;
    map.clearOverlays();
    
    showMapLoading(true);//for displaying the busy icon
    
    addLandmarksToMap();
    currentDisplayedComplaints = 0;
    if(isMyComplaintsSelected)
    {
        showMyComplaints(category);
    }
    else
    {
        typeOfComplaint = category;
        for(var i = 0; i < xmlComplaints.length; i++)
        {
            addComplaintsToMap(i);
        }
    }
    var totalComplaintSpan = getObject('spanTotal');
    var currentCount = getObject('spanInitialCount');
    var categorySpan = getObject('spanCategory');
    var endLabelSpan = getObject('spanEndLabel');
    categorySpan.style.display = 'inline';
    categorySpan.innerHTML = ' ' + category + ' ';
    totalComplaintSpan.innerHTML = currentDisplayedComplaints + ' ';
    currentCount.innerHTML = currentDisplayedComplaints + ' ';
    endLabelSpan.innerHTML = ' ' + category + ' complaints';
    //fillPageDropdown(currentDisplayedComplaints);
    
    showMapLoading(false);
}

function pageChanged()
{
    var pageDropdown = document.CreateMarkers.complaintPageDropdown;
    var selectedPageIndex = pageDropdown.options[pageDropdown.selectedIndex].value;
    var currentCount = getObject('spanInitialCount');
    if(selectedPageIndex != 0)
    {
        currentCount.innerHTML = pageDropdown.options[pageDropdown.selectedIndex].text + ' ';
    }
    else
    {
        currentCount.innerHTML = totalComplaints + ' ';
        map.clearOverlays();
        addLandmarksToMap();
        currentDisplayedComplaints = 0;
        if(isMyComplaintsSelected)
        {
            for(var i = 0; i < xmlComplaints.length; i++)
            {
                if(xmlUserName[i] == userName)
                    addComplaintsToMap(i);
            }
        }
        else
        {
            for(var i = 0; i < xmlComplaints.length; i++)
            {
                addComplaintsToMap(i);
            }
        }
    }
}

function fillPageDropdown(endLimit)
{
    totalComplaints = endLimit;
    var pageDropdown = document.CreateMarkers.complaintPageDropdown;
    pageDropdown.options.length = 0; // empty the dropdown box
    if(endLimit != 0)
    {
        pageDropdown.options[0] = new Option("-- All --", 0); // first option will be All complaints
        var pageIndex = 0; // set the initial page index
        var startIndex = pageIndex * pageSize + 1; // first value of current page
        var endIndex = startIndex + pageSize - 1; // end value of current page
        while(endIndex < endLimit)
        {
            var pageText = startIndex + ' - ' + endIndex;
            pageIndex++;
            pageDropdown.options[pageIndex] = new Option(pageText, (pageIndex));
            startIndex = pageIndex * pageSize + 1;
            endIndex = startIndex + pageSize - 1;
        }
        if(endIndex >= endLimit)
        {
            endIndex = endLimit;
            var pageText = startIndex + ' - ' + endIndex;
            pageIndex++;
            pageDropdown.options[pageIndex] = new Option(pageText, (pageIndex));
        }
    }
    else
    {
        pageDropdown.options[0] = new Option("No Complaints", 0);
    }
}


function saveMapPreferences()
{
   // alert('saving map prefs');
    var zoomLevel = map.getZoom();
    var cookie_string = "pmcMapZoomLevelCookie=" + escape (zoomLevel);
    document.cookie = cookie_string; // save zoomlevel to cookie
    
    var centerPoint = map.getCenter();
    cookie_data = centerPoint.lat();
    cookie_string = "pmcMapLatitudeCookie=" + escape (cookie_data);
    document.cookie = cookie_string; // save center point
    
    cookie_data = centerPoint.lng();
    cookie_string = "pmcMapLongitudeCookie=" + escape (cookie_data);
    document.cookie = cookie_string;
    
    cookie_data = map.getCurrentMapType().getName();
    cookie_string = "pmcMapTypeCookie=" + escape (cookie_data);
    document.cookie = cookie_string;
    
    //for complaint type -Brijesh
    cookie_data = complaintType;
    cookie_string = "pmcComplaintTypeCookie=" + escape(cookie_data);
    document.cookie = cookie_string;
    
    cookie_data = isMyComplaintsSelected;
    cookie_string = "pmcMyComplaints=" + escape(cookie_data)
    document.cookie = cookie_string;
     
 //   alert('saving complete');
   // GUnload();
}

function loadMapPreferences()
{
    var cookieValue = get_cookie("pmcMapComplaintCookie");
    if(cookieValue != null)
    {
        var cookieArray = cookieValue.split("&");
        var a = cookieArray[0].split("=");
        latitudeOfLastComplaintRegistered = a[1];
        a = cookieArray[1].split("=");
        longitudeOfLastComplaintRegistered = a[1];
        lastComplaintRegistered = true;
        document.cookie = "pmcMapComplaintCookie=0;expires=-30;";
    }
    else
        lastComplaintRegistered = false;
        
        
    cookieValue = get_cookie("pmcMapZoomLevelCookie");
    if(cookieValue != null)
        previousZoomLevel = parseInt(cookieValue);
    else
        previousZoomLevel = parseInt(defaultZoomLevel);
        
    cookieValue = get_cookie("pmcMapLatitudeCookie");
    if(cookieValue != null)
        LatitudeOfWard = parseFloat(cookieValue);
    else
        LatitudeOfWard = parseFloat(defaultLatitude);
        
    cookieValue = get_cookie("pmcMapLongitudeCookie");
    if(cookieValue != null)
        LongitudeOfWard = parseFloat(cookieValue);
    else
        LongitudeOfWard = parseFloat(defaultLongitude);
        
    //for map type  -Brijesh    
    cookieValue  = get_cookie("pmcMapTypeCookie");    
    if(cookieValue != null)
        mapType = cookieValue;
    else
        mapType = defaultMapType;       
            
    //for complaint type   -Brijesh
    cookieValue = get_cookie("pmcComplaintTypeCookie");
    if(cookieValue != null)    
        complaintType = cookieValue;
    else
        complaintType = defaultComplaintType;    
        
    cookieValue = get_cookie("pmcMyComplaints");
    if(cookieValue != null)    
        {
            if(cookieValue == "true" && userName != "#$^")//also check whether user logged-in or not
                isMyComplaintsSelected = true;
            else
                {
                    isMyComplaintsSelected = false;
                    complaintType = defaultComplaintType;
                }
        }   
    else
        isMyComplaintsSelected = false;        
}   

//On Search button click  -Brijesh
function Search_Click(ComplaintNo)
{
    var compNo = document.getElementById(ComplaintNo).value;
    
    if(compNo != "")
    {
        var latOfComp, lonOfComp;
        for(var index = 0; index < xmlComplaints.length; index++)
        {
                if(xmlCompNo[index] == compNo)
                {
                    latOfComp = xmlLat[index];
                    lonOfComp = xmlLng[index];
                    break;//as soon as complaint found go out of for loop
                }
        }
        if(index == xmlComplaints.length)//If complaint not found
        {
            alert('Invalid Complaint Number.');
        }
        else
        {
            var cookie_data = "latitudeOfCompalint=" + latOfComp + "&longitudeOfComplaint=" + lonOfComp + "&SearchComplaint"; 
            var cookie_string = "pmcMapComplaintCookie=" + escape(cookie_data);
            document.cookie = cookie_string;
            
            Load();//Load the map to pan to the given complaint and open the infowindow for that complaint
            showMapLoading(true);
            toggleFilterPanel('divHelp');//Hide help panel
            toggleFilterPanel('divFilters');//Hide ward selection panel
            showMapLoading(false);
        }
    }
    else
    {
        alert('Complaint Number cannot be empty.');
    }
}

//Code to get the data from XMLComplaint file
function GetComplaintData()
{
    var request = GXmlHttp.create();
    request.open("GET", "../ComplaintsAndFeedback/XMLComplaints.xml", true);
    request.onreadystatechange = function(){
                                                if(request.readyState == 4)
                                                {
                                                    //alert('COMPLETED1');
                                                    xmlCompleted(1);
                                                    var xmlDoc = GXml.parse(request.responseText);
                                                    //var xmlDoc = request.responseXML;
                                                    //if(xmlDoc.documentElement != null)
                                                    xmlComplaints = xmlDoc.documentElement.getElementsByTagName("complaint");
                                                    for(var index=0; index<xmlComplaints.length; index++)
                                                    {
                                                        xmlLat[index] = parseFloat(xmlComplaints[index].getAttribute("lat"));
                                                        xmlLng[index] = parseFloat(xmlComplaints[index].getAttribute("lng"));
                                                        xmlCompStatusId[index] = parseInt(xmlComplaints[index].getAttribute("statusID"), 10);
                                                        xmlStatusType[index] = xmlComplaints[index].getAttribute("statusType");
                                                        xmlComment[index] = xmlComplaints[index].getAttribute("comment");  
                                                        xmlLocation[index] = xmlComplaints[index].getAttribute("location");
                                                        xmlUserName[index] = xmlComplaints[index].getAttribute("loggedByName");
                                                        xmlLoginId[index] = xmlComplaints[index].getAttribute("loggedById");
                                                        xmlDate[index] = xmlComplaints[index].getAttribute("date");
                                                        xmlCompNo[index] = xmlComplaints[index].getAttribute("complaintNumber");
                                                        xmlCompCategory[index] = xmlComplaints[index].getAttribute("category");
                                                        xmlDesc[index] = xmlComplaints[index].getAttribute("description");
                                                        xmlImgPath[index] = xmlComplaints[index].getAttribute("imagePath");
                                                        xmlCompWard[index] = xmlComplaints[index].getAttribute("ward");
                                                        xmlLandmark[index] = xmlComplaints[index].getAttribute("landmark");                                                      
                                                    }     
                                                   
                                                }
                                           } 
    request.send(null);   
}


//Code to get the data from XMLComplaintStatus file
function GetStatusData()
{
    var request1 = GXmlHttp.create();
    request1.open("GET", "../ComplaintsAndFeedback/XMLComplaintStatus.xml", true);
    request1.onreadystatechange = function(){
                                                if(request1.readyState == 4)
                                                {
                                                    //var xmlDoc = GXml.parse(request.responseText);
                                                    //alert('COMPLETED2');
                                                    xmlCompleted(2);
                                                    var xmlDoc = request1.responseXML;
                                                    //if(xmlDoc.documentElement != null)
                                                    xmlStatus = xmlDoc.documentElement.getElementsByTagName("status");
                                                    for(var index=0; index<xmlStatus.length; index++)
                                                    {
                                                        xmlStatusID[index] = parseInt(xmlStatus[index].getAttribute("statusID"), 10);
                                                        xmlStatusName[index] = xmlStatus[index].getAttribute("statusName");
                                                    } 
                                                }
                                           } 
    request1.send(null);   
}

//Code to get the data from XMLComplaintCategory file
function GetCategoryData()
{
    var request2 = GXmlHttp.create();
    request2.open("GET", "../ComplaintsAndFeedback/XMLComplaintCategory.xml", true);
    request2.onreadystatechange = function(){
                                                if(request2.readyState == 4)
                                                {
                                                    //var xmlDoc = GXml.parse(request.responseText);
                                                    //alert('COMPLETED3');
                                                    xmlCompleted(3);
                                                    var xmlDoc = request2.responseXML;
                                                    //if(xmlDoc.documentElement != null)
                                                    xmlCategory = xmlDoc.documentElement.getElementsByTagName("category");
                                                    for(var index=0; index<xmlCategory.length; index++)
                                                    {
                                                        xmlCategoryID[index] = parseInt(xmlCategory[index].getAttribute("categoryID"), 10);
                                                        xmlCategoryName[index] = xmlCategory[index].getAttribute("categoryName");
                                                    }
                                                }
                                           } 
    request2.send(null);   
}

//Code to get the data from XMLLandmarks file
function GetLandmarkData()
{
    var request3 = GXmlHttp.create();
    request3.open("GET", "../ComplaintsAndFeedback/XMLLandmarks.xml", true);
    request3.onreadystatechange = function(){
                                                if(request3.readyState == 4)
                                                {
                                                    //var xmlDoc = GXml.parse(request.responseText);
                                                    //alert('COMPLETED4');
                                                    xmlCompleted(4);
                                                    var xmlDoc = request3.responseXML;
                                                    //if(xmlDoc.documentElement != null)
                                                    xmlLandmarks = xmlDoc.documentElement.getElementsByTagName("landmark");
                                                    for(var index=0; index<xmlLandmarks.length; index++)
                                                    {
                                                        xmlLandmarkID[index] = parseInt(xmlLandmarks[index].getAttribute("landmarkID"), 10);
                                                        xmlLandmarkName[index] = xmlLandmarks[index].getAttribute("landmarkName");
                                                        xmlLandmarkWardID[index] = parseInt(xmlLandmarks[index].getAttribute("landmarkWardID"), 10);
                                                        xmlLandmarkWardName[index] = xmlLandmarks[index].getAttribute("landmarkWardName");
                                                        xmlLandmarkLat[index] = parseFloat(xmlLandmarks[index].getAttribute("latitude"));
                                                        xmlLandmarkLng[index] = parseFloat(xmlLandmarks[index].getAttribute("longitude"));
                                                    }
                                                }
                                           } 
    request3.send(null);   
}

//Code to get the data from XMLWards file
function GetWardData()
{
    var request4 = GXmlHttp.create();
    request4.open("GET", "../ComplaintsAndFeedback/XMLWards.xml", true);
    request4.onreadystatechange = function(){
                                                if(request4.readyState == 4)
                                                {
                                                    //var xmlDoc = GXml.parse(request.responseText);
                                                    //alert('COMPLETED5');
                                                    xmlCompleted(5);
                                                    var xmlDoc = request4.responseXML;
                                                    //if(xmlDoc.documentElement != null)
                                                    xmlWards = xmlDoc.documentElement.getElementsByTagName("ward");
                                                    for(var index=0; index<xmlWards.length; index++)
                                                    {
                                                        xmlWardID[index] = parseInt(xmlWards[index].getAttribute("wardID"), 10);
                                                        xmlWardName[index] = xmlWards[index].getAttribute("wardName");
                                                        xmlWardLat[index] = parseFloat(xmlWards[index].getAttribute("latitude"));
                                                        xmlWardLng[index] = parseFloat(xmlWards[index].getAttribute("longitude"));
                                                    }  
                                                }
                                           } 
    request4.send(null);   
}

function xmlCompleted(index)
{
    completed[index-1] = true;
    
    for(var i=0; i<completed.length; i++)
    {
        if(completed[i] != true)
            break;
    }
    if(i == completed.length)
    {
        isXMLRead = true;
        //alert('DONE');
    }    
}

function message()
{
    alert('waiting...');
}


function afterReading()
{
    //alert('in afterReading');
    if(isXMLRead == true)
        {
            //alert('reading done');
            loadWardsToDropdowns();
            showMapLoading(true);   //start displaying map busy Icon.
            //Show complaint depending on the cookie value-Brijesh
            if((complaintType == "" || complaintType == "All") && isMyComplaintsSelected == false)
                showAllComplaints();
            else
                showComplaints(complaintType);
                
                
                
            //Code added to draw the invisible boundary around Pune
            var ver = [];
	        ver.push(new GLatLng(18.61, 73.55));
	        ver.push(new GLatLng(18.61, 74.10));
	        ver.push(new GLatLng(18.40, 74.10));
	        ver.push(new GLatLng(18.40, 73.55));
	        ver.push(new GLatLng(18.61, 73.55));
	        map.addOverlay(new GPolyline(ver, "#ffff00", 3, 0));
          
            //Listener added to capture the drag
            GEvent.addListener(map, "dragstart", function()
            {
                showMapLoading(true);
            }); 
          
            //Listener added to capture the dragend event to restrict the user from dragging map outside Pune
            GEvent.addListener(map, "dragend", function()
            {
                //debugger;
                showMapLoading(false);
                var bound = map.getBounds();
                var sw = bound.getSouthWest();
                var ne = bound.getNorthEast();
                
                if(sw.x >= 73.55 && ne.x <= 74.10 && sw.y >= 18.40 && ne.y <= 18.61)
                {
                }
                //If the visible rectangle part of the map doesn't fall inside the boundary pan to the center of Pune
                else
                {
                    alert("SORRY! You can not drag the map outside Pune");
                    map.setZoom(12);
                    map.panTo(new GLatLng(18.52, 73.85));//Display center of Pune on the map.                
                }
            });
            // add zoom listener to the map
            GEvent.addListener(map, "zoomend", function() 
            {  
                //debugger;
                var changedZoomLevel = map.getZoom();
                if(changedZoomLevel <9 )
                {
                    map.clearOverlays();                            
                }
                else
                {
                    showMapLoading(true);
                    if(isMyComplaintsSelected)
                    {
                        //showMapLoading(true);
                        showMyComplaints(typeOfComplaint);
                        //showMapLoading(false);
                    }
                    else
                    {
                        map.clearOverlays();
                        addLandmarksToMap();
                        for(var i = 0; i < xmlComplaints.length; i++)
                        {
                            addComplaintsToMap(i);
                        }
                    }
                    showMapLoading(false);
                }
                
            });
            
            var timeouts = [];
            //Listener for single click
            GEvent.addListener(map, "click", function(nMarker, point)
            {
                nMarker1 = nMarker;
                point1 = point;
                click = true;
                
                //Single click method is put under delay to capture the double click
                timeouts.push(setTimeout('clicked()',250));
                //Code added for zooming in for double click event
                GEvent.addListener(map, "dblclick", function()
                {
                    //Condition added to zoom-in only once for each double click 
                    if(click)
                    {
                        if(oldMarker){ map.removeOverlay(oldMarker); }//If old(temporary) marker exists remove it
                        map.zoomIn();
                        click = false;
                        //If double clicked then cancel all the timers
                        for(var i = 0; i < timeouts.length; i++)
                            clearTimeout(timeouts[i]);
                    }   
                });
                
            });    
            
             showMapLoading(false);   //stop displaying map busy Icon.
        }   
        else
        {
            alert('ERROR');
        }
}