﻿function uspsapi() {
  this.showError = function(err) {
    function whenDone() {
      return 
    }
    app.msgbox(
      err.error + '<br />' + 'Description: ' + err.description
      + '<br />' + 'Number: ' + err.number + '<br />' + 'Source: ' + err.source)
  }
  this.getErrorObject = function(xmldoc) {
    return {
      error: 'USPS API Error',  
      number: xmldoc.getElementsByTagName('Number')[0].childNodes[0].nodeValue,
      source: xmldoc.getElementsByTagName('Source')[0].childNodes[0].nodeValue,
      description: xmldoc.getElementsByTagName('Description')[0].childNodes[0].nodeValue
    }
  }
  this.cityStateLookup = function(cb, zip5) {
    function gotCityState(response) {
      if (app.activeForm) app.activeForm.window().setStatusBar(false)
      xmldoc = BC.parseXML(response)
      if (xmldoc.getElementsByTagName('Error')[0]) {
        errobj = _this.getErrorObject(xmldoc)
        if (_this.alertOnError) _this.showError(errobj)
        return cb(errobj)
      } else {
        return cb({
          city: xmldoc.getElementsByTagName('City')[0].childNodes[0].nodeValue,
          state: xmldoc.getElementsByTagName('State')[0].childNodes[0].nodeValue 
        })
      }
    }
    var webService = eval(webServiceCall).DBI
    var xml = '<ZipCode ID= "0"><Zip5>' + zip5 + '</Zip5></ZipCode>'
    if (app.activeForm) app.activeForm.window().setStatusBar(true)
    webService(enums.uspsapi.lkupCityState, xml, gotCityState, DA.webServiceFailure)
  }
  this.validateAddress = function(cb, a1, a2, city, st, z5, z4) {
    function gotValidation(response) {
      xmldoc = BC.parseXML(response)
      if (xmldoc.getElementsByTagName('Error')[0]) {
        errobj = _this.getErrorObject(xmldoc)
        if (_this.alertOnError) _this.showError(errobj)
        return cb(errobj)
      } else {
        return cb({
          address1: (addr1=xmldoc.getElementsByTagName('Address1')[0]) ? addr1.childNodes[0].nodeValue : '',
          address2: (addr2 = xmldoc.getElementsByTagName('Address2')[0]) ? addr2.childNodes[0].nodeValue : '',
          city: (c = xmldoc.getElementsByTagName('City')[0]) ? c.childNodes[0].nodeValue : '',
          state: (s = xmldoc.getElementsByTagName('State')[0]) ? s.childNodes[0].nodeValue : '',
          zip5: (zp5 = xmldoc.getElementsByTagName('Zip5')[0]) ? zp5.childNodes[0].nodeValue : '',
          zip4: (zp4 = xmldoc.getElementsByTagName('Zip4')[0]) ? zp4.childNodes[0].nodeValue : ''
        })
      }
    }
    function toxml() {
      return '<Address ID="' + (z5 ? '1' : '0') + '">' +
        '<Address1>' + (a1 ? a1 : '') + '</Address1>' +
        '<Address2>' + (a2 ? a2 : '') + '</Address2>' +
        '<City>' + (city ? city : '') + '</City>' +
        '<State>' + (st ? st : '') + '</State>' +
        '<Zip5>' + (z5 ? z5 : '') + '</Zip5>' +
        '<Zip4>' + (z4 ? z4 : '') + '</Zip4>' +
        '</Address>'
    }
    var webService = eval(webServiceCall).DBI
    webService(enums.uspsapi.verify, toxml(), gotValidation, DA.webServiceFailure)
  }
  this.alertOnError = true
  var _this = this
}