var okToSend = true;
var mindiff = .0005;
var order_by = 'lp_Listing_Price';
var up_down = "ASC";
var xmlDoc;
var fixedzoom = "";
var cache_origin_x = "";
var cache_origin_y = "";
var s_layer = '';

var icon_w = 206;
var icon_h = 237;

// tile stuff
var resolution;
var container;

var mapContainer;
var min_scale = 7;
var max_scale = 17;
var cache = "us";

function setEnvelope(ix, iy, ax, ay)
{
        minx = ix;
        miny = iy;
        maxx = ax;
        maxy = ay;

        scale = "";

        getMap("");

}

function checkPosition(e) {
        var x = 0;
        var y = 0;
        var offset = 30;

        if (isNav) {
                x=e.pageX;
                y=e.pageY;
	} else if (isIE) {
                x=event.clientX + document.body.scrollLeft;
                y=event.clientY + document.body.scrollTop;
	
        } else {
                x=e.clientX + document.body.scrollLeft;
                y=e.clientY + document.body.scrollTop;
        }

        x -= mleft;
        y -= mtop;

        var div_x = parseInt(open_div.style.left.substring(0, open_div.style.left.length-2));
        var div_y = parseInt(open_div.style.top.substring(0, open_div.style.top.length-2));
        var div_w = parseInt(open_div.style.width.substring(0, open_div.style.width.length-2));
        var div_h = parseInt(open_div.style.height.substring(0, open_div.style.height.length-2));

        if (x < div_x - offset || x > (div_x + div_w + offset) || y < div_y - offset || y > (div_y + div_h + offset)) {
                hideAll();
                document.onmousemove = null;
        }
}


if(!isIE){

    Document.prototype.loadXML = function (s) {

        var doc2 = (new DOMParser()).parseFromString(s, "text/xml");

        while (this.hasChildNodes())
            this.removeChild(this.lastChild);

	try {
        for (var i = 0; i < doc2.childNodes.length; i++) {
            this.appendChild(this.importNode(doc2.childNodes[i], true));
        }
	} catch (err) { } 
    };
}

function toggleView(str) {
	if (str == 'sat') {
                document.getElementById('map_button').src = '/mapping_v2006/jsps/COMMON/ts_us/images/map_deselected.png';
                document.getElementById('sat_button').src = '/mapping_v2006/jsps/COMMON/ts_us/images/sat_selected.png';
                cache = 'globex';
	} else {
                document.getElementById('map_button').src = '/mapping_v2006/jsps/COMMON/ts_us/images/map_selected.png';
                document.getElementById('sat_button').src = '/mapping_v2006/jsps/COMMON/ts_us/images/sat_deselected.png';
                cache = 'us';
        }
        getMap("");
}

function getMapWithSort(sort) {
if (sort == order_by) {
        if (up_down == "ASC") {
                up_down = "DESC";
        } else {
                up_down = "ASC";
        }
}
order_by = sort;
getMap("");
}

function getInitialMap(){

    container = document.getElementById('mapArea');

    mapContainer = getElmById('mapContainer');

    getMap("");
}

function write_debug(str)
{
    if (document.getElementById('ta_debug') != null)
    {
        document.getElementById('ta_debug').value += str + '\n';
    }
}

function fixedZoomIn(){

    if (parseInt(scale) < max_scale) {

        scale = parseInt(scale) + 1;
        fixedzoom = "true";
        getMap("");
    } else {
        alert("Currently at closest zoom " + scale);
    }
}

function fixedZoomOut(){
    if (parseInt(scale) > min_scale) {

       scale = parseInt(scale) - 1;
        fixedzoom = "true";
        getMap("");
    } else {
        alert ("Currently at furthest zoom " + scale);
    }
}

function dragObjects(dx, dy)
{
    for (var i = 0; i < container.childNodes.length;i++) {
        var node = container.childNodes[i];
        var cur_left = node.style.left;
        var cur_top = node.style.top;
        var l = parseInt(cur_left.substring(0, cur_left.length));
        var t = parseInt(cur_top.substring(0, cur_top.length));

        node.style.left = parseInt(l +  dx) + "px";
        node.style.top = parseInt(t + dy) + "px";
    }


    for (var i = 0; i < mapContainer.childNodes.length; i++) {
        var node = mapContainer.childNodes[i];
        var cur_left = node.style.left;
        var cur_top = node.style.top;
        var l = parseInt(cur_left.substring(0, cur_left.length));
        var t = parseInt(cur_top.substring(0, cur_top.length));

        node.style.left = parseInt(l +  dx) + "px";
        node.style.top = parseInt(t + dy) + "px";

    }

}

function zoom(left, bottom, right, top){
    if (getExtentForZoomIn(left, bottom, right, top)) {

        getMap("");

    }
}

function pan(ix, iy){
    var dx = (maxx - minx)/mwidth;
    var mx = dx*ix;
    var my = dx*iy;
    minx += mx;
    maxx += mx;
    miny += my;
    maxy += my;
    var env = '<ENVELOPE minx="' + minx + '" miny="' + miny +'" maxx="' + maxx +'" maxy="' + maxy + '" />';
    getMap(env);
}

function panDirection(dir){
    shift(dir);
    var env = '<ENVELOPE minx="' + minx + '" miny="' + miny +'" maxx="' + maxx +'" maxy="' + maxy + '" />';
    getMap(env);
}

function shift(dir){
    var dx = maxx - minx;
    var dy = maxy - miny;

    switch(dir) {
        //NORTH
        case "north":
            miny += 0.3*dy;
            maxy += 0.3*dy;
            break;
        //south
        case "south":
            miny -= 0.3*dy;
            maxy -= 0.3*dy;
            break;
        //east
        case "east":
            minx += 0.3*dx;
            maxx += 0.3*dx;
            break;
        //west
        case "west":
            minx -= 0.3*dx;
            maxx -= 0.3*dx;
            break;
        //northeast
        case "ne":
            miny += 0.3*dy;
            maxy += 0.3*dy;
            minx += 0.3*dx;
            maxx += 0.3*dx;
            break;
        //northwest
        case "nw":
            miny += 0.3*dy;
            maxy += 0.3*dy;
            minx -= 0.3*dx;
            maxx -= 0.3*dx;
            break;
        //southeast
        case "se":
            miny -= 0.3*dy;
            maxy -= 0.3*dy;
            minx += 0.3*dx;
            maxx += 0.3*dx;
            break;
        //southwest
        case "sw":
            miny -= 0.3*dy;
            maxy -= 0.3*dy;
            minx -= 0.3*dx;
            maxx -= 0.3*dx;
            break

    }
}

function getExtentForZoomIn(left, bottom, right, top){

        var LLPoint = getMapXY(left, bottom);
        var URPoint = getMapXY(right, top);

        var xdiff = URPoint[0] - LLPoint[0];
        var ydiff = URPoint[1] - LLPoint[1];

        if (xdiff < mindiff || ydiff < mindiff) {
                alert ("Please select a larger area to zoom.");
                return false;
        }

        minx = LLPoint[0];
        miny = LLPoint[1];
        maxx = URPoint[0];
        maxy = URPoint[1];

        return true;

}

function getExtentForZoomOut(left, bottom, right, top){
    var xDiff= maxx-minx;
    var yDiff= maxy-miny;

    var pwidth = right-left;
    var pheight = top-bottom;
    var xRatio = mwidth / pwidth;
    var yRatio = mheight / pheight;
    var xAdd = xRatio * xDiff / 2;
    var yAdd = yRatio * yDiff / 2;
    minx =  minx - xAdd;
    maxx = maxx + xAdd;
    miny = miny - yAdd;
    maxy = maxy + yAdd;


}

function dump_vals()
{
    alert ('minx / ' + minx + ' miny / ' + miny + ' maxx / ' + maxx + ' maxy / ' + maxy);
}

function getMapXY(xIn,yIn) {

    var newValues = new Array();

    var mouseX = xIn;
    var pixelX = (maxx-minx) / mwidth;

    var newX = (pixelX * mouseX) + minx;

    var mouseY = mheight - yIn;
    var pixelY = (maxy-miny) / mheight;
    var newY = (pixelY * mouseY) + miny;

    newValues[0] = newX;

    newValues[1] = newY;
    return newValues;
}

function growEnvelope(value){
    var dx = maxx - minx;
    var dy = maxy - miny;

    var cx = (maxx + minx)/2.0;
    var cy = (maxy + miny)/2.0;

    var dx1 = 0.5 * value * dx;
    var dy1 = 0.5 * value * dy;

    minx = cx - dx1;
    miny = cy - dy1;
    maxx = cx + dx1;
    maxy = cy + dy1;
}

function getMapWithCurrentExtent(){
    getMap("");
}

function jumpTo(i) {
    if (okToSend) {
        scale = i;
        fixedzoom = "true";
        getMap("");
    }
}

function getElmById(theID) {
   
    var rv = null;
    
    if (isIE) {
        
        rv = document.all[theID];
    } else {
       
        rv = document.getElementById(theID);
        
    }
    
    return rv;
}

function clearImageMap ()
{
    while (mapContainer.childNodes.length > 0) {
        mapContainer.removeChild(mapContainer.lastChild);
    }

    while (container.childNodes.length > 0) {
        container.removeChild(container.lastChild);
    }

}


function createGlobexURL(x, y) {

return 'http://www.globexplorer.com/tiles/img?p=latlon&n=1&t=a&l=49&xi=' + x + '&yi=' + y + '&z=' + parseInt(scale) + '&key=F7DAWIHDSliUu16V6YqFWSRxWSHZkWDZ';

}

function placeTiles(tiles) {

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

        var url = tiles[i].getAttribute("url");
        url = url.replace(/-/g, '');
        var row = parseInt(tiles[i].getAttribute("row"));
        var col = parseInt(tiles[i].getAttribute("col"));
        var x_pos = parseInt(tiles[i].getAttribute('x_pos'));
        var y_pos = parseInt(tiles[i].getAttribute('y_pos'));

        if (cache == 'globex') {
            url = createGlobexURL(col, row);
        }

        var img = document.createElement('img');

        img.src = url;
        img.style.position = 'absolute';
        img.style.top = y_pos + 'px';
        img.style.left = x_pos + 'px';
        img.onload = null;

        container.appendChild(img);
    }

}

function hideAll()
{
        var els = document.getElementsByTagName('DIV');

        for (var j = 0; j < els.length; j++) {
                var elm = els[j];
                if (elm != null) {
                        if (elm.id.indexOf('OFFICE_') > -1 || elm.id.indexOf("POI_") > -1 || elm.id.indexOf('LISTING_') > -1 || elm.id.indexOf('TA_POI_') > -1 || elm.id.indexOf('SUBJECT_') > -1)
                                elm.style.visibility = 'hidden';
                } else {
                        break;
                }
        }
}

if (typeof cache_origin_x != 'undefined') {
    var cache_origin_x = '';
}

if (typeof cache_origin_y != 'undefined') {
    var cache_origin_y = '';
}


function cleanString(str)
{

 if(typeof(str) == 'string'){
            return unescape(str.replace(new RegExp(/\+/g), ' '));
 } else {
    return "";
 }
}

function formatPrice(price) {
	var nf = new NumberFormat();
	nf.setNumber(price);
	nf.setPlaces(0);
	return nf.toFormatted();
}

function cleanNum(num)
{
num = unescape(num);
return num.replace(',', '');
}

function findVal(val) {
	for (var i = 0; i < req_vars.length; i++) {
		if (req_vars[i] == val) {
			return req_vals[i];
		}
	}
	return "";
}

function getCheckedValue(radioObj) {
        if(!radioObj)
                return "";
        var radioLength = radioObj.length;
        if(radioLength == undefined)
                if(radioObj.checked)
                        return radioObj.value;
                else
                        return "";
        for(var i = 0; i < radioLength; i++) {
                if(radioObj[i].checked) {
                        return radioObj[i].value;
                }
        }
        return "";
}

