<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title_url="http://www.instantgadgets.com/" 
               title="Instant Yahoo! Traffic" 
               height="324" 
               author="Instant Gadgets" 
               author_email="developer@instantgadgets.com" 
               scrolling="false" 
               scaling="true" 
               author_location="Mesa, AZ" 
               description="Displays traffic information as reported by Yahoo! traffic" 
               directory_title="Instant Yahoo! Traffic" 
               author_affiliation="instantgadgets.com" 
               screenshot="http://www.instantgadgets.com/gadgets/ytraffic_180x.gif" 
               thumbnail="http://www.instantgadgets.com/gadgets/ytraffic_120x60.gif">
    <Require feature="setprefs" />
    <Require feature="minimessage" />
  </ModulePrefs>
  <UserPref name="_internal" datatype="hidden" />

  <Content type="html">
  <![CDATA[

  <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
  <link rel="stylesheet" href="http://www.xfcg.com/static/instant/ytraffic/style.css" type="text/css" />
  <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
  <script type="text/javascript" src="http://www.xfcg.com/static/instant/shared/js/mootools.js?2007031902"></script>
  <script type="text/javascript" src="http://www.xfcg.com/static/instant/shared/js/ig.utils.js?2007031902"></script>
  <script type="text/javascript" src="http://www.xfcg.com/static/instant/shared/js/igintf.google.js?2007040300"></script>
  <script src="http://maps.google.com/maps?file=api&amp;v=2" type="text/javascript"></script>

  <div id="_ig_it_main" class="igit-main">
  <div id="_ig_it_header" class="igit-header">
    <div class="igit-header-left">
      <img src="http://www.xfcg.com/static/instant/ytraffic/tbar-left.gif" border="0" />
      <div class="igit-header-text">Zip: </div>
      <input name="_ig_it_zip" id="_ig_it_zip" type="text" size="5" maxlength="5" onChange="goTrafficObj.zipChange();" />
      <div class="igit-header-text">Min Severity: </div>
      <div id="slide-back">
	<div id="slide-thumb"></div>
      </div>
      <div id="slide-legend"></div>
    </div>
    <div class="igit-header-right">
    </div>
  </div>
  <div id="_ig_it_map2" class="igit-map"></div>
  <div id="_ig_it_banner" class="igit-banner"><a target=_new href="http://www.FunWebsites.org/QuoteCollection.php?s=241919">View More Traffic Information</a></div>
  <div id="_ig_it_footer" class="igit-footer">
    <div id="_ig_it_status" class="igit-footer-left">
      &nbsp;
    </div>
    <div id="_ig_it_footer_icons" class="igit-footer-right">
      <a href="http://developer.yahoo.net/about" target="_new"><img src="http://us.dev1.yimg.com/us.yimg.com/i/us/nt/bdg/websrv_120_1.gif" border="0" style="vertical-align: top; margin-top: 4px;" /></a>
      <img src="http://www.instantgadgets.com/images/footer-sep.png" border="0" />
      <a onClick="window.open('http://www.instantgadgets.com/ytraffic/help.php', '', 'toolbar=no,menubar=no,resizable=no,scrollbars=no,height=300,width=480,statusbar=no'); return false;" href="#" onMouseOver="goUtils.setStatusText('Help/About');"><img src="http://www.instantgadgets.com/images/footer-help.png" border="0" /></a>
      <a href="http://www.instantgadgets.com/" target="_new" onMouseOver="goUtils.setStatusText('Instant Gadgets Home');"><img src="http://www.instantgadgets.com/images/footer-ia.png" border="0" /></a>
    </div>
  </div>
  </div>

  <script type="text/javascript">
    var goUtils      = new TInstantGadgetUtils(__MODULE_ID__);
    var goMap        = new GMap2($('_ig_it_map2'));
    var goTrafficObj;
    var goBaseIcon;
    var goClearTimer;
    var goAdTimer;
    var goSlider;

    function IGIT_Prefs() {
      var CurZip;
      var CurLat;
      var CurLong;
      var CurZoom;
      var CurSeverity;
    }

    function IGIT_SetCenter(sData) {
      sData = goUtils.trim(sData);
      iZoom = 9;
      if (sData.length > 0) {
        oData = Json.evaluate(sData);
        //alert(oData['latitude'] + ', ' + oData['longitude']);
        goMap.setCenter(new GLatLng(1.0 * oData['latitude'], 1.0 * oData['longitude']), 1 * iZoom);
      }
    }

    function IGIT_SetTrafficData(sData) { 
        var oItem;
        
        sData = goUtils.trim(sData);
        goMap.clearOverlays();
        if (sData.length == 0) {
          oData = new Array();
        } else {
          oData = Json.evaluate(sData);
        }
        goUtils.setStatusText('<strong>' + oData.length.toString() + '</strong> markers');
        for (i = 0; i < oData.length; i++) {
          oPoint   = new GLatLng(oData[i]['lat'], oData[i]['long']);
          sDetails = '<div class="title">' + oData[i]['title'] + '</div><div class="description">' + oData[i]['description'] + '</div>';
          oMarker  = IGIT_createMarker(oPoint, sDetails, oData[i]['severity']);

          goMap.addOverlay(oMarker);
        }
    }

    function IGIT_clearDisplay() {
      $('_ig_it_banner').innerHTML = '';
      //goTrafficObj.updateAd(); 
    }

    function IGIT_createMarker(oPoint, sDisplay, sSeverity) {
      var oIcon   = new GIcon(goBaseIcon);

      oIcon.image = 'http://www.xfcg.com/static/instant/ytraffic/sever_' + sSeverity + '.gif';
      var oMarker = new GMarker(oPoint, oIcon);

        // Show this marker's index in the info window when it is clicked.
      GEvent.addListener(oMarker, 'mouseover', function() {
        $clear(goClearTimer);
        $clear(goAdTimer);
        $('_ig_it_banner').innerHTML = sDisplay;
      });

      GEvent.addListener(oMarker, 'mouseout', function() { 
        goClearTimer = IGIT_clearDisplay.delay(10000);
      });

      return oMarker;
    }


    function IGIT_Traffic(sMapDiv) {
      var msCurZip;
      var moSlider;

      this.updateAd = function() {
        $('_ig_it_banner').innerHTML = '<iframe style="width: 100%; border: none;" border="0" frameborder="0" src="http://www.instantgadgets.com/traffic/cpa_ad.php?rand=' + Math.random().toString() + '"></iframe>';
        urchinTracker('/ytraffic/displayAd');
        //goAdTimer = this.updateAd.bind(this).delay(60000);
      }

      this.refresh = function() {
        oPrefs = this.getPrefs();
        goUtils.setStatusText('Retrieving traffic data...');
        sUrl = 'http://www.instantgadgets.com/ytraffic/trafficData.php?loc=' + oPrefs.CurZip.toString() + '&rand=' + Math.random().toString() + '&sev=' + oPrefs.CurSeverity.toString();
        goUtils.moGadgetIntf.remoteRequest(sUrl, null, IGIT_SetTrafficData);
      }

      this.locationChange = function() {
/*
        oSel = $('_ig_it_location');
        msCurLoc = oSel.getValue();
        oPrefs = this.getPrefs();
        oPrefs.CurLoc = miCurLoc;
        goUtils.moGadgetIntf.setPreference('_internal', Json.toString(oPrefs));
        this.refresh();
*/
      }

      this.getPrefs = function() {
        sPrefs = goUtils.moGadgetIntf.getPreference('_internal');
        if (sPrefs.length == 0) {
          oPrefs = new IGIT_Prefs();
          oPrefs.CurZip = '';
          oPrefs.CurLat  = 34.0;
          oPrefs.CurLong = -98.0
          oPrefs.CurZoom = 2;
          oPrefs.CurSeverity = 1;
        } else { 
          oPrefs = Json.evaluate(sPrefs);

          if (oPrefs.CurZip.length != 5) {
            oPrefs.CurZip = '';
          }
        }

        return oPrefs;
      }

      this.selectItem = function(oSelect, sValue) {
        for (i = 0; i < oSelect.options.length; i++) {
          //alert($(oSelect.options[i]).value.toString() + ' - ' + sValue);
          if ($(oSelect.options[i]).value.toString() == sValue) {
            oSelect.selectedIndex = i;
          }
        }
      }

      this.zoomEnd = function(iNewLevel) {
        oPrefs = this.getPrefs();
        oPrefs.CurZoom = iNewLevel;
        goUtils.moGadgetIntf.setPreference('_internal', Json.toString(oPrefs));
      }

      this.moveEnd = function(dLat, dLng) {
        oPrefs = this.getPrefs();
        oPrefs.CurLat  = dLat;
        oPrefs.CurLong = dLng;
        goUtils.moGadgetIntf.setPreference('_internal', Json.toString(oPrefs));
      }
 
      this.sliderChange = function(iPos) {
        oPrefs = this.getPrefs();
        oPrefs.CurSeverity = iPos; 
        goUtils.moGadgetIntf.setPreference('_internal', Json.toString(oPrefs));
        this.setupLegend(iPos);
        this.refresh();
      }

      this.setSlider = function(oSlider) {
        moSlider = oSlider;
      }

      this.setupLegend = function(iPos) {
        sSever = (iPos + 1).toString();
        $('slide-legend').innerHTML = '<img class="legend" src="http://www.xfcg.com/static/instant/ytraffic/sever_' + sSever + '.gif" border="0" />';
      }

      this.setupForm = function() {
        oPrefs = this.getPrefs();
        moSlider.set(oPrefs.CurSeverity);
        $('_ig_it_zip').value = oPrefs.CurZip;
        //this.setupLegend(oPrefs.CurSeverity);
      } 

      this.recenterMap = function(sZip) {
        sUrl = 'http://www.instantgadgets.com/ytraffic/geoLookup.php?loc=' + sZip;
        goUtils.moGadgetIntf.remoteRequest(sUrl, null, IGIT_SetCenter);
      }

      this.zipChange = function() {
        oPrefs = this.getPrefs();
        sZipValue = $('_ig_it_zip').getValue();
        oPrefs.CurZip = sZipValue; 
        goUtils.moGadgetIntf.setPreference('_internal', Json.toString(oPrefs));
        this.recenterMap(sZipValue);
        this.refresh();
      }

      // CONSTRUCTOR

      goMap.addControl(new GSmallZoomControl());

      oPrefs   = this.getPrefs();
      sLocLat  = oPrefs.CurLat;
      sLocLong = oPrefs.CurLong;
      iZoom    = oPrefs.CurZoom;
      sLat     = sLocLat;
      sLng     = sLocLong;

      goMap.setCenter(new GLatLng(1.0 * sLat, 1.0 * sLng), 1 * iZoom);
      msCurZip = oPrefs.CurZip;
    }

    function _ig_it_start() {
      var oMsg = new _IG_MiniMessage(__MODULE_ID__);

      //oMsg.createDismissibleMessage('Traffic.com traffic module now availalble. More frequent data updates, better information for select cities. Check out <a href="http://www.instantgadgets.com/main/i_traffic.php" target="_new">Instant Traffic.com</a> now.');

      goUtils.setStatusElem('_ig_it_status');
      goUtils.setStatusText('Loading...');

      goBaseIcon = new GIcon();
      goBaseIcon.iconSize   = new GSize(16, 16);
      goBaseIcon.iconAnchor = new GPoint(8, 8);

      goTrafficObj = new IGIT_Traffic();

      var oSlider = new Slider($('slide-back'), $('slide-thumb'), {
            onChange: function (iPos) {
              goTrafficObj.sliderChange(iPos);
            },
            steps: 3 
          });

      goTrafficObj.setSlider(oSlider);
      goTrafficObj.setupForm();
      goTrafficObj.refresh();
      //goTrafficObj.updateAd();

      GEvent.addListener(goMap, 'zoomend', function(iOldLevel, iNewLevel) {
        goTrafficObj.zoomEnd(iNewLevel);
      });
      GEvent.addListener(goMap, 'moveend', function() {
        oLatLng = goMap.getCenter();
        goTrafficObj.moveEnd(oLatLng.lat(), oLatLng.lng());
      });
      urchinTracker('/ytraffic/gadgetLoad');
    }

    _IG_RegisterOnloadHandler(_ig_it_start);
  </script>
  ]]>
  </Content>
</Module>

