
function localCheck() {
  var z = trim($('zipcode').value);
  if (QU.checkZip(z)) {
    QU.ajaxCheckZip(z, function (req) {
      resZIP(req);
    });
    return false;
  } else {
    wrongZIP();
    return false;
  }
}

function setTitle (text) {
  if (text && typeof text == 'string') {
    document.title = text;
  }
}

function wrongZIP() {
  alert('Please enter a valid U.S. ZIP code to continue.');
  $('zipcode').value = zipcode;
}

function navTo(page, el) {
  if (el.href) {
    el.href = "#";
  }
  if (page.substring(0, 4) == "http") {
    var regexp = /(https?:\/\/)([a-zA-Z0-9_\-\.]+)(:[0-9]+)?\/?(.*)?/;
    var result = page.match(regexp);
    var url = {
      scheme: result[1],
      host: result[2],
      port: result[3],
      path: result[4]
    };

    document.forms.RCNav.action = '/' + url.path;
  } else {
    document.forms.RCNav.action = page;
  }
  document.forms.RCNav.submit();
}

function getRange() {
  return $('min_price').value + '-' + $('max_price').value;
}

function showAll(originalRequest, json)	{

  feed = (originalRequest) ? originalRequest.responseText.evalJSON() : json.evalJSON();
  if (!feed) return;
  var show = $('show');
  show.hide();
  show.style.position = "absolute";
  show.innerHTML = "";

  if (typeof document.createDocumentFragment !== "undefined") {
    var fragment = document.createDocumentFragment();
    var el = document.createElement("span");

    fragment.appendChild(el);
    el.innerHTML = makeHTML(feed);
    show.appendChild(fragment);
  } else {
    show.innerHTML = makeHTML(feed);
  }

  addToolTips();
  rebates_hover();
  if ($('min_price')) $('min_price').disable = false;
  if ($('max_price')) $('max_price').disable = false;
  stopFun();
  show.style.position = "static";
  show.show();
}

function boldup(obj) {
  if (obj.checked) $('m' + obj.value).className = "txtcolor5b";
  else $('m' + obj.value).className = "txtcolor5";
}

function expandItem (el, uplink) {
  var li;
  var tmpRow;
  if (el && (el = $(el))) {

    li =  el.up('li');
    if (Boolean(li) && li.tagName === "LI") {

      if (!uplink) {
        tmpRow = el.up('tr');
      } else {
        tmpRow = li.select('.itemPlaceHldr')[0].up('tr');
      }
      if (tmpRow && tmpRow.tagName === "TR") {
        tmpRow.hide();
        tmpRow.replace(makeDetails(li.id));
      }

      //remove the expand links
      var expLinks = $(li.id + '_expand_links');
      if (expLinks) expLinks.remove();

      //rebates_hover(null,li.id);

      //signal a complete event
      if (Boolean(async_count) && async_count > 0) {
        async_count--;
      }

    }
  }
}

function doAsync (arg) {
  if (!arg) return;

  var loader = '<td><img src="' + (typeof IMAGEPATH !== "undefined" ? IMAGEPATH : '/images') + '/bigrotation2.gif" /></td>';
  var timer = 1000;

  if (typeof async_count === "undefined") {
    async_count = 1;
  } else {
    async_count++;
  }

  var obj = {
    callme: function () {
      expandItem(arg);
      if (typeof async_count !== "undefined" && async_count <= 0) {
        if (typeof doAsyncComplete === "function") {
          doAsyncComplete();
        }
        delete async_count;
      }
    }
  };

  //Show pending graphic
  arg.innerHTML = loader;

  if (typeof CCallWrapper !== "undefined") {
    var callwrapper = new CCallWrapper(obj, timer, 'callme', arg);
    CCallWrapper.asyncExecute(callwrapper);
  } else {
    var refCallback = obj.callme;
    setTimeout(refCallback, timer);
  }

}

//callback for doAsync function after all items are expanded
function doAsyncComplete(count) {
  //call to custom function, if defined (optional)
  if (typeof afterLoad === "function") {
    afterLoad(count);
  }
  killSplash();
}

function killSplash() {
  //kill splash screen if exists
  if (Boolean($('rebate-center-splash'))) {
    $('rebate-center-splash').hide();
  }
}

function showSplash () {
  if (!Boolean($('rebate-center-splash'))) {
    var img_src =  (typeof IMAGEPATH !== "undefined" ? IMAGEPATH : '/images') + '/loading_stamp2.png';
    var div = '<div id="rebate-center-splash" style="text-align: center;width: 100%; height: 100%; position: fixed; top: 0;left: 0;background: transparent url(/images/rebates/window_background.png) scroll repeat 0 0;overflow:hidden;"><img src="' + img_src + '" style="position:absolute;left:50%;margin-left:-50px;top:50%;" /></div>';
    $("show").insert({'before':div});
  } else {
    $('rebate-center-splash').show();
  }
}

function expandAll (uplink, splash) {
  var el = $("show");
  var allItems;

  if (splash) {
    showSplash();
  }

  allItems = el.select('.itemPlaceHldr');

  el.hide();
  el.position = "absolute";

  if (uplink) {
    $(uplink.parentNode).remove();
  }

  allItems.toArray();

  //Faster Duff's Device
  var i = 0;
  var iterations = allItems.length;
  var n = iterations % 8;
  if (n>0) {
    do {
      doAsync(allItems[i]);i++;

    } while (--n); // n must be greater than 0 here
  }

  n = parseInt(iterations / 8);
  if (n>0) {
    do  {
      doAsync(allItems[i]);i++;
      doAsync(allItems[i]);i++;
      doAsync(allItems[i]);i++;
      doAsync(allItems[i]);i++;
      doAsync(allItems[i]);i++;
      doAsync(allItems[i]);i++;
      doAsync(allItems[i]);i++;
      doAsync(allItems[i]);i++;
    }  while (--n);
  }
  el.position = "static";
  el.show();
  if (iterations<=0) {
    doAsyncComplete(iterations);
  }
}

function makeDetails (mk) {
  var saved = QU.getCookie('inc_alert');
  var html = '';
  if (feed && typeof mk == "string") {
    for (var md in feed.makes[mk]) {
      if (md != 'available') {
        for (var yr in feed.makes[mk][md]) {
          show_inc_alert = 0;
          show_checked = 0;
          if ( !Boolean(feed.special) && parseFloat(feed.makes[mk][md][yr].finance) < 0 && parseFloat(feed.makes[mk][md][yr].lease) < 0 && !feed.makes[mk][md][yr].cash){
            show_inc_alert = 1;
            if(saved != null){
  	          if(saved.indexOf('|') > 0 ){
  		          var results = saved.split('|');
  		          for (i = 0; i < results.length; i++) {
  			          if(results[i] == feed.makes[mk][md][yr].model_id + ':' + yr){
  				          show_checked = 1;
  				          break;
  			          }
  		          }
  	          } else {
  		          if(saved == feed.makes[mk][md][yr].model_id + ':' + yr){
			            show_checked = 1;
    	          }
  	          }
            }
          }
          html += '<tr class="bgHL4" valign="top" ><td style="width:230px; padding: 1px 5px 1px 5px;"><a style="float:left; padding-top:4px;" href="'
          html += toWizard(mk,md,yr,true)
          html += '" onclick="javascript:toWizard(\''
          html += mk
          html += '\',\''
          html += md
          html += '\','
          html += yr
          html += ')">'
          html += yr + ' ' + md + '</a>'
          if(show_inc_alert){
            if(show_checked)
              html += '<img id="inc_alerts_img'+feed.makes[mk][md][yr].model_id+':'+yr+'" border="0" src="'+IMAGEPATH+'/rebates/alerts_check_icon.gif" alt="incentive alerts" class="help_icon inc_alerts_icon" />'
            else
              html += '<img id="inc_alerts_img'+feed.makes[mk][md][yr].model_id+':'+yr+'" border="0" src="'+IMAGEPATH+'/rebates/alerts_icon.gif" alt="incentive alerts" onmouseover="make=\''+mk+'\';model=\''+md+'\';year='+yr+';model_id='+feed.makes[mk][md][yr].model_id+';incentiveAlerts.open(this);" class="inc_alerts_icon" />'
          }
          html += '</td><td class="tablecell">'
          html += (feed.makes[mk][md][yr].msrp_range ? feed.makes[mk][md][yr].msrp_range : '--')
          html += '</td><td class="tablecell">'
          if (Boolean(feed.special)) {
            if (!Boolean(feed.makes[mk][md][yr].cash)) {
              html += '--';
            } else {
              for (var catg in feed.makes[mk][md][yr].cash) {
                html += (feed.makes[mk][md][yr].cash[catg].cash ? '$' + feed.makes[mk][md][yr].cash[catg].cash + ' - ' + feed.makes[mk][md][yr].cash[catg].category + '<br />': '')
              }
            }
          } else {
            html += (feed.makes[mk][md][yr].cash ? '$' + feed.makes[mk][md][yr].cash : '--')
          }
          html += '</td><td class="tablecell">'
          if (Boolean(feed.special)) {
            if (!Boolean(feed.makes[mk][md][yr].finance)) {
              html += '--';
            } else {
              for (var catg in feed.makes[mk][md][yr].finance) {
                html += (parseFloat(feed.makes[mk][md][yr].finance[catg].min_val) >=0 ? feed.makes[mk][md][yr].finance[catg].min_val + '% - ' + feed.makes[mk][md][yr].finance[catg].category + '<br />': '');
              }
            }
          } else {
            html += (parseFloat(feed.makes[mk][md][yr].finance) >= 0 ? feed.makes[mk][md][yr].finance + '%' : '--')
          }
          html += '</td><td class="tablecell">'
          if (Boolean(feed.special)) {
            if (!Boolean(feed.makes[mk][md][yr].lease)) {
              html += '--';
            } else {
              for (var catg in feed.makes[mk][md][yr].lease) {
                html += (parseFloat(feed.makes[mk][md][yr].lease[catg].min_val) >=0 ? feed.makes[mk][md][yr].lease[catg].min_val + '% - ' + feed.makes[mk][md][yr].lease[catg].category + '<br />': '');
              }
            }
          } else {
            html += (parseFloat(feed.makes[mk][md][yr].lease) >= 0 ? feed.makes[mk][md][yr].lease + '%' : '--')
          }
          html += '</td>'
          if (!Boolean(feed.special)) {
            html += '<td class="tablecell">'
            html += (feed.makes[mk][md][yr].extra ? feed.makes[mk][md][yr].extra : '--')
            html += '</td>';
          }
          html += '</tr>';
        }
      }
    }
  }
  return html;
}

function makeHTML(feed)	{
  var html = '';
  var itemHdr = '<table class="rebates_data_tbl" border="0" width="100%" cellpadding="5" cellspacing="1" bgcolor="#CCCCCC">'
      itemHdr += '<tr bgcolor="#FFFFFF" valign="top">'
      itemHdr += '<td class="tablecellHDR1"><span class="pagesectionhdr3_smB">Model</span></td>'
      itemHdr += '<td class="tablecellHDR2"><span class="pagesectionhdr3_smB">MSRP Range</span></td>'
      itemHdr += '<td class="tablecellHDR3"><span class="pagesectionhdr3_smB">Cash Back</span><br /><span class="txtcolor7">(up to)</span></td>'
      itemHdr += '<td class="tablecellHDR3"><span class="pagesectionhdr3_smB">or - Financing</span><a href="#" rel="hlpFinance" class="help_icon"><img src="' + IMAGEPATH + '/rebates/icon_question16.gif" border="0" alt="more info Finance" title="" /></a><br /><span class="txtcolor7">(as low as)</span></td>'
      itemHdr += '<td class="tablecellHDR3" style="width: 130px; padding: 5px;"><span class="pagesectionhdr3_smB">or - Lease</span><a href="#" rel="hlpLease" class="help_icon"><img src="' + IMAGEPATH + '/rebates/icon_question16.gif" border="0" alt="more info Lease" title="" /></a><br /><span class="txtcolor7">(as low as)</span></td>'
      if (!Boolean(feed.special)) {
        itemHdr += '<td class="tablecellHDR4"><span class="pagesectionhdr3_smB">Additional...</span><a href="#" rel="hlpAdditional" class="help_icon"><img src="' + IMAGEPATH + '/rebates/icon_question16.gif" border="0" alt="more info Additional" title="" /></a><br /><span class="txtcolor7">(for qualified buyers)</span></td>'
      }
      itemHdr += '</tr>';
  var itemFooter = '</table><div style="background-color: #F7F7F7;"><div class="container_tabledatafooter1"><div class="container_tabledatafooter2"><div class="container_tabledatafooter3"><a href="#">Back to Top</a></div></div></div></div></div>';
  var itemPlaceHldr = '<tr><td class="itemPlaceHldr" colspan="' + (Boolean(feed.special) ? 5 : 6 ) + '" align="center"><div style="display: none;"><a href="javascript: void(0);" onclick="javascript: expandItem(this);">Click to expand</a> OR <a href="javascript: void(0);" onclick="javascript: expandAll();">Click to expand All</a></div></td></tr>';
  var zipcode = trim($('zipcode').value);

  for (var mk in feed.makes) {
    html += '<li id="' + mk + '"><div style="margin: 10px 0 0 0;">';
      html += '<div class="rebates_tablehdr_container"><span class="rebates_tablehdr_title">' + mk + '</span><span id="' + mk + '_expand_links" style="padding: 0pt 15px;display:none;"><a href="javascript: void(0);" onclick="javascript: expandItem(this, true);">expand</a> OR <a href="javascript: void(0);" onclick="javascript: expandAll(this);">expand all</a></span></div>';
      html += itemHdr;
      html += itemPlaceHldr;
      //html += '<tr><td class="itemPlaceHldr" colspan="6" align="center"><a href="#' + mk + '" onclick="javascript: expandItem(this);">Click to expand</a> OR <a href="#' + mk + '" onclick="javascript: expandAll();">Click to expand All</a></td></tr>';

      html += itemFooter;
    html += '</li>';
  }
  return html;
}

//add mouseover/mouseout to table rows for models_list
function rebates_hover (model, elm) {
  var el = $('show');
  var trs;

  if (elm && (elm = $(elm))) {
    el = elm;
  }

  trs = el.select('.rebates_data_tbl');

  trs.each(function (e) {
    var main_class = 'bgHL4';
    var hover_class = 'bgHL1';
    var wiz_class = 'wizTHead';

    e.cleanWhitespace();

    e.observe('mouseover', function(evt) {
      //evt.stop();
      var tgt = $(evt.target).up('tr');
      if (!tgt) return;

      if (Boolean(model) && !tgt.hasClassName(wiz_class)) {
        tgt.style.cursor = 'pointer';
      }

      if (tgt.hasClassName(main_class)) {
        tgt.removeClassName(main_class);
        tgt.addClassName(hover_class);
      }

    }.bindAsEventListener(e));

    e.observe('mouseout', function(evt) {
     // evt.stop();
      var tgt = $(evt.target).up('tr');
      if (!tgt) return;

      if (model && !tgt.hasClassName(wiz_class)) {
        tgt.style.cursor = '';
      }

      if (tgt.hasClassName(hover_class)) {
        tgt.removeClassName(hover_class);
        tgt.addClassName(main_class);
      }

    }.bindAsEventListener(e));

    if (model) {
      e.observe('click', function(evt) {
        var tgt = $(evt.target);
        var tgt_tr = tgt.up('tr');
        if (tgt.hasClassName('no-close') || !tgt_tr) return;
        tgt_tr.cleanWhitespace();
        if (tgt_tr.firstChild && tgt_tr.firstChild.nodeName == "TD") {
          $(tgt_tr.firstChild).cleanWhitespace();
        }
        if((tgt.nodeName !== 'A')&& tgt_tr.firstChild.firstChild.href) {
          eval(tgt_tr.firstChild.firstChild.href);
        }
      }.bindAsEventListener(e));
    }
  });
}

//Add Tooltips to help icons
function addToolTips (elm) {
  var el = $('show');
  var hlp;

  if (elm && (elm = $(elm))) {
    el = elm;
  }

  hlp = el.select('a.help_icon');

  hlp.each(function (elem) {
    new Tip(elem, $(elem.rel).innerHTML, {
      hook: {target: 'topMiddle', tip: 'bottomRight'},
      stem: 'bottomRight',
      style: 'creamy'
    });
  });
}
