﻿/******************************************************************************
Program   : JScriptdrawArrow.js
Date      : February 26, 2008
Purpose   : Client side code for putting arrows on images in pathologypics.
******************************************************************************/

var color="#000000";
var length=20;
var opacity=.8;
    
    
//This function shows existing arrows when the arrow incon in a comment is clicked.
function showArrows(parms,xMulti,yMulti,toolTip)
{  
    if (!parms || parms==null)  //parms format:  x,y,text,toolTip|x,y,text,toolTip|x,y,text,toolTip
        return;
    if (!xMulti || xMulti==null)
        xMulti=1;
    if (!yMulti || yMulti==null)
        yMulti=1;        

    var arrowData=parms.split("|");  
    var t;                           
    
    if (document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow")) //get reference to hidden textbox
        t = document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow");
    else
        t = document.getElementById("TextBoxArrow"); 

    clearArrows();
    
    t.value=parms;  //make TextBoxArrow contain current arrow parameters
     
    for (i=0;i<arrowData.length;i++)
    {
        temp=arrowData[i].split(",");
        drawArrow(temp[0]*xMulti,temp[1]*yMulti,temp[2]," (Placed by "+temp[3]+") "+toolTip)            
    }   
    window.scroll(0,0);
}
//*************************************

function clearArrows()
{
    var i=0;
    var theSpan=document.getElementById("arrowSpan");
    var t;
    if (document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow"))
        t = document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow");
    else
        t = document.getElementById("TextBoxArrow"); 
           
    t.value="";

    for (i=0;i<theSpan.childNodes.length;i++)
    {
        if (theSpan.childNodes[i].tagName && (theSpan.childNodes[i].tagName.toUpperCase()!="IMG" ))
        {
            theSpan.removeChild(theSpan.childNodes[i]);
            i=0;    //reset i because element removed and length is now different
        }
    }
}
//*************************************

function putArrow(e)
{
	if (!user || user=="undefined" || user==null || user.length==0)//user is defined in pictview.aspx.vb globally as user.identity.name
	{
	    alert("Login to place pointers on an images with associated comments or question!  To see a higher resolution version of this image, click the 'show larger' link above.");
	    return;
	}

    var x;  //x mouse coordinate
    var y;  //y mouse coordinate
    var t;  //t is the hidden textbox that holds the arrow info
    if (document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow"))
        t = document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow");
    else
        t = document.getElementById("TextBoxArrow");    
	if (document.all)  //check to see if IE
	{	
        x = window.event.x+document.body.scrollLeft;
        y = window.event.y+document.body.scrollTop;        
	}
	else
	{
	    var obj=e.target;       //get current element from event (arrowSpan)
        var curleft = 0;
        var curtop = 0;
        if (obj.offsetParent) 
        {
            curleft = obj.offsetLeft
            curtop = obj.offsetTop
            while (obj = obj.offsetParent) 
            {
                curleft += obj.offsetLeft
                curtop += obj.offsetTop
            }
        }
        x = e.pageX-curleft;
        y = e.pageY-curtop;	
	}

    var arrowNumber = findNextArrowNumber()
 
    drawArrow(x,y,arrowNumber," (Placed by "+user+")");  
        
    if (t && t!=null)
    {
      if (t.value.length==0)
        t.value=x+","+y+","+arrowNumber+","+user;
      else
        t.value+="|"+x+","+y+","+arrowNumber+","+user;
    }
    return(true);
}
//*************************************

function Arrow()
{
    this.x=0;  //arrow tip column
    this.y=0;  //arrow tip row
    this.text="";    //text to display beside arrow
    this.toolTip="";  //text for tool tip
}
//*************************************


function findNextArrowNumber()
{
    var el=document.getElementById("arrowSpan");
    var nextArrowNumber=1;
    var currentArrowNumber=0;
    var thereisaproblem = true;
    
    var arrowData;  //split single line of text into individual arrow data
    var arrows = new Array();        //array to hold arrow objects
    var arrow;                       //arrow object
    var t;                           //pointer to arrowSpan element
    
    if (document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow"))
        t = document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow");
    else
        t = document.getElementById("TextBoxArrow"); 
    arrowData=t.value.split("|");
   
    for (i=0;i<arrowData.length;i++)
    {
        temp=arrowData[i].split(",");  //split arrow data into array representing x,y,text,tooltip
        arrow=new Arrow();             //create a new arrow object
        arrow.x=temp[0];
        arrow.y=temp[1];
        arrow.text=temp[2];
        arrow.toolTip=temp[3];
        arrows[i]=arrow;  //put arrow object into array of arrows.            
    }
    
    
    while (thereisaproblem) 
    {
        thereisaproblem = false;        
        for (i=0;i<arrows.length;i++)
        { 
             if (arrows[i].text==nextArrowNumber)
            {
                nextArrowNumber=nextArrowNumber+1;
                thereisaproblem = true;
            }
        }
    }
    
    return(nextArrowNumber);
}
//*************************************

function drawArrow(x,y,text,toolTip)
{
    var width = 1;
    var el=document.getElementById("arrowSpan");
    var g;              //object to hold the arrow while we're creating it
    var theArrow;       //pointer to page element of the SPAN holding all the arrow spans
    var divX=0;
    var divY=0;
    var length=20;
      

    //add SPAN to hold the arrow
    g=document.createElement('span'); 
    g.id=x+"_"+y+"-arrow";
    g.style.position="absolute";
    g.style.width = length+24 + "px";
    g.style.height = "14px";
    g.style.left = x + 'px';
    g.style.top = y-7 + 'px';
    g.title="Pointer #"+text+" "+toolTip;
	g.style.filter="alpha(opacity=100)"; 
	g.arrowNumber=text;
	g.style.opacity=100;
    g.style.padding = "0px";
	g.style.overflow = "hidden";
	g.oncontextmenu = new Function("deleteArrow('"+x+"_"+y+"-arrow'); return(false);");
    theArrow=el.appendChild(g);  
    
    //draw the arrow
    //top part of arrow
    drawLine(6,0,theArrow,1);
    drawLine(5,1,theArrow,2);
    drawLine(4,2,theArrow,3);
    drawLine(3,3,theArrow,4);
    drawLine(2,4,theArrow,length-2);
    drawLine(1,5,theArrow,length-1);
    //arrow centerline
    drawLine(0,6,theArrow,length);
    //bottom half of arrow
    drawLine(1,7,theArrow,length-1);     
    drawLine(2,8,theArrow,length-2);
    drawLine(3,9,theArrow,4);
    drawLine(4,10,theArrow,3);
    drawLine(5,11,theArrow,2);
    drawLine(6,12,theArrow,1);    

    if (text && text!=null && text.toString().length>0)
        drawText(length+2,0,theArrow,text);
            
    return(true);
}
//*************************************
function drawLine(x,y,theArrow,length)
{
    g=document.createElement('span'); 
    g.style.position="absolute";
    g.style.borderTop="1px solid transparent";
    g.style.borderTopColor = color;
    g.style.width = length + 'px';
    g.style.left = x + 'px';
    g.style.top = y + 'px';
	g.style.filter="alpha(opacity="+(opacity*100)+")";
	g.style.opacity=opacity;
	g.style.padding = "0px";
	g.style.overflow = "hidden";
    theArrow.appendChild(g);     
    return(true);
}
//*************************************
function drawText(x,y,theArrow,text)
{
    g=document.createElement('span');     
    //g.className="arrowText";
    g.style.position="absolute";
    g.style.color = color;
    g.style.left = x + 'px';
    g.style.top = y-3 + 'px';
	g.style.filter="alpha(opacity="+(opacity*100)+")";
	g.style.opacity=opacity;
	g.style.fontSize = "18px";
	g.style.fontWeight = "bold";
	g.style.fontFamily = "Sans-serif";
	g.innerHTML = text;
	g.style.padding = "0px";
	g.style.overflow = "hidden";
    theArrow.appendChild(g);     
    return(true);
}
//*************************************
function deleteArrow(id)
{
    var a = document.getElementById(id);            //arrow element to delete
    var p = document.getElementById("arrowSpan");   //parent container around image
    var t;
    if (document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow"))
        t = document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow");
    else
        t = document.getElementById("TextBoxArrow");        
    var x_y = id.substring(0,id.indexOf("-"));
    var x = parseInt(x_y.substring(0,x_y.indexOf("_")));
    var y = parseInt(x_y.substr(x_y.indexOf("_")+1));
    var vals = t.value.split("|");
    var result="";
    
    p.removeChild(a);   //remove arrow
    
    //remove arrow with x,y coordinate from TextBoxArrow
    for (i=0;i<vals.length;i++)
    {
        if (vals[i].indexOf(x+","+y)<0)
        {
            if (result.length==0)
                result=vals[i];
            else
                result+="|"+vals[i];
        }
    }
    t.value=result;  //replace value of TextBoxArrow (hidden textbox) with new string that excludes deleted arrow

    return(false);
}

//Opens big picture window
function showBigPic()
{
    var p=document.getElementById("ctl00_ContentPlaceHolder1_HiddenFieldPictureID");  
    var pictureID;
    var t;
    if (document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow")) 
        t = document.getElementById("ctl00_ContentPlaceHolder1_TextBoxArrow");
    else
        t = document.getElementById("TextBoxArrow");        
    
    if (p.value)
        pictureID=p.value;
    else  
    {  
        alert("Error getting the pictureID. Contact system administrator.");
        return(false);
    }
    
    if (t.value.length < 1)
        {
            var newWin=window.open("BigPicViewer.aspx?PictureID=" + pictureID, "NewBigPicture" , "height=480, width=640,status= no,resizable=yes, scrollbars=yes, toolbar=no,location=yes,menubar=no");
            newWin.focus()
        }
    else
        {
        var newWin=window.open("BigPicViewer.aspx?PictureID="+pictureID+"&arrowData="+t.value, "NewBigPicture" , "height=480, width=640,status= no,resizable=yes, scrollbars=yes, toolbar=yes,location=yes,menubar=yes");
        newWin.focus
        }
    return(false);
}


// filesystem based script resource
function identityFunction(arg) {
    return arg;
}
if(typeof('Sys') !== 'undefined') Sys.Application.notifyScriptLoaded();

