﻿var OBJECT = null;
var FromTo = '';
var puVAL = '';
var doVAL = '';
var puValid = true;
var doValid = true;
var ie4 = document.all;
var ns6 = document.getElementById && !document.all;

if( ie4||ns6 )
    document.write('<div id="DialogBox_Addresses" class="winModal"></div>' +
                        '<div id="DialogBox_1" style="padding:0px;' +
                              'z-index:300;' +
                              'position:absolute;' +
                              'background-color:lightyellow;' +
                              'border-style:solid;' +
                              'border-width:1px;' +
                              'border-color:#999999;' +
                              'width:300px;' +
                              'display:none">' +
                        '<table id="Table_Adr" width="300px" border=0 cellspacing=0>' +
                        '<tr bordercolor=#CCCCCC>' +
                            '<td bgcolor=#CCCCCC align="left"><strong>Address Verification</strong></td>' +
                            '<td bgcolor=#CCCCCC align="right" style="height: 10px">' +
                                '<a id="winClose" onclick="DlgBoxSubmit(3)">close</a>' +
                            '</td>' +
                        '</tr>' +
                        '<tr>' +
                        '<td colspan="2">' +
                            '<table width="100%">' +
                            '<tr><td><font id="Msg" class="fontFieldLabel2"></font></td></tr>' +
                            '<tr><td><font id="tbAdr" class="fontFieldLabel2"></font></td></tr>' +
                            '<tr><td><font id="selectTitle" class="fontFieldLabel2"></font></td></tr>' +
                            '<tr>' +
                                '<td>' +
                                    '<select id="Select_Adr" class="controls" style="display:none; width:290px" name="Select_Field" size="5"' +
                                        'ondblclick="DlgBoxSubmit(0)" onclick="doSelectChange(this, tbAdr)"' +
                                        'onkeydown="KeepFocus(this, event)" onkeyup="doSelectChange(this, tbAdr)">' +
                                    '</select>' +
                               '</td>' +
                            '</tr>' +
                            '<tr>' +
                                '<td align="center">' +
                                    '<input type="Button" id="submit" style="visibility:hidden" class="controls" name="Submit" onclick="DlgBoxSubmit(0)" onkeydown="KeepFocus(this, event)">' +
                                    ' <input type="Button" id="keep" style="visibility:hidden" class="controls" name="Keep" onclick="DlgBoxSubmit(1)">' +
                                    ' <input type="Button" id="cancel" style="visibility:hidden" class="controls" name="Cancel" onclick="DlgBoxSubmit(2)" onkeydown="KeepFocus(this, event)">' +
                                '</td>' +
                            '</tr>' +
                            '</table>' +
                        '</td>' +
                    '</tr>' +
                    '</table>' +
                '</div>');

    // Define an Address() constructor 
    function AddressObj( BldgNo, BldgNo_Keep, Street, City, State, Zip, Country,
                         Latitude, Longitude, Location, Precision, Warning ){
        this.BldgNo = BldgNo;
        this.BldgNo_Keep = BldgNo_Keep;                 
        this.Street = Street;
        this.City = City;
        this.State = State;
        this.Zip = Zip;
        this.Country = Country;
        this.Latitude = Latitude;
        this.Longitude = Longitude;
        this.Location = Location;
        this.Precision = Precision;
        this.Warning = Warning;
    }
    var arrAddr = new Array();

    function AddressServer_CallBack(response) {
      if (response.error != null) {
        alert(response.error);
        return;
      }
      try {
        var sel = $get('Select_Adr');
        var msg = $get('Msg');
        var txt = $get('tbAdr');
        var selTitle = $get('selectTitle');
        var submit = $get('submit');
        var cancel = $get('cancel');
        var keep = $get('keep');
        
        var aBldg,aStreet,aCity,aState,aBldgPostfix;
        aBldg = $get('tb'+FromTo+'BldgNo').value;
        aStreet = $get('tb'+FromTo+'Street').value;
        aCity = $get('tb'+FromTo+'City').value;
        aState = $get('tb'+FromTo+'State').value;
        aBldgPostfix = getBldgNoPostfix(aBldg);
         
        //var adr = $get('tb'+FromTo+'Address');
        //var full = adr.value;
        var aAddr = aBldg + ' ' + aStreet + ', ' + aCity + ' ' + aState;
        var full = aAddr;
        
        var adrPrefix = new Array( "STREET", "ST", "AVE", "AV", "AVENUE", "PL", "PLACE", "LN", "LANE", "BLVD", "BOULEVARD", "RD", "ROAD" );
                                         
        if (response.length == 0 || response[0].Precision != 'address') {
          msg.innerHTML = 'The address could not be validated.<br>Please re-enter address.';
          keep.style.visibility = "visible";
          keep.value = 'Retry';
          keep.focus();
          inProgress = false;
            
        } else if( response.length > 1 ) {
          msg.innerHTML = 'The address could not be validated.<br>Please select address or keep yours.';
          txt.style.display = "none";
          sel.style.display = "block";
          submit.style.visibility = "visible";
          submit.value = 'Select';
          keep.style.visibility = "hidden";
          keep.value = "";
          cancel.style.visibility = "visible";
          cancel.value = 'Retry';
          arrAddr = new Array(response.length);
          for(i=0;i<response.length; i++) {
		    var o = new Option(response[i].Location, i);
	        sel.options[i] = o;
		    var anAddr = new AddressObj( response[i].BldgNo + aBldgPostfix,
		                                 response[i].BldgNo_Keep + aBldgPostfix,
		                                 response[i].Street,
		                                 response[i].City,
		                                 response[i].StateCode,
		                                 response[i].ZipCode,
		                                 response[i].Country,
		                                 response[i].Latitude,
		                                 response[i].Longitude,
		                                 response[i].Location,
		                                 response[i].Precision,
		                                 response[i].Warning );
	        arrAddr[i] = anAddr;
	      }
	      sel.selectedIndex = 0;
          submit.focus();
          inProgress = false;
            
          var dropmenuobj = document.getElementById("DialogBox_1");
          dropmenuobj.style.display = "block";
          var IpopTop = ( document.getElementById('mainTable').offsetHeight - dropmenuobj.offsetHeight) / 2;
          var IpopLeft = ( document.getElementById('mainTable').offsetWidth - dropmenuobj.offsetWidth) / 2;
          dropmenuobj.style.left = IpopLeft + getposOffset(document.getElementById('mainTable'), "left") + "px";
          dropmenuobj.style.top = IpopTop + getposOffset(document.getElementById('mainTable'), "top") + "px";                 
        
        } else {
          msg.innerHTML = 'Please confirm address:';
          selTitle.innerHTML = '';
          txt.style.display = "block";
          //txt.innerHTML = '<strong>' + response[0].Location + '</strong>';
          txt.innerHTML = '<strong>' + 
                          response[0].BldgNo + aBldgPostfix + ' ' + 
                          response[0].Street + ', ' +
                          response[0].City + ' ' + 
                          response[0].StateCode + ' ' +                          
                          response[0].ZipCode +
                          '</strong>';
          sel.style.display = "none";
          arrAddr = new Array(1);
	      var anAddr = new AddressObj( response[0].BldgNo + aBldgPostfix,
		                               response[0].BldgNo_Keep,
		                               response[0].Street,
	                                   response[0].City,
		                               response[0].StateCode,
		                               response[0].ZipCode,
		                               response[0].Country,
		                               response[0].Latitude,
		                               response[0].Longitude,
		                               response[0].Location,
		                               response[0].Precision,
		                               response[0].Warning );
		  arrAddr[0] = anAddr;
          submit.style.visibility = "visible";
          submit.value = 'Confirm';
          if (response[0].BldgNo_Keep!="") {
            keep.style.visibility = "visible";
            keep.value = 'Keep ' + response[0].BldgNo_Keep + aBldgPostfix;
          } else {
            keep.style.visibility = "hidden";
            keep.value = '';
          }
          cancel.style.visibility = "visible";
          cancel.value = 'Retry';
          submit.focus();
          inProgress = false;
            
          var dropmenuobj = document.getElementById("DialogBox_1");
          dropmenuobj.style.display = "block";
          var IpopTop = ( document.getElementById('mainTable').offsetHeight - dropmenuobj.offsetHeight) / 2;
          var IpopLeft = ( document.getElementById('mainTable').offsetWidth - dropmenuobj.offsetWidth) / 2;
          dropmenuobj.style.left = IpopLeft + getposOffset(document.getElementById('mainTable'), "left") + "px";
          dropmenuobj.style.top = IpopTop + getposOffset(document.getElementById('mainTable'), "top") + "px";                                 
          hideComboBoxes(dropmenuobj);
        }
      
      } catch( error ) {// If user canceled operation...
        //alert(error);
        inProgress = false;
        return; 
      }
    }
    
    function getBldgNoPostfix(bldgNo) {
      var i,iMax;
      var ch;
      iMax = bldgNo.length;
      for (i=iMax-1; i>=0; i--) {
        ch = bldgNo.charAt(i);
        if (ch>='0' && ch<='9') {
          return (i==iMax-1 ? "" : bldgNo.substr(i+1));
        }
      }
      return "";
    }
       
    var inProgress = false;
    function createAddressSmartBox(obj, e, type, FromTo) {
         //TextBoxOnFocusOut(obj);
         var activeElem;
         if( "activeElement" in document )
            activeElem = document.activeElement;
         else
            activeElem = active(obj);
         
         var aBldg,aStreet,aCity,aState;
         aBldg = $get('tb'+FromTo+'BldgNo').value;
         aStreet = $get('tb'+FromTo+'Street').value;
         aCity = $get('tb'+FromTo+'City').value;
         aState = $get('tb'+FromTo+'State').value;
         if (aBldg.length == 0 ||
             aStreet.length == 0 ||
             aCity.length == 0 ||
             aState.length == 0) {
           return false;
         }
         
         //var adr = document.getElementById('tb'+FromTo+'Address');
         var aAddr = aBldg + ' ' + aStreet + ', ' + aCity + ' ' + aState;
         var full = aAddr;

         if (FromTo == 'From' && puVAL == full) return false;
         if (FromTo == 'To' && doVAL == full) return false;

         if (inProgress == true) return false;
         if (type=='address' && activeElem!=null) {
           var addrHasFocus = activeElem.id.indexOf('tb'+FromTo)>=0 && activeElem.id!='tbFromApt';
           if (addrHasFocus) return false;
         }
         //alert('puVAL='+puVAL+'  full='+full+'  activeElem.id='+activeElem.id);
                         
         // Reset Controls...
         var sel = document.getElementById('Select_Adr');
         var msg = document.getElementById('Msg');
         var txt = document.getElementById('tbAdr');
         var selTitle = document.getElementById('selectTitle');
         var submit = document.getElementById('submit');
         var cancel = document.getElementById('cancel');
         var keep = document.getElementById('keep');
         msg.innerHTML = 'Searching, please wait....';
         txt.style.display = "none";
         selTitle.innerHTML = '';
         sel.style.display = "none";
         keep.style.visibility = "hidden";
         submit.style.visibility = "hidden";
         cancel.style.visibility = "hidden";
         inProgress = true;

         OpenWindow(FromTo);
         PageMethods.validateAddress(aAddr, AddressServer_CallBack);
    }

    function DlgBoxSubmit( bSubmit ) {
      showComboBoxes();
      var dlg = $get('DialogBox_Addresses');
      var dlg2 = $get('DialogBox_1');
      dlg.style.display = "none";
      dlg2.style.display = "none";
      //var adr = document.getElementById('tb'+FromTo+'Address');
      var aAddr = "";
      var keep = document.getElementById('keep');
      inProgress = false;
 
        if (bSubmit == 0 || (bSubmit == 1 && keep.value!='Retry')) { // Submit or Keep
            var bldgNo;
            //if ($get('Select_Adr').selectedIndex > -1 ) {
            if ($get('Select_Adr').style.display!='none' && $get('Select_Adr').selectedIndex > -1) {
                var nIndex = document.getElementById('Select_Adr').selectedIndex;
                bldgNo = (bSubmit==1 ? arrAddr[nIndex].BldgNo_Keep : arrAddr[nIndex].BldgNo);
                aAddr  = bldgNo + " " + arrAddr[nIndex].Street + ", " + arrAddr[nIndex].City + " " + arrAddr[nIndex].State;
                $get('tb'+FromTo+'BldgNo').value = bldgNo;
                $get('tb'+FromTo+'Street').value = arrAddr[nIndex].Street;
                $get('tb'+FromTo+'City').value = arrAddr[nIndex].City;
                $get('tb'+FromTo+'State').value = arrAddr[nIndex].State;
                $get('hidden'+FromTo+'Zip').value = arrAddr[nIndex].Zip;
                $get('hidden'+FromTo+'Country').value = arrAddr[nIndex].Country;
                $get('hidden'+FromTo+'Latitude').value = arrAddr[nIndex].Latitude;
                $get('hidden'+FromTo+'Longitude').value = arrAddr[nIndex].Longitude;
            } else {
                try {
                    bldgNo = (bSubmit==1 ? arrAddr[0].BldgNo_Keep : arrAddr[0].BldgNo);
                    aAddr = bldgNo + " " + arrAddr[0].Street + ", " + arrAddr[0].City + " " + arrAddr[0].State;
                    $get('tb'+FromTo+'BldgNo').value = bldgNo;                    
                    $get('tb'+FromTo+'Street').value = arrAddr[0].Street;
                    $get('tb'+FromTo+'City').value = arrAddr[0].City;
                    $get('tb'+FromTo+'State').value = arrAddr[0].State;            
                    $get('hidden'+FromTo+'Zip').value = arrAddr[0].Zip;
                    $get('hidden'+FromTo+'Country').value = arrAddr[0].Country;
                    $get('hidden'+FromTo+'Latitude').value = arrAddr[0].Latitude;
                    $get('hidden'+FromTo+'Longitude').value = arrAddr[0].Longitude;
                }
                catch(err){}
            }
            
            if( FromTo == 'From' ) {
                puVAL = aAddr;
                puValid = true;
                $get('tbFromApt').focus();
            } else {
                doVAL = aAddr;
                doValid = true;
                $get('btnNext').focus();
            }
            //next($get('tb'+FromTo+'State'));
        
        } else if (bSubmit == 1) { // Keep - "Retry" only
            if( FromTo == 'From' ) {
                puVAL = aAddr;
            } else {
                doVAL = aAddr;
            }
    
            $get('tb'+FromTo+'BldgNo').value = '';
            $get('tb'+FromTo+'Street').value = '';
            $get('tb'+FromTo+'City').value = '';
            $get('tb'+FromTo+'State').value = '';    
            $get('hidden'+FromTo+'Zip').value = '';
            $get('hidden'+FromTo+'Country').value = '';
            $get('hidden'+FromTo+'Latitude').value = '';
            $get('hidden'+FromTo+'Longitude').value = '';
            OBJECT.focus();
        
        } else if (bSubmit == 2 ) { // cancel
            if( FromTo == 'From' ) {
                puVAL = aAddr;
                puValid = false;
            } else {
                doVAL = aAddr;
                doValid = false;
            }
            OBJECT.focus();
            
        } else { // Escape
            if (FromTo == 'From') {
                puVAL = aAddr;
                puValid = false;
            } else {
                doVAL = aAddr;
                doValid = false;
            }    
            OBJECT.focus();     
        }
    }

    function KeepFocus(obj, e) {
        var key = (e.which) ? e.which : e.keyCode
        if( key == 9 && obj.id == 'cancel' ) {
            var a = document.getElementById('submit');
            var b = document.getElementById('Select_Adr');
            if( b.style.display == "block" ) {
                b.focus();            
            }
            else {
                a.focus();
            }
            if( window.event ) window.event.returnValue = null;
            else e.preventDefault();
            return false;                
        }
        else if( key == 16 ) {
            if( window.event ) window.event.returnValue = null;
            else e.preventDefault();
            return false;
        }
        return true;
    }

    function OpenWindow(type) {
        FromTo = type;
        OBJECT = document.getElementById('tb'+FromTo+'BldgNo');
        var dlg = document.getElementById('DialogBox_Addresses');
        var dlg2 = document.getElementById('DialogBox_1');   
    
        var dropmenuobj = document.getElementById("DialogBox_1");
        dropmenuobj.style.display = "block";
        var IpopTop = ( document.getElementById('mainTable').offsetHeight - dropmenuobj.offsetHeight) / 2;
        var IpopLeft = ( document.getElementById('mainTable').offsetWidth - dropmenuobj.offsetWidth) / 2;
        dropmenuobj.style.left = IpopLeft + getposOffset(document.getElementById('mainTable'), "left") + "px";
        dropmenuobj.style.top = IpopTop + getposOffset(document.getElementById('mainTable'), "top") + "px"; 
     
        dlg.style.height = document.getElementById('mainTable').offsetHeight + "px";
        dlg.style.width = document.getElementById('mainTable').offsetWidth + "px";
        dlg.style.top = getposOffset(document.getElementById('mainTable'), "top") + "px";
        dlg.style.left = getposOffset(document.getElementById('mainTable'), "left") + "px";
        dlg.style.display = "block";
        hideComboBoxes(dropmenuobj);
    }

    function doSelectChange(el,dest) {
        if( el.selectedIndex > -1 ) {
            dest.value = el.options[el.selectedIndex].text
        }
    }
    