(function() {
  // returns the script element matching the current script's name (based on params[:action])
function selfLocate() {
  var scriptName = "widget_medium",
      hostName = "www.ridecharge.com",
      scripts = document.getElementsByTagName("script"),
      script,
      src;
  
  for(i = 0, j = scripts.length; i < j; ++i) {
    script = scripts[i];
    src = script.getAttribute("src");
    if(src && (src.indexOf(scriptName) != -1) && (src.indexOf(hostName) != -1) )
      return script;
  }
  return false;
}
// inserts markup before some element, first wrapping it in a div
function injectBefore(origNode, content) {
  var parent = origNode.parentNode,
      wrapper = document.createElement("div");
  wrapper.innerHTML = content;
  parent.insertBefore(wrapper, origNode);
  return wrapper;
}

function emptyElement(elem) {
  while(elem.firstChild)
    elem.removeChild(elem.firstChild);
}

function replaceText(elem, txt) {
  txt = document.createTextNode(txt);
  emptyElement(elem);
  elem.appendChild(txt);
}
function addEvent(elem, evt, func, bind) {
  if(bind) {
    var oldFunc = func;
    func = function() {
      oldFunc.apply(bind, Array.prototype.slice.call(arguments));
    };
  }
  if(elem.addEventListener)
    elem.addEventListener(evt, func, false);
  else if(elem.attachEvent)
    elem.attachEvent("on" + evt, func);
}

function delegateListener(elem, childTagName, evt, func, bind) {
  
}

function preventEventDefault(evt) {
  if(evt.preventDefault)
    evt.preventDefault();
  else
    evt.returnValue = false;
}

function getTarget(evt) {
  return (evt.target) ? evt.target : window.event.srcElement;
}
function clickIsWithin(elem, container) {
  if(elem == container)
    return true;
  var parent, success = false;
  while(elem.parentNode) {
    elem = elem.parentNode;
    if(elem == container)
      return true;
  }
  return false;
}
// !!!depends on events partial!!!

function DateMgr(field) {
  // set field to today's date
  this.d = new Date;
  this.now = new Date;
  this.massageDate();
  this.field = field;
  this.addIcon();
  this.addCalendar();
  this.setupMonth();
}

DateMgr.prototype = {
  calendarDayBGColor: "white",
  calendarSelectedDayBGColor: "#ccc",
  // ensure date's minutes are multiple of 5, always round up
  massageDate: function() {
    var minutes = this.d.getMinutes(),
        diff;
    if(! ((minutes % 5) == 0)) {
      diff = minutes % 5;
      minutes = minutes + 5 - diff;
      this.d.setMinutes(minutes);
    }
  },
  // add icon beside field, make clickable
  addIcon: function() {
    var fieldRow = this.field.parentNode,
        link = document.createElement("a"),
        img = document.createElement("img");
    
    img.src = "http://www.ridecharge.com/stylesheets/images/calendar_icon.gif";
    img.style.border = "none";
    img.style.position = "relative";
    img.style.top = "0px";
    img.style.left = "0px";

    link.href="#";
    link.style.position = "absolute";
    link.style.left = "25px";
    
    this.link = link;
    this.icon = img;
    
    fieldRow.insertBefore(link, this.field);
    this.field.previousSibling.appendChild(img);
    addEvent(img, "click", this.showCalendar, this);
  },
  // add calendar element (initially hidden) beside field
  addCalendar: function() {
    this.calendar = document.createElement("div");
    var fieldRow = this.field.parentNode,
        cal = this.calendar,
        s = cal.style,
        tables,
        navLinks,
        selectBoxes;
        
    s.display = "none";
    s.position = "absolute";
    s.left = (parseInt(this.link.style.left, 10) + 20) + "px";
    s.width = "260px";
    s.zIndex = "5000";
    
    cal.innerHTML = "\u003Cdiv style=\"padding:0;margin:0;width:auto;border:1px solid #ccc;-moz-border-radius:0px 5px 5px 5px;-webkit-border:0px 5px 5px 5px;-khtml-border:0px 5px 5px 5px;border-radius:0px 5px 5px 5px;background:white;\"\u003E\n  \u003Ctable style=\"font-size:13px;\" border=\"0\" cellspacing=\"5\" cellpadding=\"5\" width=\"100%\"\u003E\n    \u003Ctbody\u003E\n      \u003Ctr\u003E\n        \u003Ctd\u003E\u003Ca style=\"display:block;\" href=\"#\"\u003E\u0026lt;\u003C/a\u003E\u003C/td\u003E\n        \u003Ctd style=\"text-align:center;\"\u003EMonth\u003C/td\u003E\n        \u003Ctd style=\"text-align:right;\"\u003E\u003Ca style=\"display:block;\" href=\"#\"\u003E\u0026gt;\u003C/a\u003E\u003C/td\u003E\n      \u003C/tr\u003E\n    \u003C/tbody\u003E\n  \u003C/table\u003E\n\n  \u003Ctable style=\"font-size:11px;\" border=\"0\" cellspacing=\"5\" cellpadding=\"5\" width=\"100%\"\u003E\n    \u003Cthead\u003E\n      \u003Ctr\u003E\n        \u003Cth style=\"text-align:center;\"\u003ESun\u003C/th\u003E\n        \u003Cth style=\"text-align:center;\"\u003EMon\u003C/th\u003E\n        \u003Cth style=\"text-align:center;\"\u003ETue\u003C/th\u003E\n        \u003Cth style=\"text-align:center;\"\u003EWed\u003C/th\u003E\n        \u003Cth style=\"text-align:center;\"\u003EThu\u003C/th\u003E\n        \u003Cth style=\"text-align:center;\"\u003EFri\u003C/th\u003E\n        \u003Cth style=\"text-align:center;\"\u003ESat\u003C/th\u003E\n      \u003C/tr\u003E\n    \u003C/thead\u003E\n    \u003Ctbody\u003E\n    \u003C/tbody\u003E\n  \u003C/table\u003E\n\n  \u003Ctable style=\"font-size:11px;\" border=\"0\" cellspacing=\"5\" cellpadding=\"5\" width=\"100%\"\u003E\n    \u003Ctbody\u003E\n      \u003Ctr\u003E\n        \u003Ctd valign=\"middle\"\u003E\n          Hour:\n          \u003Cselect style=\"\"\u003E\n            \u003Coption value=\"0\"\u003E12 (AM)\u003C/option\u003E\n\u003Coption value=\"1\"\u003E1 (AM)\u003C/option\u003E\n\u003Coption value=\"2\"\u003E2 (AM)\u003C/option\u003E\n\u003Coption value=\"3\"\u003E3 (AM)\u003C/option\u003E\n\u003Coption value=\"4\"\u003E4 (AM)\u003C/option\u003E\n\u003Coption value=\"5\"\u003E5 (AM)\u003C/option\u003E\n\u003Coption value=\"6\"\u003E6 (AM)\u003C/option\u003E\n\u003Coption value=\"7\"\u003E7 (AM)\u003C/option\u003E\n\u003Coption value=\"8\"\u003E8 (AM)\u003C/option\u003E\n\u003Coption value=\"9\"\u003E9 (AM)\u003C/option\u003E\n\u003Coption value=\"10\"\u003E10 (AM)\u003C/option\u003E\n\u003Coption value=\"11\"\u003E11 (AM)\u003C/option\u003E\n\u003Coption value=\"12\"\u003E12 (PM)\u003C/option\u003E\n\u003Coption value=\"13\"\u003E1 (PM)\u003C/option\u003E\n\u003Coption value=\"14\"\u003E2 (PM)\u003C/option\u003E\n\u003Coption value=\"15\"\u003E3 (PM)\u003C/option\u003E\n\u003Coption value=\"16\"\u003E4 (PM)\u003C/option\u003E\n\u003Coption value=\"17\"\u003E5 (PM)\u003C/option\u003E\n\u003Coption value=\"18\"\u003E6 (PM)\u003C/option\u003E\n\u003Coption value=\"19\"\u003E7 (PM)\u003C/option\u003E\n\u003Coption value=\"20\"\u003E8 (PM)\u003C/option\u003E\n\u003Coption value=\"21\"\u003E9 (PM)\u003C/option\u003E\n\u003Coption value=\"22\"\u003E10 (PM)\u003C/option\u003E\n\u003Coption value=\"23\"\u003E11 (PM)\u003C/option\u003E\n          \u003C/select\u003E\n        \u003C/td\u003E\n        \u003Ctd valign=\"middle\"\u003E\n          Minutes:\n          \u003Cselect style=\"\"\u003E\n            \u003Coption value=\"0\"\u003E00\u003C/option\u003E\n\u003Coption value=\"5\"\u003E05\u003C/option\u003E\n\u003Coption value=\"10\"\u003E10\u003C/option\u003E\n\u003Coption value=\"15\"\u003E15\u003C/option\u003E\n\u003Coption value=\"20\"\u003E20\u003C/option\u003E\n\u003Coption value=\"25\"\u003E25\u003C/option\u003E\n\u003Coption value=\"30\"\u003E30\u003C/option\u003E\n\u003Coption value=\"35\"\u003E35\u003C/option\u003E\n\u003Coption value=\"40\"\u003E40\u003C/option\u003E\n\u003Coption value=\"45\"\u003E45\u003C/option\u003E\n\u003Coption value=\"50\"\u003E50\u003C/option\u003E\n\u003Coption value=\"55\"\u003E55\u003C/option\u003E\n          \u003C/select\u003E\n        \u003C/td\u003E\n      \u003C/tr\u003E\n      \u003Ctr\u003E\n        \u003Ctd\u003E\u0026nbsp;\u003C/td\u003E\n        \u003Ctd align=\"right\"\u003E\u003Cinput style=\"\" type=\"button\" value=\"OK\"\u003E\u003C/td\u003E\n      \u003C/tr\u003E\n    \u003C/tbody\u003E\n  \u003C/table\u003E\n\u003C/div\u003E";
    
    tables = cal.getElementsByTagName("table");

    navLinks = tables[0].getElementsByTagName("a");
    addEvent(navLinks[0], "click", this.prevMonth, this);
    addEvent(navLinks[1], "click", this.nextMonth, this);

    selectBoxes = tables[2].getElementsByTagName("select");
    this.hoursBox = selectBoxes[0];
    addEvent(this.hoursBox, "change", this.setHour, this);
    this.minutesBox = selectBoxes[1];
    addEvent(this.minutesBox, "change", this.setMinutes, this);
    
    this.okButton = tables[2].getElementsByTagName("input")[0];
    addEvent(this.okButton, "click", this.hideCalendar, this);
    
    this.calendarMonth = tables[0].getElementsByTagName("td")[1];
    this.calendarTable = tables[1].getElementsByTagName("tbody")[0];
    
    addEvent(document.body, "click", this.handleClick, this);
    fieldRow.insertBefore(cal, this.field);
  },
  // set the field with some date, if nothing passed in set to today's date
  updateField: function() {
    this.field.value = this.format();
  },
  // format a date string for display in a text field. Example: 6/9/2010 at 12:15PM
  format: function() {
    var o = this.humanReadableObject();
    return o.month + "/" + o.day + "/" + o.year + " at " + o.hours + ":" + o.minutes + o.meridian;
  },
  humanReadableObject: function() {
    var d = this.d,
        o = {
      day: d.getDate(),
      month: d.getMonth() + 1,
      year: d.getFullYear(),
      machineHours: d.getHours(),
      machineMinutes: d.getMinutes(),
      meridian: (d.getHours() >= 12) ? "PM" : "AM"
    };
    o.hours = (o.machineHours > 12) ? (o.machineHours - 12) : ((o.machineHours == 0) ? 12 : o.machineHours);
    o.minutes = (o.machineMinutes.toString().length == 2) ? o.machineMinutes : "0" + o.machineMinutes;
    return o;
  },
  // set up a month's data based on date entered in the field
  setupMonth: function() {
    this.month = this.d.getMonth();
    this.year = this.d.getFullYear();
    this.updateCalendar();
  },
  // set calendar's current month
  prevMonth: function(evt) {
    this.month -= 1;
    if(this.month < 0) {
      this.year -= 1;
      this.month = 11;
    }
    this.setD();
    this.updateCalendar();
    preventEventDefault(evt);
  },
  nextMonth: function(evt) {
    this.month += 1;
    if(this.month > 11) {
      this.year += 1;
      this.month = 0;
    }
    this.setD();
    this.updateCalendar();
    preventEventDefault(evt);
  },
  setDay: function(day) {
    this.d.setDate(day);
    this.updateField();
  },
  // called when user chooses hour or sets meridian via time picker
  setHour: function(evt) {
    var selectBox = getTarget(evt);
    this.d.setHours(selectBox.value);
    this.updateField();
  },
  setMinutes: function(evt) {
    var selectBox = getTarget(evt);
    this.d.setMinutes(selectBox.value);
    this.updateField();
  },
  // sets the running date object accordingly
  setD: function() {
    this.d.setMonth(this.month);
    this.d.setFullYear(this.year);
      
    this.updateField();
  },
  // update all markup for a given month
  updateCalendar: function() {
    var tempDate = new Date(this.d.valueOf()),
        day,
        daysInMonth = 31,
        calTable = this.calendarTable,
        dayOfWeek,
        weekRow,
        i,
        elem,
        monthStr = this.monthName() + " " + this.year;
    replaceText(this.calendarMonth, monthStr);
    emptyElement(calTable);
    
    // start rows
    weekRow = calTable.appendChild(document.createElement("tr"))
    // also update this.calendarTable with buildup of days
    for(day = 1; day <= daysInMonth; day++) {
      tempDate.setDate(day);
      if(tempDate.getMonth() == this.d.getMonth()) {
        dayOfWeek = tempDate.getDay();
        // beginning of week
        if(dayOfWeek == 0 && day != 1)
          weekRow = calTable.appendChild(document.createElement("tr"));

        // if first day of month, might need empty spaces
        if(tempDate.getDate() == 1) {
          for(i = 0; i < dayOfWeek; i++) {
            elem = weekRow.appendChild(document.createElement("td"));
            replaceText(elem, " ");
          }
        }

        elem = weekRow.appendChild(document.createElement("td"));
        elem = elem.appendChild(document.createElement("a"));
        elem.href ="#";
        replaceText(elem, tempDate.getDate());
        elem.style.display = "block";
        elem.style.color = "#096EA2";
        elem.style.textIndent = "6px";

        if(day == this.d.getDate()) {
          this.setSelectedDay(elem);
        }
        else
          elem.style.backgroundColor = this.calendarDayBGColor;
      }
    }
    
    this.massageDate();
    // update time picker
    this.hoursBox.value = this.d.getHours();
    this.minutesBox.value = this.d.getMinutes();
  },
  monthName: function() {
    var names = ["January",
                  "February",
                  "March",
                  "April",
                  "May",
                  "June",
                  "July",
                  "August",
                  "September",
                  "October",
                  "November",
                  "December"
                ];
    return names[this.month];
  },
  // show and hide calendar
  showCalendar: function(evt) {
    this.calendar.style.display = "block";
    this.calendarShowing = true;
    preventEventDefault(evt);
  },
  handleClick: function(evt) {
    if(this.calendarShowing) {
      if(evt) {
        var target = getTarget(evt);
        if(target == this.icon)
          return;
        
        else if(clickIsWithin(target, this.calendarTable)) {
          if(target.tagName.toLowerCase() == "a")
            return this.handleDayClick(evt);
        }
        
        else if(!clickIsWithin(target, this.calendar)) {
          this.hideCalendar();
        }
      }
    }
  },
  hideCalendar: function(evt) {
    if(this.calendarShowing && this.calendar.style.display == "block") {
      this.calendar.style.display = "none";
      this.calendarShowing = false;
    }
  },
  // handle click of day
  handleDayClick: function(evt) {
    var elem = getTarget(evt);
    if(this.d.getMonth() > this.now.getMonth() || elem.innerHTML >= this.now.getDate() || this.d.getYear() > this.now.getYear()) {
      this.setDay(elem.innerHTML);
      this.setSelectedDay(elem);
    }
    preventEventDefault(evt);
  },
  setSelectedDay: function(elem) {
    if(this.oldDayElement)
      this.oldDayElement.style.backgroundColor = this.calendarDayBGColor;
    this.oldDayElement = elem;
    elem.style.backgroundColor = this.calendarSelectedDayBGColor;
  }
};

var thisScript = selfLocate();
  
if(thisScript) {
  var markup = "\u003Cdiv style=\"padding:0;margin:0;width:auto;font-family:sans-serif;font-size:11px;color:black;text-align:left;border:1px solid #ccc;-moz-border-radius:10px;-webkit-border-radius:10px;-khtml-border-radius:10px;border-radius:10px;background:url(http://www.ridecharge.com/images/design/widgets/widget_tile.png) no-repeat;width:260px;background-color:#E0E0E0;background-repeat:repeat-x;text-align:center;position:relative;\"\u003E\n  \u003Cdiv style=\"\"\u003E\n    \u003Cdiv style=\"\"\u003E\n      \u003Cdiv style=\"padding:0 0 10px 0;\"\u003E\n        \u003Cp style=\"padding:0;margin:0;width:auto;display:block;float:left;text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/tmlogo_medium.png) no-repeat;display:inline;width:100px;height:34px;margin:10px;\"\u003ETaxi Magic\u003C/p\u003E\n\u003Cp style=\"padding:0;margin:0;width:auto;display:block;float:left;text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/3freetext_medium.png) no-repeat;width:120px;height:45px;margin:10px 0 10px 5px;\"\u003E3 FREE AND EASY ways to book a taxi.\u003C/p\u003E\n\n\u003Cp style=\"padding:0;margin:0;width:auto;font-family:sans-serif;font-size:11px;color:black;text-align:left;font-weight:bold;display:block;clear:both;margin:15px 0 0 10px;font-size:12px\"\u003E1: Book online right here:\u003C/p\u003E\n\n\u003Cdiv style=\"border:1px solid #ccc;-moz-border-radius:7px;-webkit-border-radius:7px;-khtml-border-radius:7px;border-radius:7px;width:240px;margin:5px auto;background-color:#EFEFEF;text-align:left;position:relative;z-index:2000;\"\u003E\n  \u003Cdiv style=\"\"\u003E\n    \u003Cdiv style=\"\"\u003E\n      \u003Cdiv style=\"\"\u003E\n        \u003Cform style=\"margin:0;padding:0;\" action=\"https://www.ridecharge.com/s/ka-kansas-city/taxi/branded/kansas_city_yellow\" method=\"post\"\u003E\n          \u003Cdiv style=\"margin:5px 0;\"\u003E\n            \u003Cspan style=\"padding:0;margin:0;width:auto;font-family:sans-serif;font-size:11px;color:black;text-align:left;font-weight:bold;margin-left:5px;\"\u003EWhen:\u003C/span\u003E\n            \u003Cinput type=\"radio\" id=\"taxiMagicNow\" value=\"now\" checked=\"checked\" name=\"when\"/\u003E \u003Clabel for=\"taxiMagicNow\"\u003ENow\u003C/label\u003E\n            \u003Cinput type=\"radio\" id=\"taxiMagicLater\" value=\"later\" name=\"when\"/\u003E \u003Clabel for=\"taxiMagicLater\"\u003ELater\u003C/label\u003E\n          \u003C/div\u003E\n          \u003Cdiv style=\"position:relative;z-index:2000;\"\u003E\n            \u003Cinput style=\"padding:0;margin:0;width:auto;border:1px solid #ccc;width:185px;text-indent:4px;height:2em;line-height:2em;font-size:10px;margin-left:45px;\" type=\"text\" value=\"\" id=\"taxiMagicDate\" name=\"pickup_time\"/\u003E\n          \u003C/div\u003E\n          \u003Cdiv style=\"margin:5px 0;\"\u003E\n            \u003Clabel for=\"taxiMagicAddress\" style=\"padding:0;margin:0;width:auto;font-family:sans-serif;font-size:11px;color:black;text-align:left;font-weight:bold;margin-left:5px;\"\u003EWhere:\u003C/label\u003E \u003Cinput style=\"padding:0;margin:0;width:auto;border:1px solid #ccc;width:185px;text-indent:4px;height:2em;line-height:2em;font-size:10px;color:#999;width:140px;\" type=\"text\" id=\"taxiMagicAddress\" name=\"pickup_location\" value=\"Address or Business\"/\u003E\n            \u003Cdiv style=\"\"\u003E\n              \u003Cp style=\"padding:0;margin:0;width:auto;font-family:sans-serif;font-size:11px;color:black;text-align:left;margin:5px 0 0 45px;font-style:italic;\"\u003EExamples:\u003C/p\u003E\n              \u003Cul style=\"padding:0;margin:0;width:auto;list-style:disc outside;text-align:left;margin:5px 5px 0 60px;\"\u003E\n                \u003Cli style=\"padding:0;margin:0;width:auto;padding:0;background:none;display:list-item;font-size:10px;margin-top:3px;\"\u003E1060 W Addison #250 Chicago IL\u003C/li\u003E\n                \u003Cli style=\"padding:0;margin:0;width:auto;padding:0;background:none;display:list-item;font-size:10px;margin-top:3px;\"\u003EMarriott 60611\u003C/li\u003E\n              \u003C/ul\u003E\n            \u003C/div\u003E\n          \u003C/div\u003E\n          \u003Cdiv style=\"padding:0;margin:0;width:auto;position:absolute;margin-top:-84px;right:0;\"\u003E\u003Cinput style=\"margin:5px 3px 5px;float:right;\" type=\"image\" src=\"http://www.ridecharge.com/images/design/widgets/gobutt_small.png\" value=\"Go\"/\u003E\u003C/div\u003E\n          \u003Cbr style=\"clear:both;font-size:1px;line-height:1px;\"/\u003E\n        \u003C/form\u003E\n      \u003C/div\u003E\n    \u003C/div\u003E\n  \u003C/div\u003E\n\u003C/div\u003E\n\n\u003Cdiv style=\"z-index:1000;\"\u003E\n  \u003Cp style=\"padding:0;margin:0;width:auto;font-family:sans-serif;font-size:11px;color:black;text-align:left;font-weight:bold;display:block;clear:both;margin:15px 0 0 10px;font-size:12px\"\u003E2: Download the Taxi Magic app\u003C/p\u003E\n  \u003Cdiv style=\"display:block;margin:0 auto;width:260px\"\u003E\n    \u003Cp style=\"padding:0;margin:0;width:auto;text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/phonesandbutts_medium.png) no-repeat;display:block;margin-left:5px;width:255px;height:48px;\"\u003ETaxi Magic phones\u003C/p\u003E\n    \u003Cul style=\"padding:0;margin:0;width:auto;list-style:disc outside;text-align:left;list-style:none;margin-left:5px;\"\u003E\n      \u003Cli style=\"padding:0;margin:0;width:auto;display:block;float:left;padding:0;background:none;display:list-item;\"\u003E\u003Ca style=\"display:block;text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/phonesandbutts_medium.png) no-repeat;height:33px;width:82px;background-position:0 -48px;\" href=\"http://taximagic.com/iphone.html\"\u003EiPhone\u003C/a\u003E\u003C/li\u003E\n      \u003Cli style=\"padding:0;margin:0;width:auto;display:block;float:left;padding:0;background:none;display:list-item;\"\u003E\u003Ca style=\"display:block;text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/phonesandbutts_medium.png) no-repeat;height:33px;width:60px;background-position:-82px -48px;\" href=\"http://taximagic.com/blackberry.html\"\u003EBlackBerry\u003C/a\u003E\u003C/li\u003E\n      \u003Cli style=\"padding:0;margin:0;width:auto;display:block;float:left;padding:0;background:none;display:list-item;\"\u003E\u003Ca style=\"display:block;text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/phonesandbutts_medium.png) no-repeat;height:33px;width:53px;background-position:-142px -48px;\" href=\"http://taximagic.com/android.html\"\u003EAndroid\u003C/a\u003E\u003C/li\u003E\n      \u003Cli style=\"padding:0;margin:0;width:auto;display:block;float:left;padding:0;background:none;display:list-item;\"\u003E\u003Ca style=\"display:block;text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/phonesandbutts_medium.png) no-repeat;height:33px;width:60px;background-position:-195px -48px;\" href=\"http://taximagic.com/webos.html\"\u003EPalm\u003C/a\u003E\u003C/li\u003E\n    \u003C/ul\u003E\n  \u003C/div\u003E\n  \u003Cbr clear=\"all\"/\u003E\n\u003C/div\u003E\n\n\u003Cdiv style=\"z-index:1000;\"\u003E\n  \u003Cp style=\"padding:0;margin:0;width:auto;font-family:sans-serif;font-size:11px;color:black;text-align:left;font-weight:bold;display:block;clear:both;margin:15px 0 0 10px;font-size:12px\"\u003E3: Book via text message\u003C/p\u003E\n\n  \n  \u003Cul style=\"padding:0;margin:0;width:auto;list-style:disc outside;text-align:left;margin:0 0 0 25px;\"\u003E\n    \u003Cli style=\"padding:0;background:none;display:list-item;margin:10px 94px 0 0;\"\u003EText pickup address to\u003Cbr/\u003E \u003Cstrong style=\"font-weight:bold;font-style:italic;\"\u003E(816) 805-6388\u003C/strong\u003E\u003C/li\u003E\n    \u003Cli style=\"padding:0;background:none;display:list-item;margin:10px 94px 0 0;\"\u003EReceive confirmation in seconds\u003C/li\u003E\n    \u003Cli style=\"padding:0;background:none;display:list-item;margin:10px 94px 0 0;\"\u003EMessage and data rates apply\u003C/li\u003E\n  \u003C/ul\u003E\n\u003C/div\u003E\n\n\u003Ca href=\"http://taximagic.com/text.html\" style=\"text-indent: -50000px;background:url(http://www.ridecharge.com/images/design/widgets/mobilephone_small.png) no-repeat;display:block;position:absolute;bottom:0;right:0;width:97px;height:82px;z-index:1000;\"\u003EMore Info\u003C/a\u003E\n\n\u003Cbr clear=\"all\"/\u003E\n      \u003C/div\u003E\n    \u003C/div\u003E\n  \u003C/div\u003E\n\u003C/div\u003E",
      wrapper = injectBefore(thisScript, markup),
      inputs = wrapper.getElementsByTagName("input"),
      // look for date field within wrapper
      dateField = inputs[2],
      whereField = inputs[3],
      nowRadio = inputs[0],
      laterRadio = inputs[1],
      whenSpan = wrapper.getElementsByTagName("span")[0],
      hideDate = function() {
        dateField.parentNode.style.display = "none";
        dateField.value = "";
        if(whenSpan.shouldHide)
          whenSpan.style.display = "none";
      };

  var dm = new DateMgr(dateField);

  addEvent(nowRadio, "click", hideDate);
  addEvent(laterRadio, "click", function() {
    dateField.parentNode.style.display = "block";
    dm.updateField();
    if(whenSpan.style.display == "none") {
      whenSpan.shouldHide = true;
      whenSpan.style.display = "block";
    }
  });
  addEvent(whereField, "focus", function() {
    if(this.value == this.defaultValue) {
      this.style.color = "black";
      this.value = "";
    }
  }, whereField);
  addEvent(whereField, "blur", function() {
    if(!this.value) {
      this.style.color = "#999";
      this.value = this.defaultValue;
    }
  }, whereField);
  hideDate();
}
})();