// Global variables

//Parcel Opacity
var egupz_opacity = .8;

//Holds the root of the plugin
/*var egupz_root = location.href;
if(egupz_root.indexOf('wp-admin') > -1){
    egupz_root = egupz_root.substr(0, egupz_root.indexOf('/wp-admin'));
} else {
    egupz_root = egupz_root.substr(0, egupz_root.lastIndexOf('/'));
}
egupz_root += '/wp-content/plugins/epistemicgames-urbanplanning-zoning';
*/

var egupz_root = '';

//Holds the GMap control.
var egupz_map;

//Holds the current parcel polygon.
var egupz_polyShape;

//Holds the line for the current parcel being drawn.
var egupz_polyLine;

//Holds the lat/lng positions for the current parcel.
var egupz_polyPoints = new Array();

//Holds the square draggable end points for the current parcel.
var egupz_markers = new Array();

//For use on the Admin -> Zone Code tab. Selects a color code for the zone.
function egupz_pickColor(color){
	
        var element = document.getElementById('egupz_zone_color');
        element.value = color;
        var element = document.getElementById('egupz_color_sample');
        element.style.backgroundColor = '#'+color;
}

//For use on the Admin -> Maps tab. Copies the current position and zoom level from the map to the Map form.
function egupz_SavePositionControl() { }
egupz_SavePositionControl.prototype = new GControl();
egupz_SavePositionControl.prototype.getDefaultPosition = function() {
        return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(50,8));
}
egupz_SavePositionControl.prototype.initialize = function(map) {
        var container = document.createElement("div");
        var control= document.createElement("div");
        control.title= "Save actual position and zoomlevel";
        control.className= "egupz_map_button";
        container.appendChild(control);
        control.appendChild(document.createTextNode("Save Position"));
        GEvent.addDomListener(control, "click", function() {
                var center = map.getCenter(); var zoom = map.getZoom();
		
                var form = document.getElementById('egupz_one_map');
	
                form.elements["zoom"].value = zoom;
                var centerlat = center.toUrlValue().substring(0, center.toUrlValue().indexOf(','));
                var centerlong = center.toUrlValue().substring(center.toUrlValue().indexOf(',') + 1, center.toUrlValue().length -1);
                form.elements["center_lat"].value = centerlat;
                form.elements["center_long"].value = centerlong;
                egupz_updateFormLoadMap();
                alert("Copied Position: "+center.toUrlValue()+"\nZoomlevel: "+zoom+" Click 'Update' to save.");
		
        });

        map.getContainer().appendChild(container);
        return container;
}

//Opens the dialog box on the map for viewing/saving parcel data.
function egupz_openWindow(admin){
	
        if(egupz_markers.length){

                var form = document.getElementById('egupz_edit_parcel_form_template');

                //clear the old latlng inputs
                egupz_clearLatLngs(form);

                var latlng = '';

                var newField = '';

                for(i = 0; i < egupz_markers.length; i++) {

                        latlng=egupz_markers[i].getLatLng();

                        latlng = latlng.toString();

                        try{
                                newField = document.createElement("<input name=\"latlng[]\">");
                        } catch (e) {
                                newField = document.createElement("input");
                                newField.name = "latlng[]";
                        }
                        newField.type = "hidden";
                        newField.value = latlng;

                        form.appendChild(newField);

                }

                if(admin){
                        var html = egupz_saveParcelForm();
                } else {
                        var html = egupz_changeCodeForm();
                }

                if(html){
                        egupz_map.openInfoWindowHtml(egupz_markers[0].getLatLng(), html);
                }
        } else {
                alert("No parcel selected.");
        }
}

//Reads the hidden lat/long points for the current parcel.
function egupz_getParcelInfo(){
	
        //load json string into object

        var p = JSON.parse(document.getElementById('egupz_parcels').innerHTML);

        var check_latlng=egupz_markers[0].getLatLng().toString();
	
        check_latlng = check_latlng.replace(/ /g,"");
        
        var check = egupz_getParcelInfoJSONLoop(check, p, check_latlng)
                
        return check;

}

//Loops through the lat/long point sets to find the ones that match the current parcel.
function egupz_getParcelInfoJSONLoop(check, p, check_latlng){
	
	
        for(var parcels in p) {
                parcels = p[parcels];
                for(var parcel in parcels){
                        one_parcel = parcels[parcel];
                        parcel_id = one_parcel.parcel_id;

                        latlngs = one_parcel.latlngs;
                        for(var latlng in latlngs) {
                                one_latlng = latlngs[latlng].latlng;
                                one_latlng = one_latlng.replace(/ /g,"");
				
                                if(check_latlng == one_latlng){
                                        //alert(check_latlng + ' ' + one_latlng);
                                        check = one_parcel;
                                        break;
                                }
                        }
                        if(check){
                                break;
                        }
                }
                if(check){
                        break;
                }
        }
	
        return check;
}

//Resets the current lat/long points so you can move to the next parcel.
function egupz_clearLatLngs(form){
	
        var check=1;
        var max=10;
        var cnt = 0;
	
        while(check && cnt < max){
	
                for(i=0; i<form.elements.length; i++){

                        if(form.elements[i].name == 'latlng[]'){

                                form.removeChild(form.elements[i]);
                        }
                }

                check=0;
	
                for(i=0; i<form.elements.length; i++){

                        if(form.elements[i].name == 'latlng[]'){

                                check=1;
                        }
                }

                cnt++;
        }

        if(cnt == max){

                alert("There has been a javascript error, please reload the page.");

        }

}

//Modifies the value of an html input element (IE compatible).
function egupz_IEmodifyInputValue(form_id, element_name, val){
		
        var form = document.getElementById(form_id);
        var element;
        for(i=0;i<form.childNodes.length;i++){
		
                if(form.childNodes[i].name == element_name){
			
                        element = form.childNodes[i];
                        break;
                }
        }
	
        element.value = val;

}

//Modifies the value of an html select element (IE compatible).
function egupz_IEmodifySelected(form_id, element_name, val){
		
        var form = document.getElementById(form_id);
        var element;
        for(i=0;i<form.childNodes.length;i++){
	
		
                if(form.childNodes[i].name == element_name){
		
                        element = form.childNodes[i];
                        break;
                }
        }

        if(element){
                for(i=0;i<element.childNodes.length;i++){
		
                        if(element.childNodes[i].value == val){

                                element.childNodes[i].selected = true;
                                break;
                        }

                }
        }
}

//Modifies the value of an html input element (IE compatible).
function egupz_saveParcelForm() { 
	
        var parcel = egupz_getParcelInfo();
	
        var form = document.getElementById('egupz_edit_parcel_form_template');

        try {

                form.elements["name"].type = 'hidden';
                form.elements["name"].value = '';
                form.elements["parcel_height"].type = 'hidden';
                form.elements["parcel_height"].value = '';
		
        } catch (e) {

                egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'name', '');
                egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'parcel_height', '');
        }

        if(parcel){

                for(i=0;i<form.elements["default_zone_id"].options.length;i++){
			
			
			
                        if(form.elements["default_zone_id"].options[i].value == parcel.default_zone_id){

                                egupz_IEmodifySelected('egupz_edit_parcel_form_template', "default_zone_id", parcel.default_zone_id);
                                form.elements["default_zone_id"].options[i] = new Option(form.elements["default_zone_id"].options[i].text, form.elements["default_zone_id"].options[i].value, 'TRUE');

                        } else {
			
                                var text = form.elements["default_zone_id"].options[i].text;
                                var value = form.elements["default_zone_id"].options[i].value;

                                form.elements["default_zone_id"].options[i] = new Option(text,value);
                        }
                }

                egupz_IEmodifySelected('egupz_edit_parcel_form_template', "default_zone_id", parcel.default_zone_id);

                try {
		
                        form.elements["id"].value = parcel.parcel_id;
                        form.elements["name"].value = parcel.name;
                        form.elements["parcel_height"].value = parcel.parcel_height;

                } catch (e) {

                        egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'id', parcel.parcel_id);
                        egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'name', parcel.name);
                        egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'parcel_height', parcel.parcel_height);

                }
		
        } else {
                try {

                        egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'id', 0);

                } catch (e) {

                        form.elements["id"].value = "0";
                }
        }

        var area = egupz_polyShape.getArea()*3.2808399;
        try {

                egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'area', area);

        } catch (e) {

                form.elements["area"].value = area;
        }

        document.getElementById('egupz_show_area_span').innerHTML = Math.round(area*Math.pow(10,2))/Math.pow(10,2);
;

        try {
		
                form.elements["name"].type = 'text';
                form.elements["parcel_height"].type = 'text';

		
        } catch (e) {
		
        }
	
        var s = document.getElementById('egupz_edit_parcel_div').innerHTML;

	
        s = s.replace("egupz_edit_parcel_form_template", "egupz_edit_parcel_form");
	
        return (s);
}

//Parses the html to be displayed in the InfoWindow.
function egupz_changeCodeForm() {
	
        var parcel = egupz_getParcelInfo();
	
        var form = document.getElementById('egupz_edit_parcel_form_template');

        var s = null;
	
        if(parcel){

                if(parcel.status == 'incomplete'){

                        for(i=0;i<form.elements["zone_code_id"].options.length;i++){

                                document.getElementById("egupz_edit_parcel_form_template_name").innerHTML = parcel.name;
                                //document.getElementById("egupz_edit_parcel_form_template_parcel_height").innerHTML = parcel.parcel_height;

                                if(form.elements["zone_code_id"].options[i].value == parcel.default_zone_id){

                                        egupz_IEmodifySelected('egupz_edit_parcel_form_template', "zone_code_id", parcel.default_zone_id);
                                        form.elements["zone_code_id"].options[i] = new Option(form.elements["zone_code_id"].options[i].text, form.elements["zone_code_id"].options[i].value, 'TRUE');

                                } else {

                                        var text = form.elements["zone_code_id"].options[i].text;
                                        var value = form.elements["zone_code_id"].options[i].value;

                                        form.elements["zone_code_id"].options[i] = new Option(text,value);
                                }
                        }

                        egupz_IEmodifySelected('egupz_edit_parcel_form_template', "zone_code_id", parcel.default_zone_id);

                        try {

                                form.elements["id"].value = parcel.parcel_id;

                        } catch (e) {

                                egupz_IEmodifyInputValue('egupz_edit_parcel_form_template', 'id', parcel.parcel_id);

                        }
			
                        s = document.getElementById('egupz_edit_parcel_div').innerHTML;
	
                        s = s.replace(/egupz_edit_parcel_form_template/g, "egupz_edit_parcel_form");

                } else {
                        alert("Error: This map has been submitted. Contact an administrator to make changes");
                }
		
        } else {
                alert('Error: No parcel selected.');
        }

  

	
        return (s);
}

//Defines the Submit map button on the Map control.  Sets the current user map to "complete".
function egupz_SubmitMapControl() { }
egupz_SubmitMapControl.prototype = new GControl();
egupz_SubmitMapControl.prototype.getDefaultPosition = function() {
        return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(50,8));
}
egupz_SubmitMapControl.prototype.initialize = function(map) {
        var container = document.createElement("div");
        var control= document.createElement("div");
        control.title= "Submit Map.";
        control.className= "egupz_map_button";
        container.appendChild(control);
        control.appendChild(document.createTextNode("Submit Map"));
        GEvent.addDomListener(control, "click", function() {
                var map_id = document.getElementById('egupz_edit_parcel_form_template').elements["map_id"].value;
                var caller = '/php/scripts/class_loader.php?egupz_cn=Game&action=submit_map&id=' + map_id;
                var div = 'egupz_wrapper';
                egupz_updateConfirm(caller, div, 'Are you sure you want to submit this map?');
        })
        map.getContainer().appendChild(container);
        return container;
}

//Defines the Reset map button on the Map control.  Sets the current user map to the default zone codes.
function egupz_ResetMapControl() { }
egupz_ResetMapControl.prototype = new GControl();
egupz_ResetMapControl.prototype.getDefaultPosition = function() {
        return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(135,8));
}
egupz_ResetMapControl.prototype.initialize = function(map) {
        var container = document.createElement("div");
        var control= document.createElement("div");
        control.title= "Reset map.";
        control.className= "egupz_map_button";
        container.appendChild(control);
        control.appendChild(document.createTextNode("Reset Map"));
        GEvent.addDomListener(control, "click", function() {
                var map_id = document.getElementById('egupz_edit_parcel_form_template').elements["map_id"].value;
                var caller = '/php/scripts/class_loader.php?egupz_cn=Game&action=reset_map&id=' + map_id;
                var div = 'egupz_wrapper';
                egupz_updateConfirm(caller, div, 'Are you sure you want to reset this map?');
        })
        map.getContainer().appendChild(container);
        return container;
}

//Defines the square that appears for editing parcel points.
function egupz_addIcon(icon) { // Add icon attributes

        icon.iconSize = new GSize(5, 5);
        icon.dragCrossSize = new GSize(0, 0);
        icon.shadowSize = new GSize(5, 5);
        icon.iconAnchor = new GPoint(5, 5);

}

//Defines the behavior in the admin for when you click on the map.
function egupz_leftClick(overlay, point) {
	
	var polyLineColor = '#' + document.getElementById('egupz_parcel_color').value;

	var status = document.getElementById('egupz_map_status');
	if(status.value != 'published'){	
		if(point) {

			egupz_map.closeInfoWindow();
			
			egupz_drawMarker(point);

			egupz_drawPoly(egupz_markers.length);

		} else if(overlay){



			if(typeof overlay.getVertexCount != 'undefined'){



				if(egupz_polyShape != overlay){
					//newly selected polygon

					//remove old markers
					egupz_removeMarkers();


					//convert points to squares
					for(i=0;i<overlay.getVertexCount();i++) {

						egupz_drawMarker(overlay.getVertex(i));

					}

					egupz_polyShape = overlay;
					egupz_drawPoly(2);
					
					
				} else {
					//currently selected polygon


					egupz_map.closeInfoWindow();
					egupz_openWindow(1);

				}


			}else if(typeof overlay.setImage != 'undefined'){
				//this is a marker
				egupz_map.closeInfoWindow();

				
				
				if(overlay.getLatLng() == egupz_markers[0].getLatLng()){
					//close the polygon, open the save window
					egupz_polyPoints.push(egupz_markers[0].getLatLng());
					egupz_polyShape = new GPolygon(egupz_polyPoints, polyLineColor, 3, egupz_opacity, polyLineColor,.3);

					egupz_map.addOverlay(egupz_polyShape);

					egupz_openWindow(1);
				}
			}

		} 
	} else {

		alert("You must set the map status to 'draft' before you can edit.");
	}
		
}

//Defines the behavior in the game for when you click on the map.
function egupz_leftClickGame(overlay, point) {

        if(overlay && typeof overlay.getVertexCount != 'undefined'){



                egupz_map.closeInfoWindow();
		
		
                egupz_removeMarkers();

                //convert points to squares
                for(i=0;i<overlay.getVertexCount();i++) {

                        egupz_drawMarker(overlay.getVertex(i));

                }


                egupz_openWindow(0);
        }
}

//Resets the square markers for de-selecting a parcel
function egupz_removeMarkers(){
	
        for(var n = 0; n < egupz_markers.length; n++) {
                egupz_map.removeOverlay(egupz_markers[n]);
        }
	
        egupz_markers.length = 0;
	
		
}

//Sticks a square parcel point on the map and defines its behavior.
function egupz_drawMarker(point){
	
        // Square marker icons
        var square = new GIcon();
        square.image = '/img/map/point.png';
        egupz_addIcon(square);

        // Make markers draggable
	
        var marker =new GMarker(point, {
                icon:square,
                draggable:true,
                bouncy:false,
                dragCrossMove:true
        });
	
        egupz_markers.push(marker);
	
	
        egupz_map.addOverlay(marker);

	

        GEvent.addListener(marker, "drag", function() {
                egupz_drawPoly(2);
        });

        GEvent.addListener(marker, "mouseover", function() {
                marker.setImage('/img/map/point-over.png');
        });

        GEvent.addListener(marker, "mouseout", function() {
                marker.setImage('/img/map/point.png');
        });
	
}

//Paints a polygon on the map to match a given parcel's data.
function egupz_drawPoly(remove) {
	
	var polyLineColor = '#' + document.getElementById('egupz_parcel_color').value;

        if(egupz_polyLine && remove > 1) egupz_map.removeOverlay(egupz_polyLine);
	if(egupz_polyShape && remove > 1) egupz_map.removeOverlay(egupz_polyShape);
	
        egupz_polyPoints.length = 0;
	
       
        for(i = 0; i < egupz_markers.length; i++) {
                egupz_polyPoints.push(egupz_markers[i].getLatLng());
        }
	
	//egupz_map.removeOverlay(egupz_polyLine);
	egupz_polyLine = new GPolyline(egupz_polyPoints,polyLineColor, 1, egupz_opacity);
	egupz_map.addOverlay(egupz_polyLine);

        // Close the shape with the last line or not
        egupz_polyShape = new GPolygon(egupz_polyPoints, polyLineColor, 1, egupz_opacity, polyLineColor,.3);

        egupz_map.addOverlay(egupz_polyShape);
	
}

//Removes a polygon related to a specific parcel from the screen.
function egupz_clearPoly() {

        var answer = confirm("Are you sure you want to clear this parcel?");
        if (answer){
                //if this is a saved poly, delete it.
                parcel = egupz_getParcelInfo();
                if(parcel){
                        var id = parcel.parcel_id
                        var map_id = document.getElementById('egupz_edit_parcel_form_template').elements["map_id"].value;
                        var caller = '/php/scripts/class_loader.php?egupz_cn=Maps&action=parcel_delete&map_id=' + map_id + '&id=' + id;
                        var div = 'egupz_hidden';
                        egupz_update(caller, div);
			
                }

                // Remove polygon and reset arrays
                egupz_map.removeOverlay(egupz_polyShape);
                for(i = 0; i < egupz_markers.length; i++) {
                        egupz_map.removeOverlay(egupz_markers[i]);
                }

                egupz_polyPoints.length = 0;
                egupz_markers.length = 0;
		
                egupz_map.closeInfoWindow();
        }
	
}

//Looks up a lat/long point by street address.
function egupz_geoCode(){
	
        //get center lat value
        //egupz_center_lat
        var center_lat = document.getElementById('egupz_center_lat');
        var center_long = document.getElementById('egupz_center_long');
	
        // Create new geocoding object
        geocoder = new GClientGeocoder();

        // Retrieve location information, pass it to addToMap()
        geocoder.getLatLng(
                center_lat.value,
                function(point) {
                        if (!point) {
                                alert(center_lat.value + " not found");
                        } else {
                                var one_latlng = point.toString();
		
                                var comma = one_latlng.indexOf(',');

                                var lat = one_latlng.substring(1,comma);
                                var lng = one_latlng.substring(comma+2,one_latlng.length - 1);

		
                                center_lat.value = lat;
                                center_long.value = lng;
                        }
                }
                );

}

//Saves the current parcel.
function egupz_updateFormLoadMapFromMap(caller, div, form_id) {
	
        var form2 = document.getElementById(form_id);

        egupz_removeMarkers();

        egupz_map.closeInfoWindow();
	
        egupz_updateForm(caller, div, form2);
	
}

//Instantiates the Gmap and populates it with parcels.
function egupz_updateFormLoadMap() {


        if(document.getElementById('egupz_right')){
		
                map_div = 'egupz_right';
		
                egupz_initMap(map_div);
		
                egupz_loadParcels();
        } else {
	
                map_div = 'egupz_middle';
                egupz_loadGame();
        }
	
        if(document.getElementById('egupz_status')){
		
                graph_div = document.getElementById('egupz_status');
	
        } else {
                graph_div = document.getElementById('egupz_bottom');
        }
	
        if(document.getElementById('egupz_indicators')){

                graph_div.innerHTML = document.getElementById('egupz_indicators').innerHTML;

        }


}

//Instantiates the Gmap for the Admin.
function egupz_initMap(map_div){

        var element = document.getElementById(map_div);

        var width = document.getElementById('egupz_map_width').value + 'px';
        element.style.width = width;

        var height = document.getElementById('egupz_map_height').value + 'px';
        element.style.height = height;
	
        egupz_map = new GMap2(element, {
                draggableCursor:'auto',
                draggingCursor:'move'
        });

        egupz_map.getContainer().style.display = '';

        var zoom = parseFloat(document.getElementById('egupz_zoom').value);

        egupz_map.setCenter(new GLatLng(document.getElementById('egupz_center_lat').value, document.getElementById('egupz_center_long').value), zoom);
	
        egupz_map.addControl(new GSmallMapControl());
        egupz_map.addControl(new GMenuMapTypeControl());
	
	var status = document.getElementById('egupz_map_status');
	if(status.value != 'published'){
		egupz_map.addControl(new egupz_SavePositionControl());
	}
	
        egupz_map.disableDoubleClickZoom();
        GEvent.addListener(egupz_map, "click", egupz_leftClick);

        egupz_removeMarkers();

}

//Instantiates the Gmap for the Game.
function egupz_loadGame() {

        var element = document.getElementById('egupz_middle');

        var width = document.getElementById('egupz_map_width').value + 'px';
        element.style.width = width;

        var height = document.getElementById('egupz_map_height').value + 'px';
        element.style.height = height;

        egupz_map = new GMap2(element);
	
        egupz_map.getContainer().style.display = '';

        var zoom = parseFloat(document.getElementById('egupz_zoom').value);

        egupz_map.setCenter(new GLatLng(document.getElementById('egupz_center_lat').value, document.getElementById('egupz_center_long').value), zoom);
	
        egupz_map.addControl(new GSmallMapControl());
        egupz_map.addControl(new GMenuMapTypeControl());
	
        egupz_map.disableDoubleClickZoom();
        GEvent.addListener(egupz_map, "click", egupz_leftClickGame);

        var status = egupz_loadParcels();

	if(status == 'incomplete'){
		egupz_map.addControl(new egupz_SubmitMapControl());
		egupz_map.addControl(new egupz_ResetMapControl());
	}
	
        if(document.getElementById('egupz_indicators')){
                document.getElementById('egupz_bottom').innerHTML = document.getElementById('egupz_indicators').innerHTML;
        }
	

}

//Hides the map.
function egupz_hideMap(){

        if(egupz_map){

                egupz_map.getContainer().style.display = 'none';
        }
}

//Draws polygons onto the map to match the appropriate parcels.
function egupz_loadParcels(){

        //load json string into object

	var polyLineColor = '#' + document.getElementById('egupz_parcel_color').value;
	
        var div = document.getElementById('egupz_parcels');

	var status = 'incomplete';

        if(div){
	
                var input = div.innerHTML;


                if(input.length > 2){
			

                        try{
                                var p = JSON.parse(input);
                        } catch (e) {
                                alert('Bad JSON input: ' + input);
                        }

                        for(var parcels in p) {

                                parcels = p[parcels];
                                for(var parcel in parcels){
                                        one_parcel = parcels[parcel];
                                        parcel_id = one_parcel.parcel_id;
                                        color = one_parcel.color;
					status = one_parcel.status;

                                        if(parseInt(color,16)){

                                                linecolor = '#' + color;
                                                fillcolor = '#' + color;
                                        } else {
                                                linecolor = polyLineColor;
                                                fillcolor = polyLineColor;
                                        }


                                        egupz_polyPoints.length = 0;

                                        latlngs = one_parcel.latlngs;
                                        for(var latlng in latlngs) {
                                                one_latlng = latlngs[latlng].latlng;
                                                comma = one_latlng.indexOf(',');

                                                lat = one_latlng.substring(1,comma);
                                                lng = one_latlng.substring(comma+1,one_latlng.length - 1);

                                                gll = new GLatLng(lat, lng, true);
                                                egupz_polyPoints.push(gll);
                                        }

                                        one_latlng = latlngs[0].latlng;
                                        comma = one_latlng.indexOf(',');

                                        lat = one_latlng.substring(1,comma);
                                        lng = one_latlng.substring(comma+1,one_latlng.length - 1);

                                        gll = new GLatLng(lat, lng, true);
                                        egupz_polyPoints.push(gll);

                                        egupz_polyShape = new GPolygon(egupz_polyPoints, linecolor, 1, egupz_opacity, fillcolor,.3);
                                        egupz_map.addOverlay(egupz_polyShape);

                                }
                        }

                        egupz_polyShape = null;
                }
        }

	return status;

}

//Sends form data back to the server for processing, populates a div with the response.
function egupz_updateForm(caller, div, form) {

        //parse get_string by looping through form input elements
        var num_of_elements = form.elements.length;
        var get_string = '';
        var include = 'no';

        for (var i=0; i<num_of_elements; i++) {
                var element = form.elements[i];
		
                var val = '';

                if(element.type == 'text' || element.type == 'hidden'){
                        include = 'yes';
                        val = element.value;
                }
                if (element.type == 'checkbox' && element.checked == true) {
                        include = 'yes';
                        val = element.value;
                }
                if (element.type.indexOf("select") > -1) {
                        var index = element.selectedIndex;

                        if(index > -1){
                                val = element.options[index].value
                        }

                        if (val) {
                                include = 'yes';
                        }
                }

                if(include == 'yes'){
                        
			get_string += element.name + '=' + val + '&';
                }

                include = 'no';
        }
	
        caller = caller + '?' + get_string;
	
        if(form.enctype == 'multipart/form-data'){
                caller += 'write_file=no';
        }

        egupz_update(caller, div);

}

//Calls a url, asks for confirmation first, populates a div with the response.
function egupz_updateConfirm(caller, div, message){

        var answer = confirm(message);
        if (answer){

                egupz_hideMap();
                egupz_update(caller, div);


        }


}

//Calls a url, populates a div with the response, specialized for Next/Previous navigation control.
function egupz_updateLimit(caller, div, min){

        caller = caller + '&min=' + min;

        egupz_update(caller, div);

}

//Calls a url, populates a div with the response
function egupz_update(caller, div){


        var xmlHttp = egupz_getXmlHttpRequest();

        xmlHttp.onreadystatechange=function(){

                /*readyState values:
	0	The request is not initialized
	1	The request has been set up
	2	The request has been sent
	3	The request is in process
	4	The request is complete
	*/
	
                if(xmlHttp.readyState==4 && xmlHttp.status == 200){

			

                        var rt = xmlHttp.responseText;
	
	
                        if(rt.substring(0, 10) == '<!--Error:'){
                                rt = rt.substring(10, rt.indexOf('-->'));
                                alert(rt);
                        } else if (rt.substring(0, 12) == '<!--Message:'){

                                var message = rt.substring(12, rt.indexOf('-->'));
                                alert(message);
                                document.getElementById(div).innerHTML = rt.substring(rt.indexOf('-->') + 3, rt.length);
				
                                
                        } else if (rt.substring(0, 13) == '<!--Redirect:'){
                             
                                location.href = rt.substring(13, rt.indexOf('-->'));

                        } else {

                                document.getElementById(div).innerHTML=rt;

                        }

                        if(document.getElementById('egupz_map_width') || document.getElementById('egupz_middle')){
                                egupz_updateFormLoadMap();
                        }
                }

        }

        xmlHttp.open("GET",caller,true);

        xmlHttp.send(null);

}

//Gets an XmlHttpRequest object for use in AJAX calls
function egupz_getXmlHttpRequest(){

        var xmlHttp

        try
        {
                // Firefox, Opera 8.0+, Safari

                xmlHttp=new XMLHttpRequest();
        }
        catch (e)
        {
                // Internet Explorer
                try
                {

                        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch (e)
                {
                        try
                        {

                                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e)
                        {
                                alert("Your browser does not support AJAX!");
                                return false;
                        }
                }
        }

        return xmlHttp;

}


