// http://www.sitepoint.com/forums/showthread.php?t=204293

var cC = {
  initCarrier: function() {
      if (!document.getElementById) {
        return;
      }

      var carrier = document.getElementById('carrier');
      var sale    = document.getElementById('sale');
      var ac      = document.getElementById('autocarrier');
      if (!carrier) return;
      if (!sale) return;
      if (ac) return;
      
      document.getElementById('sale').style.display = 'none';
      document.getElementById('prices').style.display = 'none';
      
      cC.addEvent(carrier, 'change', cC.findCarrierPrices, false);
      
      if(carrier.options[carrier.selectedIndex].value != '') {
          cC.findCarrierPrices2(carrier);
      }
  },

  findCarrierPrices: function(e) {
    if (typeof e == "undefined") {
      e = window.event;
    }

    var target = cC.getEventTarget(e);
    var carrierValue = target.options[target.selectedIndex].value;
    var modelValue = document.getElementById('model').value;
    var makeValue = document.getElementById('make').value;
    var methodValue = document.getElementById('method').value;
        
    if(carrierValue == 'null') {
      document.getElementById('ourprice').innerHTML = '';
      document.getElementById('sale').style.display = 'none';
      document.getElementById('prices').style.display = 'none';
    } else {
      var xmlhttp = new XMLHttpRequest();
      var qs = '?carrier=' + carrierValue;
      var qs = qs + '&model=' + modelValue;
      var qs = qs + '&make=' + makeValue;
      var qs = qs + '&method=' + methodValue;
      xmlhttp.open('GET', '/getcarrierprices.php' + qs, true);
      xmlhttp.onreadystatechange = function() {
        document.getElementById('ourprice').innerHTML = 'Loading...';
        document.getElementById('prices').style.display = 'block';
        document.getElementById('saleprice').innerHTML = '';
        document.getElementById('saveprice').innerHTML = '';
        document.getElementById('savepercent').innerHTML = '';
        if (xmlhttp.readyState == 4) {
          cC.receiveCarrierPrices(xmlhttp.responseXML, e);
        }
      };
      xmlhttp.send(null);
    }
    if(e && e.stopPropagation && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    }
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
      return false;
    }
  },

  findCarrierPrices2: function(e) {
    var target = e;
    var carrierValue = target.options[target.selectedIndex].value;
    var modelValue = document.getElementById('model').value;
    var makeValue = document.getElementById('make').value;
    var methodValue = document.getElementById('method').value;
        
    if(carrierValue == 'null') {
      document.getElementById('ourprice').innerHTML = '';
      document.getElementById('sale').style.display = 'none';
      document.getElementById('prices').style.display = 'none';
    } else {
      var xmlhttp = new XMLHttpRequest();
      var qs = '?carrier=' + carrierValue;
      var qs = qs + '&model=' + modelValue;
      var qs = qs + '&make=' + makeValue;
      var qs = qs + '&method=' + methodValue;
      xmlhttp.open('GET', '/getcarrierprices.php' + qs, true);
      xmlhttp.onreadystatechange = function() {
        document.getElementById('ourprice').innerHTML = 'Loading...';
        document.getElementById('prices').style.display = 'block';
        if (xmlhttp.readyState == 4) {
          cC.receiveCarrierPrices(xmlhttp.responseXML, e);
        }
      };
      xmlhttp.send(null);
    }
    if(e && e.stopPropagation && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    }
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
      return false;
    }
  },

  receiveCarrierPrices: function(dom, e) {
    var ourprice = dom.getElementsByTagName('ourprice');
    var sale = dom.getElementsByTagName('sale');
    var saleprice = dom.getElementsByTagName('saleprice');
    var saveprice = dom.getElementsByTagName('saveprice');
    var savepercent = dom.getElementsByTagName('savepercent');

    document.getElementById('ourprice').innerHTML = ourprice[0].firstChild.nodeValue;
    if(!sale[0]) {
      document.getElementById('sale').style.display = 'none';
    } else {
      document.getElementById('sale').style.display = 'block';
      document.getElementById('saleprice').innerHTML = saleprice[0].firstChild.nodeValue;
      document.getElementById('saveprice').innerHTML = saveprice[0].firstChild.nodeValue;
        document.getElementById('savepercent').innerHTML = "(" + savepercent[0].firstChild.nodeValue +  ")";
    }
    
    // reattach the event, giving browsers time to do the innerHTML work
    var carrier = document.getElementById("carrier");
    setTimeout(function() {
      cC.addEvent(carrier, 'change', cC.findCarrierPrices, false);
    }, 200);

    if(e && e.stopPropagation && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    }
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
      return false;
    }
  },


  testJS: function() {
    var xmlhttp = new XMLHttpRequest();
    var qs = '?advanced=1';
    xmlhttp.open('GET', '/test_javascript.php' + qs, true);
    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState == 4) {
        cC.receiveJS(xmlhttp.responseXML);
      }
    };
    xmlhttp.send(null);
  },
  
  receiveJS: function(dom) {
  },


// Utility functions
  getEventTarget: function(event) {
    var targetElement = null;
    
    if(typeof event.target != "undefined") {
      targetElement = event.target;
    } else {
      targetElement = event.srcElement;
    }

    while(targetElement.nodeType == 3 && targetElement.parentNode != null) {
      targetElement = targetElement.parentNode;
    }
    
    return targetElement;
  },

  addEvent: function(elm, evType, fn, useCapture) {
    // cross-browser event handling for IE5+, NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener) {
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent) {
      var r = elm.attachEvent('on' + evType, fn);
      return r;
    } else {
      elm['on' + evType] = fn;
    }
  },
  
  getElementsByAttribute: function(attribute, attributeValue) {
    var elementArray = new Array();
    var matchedArray = new Array();
    
    if(document.all) {
      elementArray = document.all;
    } else {
      elementArray = document.getElementsByTagName("*");
    }
    
    for(var i=0; i< elementArray.length; i++) {
      if(attribute == "class") {
        var pattern = new RegExp("(^| )" + attributeValue + "( |$)");
        if(pattern.test(elementArray[i].className)) {
          matchedArray[matchedArray.length] = elementArray[i];
        }
      } else if (elementArray[i].getAttribute(attribute) == attributeValue) {
        matchedArray[matchedArray.length] = elementArray[i];
      }
    }
    
    return matchedArray;
  }
}

function closeMenus() {
  var menus = cC.getElementsByAttribute('class', 'dropDownMenu');
  
  for(var i=0; i<menus.length; i++) {
    menus[i].style.display = 'none';
  }
}

cC.addEvent(window, 'load', cC.initCarrier, false);

function openMenu(tid) {
  closeMenus();
  new Effect.SlideDown(tid);
  setTimeout(function() {
    $(tid).style.display = 'none';
  }, 30000);
}