﻿// JScript File
// This file contains the routines to work with (address) points on the map

var pointsArray = new Array(); // array of point objects
var MAX_POINT_TYPE = 4;
var currentPoint=null;
var currentIdx = -1;
function pointObject()
{
    // Point type
    // Possible values: 0 - undefined
    //                  1 - address
    //                  2 - place
    //                  3 - two cities
    //                  4 - click on the map
    
    this.type = 0;
    // String displayed in UI
    this.display = '';
    // Was resolved to X,Y ?
    this.resolved = false;
    this.X = 0;
    this.Y = 0;
    // Index in the list of stations
    this.order = null; 
    // Point modifications:
    // 0 - undefined
    // 1 - single
    // 2 - start point
    // 3 - stop point
    // 4 - intermediate point
    this.mode = 0;
    
    this.par1 = '';
    this.par2 = '';
    this.par3 = '';
    this.par4 = '';
    this.par5 = '';
    
    // Methods
    this.toString = function(delim)
    {
        // Serialized structure and field index
        //  0      1        2              3   4      5       6       7            11
        // type : mode : resolved(0 | 1) : X : Y : order : display : par1 : ... : par5
        var s = '';
        s+=this.type + delim + this.mode + delim + (this.resolved ? '1' : '0') + delim;
        s+=this.X + delim + this.Y + delim;
        s+=this.order + delim + this.display + delim;
        s+=this.par1 + delim + this.par2 + delim + this.par3 + delim + this.par4 + delim + this.par5;
        return s;
    }
    this.setType = function(type)
    {
        if (isNaN(type))
            return false;
        if (type < 0 || type > MAX_POINT_TYPE)
            return false;
        this.type=type;
        return true;        
    }
    this.setMode = function(mode)
    {
        if (isNaN(mode))
            return false;
        if (mode <0 || mode > 4)
            return false;
        this.mode = mode;
        return true;
    }
    /*
    this.setOrder = function (or)
    {
        if (isNaN(or))
        {
            this.order = or.substr(0,1).toUpperCase();
            return true;
        }
        var a = 'A'.charCodeAt(0);
        var b = 'z'.charCodeAt(0);
        if ((or > b) || (or < a))
            return false;
        this.order = String.fromCharCode(or).toUpperCase();    
        return true;
    }
    */
    this.setData = function (p1,p2,p3,p4,p5)
    {
        
        this.par1 = p1 || '';
        this.par2 = p2 || '';
        this.par3 = p3 || '';
        this.par4 = p4 || '';
        this.par5 = p5 || '';
        return true;
    }
    this.setDisplay = function()
    {
        if (this.type == 0)
            return false;
        switch (this.type)
        {
            case 1: // Address
                this.display = this.par3 + ' ' + this.par5 + ' ' + this.par1;
                break;
            case 2: // Place category : site
                this.display = this.par3 + ': ' + this.par5;
                break;            
        }    
        return true;
    }
        
    
    
}
// Functions supporting points list operations

function clearList(listID)
{
    if (prevTabID == TAB_ROUTE2_ID)
    {
        cleanPointInput("RoutePoint");
        cleanPointInput("RoutePoint2");
        return;
    }
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
    lst.innerHTML = '';    
    pointsArray.length = 0;
    document.getElementById('routeType_Opt').disabled = true;
    
}
function restoreList(listID)
{
    if (pointsArray.length<4)
        document.getElementById('routeType_Opt').disabled = true;

    if (pointsArray.length == 0)
    {
        clearList(listID);
        return;
    }
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
    lst.innerHTML='';
	for (var i=0;i<pointsArray.length;i++){
	    pointsArray[i].order = i;
       	var el = createListItem(pointsArray[i]);	
       	lst.insertBefore(el);
	}
}
function addToList(p,listID)
{
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
	var i = pointsArray.length;
	if (i>=6)
	{
	    alert('No more than 6 route stops in free version of eMap. Sorry...');
	    return;
	}
  	p.order = i;
	pointsArray[i] = p;
	var el = createListItem(p);	
	lst.insertBefore(el,null);
    lst.scrollTop = lst.offsetHeight;
    if (pointsArray.length>3)
        document.getElementById('routeType_Opt').disabled = false;
	
}
function deleteFromList(listID,idx)
{
    if (idx==null)
        return;
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
    if (idx<0)
        return;
    if (idx == pointsArray.length-1) // the last item
        pointsArray.length--;
    else
    {
        for (var j=idx+1;j<pointsArray.length;j++)
        {
			pointsArray[j-1]=pointsArray[j];
		}
        pointsArray.length--;

    }            
    restoreList(listID);
    
}
function moveUp(listID,i)
{
    if ((i==null) || (i<=0))
        return;
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
    var p=pointsArray[i];
    pointsArray[i] = pointsArray[i-1];    
    pointsArray[i-1] = p;    
    restoreList(listID);
}
function moveDown(listID,i)
{
    if ((i==null) || (i<0) || (i==pointsArray.length-1))
        return;
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
    var p=pointsArray[i];
    pointsArray[i] = pointsArray[i+1];    
    pointsArray[i+1] = p;    
    restoreList(listID);
}
function makeCircular(listID)
{
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
        
    if (pointsArray.length < 2)
        return;
    addToList(pointsArray[0],listID);
}
function revertList(listID)
{
    if (prevTabID == TAB_ROUTE2_ID)
    {
        swap2points();
        return;
    }
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
        
    if (pointsArray.length < 2)
        return;
    pointsArray.reverse();
    restoreList(listID);    
}
function swap2points()
{
    var p1 = new pointObject();
    var p2 = new pointObject();
    setPointFromControl(p1,"RoutePoint");
    setPointFromControl(p2,"RoutePoint2");
    setControlFromPoint(p2,"RoutePoint");
    setControlFromPoint(p1,"RoutePoint2");
}
function setPointFromControl(p,ctrlID)
{
    ctl = $get(ctrlID);
    if (ctl==null || p==null)
        return;
    var idx= $get(ctrlID + "_tbSelectType").selectedIndex;
    var m;
    var n;
    p.type = idx + 1;
    switch (idx)
    {
        case 0: // address
            p.par1 = $get(ctrlID + "_panel0tbCity").value ;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCity0");
            p.par2 = ((m!=null) ? m.getSelectedValue() : "");
            p.par3 = $get(ctrlID + "_panel0tbStreet").value;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmStreet");
            p.par4 = ((m!=null) ? m.getSelectedValue() : "");
            p.par5 = $get(ctrlID + "_panel0tbNumber").value;
            break;
        case 1: // place
            p.par1 = $get(ctrlID + "_panel1tbCity").value;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCity1");
            p.par2 = ((m!=null) ? m.getSelectedValue() : "");
            p.par3 = $get(ctrlID + "_panel1tbCategory").value;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCategory");
            p.par4 = ((m!=null) ? m.getSelectedValue() : "");
            p.par5 = $get(ctrlID + "_panel1tbSite").value;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmSite")
            n = ((m!=null) ? m.getSelectedValue() : "0,0");
            p.X = n.split(",")[0];
            p.Y = n.split(",")[1];
            p.resolved = true;
            break;
      } 
      p.setDisplay();     
}
function setControlFromPoint(p,ctrlID)
{
    ctl = $get(ctrlID);
    if (ctl==null || p==null)
        return;
    if (p.type <= 0)
        return;    
    var idx = p.type-1;
    ShowDiv(idx,ctrlID,false);
    $get(ctrlID + "_tbSelectType").selectedIndex = idx;

    switch (idx)
    {
        case 0: // address
            $get(ctrlID + "_panel0tbCity").value = p.par1 ;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCity0");
            if (m!=null)
                m.setSelectedValue(p.par2);
            $get(ctrlID + "_panel0tbStreet").value = p.par3
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmStreet");
            if (m!=null)
                m.setSelectedValue(p.par4);
            $get(ctrlID + "_panel0tbNumber").value = p.par5;
            break;
        case 1: // place
            $get(ctrlID + "_panel1tbCity").value = p.par1;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCity1");
            if (m!=null)
                m.setSelectedValue(p.par2);
            $get(ctrlID + "_panel1tbCategory").value = p.par3;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCategory");
            if (m!=null)
                m.setSelectedValue(p.par4);
            $get(ctrlID + "_panel1tbSite").value = p.par5;
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmSite")
            if (m!=null)
                m.setSelectedValue(p.X.toString() + "," + p.Y.toString());
            break;
      }      
}
function editFromList(listID)
{
    return false;
    var lst = document.getElementById(listID);
    if (lst==null)
        return;
    var i = lst.selectedIndex;
    if (i<0) 
        return;
    currentPoint = pointsArray[i];
    currentIdx=i;
    var ctrlID="RoutePoint";
    document.getElementById(ctrlID + "_tbSelectType").selectedIndex = currentPoint.type-1;
    ShowDiv(currentPoint.type-1,ctrlID,true);
    switch (currentPoint.type-1)
    {
        case 0: // address
            document.getElementById(ctrlID + "_panel0tbCity").value = currentPoint.par1;
            document.getElementById(ctrlID + "_panel0tbStreet").value = currentPoint.par3;
            document.getElementById(ctrlID + "_panel0tbNumber").value = currentPoint.par5;
            break;
        case 1: // place
            break;
        default:
            break;
    }
}
function cleanPointInput(ctrlID)
{
    var m;
        // address part
            $get(ctrlID + "_panel0tbCity").value = "";
            m=AutoSuggestMenu.getMenu(ctrlID + "_asmCity0")
            if (m!=null)
                m.setSelectedValue("");
            $get(ctrlID + "_panel0tbStreet").value = "";
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmStreet");
            if (m!=null)
                m.setSelectedValue("");
            $get(ctrlID + "_panel0tbNumber").value = "";

       // place part
            $get(ctrlID + "_panel1tbCity").value = "";
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCity1");
            if (m!=null)
                m.setSelectedValue("");
            $get(ctrlID + "_panel1tbCategory").value = "";
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmCategory");
            if (m!=null)
                m.setSelectedValue("");
            $get(ctrlID + "_panel1tbSite").value = "";
            m = AutoSuggestMenu.getMenu(ctrlID + "_asmSite");
            if (m!=null)
                m.setSelectedValue("");

    
}
function setAsRoutePoint(ctrlID)
{
//    var idx= document.getElementById(ctrlID + "_tbSelectType").selectedIndex;
//    alert(ctrlID);
//    alert($get('AddressPoint'));
//    alert($get('AddressPoint').firstChild.text);
    var idx= $get(ctrlID + "_tbSelectType").selectedIndex;
    var p1;
    var p2;
    var p3;
    var p4;
    var p5;
    var m;
    try{
        switch (idx)
        {
            case 0:
              p1=document.getElementById(ctrlID + "_panel0tbCity").value;
              p2=AutoSuggestMenu.getMenu(ctrlID + "_asmCity0").getSelectedValue();
              p3=document.getElementById(ctrlID + "_panel0tbStreet").value;
              m=AutoSuggestMenu.getMenu(ctrlID + "_asmStreet");
              p4=(m!=null) ? m.getSelectedValue() : "";
              p5=document.getElementById(ctrlID + "_panel0tbNumber").value;
              doTab(TAB_ROUTE_ID);
              SendGeocodeRequest(1,p1,p2,p3,p4,p5);
              cleanPointInput(ctrlID);
              break;
           case 1:
              p1=document.getElementById(ctrlID + "_panel1tbCity").value;
              p2=AutoSuggestMenu.getMenu(ctrlID + "_asmCity1").getSelectedValue();
              p3=document.getElementById(ctrlID + "_panel1tbCategory").value;
              p4=AutoSuggestMenu.getMenu(ctrlID + "_asmCategory").getSelectedValue() ;
              p5=document.getElementById(ctrlID + "_panel1tbSite").value;
              var coords = AutoSuggestMenu.getMenu(ctrlID + "_asmSite").getSelectedValue();
              doTab(TAB_ROUTE_ID);
              SendSiteRequest(1,p1,p2,p3,p4,p5,coords);
              cleanPointInput(ctrlID);
              
           default:
              break;   
        }    
    }
    catch (e)
    {return;}
        
}
function showPoint(idx)
{
    if (idx >= pointsArray.length) // wrong index
        return;
    var p=pointsArray[idx];
    currentPoint=p;
    if (p.resolved)
    {
        centerOnPoint(p.X,p.Y,p.display)
        return;
    }
    switch (p.type){
        case 1: // Address
            SendGeocodeRequest(0,p.par1,p.par2,p.par3,p.par4,p.par5);
            break;
        case 2: // Place
            SendSiteRequest(0,p.par1,p.par2,p.par3,p.par4,par5,p.X + "," + p.Y);
            break;
        default:
            break;    
    }
    return;
}
/*
function showXYBox(x,y)
{
    alert('X=' + x + ', Y=' + y);
}
*/
/*
   <table cellspacing="0"  cellpadding="0" class="FormTable" dir="rtl" >
	 <tr>
	  <td class="stationFlagTD"><div class="stationFlag">A</div></td>
	  <td style="padding:3px;"></td>
	  <td class="stationPlaceTD" colspan="4">&nbsp;ראול ולנברג 4 תל אביב</td>
	  </tr>
	<tr align="left">
	  <td style="padding:10px;"></td>
	  <td><img class="ImgButton" onclick="moveUp;" src="images/sort_up.gif" width="11" height="12"></td>
	  <td style="padding:3px;"></td>
	  <td><img class="ImgButton" onclick="moveDown('emapStations');" src="images/sort_down.gif" width="11" height="12"></td>
	  <td style="padding:5px;"></td>
 	  <td><a href="#" class="SmallLink2">מחק תחנה</a></td>
	  
	 </tr>
	</table> 

*/
function createListItem(p)
{
    if (p==null)
        return;
    var t,tr,td;
    var porderNum = (p.order==null) ? 'null' : p.order;
    var porderLet = (p.order==null) ? ' ' : String.fromCharCode('A'.charCodeAt() + p.order);
    t = document.createElement('TABLE');
    t.cellspacing = "0";
    t.cellpadding = "0";
    t.className = "FormTable";
    t.dir = ((clientLang=="heb") ? "rtl" : "ltr");

    tr = t.insertRow(-1); // Insert at the end of the table
// -- 1st Cell    
    td = tr.insertCell(-1);
    td.className = "stationFlagTD";
    td.innerHTML = "<div class='stationFlag' onClick='showPoint(" + porderNum + ");'>" + porderLet + "</div>";
// -- 2nd Cell 
    td = tr.insertCell(-1);
    td.style.padding = "3px";
// -- 3d Cell
    td = tr.insertCell(-1);
    td.className = "stationPlaceTD";
//    td.colSpan = "2";
    td.innerHTML = '&nbsp;' + p.display;
// -- 4th Cell
    td = tr.insertCell(-1);
    td.style.padding = "3px";      
// -- 5th Cell
    td = tr.insertCell(-1);
    td.className = "stationPlaceTD";
    td.innerHTML = '<img alt="Move Down" class="ImgButton" onclick="moveDown(\'emapStationList\',' + porderNum + ');" src="images/sort_down.gif" width="11" height="12">&nbsp;'
// -- 5th Cell    
//    td = tr.insertCell(-1);
    td.innerHTML += '<img alt="Move Up" class="ImgButton" onclick="moveUp(\'emapStationList\',' + porderNum + ');" src="images/sort_up.gif" width="11" height="12">&nbsp;'
// -- 6th Cell    
//    td = tr.insertCell(-1);
    td.innerHTML += '<img alt="Delete" class="ImgButton" onclick="deleteFromList(\'emapStationList\',' + porderNum + ');" src="images/remove.gif" width="11" height="12">'
// -- 7th cell - placeholder for scrollbar    
    td = tr.insertCell(-1);
    td.style.padding = "5px";
    td.style.width=15 + 'px';
    return t;
        
}