var zoomInToolActive = false;
var zoomOutToolActive = false;
var panToolActive = false;
var selectionSX = null;
var selectionSY = null;
var selectionW = 0;
var selectionH = 0;
var panningSX;
var panningEX;
var panningCurX = 0;
var panningCurY = 0;
var panningOn = false;
var mouseX = 0;
var mouseY = 0;
var selectionOn = false;
var infoSX = 0;
var infoSY = 0;
var infoX = 0;
var infoY = 0;
var infoDragOn = false;
var isReportOn = false;
var isBookmarkOn = false;

function setOpacity (op, obj) {
    document.getElementById(obj).style.filter='alpha(opacity='+parseInt(op*100)+')';
    document.getElementById(obj).style.opacity=op;
}

function mousemove(e) {
	if (ie4) {
        mouseX=event.x; mouseY=event.y;
    }else{
        mouseX=e.pageX; mouseY=e.pageY;
    }
    mapDrag();
}

function findPosX(objname) {
    obj = document.getElementById(objname);
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x) {
		curleft += obj.x;
    }
    curleft = curleft + 2
	return curleft;
}

function findPosY(objname) {
    obj = document.getElementById(objname);
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y) {
		curtop += obj.y;
    }
    curtop = curtop + 2;
	return curtop;
}

function getPosition(objname) {
    if(objname == null){
        objname = 'tabc_main_map';
    }
    cursor = new Object();
    cursor.x = mouseX - findPosX(objname);
    cursor.y = mouseY - findPosY(objname);
    return cursor;
}

function mapDragStart () {
    if(toolbox_states[0][1] == true || toolbox_states[1][1] == true){
        selectionStart();
    }else if(toolbox_states[2][1] == true){
        panStart();
    }else if(toolbox_states[3][1] == true){
        infoStart();
    }else if(toolbox_states[4][1] == true){
    	reportStart();
    }else if(toolbox_states[8][1] == true){
    	bookmarkStart();
    }
}

function mapDragEnd () {
    if(toolbox_states[0][1] == true || toolbox_states[1][1] == true){
        selectionEnd();
    }else if(toolbox_states[2][1] == true){
        panEnd();
    }
}

function mapDrag () {
    if(selectionOn == true && (toolbox_states[0][1] == true || toolbox_states[1][1] == true)){
        selection();
    }else if(infoDragOn == true){
        infoDrag();
    }else if(toolbox_states[2][1] == true){
        pan();
    }
}

function mapAreaOver () {
    if(toolbox_states[0][1] == true || toolbox_states[1][1] == true){
        selectionAreaOver();
    }else if(toolbox_states[2][1] == true){
        panAreaOver();
    }else if(toolbox_states[3][1] == true){
        infoAreaOver();
    }else if(toolbox_states[4][1] == true){
    	reportAreaOver();
    }else if(toolbox_states[8][1] == true){
    	bookmarkAreaOver();
    }
}

/*
 * BACK/FORWARD TOOL
 *
 */

function navigation_back() {
	hist_current = hist_current-1;
	
    histGetData(hist[hist_current]);
}

function navigation_forward() {
	hist_current = hist_current+1;
	
    histGetData(hist[hist_current]);
}

/*
 * FULL EXTENT TOOL
 *
 */

function full_extent () {
    data_minx = fe_data_minx;
    data_miny = fe_data_miny;
    data_maxx = fe_data_maxx;
    data_maxy = fe_data_maxy;

    getData('image');
}

/*
 * BOOKMARK
 *
 */

function bookmarkStart () {
	if(isBookmarkOn == false){
		//isBookmarkOn = true;
	    pixelX = Math.abs((data_maxx - data_minx)) / map_width;
	    pixelY = Math.abs((data_maxy - data_miny)) / map_height;

	    data_x = pixelX * getPosition().x + data_minx;
	    data_y = pixelY * (map_height - getPosition().y) + data_miny;
	    
//	    document.getElementById('flag').style.top = (mouseY-19)+'px';
//	    document.getElementById('flag').style.left = (mouseX-10)+'px';
	    overlayOn();

	    bmb = document.getElementById('bookmark_box');
	    bmb_left = findPosX('tabc_main_map') + Math.round((map_width - 340) / 2);
	    bmb_top = findPosY('tabc_main_map') + Math.round((map_height -  120) / 2);
	    bmb.style.top = bmb_top+'px';
	    bmb.style.left = bmb_left+'px';

	    html =  '<div id="bookmark_box_title"><h1>Iesaitēt</h1> <a href="#" onclick="closeBMB(); return false;">X</a><div class="clear"></div></div>';
	    html += '<div id="bookmark_box_content">';
	    html += '<label for="bookmark_textbox" style="margin-top: 0">Komentārs:</label>';
	    html += '<textarea id="bookmark_textbox"></textarea>';
	    html += '<br /><a href="#" onclick="sendBM('+data_x+', '+data_y+'); return false;">Iesaitēt</a>';
	    html += '</div>';

	    bmb.innerHTML = html;
	    bmb.style.display = 'block';
	}
}

function sendBM (data_x, data_y) {
	var bookmark_textbox = document.getElementById('bookmark_textbox');
	var bookmark_box_content = document.getElementById('bookmark_box_content');

	var comment = bookmark_textbox.value;
   	
	var url = '/core.php?addbm&minx='+data_minx+'&miny='+data_miny+'&maxx='+data_maxx+'&maxy='+data_maxy+'&x='+data_x+'&y='+data_y;
   	var contents = 'comment='+comment;

	http.open("POST", url, true);
	http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http.onreadystatechange = getDataResponse;
	http.send(contents);

	bookmark_box_content.innerHTML = '<div style="padding-top: '+Math.round(bookmark_box_content.offsetHeight/2-16)+'px; padding-left: '+Math.round(bookmark_box_content.offsetWidth/2-16)+'px;"><img src="/img/loading_ajax.gif" alt="Loading.." /></div>';
}

function bookmarkResponse(url) {
	var bookmark_box_content = document.getElementById('bookmark_box_content');
	html = '<div style="text-align: center;"><br /><br />Saite:<br /><a href="'+url+'">'+url+'</a></div>';
	bookmark_box_content.innerHTML = html;
}

function closeBMB () {
    bmb = document.getElementById('bookmark_box');
    bmb.style.display = 'none';
    overlayOff();
}

function bookmarkAreaOver () {
    if(isLoadingOn == false && isBookmarkOn == false){
        document.getElementById('tabc_main_map').style.cursor = 'crosshair';
    }else{
        document.getElementById('tabc_main_map').style.cursor = 'default';
    }
}

/*
 * REPORT TOOL
 *
 */

function reportStart () {
	if(isReportOn == false){
		isReportOn = true;
		document.getElementById('report').style.display = 'block';
		document.getElementById('report').style.height = map_height + 'px';
	}
}

function reportSend () {
    pixelX = Math.abs((data_maxx - data_minx)) / map_width;
    pixelY = Math.abs((data_maxy - data_miny)) / map_height;

    data_x = pixelX * getPosition().x + data_minx;
    data_y = pixelY * (map_height - getPosition().y) + data_miny;

    sendReport();
}

function reportAreaOver () {
    if(isLoadingOn == false && isReportOn == false){
        document.getElementById('tabc_main_map').style.cursor = 'crosshair';
    }else{
        document.getElementById('tabc_main_map').style.cursor = 'default';
    }
}


/*
 * INFO TOOL
 *
 */
function infoStart () {
    pixelX = Math.abs((data_maxx - data_minx)) / map_width;
    pixelY = Math.abs((data_maxy - data_miny)) / map_height;

    data_x = pixelX * getPosition().x + data_minx;
    data_y = pixelY * (map_height - getPosition().y) + data_miny;

    //document.getElementById('debug').innerHTML = '<p>data_x='+data_x+'<br/>data_y='+data_y;
    getData('info');
}

function infoAreaOver () {
    if(isLoadingOn == false){
        document.getElementById('tabc_main_map').style.cursor = 'help';
    }else{
        document.getElementById('tabc_main_map').style.cursor = 'default';
    }
}

/*
 * INFO BOX
 */

function infoDragStart () {
    infoDragOn = true;
    infoSX = getPosition('info_box').x;
    infoSY = getPosition('info_box').y;
    document.getElementById('info_box').className = 'drag';
    //document.getElementById('debug').innerHTML = 'Start: SX='+infoSX+', SY='+infoSY;
}

function infoDrag () {
    if(infoDragOn == true){
//      document.getElementById('debug').innerHTML = 'mouseX='+mouseX+'<br/>mouseY='+mouseY+'<br/>gPx='+infoSX+'<br/>gPy='+infoSY;
      info_b = document.getElementById('info_box');
      info_b.style.top = parseInt(mouseY - infoSY) + 'px';
      info_b.style.left = parseInt(mouseX - infoSX) + 'px';
    }
}

function infoDragEnd () {
    infoDragOn = false;
    document.getElementById('info_box').className = 'drag';
    infoX = mouseX + getPosition('info_box').x;
    infoY = mouseY + getPosition('info_box').y;
}

/*
 * PAN
 *
 */
function panStart () {
    panningSX = getPosition().x;
    panningSY = getPosition().y;
    panningOn = true;
}

function pan () {
    if(panningOn == true){
        posX = getPosition().x - panningSX;
        posY = getPosition().y - panningSY;
        panningCurX = posX;
        panningCurY = posY;
        document.getElementById('tabc_main_map').style.backgroundPosition = posX+'px '+posY+'px';

        pixelX = Math.abs((data_maxx - data_minx)) / map_width;
        pixelY = Math.abs((data_maxy - data_miny)) / map_height;

        diffX = panningCurX;
        diffY = panningCurY;

        var mapSX = pixelX * diffX + data_minx;
        var mapSY = pixelY * diffY + data_miny;
        var mapEX = pixelX * diffX + data_maxx;
        var mapEY = pixelY * diffY + data_maxy;

		var u = Math.pow(10,10);
		data_mkrr = parseInt(mapSX * u + (5/10)) / u;

        //document.getElementById('debug').innerHTML += '<p>diffX='+diffX+'<br/>diffY='+diffY+
        //                            '<br/>mapSX='+mapSX+'<br/>mapSY='+mapSY+'<br/>mapEX='+mapEX+'<br/>mapEY='+mapEY+'<br/>data_minx='+data_mkrr;
    }
}

function panAreaOver () {
    if(isLoadingOn == false){
        document.getElementById('tabc_main_map').style.cursor = 'move';
    }else{
        document.getElementById('tabc_main_map').style.cursor = 'default';
    }
}

function panEnd () {
    panningOn = false;

    pixelX = Math.abs((data_maxx - data_minx)) / map_width;
    pixelY = Math.abs((data_maxy - data_miny)) / map_height;

    diffX = panningCurX;
    diffY = panningCurY;

    var mapSX = pixelX * (panningCurX * -1) + data_minx;
    var mapSY = pixelY * panningCurY + data_miny;
    var mapEX = pixelX * (panningCurX * -1) + data_maxx;
    var mapEY = pixelY * panningCurY + data_maxy;

    //document.getElementById('debug').innerHTML = 'diffX='+panningCurX+'<br/>diffY='+panningCurY;

    var u = Math.pow(10,10);
    data_minx = parseInt(mapSX * u + (5/10)) / u;
    data_miny = parseInt(mapSY * u + (5/10)) / u;
    data_maxx = parseInt(mapEX * u + (5/10)) / u;
    data_maxy = parseInt(mapEY * u + (5/10)) / u;

    document.getElementById('tabc_main_map_o').style.background = document.getElementById('tabc_main_map').style.background;

    getData('image');
    //alert(diffX);

}

/*
 * ZOOM IN / ZOOM OUT
 *
 */

function selectionStart () {
    if(isLoadingOn == false){
        selectionSX = getPosition().x;
        selectionSY = getPosition().y;
        width = 1;
        height = 1;
        document.getElementById('map_selection').style.display = 'block';
        selectionOn = true;
        selection();
    }
}

function selection () {
    if(isLoadingOn == false){

        mapEX = mapEX - mapSX;
        mapEY = mapEY - mapSY;
        mapSX = 0 ;
        mapSY = 0;


        if(getPosition().x < selectionSX){
            width = selectionSX - getPosition().x;
            posX = selectionSX - width;
            if(posX < mapSX){posX = mapSX; width = selectionSX - mapSX;}

        }else{
            width = getPosition().x - selectionSX;
            posX = selectionSX;
            if(posX + width > mapEX){width = mapEX - posX;}
        }

        if(getPosition().y < selectionSY){
            height = selectionSY - getPosition().y;
            posY = selectionSY - height;
            if(posY < mapSY){posY = mapSY; height = selectionSY  - mapSY;}

        }else{
            height = getPosition().y - selectionSY;
            posY = selectionSY;
            if(posY + height > mapEY){height = mapEY - posY;}
        }

        if(width < 1){width = 1;}
        if(height < 1){height = 1;}

        selectionW = width;
        selectionH = height;

        map = document.getElementById('tabc_main_map');
        map_sel = document.getElementById('map_selection').style;

        map_sel.top = posY+'px';
        map_sel.left = posX+'px';
        map_sel.width = width+'px';
        map_sel.height = height+'px';

        //document.getElementById('debug').innerHTML = 'posX='+posX+'<br/>posY='+posY+'<br/>selectionSX='+selectionSX+'<br/>selectionSY='+selectionSY+'<br/>selectionW='+selectionW+'<br/>selectionH='+selectionH;
    }

}

function selectionEnd () {
    if(isLoadingOn == false){
        if(toolbox_states[0][1] == true){
            doZoomIn();
        }else{
            doZoomOut();
        }
        selectionW = null;
        selectionH = null;
        selectionOn = false;
        map_sel = document.getElementById('map_selection').style;
        map_sel.display = 'none';
        map_sel.width = 0;
        map_sel.height = 0;
    }
}

function selectionAreaOver (event) {
    if((toolbox_states[0][1] == true || toolbox_states[1][1] == true) && isLoadingOn == false){
        document.getElementById('tabc_main_map').style.cursor = 'crosshair';
    }else{
        document.getElementById('tabc_main_map').style.cursor = 'default';
    }
}

function mousemuuv () {
    var pixelX = Math.abs((data_maxx - data_minx)) / map_width;
    var pixelY = Math.abs((data_maxy - data_miny)) / map_height;

    var mapX = pixelX * parseInt(getPosition().x) + parseFloat(data_minx);
    var theY = parseInt(map_height) - parseInt(getPosition().y);
    var mapY = pixelY * theY + parseFloat(data_miny);

    var u = Math.pow(10,10);
    var uX = parseInt((parseFloat(mapX)) * u + (5/10)) / u;
    var uY= parseInt(mapY * u + (5/10)) / u;
//    var mouseString = 'data_maxx='+data_maxx+'; uX='+uX+'<br/>uY='+uY;
    var mouseString = pixelX+' *<br/>'+ getPosition().x+' +<br/>'+data_minx+' =<br/>'+mapX;
    //document.getElementById('debug').innerHTML = mouseString;

}


function doZoomIn () {
	if(selectionW <= 2 && selectionH <= 2) {
		pixelX = Math.abs(data_maxx - data_minx) / map_width;
		pixelY = Math.abs(data_maxy - data_miny) / map_height;

		data_x = pixelX * getPosition().x + data_minx;
		data_y = pixelY * (map_height - getPosition().y) + data_miny;

		var mapSX = data_x - (Math.abs(data_maxx - data_minx) / 2 / 2);
		var mapSY = data_y + (Math.abs(data_maxy - data_miny) / 2 / 2);
		var mapEX = data_x + (Math.abs(data_maxx - data_minx) / 2 / 2);
		var mapEY = data_y - (Math.abs(data_maxy - data_miny) / 2 / 2);
	} else {
	    pixelX = Math.abs((data_maxx - data_minx)) / map_width;
	    pixelY = Math.abs((data_maxy - data_miny)) / map_height;

	    var mapSX = pixelX * posX + data_minx;
	    var mapSY = pixelY * (map_height - posY) + data_miny;
	    var mapEX = pixelX * (posX + selectionW) + data_minx;
	    var mapEY = pixelY * (map_height - (posY + selectionH)) + data_miny;
	}

    var u = Math.pow(10,10);
    data_minx = parseInt(mapSX * u + (5/10)) / u;
    data_miny = parseInt(mapSY * u + (5/10)) / u;
    data_maxx = parseInt(mapEX * u + (5/10)) / u;
    data_maxy = parseInt(mapEY * u + (5/10)) / u;

    getData('image');
}

function doZoomOut () {
	if(selectionW <= 2 && selectionH <= 2) {
		pixelX = Math.abs(data_maxx - data_minx) / map_width;
		pixelY = Math.abs(data_maxy - data_miny) / map_height;

		data_x = pixelX * getPosition().x + data_minx;
		data_y = pixelY * (map_height - getPosition().y) + data_miny;

		var mapSX = data_x - (Math.abs(data_maxx - data_minx)*2/2);
		var mapSY = data_y - (Math.abs(data_maxy - data_miny)*2/2);
		var mapEX = data_x + (Math.abs(data_maxx - data_minx)*2/2);
		var mapEY = data_y + (Math.abs(data_maxy - data_miny)*2/2);
	} else {
	    var mapSX = data_minx - (map_width / (posX + selectionW) * Math.abs(data_maxx - data_minx) / 1);
	    var mapSY = data_miny - (map_height / (posY + selectionH) * Math.abs(data_maxy - data_miny) / 1);
	    var mapEX = data_maxx + (map_width / (posX + selectionW) * Math.abs(data_maxx - data_minx) / 1);
	    var mapEY = data_maxy + (map_height / (posY + selectionH) * Math.abs(data_maxy - data_miny) / 1);
	}

    var u = Math.pow(10,10);
    data_minx = parseInt(mapSX * u + (5/10)) / u;
    data_miny = parseInt(mapSY * u + (5/10)) / u;
    data_maxx = parseInt(mapEX * u + (5/10)) / u;
    data_maxy = parseInt(mapEY * u + (5/10)) / u;
    
	if((data_minx < fe_data_minx && data_maxx > fe_data_maxx) || (data_miny < fe_data_miny && data_maxy > fe_data_maxy)){
		data_minx = fe_data_minx;
		data_miny = fe_data_miny;		
		data_maxx = fe_data_maxx;		
		data_maxy = fe_data_maxy;				
		selectTool('zoomin');
	}    

    getData('image');
}

