/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

//window.onload=function(){
//if (document.getElementsByClassName == undefined) {
//	document.getElementsByClassName = function(className)
//	{
//		var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
//		var allElements = document.getElementsByTagName("*");
//		var results = [];
//
//		var element;
//		for (var i = 0; (element = allElements[i]) != null; i++) {
//			var elementClass = element.className;
//			if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
//				results.push(element);
//		}
//
//		return results;
 //        }
//}
//};

  function findPosX(obj)
  {
    var curleft = 0;
    if(typeof(obj.offsetParent) == 'object')
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  function findPosY(obj)
  {
    var curtop = 0;
    if(typeof(obj.offsetParent) == 'object')
        while(true)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }
  
  function getStyle(el,styleProp)
  {
	var x = document.getElementById(el);
	if (x.currentStyle)
		var y = x.currentStyle[styleProp];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
	return y;
  }

  function getCSSStyle(style, obj){
    if ( obj.currentStyle ) {
      return(eval('obj.currentStyle.' + style));
    } else if ( document.defaultView.getComputedStyle ){
      return(eval("document.defaultView.getComputedStyle(obj,'') ." + style));
    }
  }
 
  function getHeight(obj){
    if(obj && obj.offsetHeight && obj.offsetHeight > 0){
        return obj.offsetHeight;
    }
    else if(obj && obj.clientHeight && obj.clientHeight > 0){
        return obj.clientHeight;
    }
  } 

  function getValueFromPixelString(px_str)
  {
    return px_str.substr(0, px_str.indexOf('p'));
  }

  function findPosYByElementId(id)
  {
    var el = document.getElementById(id);
//alert('attempting to get element id: ' + id);
//    if(el) alert('got element with id: ' + id);
//    else alert('couldn\'t get el with id: ' + id);
    if(el)
        return findPosY(el);
    else
        return 0;
  }

  function adjustBottomLayout()
  {
    var logo_y = findPosYByElementId('setac_logo');
    var rs = document.getElementById('right_sidebar');
    var node_div = document.getElementById('node-24');
    var ht_node_24 = parseInt(getCSSStyle('height', node_div));
    //alert('ht node_24: ' + ht_node_24);
    var main_content = document.getElementById('main_content');
    var ht_main_content = parseInt(getCSSStyle('height', main_content));
    //alert('ht main_content: ' + ht_main_content);
    //var ht_rs = getValueFromPixelString(getCSSStyle('height', rs));
    var ht_rs = parseInt(getCSSStyle('height', rs));
    //var top_rs = getValueFromPixelString(getCSSStyle('top', rs));
    var top_rs = parseInt(getCSSStyle('top', rs));
    var bottom_rs_ideal = logo_y + 204;
    var adjustment_required = bottom_rs_ideal - (top_rs + ht_rs);
    if(Math.abs(adjustment_required) > 2){
        var new_height = ht_rs + adjustment_required;
        rs.style.height = new_height + 'px';
        document.getElementById('main_content').style.height = new_height + 'px';
    //alert('ht_rs ' + ht_rs + ' top_rs ' + top_rs + ' logo_y ' + logo_y);
    //alert('setting the ht to ' + (ht_rs + adjustment_required) + 'px');
        document.getElementById('sm_footer').style.top = (bottom_rs_ideal + 13) + 'px';
        document.getElementById('container').style.minHeight = (bottom_rs_ideal + 62) + 'px';
        var container_subs = getElementsByClassName('container_sub');
        //for(var i in container_subs)
        //{
        //    container_subs[i].style.minHeight = (bottom_rs_ideal + 62) + 'px';
        //}
        for(i=0;i<container_subs.length;i++){
            container_subs[i].style.minHeight = (bottom_rs_ideal + 62) + 'px';
        }
            
    }
  }

  function is_int(input){
    return typeof(input)=='number'&&parseInt(input)==input;
  }

  function adjustBottomLayoutSpecial(node_num)
  {
    if(undefined != node_num && is_int(node_num)){
        var node_id = 'node-' + node_num;
    }
    else{
        var node_id = 'main_content';
    }
    var history_div = document.getElementById('history');
    //var history_div_ht = parseInt(getCSSStyle('height', history_div));
    var history_div_ht = parseInt(getStyle('history', 'height'));
    if(isNaN(history_div_ht)){
        history_div_ht = 181;
    }
    var history_div_y = findPosYByElementId('history');
    //var logo_y = findPosYByElementId('setac_logo');
    var logo_height = 132;
    var logo_y = history_div_y + logo_height + 30;
    var rs = document.getElementById('right_sidebar');
    var node_y = findPosYByElementId(node_id);
    var node_div = document.getElementById(node_id);
    var ht_node = parseInt(getCSSStyle('height', node_div));
    //alert('y pos ' + node_id + ': ' + node_y);
    if(isNaN(ht_node)){
        ht_node = getHeight(node_div);
    }
    //alert('ht ' + node_id + ': ' + ht_node);
    var main_content = document.getElementById('main_content');
    //var ht_main_content = parseInt(getCSSStyle('height', main_content));
    //alert('ht main_content: ' + ht_main_content);
    //var ht_rs = getValueFromPixelString(getCSSStyle('height', rs));
    var ht_rs = parseInt(getCSSStyle('height', rs));
    //var top_rs = getValueFromPixelString(getCSSStyle('top', rs));
    var top_rs = parseInt(getCSSStyle('top', rs));
    //var logo_height = 204;
    var bottom_rs_ideal = history_div_y + history_div_ht + logo_height + 15;
    //alert('history_div_y: ' + history_div_y +  ', history_div_ht: ' + history_div_ht + ',logo_height: ' + logo_height);
    //alert('bottom_rs_ideal: ' + bottom_rs_ideal);
    var bottom_mc_ideal = node_y + ht_node;
    //alert('bottom_mc_ideal: ' + bottom_mc_ideal);
    if(bottom_mc_ideal > bottom_rs_ideal){
        bottom_rs_ideal = bottom_mc_ideal;
        //document.getElementById('setac_logo').style.top = (bottom_mc_ideal - logo_height) + 'px';
    }
    var adjustment_required = bottom_rs_ideal - (top_rs + ht_rs);
    if(Math.abs(adjustment_required) > 2){
        var new_height = ht_rs + adjustment_required;
        rs.style.height = new_height + 'px';
        document.getElementById('setac_logo').style.top = (bottom_rs_ideal - (logo_height + 131)) + 'px';
        document.getElementById('main_content').style.height = new_height + 'px';
    //alert('ht_rs ' + ht_rs + ' top_rs ' + top_rs + ' logo_y ' + logo_y);
    //alert('setting the ht to ' + (ht_rs + adjustment_required) + 'px');
        document.getElementById('sm_footer').style.top = (bottom_rs_ideal + 13) + 'px';
        document.getElementById('container').style.minHeight = (bottom_rs_ideal + 62) + 'px';
        var container_subs = getElementsByClassName('container_sub');
        //for(var i in container_subs)
        //{
        //    container_subs[i].style.minHeight = (bottom_rs_ideal + 62) + 'px';
        //}
        for(i=0;i<container_subs.length;i++){
            container_subs[i].style.minHeight = (bottom_rs_ideal + 62) + 'px';
        }
            
    }
    //document.getElementById('setac_logo').style.top = (bottom_mc_ideal + (logo_height + 150)) + 'px';
  }
  
  function get_distributors(market, region, div_id)
  {
	  $.get("/get_distributors.php", { market: market, region: region },
			   function(data){
	              var replace_div = document.getElementById(div_id);
	              replace_div.innerHTML = data;
			   });
  }

function UnitChange(id, units)
{
  // Convert element to object reference:
  el = document.all ? document.all[id] : document.getElementById ?
  document.getElementById(id) : document[id];
  // Remove any existing element:
  if(el){
      while (el.hasChildNodes())
          el.removeChild(el.lastChild);
  }
        // Create raw text variable for each replacement string:
  var textNode = document.createTextNode(units);
  el.appendChild(textNode);
}

function hide_div(div_name){
  el = document.getElementById(div_name);
  if(el){
      el.style.display = 'none';
  }
}

function show_div(div_name)
{
  el = document.getElementById(div_name);
  if(el){
      el.style.display = 'block';
  }
}

function display_error_text(error)
{
   //alert('displaying error text: ');
   el = document.getElementById("error_div");
   //el.innerHTML = '<span style="color: red; font-weight: bold; font-size: 12px; margin: 0 0 15px 15px; ">' + error + '</span><br/><br/>';
   el.innerHTML = error;
}

function populate_field(field_id, content, append)
{
           var subject_field = document.getElementById(field_id);
           if(subject_field){
                   var original_value = subject_field.value;
                   if(original_value != '' && append){
                   subject_field.value = original_value + '\n' + content;
                   }
                   else{
                   subject_field.value = content;
                   }
           }
}
         
/**
 * Installation Type is either Saddles or t-fittings
 * " If user has selected Saddles, and a meter type of “IP81/IP82” or “TX81/TX82” then display “Data Not Available. Please Contact SeaMetrics”. Fyi - We plan to add this data in the future."
 */
function handle_installation_type_choice()
{
    var meter_select = document.getElementById('TYPE');
    if(meter_select){
        var meter_choice = meter_select.options[meter_select.options.selectedIndex].value;
    }
    else{
        var meter_choice = '';
    }
    var installation_type_select = document.getElementById('installation_type');
    if(installation_type_select){
        var installation_type_choice = installation_type_select.options[installation_type_select.options.selectedIndex].value;
        if(installation_type_choice == "Saddles"){
            hide_div('fitting_material_select');
            hide_div('fitting_size_select');
            if(meter_choice == "TX81" || meter_choice == "IP81"){
                //show_div('saddles_warning_div');
                document.getElementById('error_div').innerHTML = 'Data For Saddles Not Available. Please Contact SeaMetrics.';
                show_div('error_div');
            }
        }
        else if(installation_type_choice == "Saddles" && meter_choice == "EX81"){
            hide_div('error_div');
//            show_div('step_2');
            show_div('step_3');
            hide_div('fitting_material_select');
            hide_div('fitting_size_select');
        }
        else if(installation_type_choice == "T-Fittings"){
            document.getElementById('error_div').innerHTML = 'WARNING, FOR BEST RESULTS REFER TO THE CALIBRATED VALUE RECORDED ON YOUR T-FITTING. K-FACTORS LISTED HEREIN ARE NOMINAL (TYPICAL) VALUES AND SHOULD ONLY BE USED AS AN APPROXIMATION.';
            show_div('error_div');
//            hide_div('step_2');
            hide_div('step_3');
            show_div('fitting_material_select');
            show_div('fitting_size_select');
        }
        else{
            reset_lower_form();
        }
    }
}

function reset_form()
{
    hide_div('error_div');
    hide_div('installation_type_select');
    show_div('dimension_d_div');
    hide_div('saddles_warning_div');
    show_div('step_3');
    hide_div('fitting_material_select');
    hide_div('fitting_size_select');
    hide_div('tx_series_warning_div');
    show_div('help_link');
    document.getElementById('TYPE').selectedIndex = 0;
    document.getElementById('installation_type').selectedIndex = 0;
    document.getElementById('fitting_material').selectedIndex = 0;
    document.getElementById('fitting_size').selectedIndex = 0;
    //document.forms[0].installation_type.select.option = 0;
    document.forms[0].ext_dia.value = '';
    document.getElementById('thick').value = '';
    //document.forms[0].thick.value = '';
    document.forms[0].dimension_d.value = '';
    document.forms[0].k_factor.value = '';
}

function reset_lower_form()
{
    hide_div('error_div');
    hide_div('installation_type_select');
    show_div('dimension_d_div');
    hide_div('saddles_warning_div');
//    show_div('step_2');
    show_div('step_3');
    show_div('help_link');
    hide_div('fitting_material_select');
    hide_div('fitting_size_select');
    //document.getElementById('TYPE').selectedIndex = 0;
    document.getElementById('installation_type').selectedIndex = 0;
    document.getElementById('fitting_material').selectedIndex = 0;
    document.getElementById('fitting_size').selectedIndex = 0;
    //document.forms[0].installation_type.select.option = 0;
    document.forms[0].ext_dia.value = '';
    document.getElementById('thick').value = '';
    //document.forms[0].thick.value = '';
    document.forms[0].dimension_d.value = '';
    document.forms[0].k_factor.value = '';
}

function check_for_TX()
{
    reset_lower_form();
    var meter_select = document.getElementById('TYPE');
    if(meter_select){
        var meter_choice = meter_select.options[meter_select.options.selectedIndex].value;
        if(meter_choice == "TX81" || meter_choice == "IP81" || meter_choice == "EX81"){
            show_div('installation_type_select');
            hide_div('dimension_d_div');
            hide_div('help_link');
        }
        else{
/*
            hide_div('installation_type_select');
            show_div('dimension_d_div');
            hide_div('saddles_warning_div');
            show_div('step_3');
            hide_div('fitting_material_select');
            hide_div('fitting_size_select');
*/
        }
        if(meter_choice.indexOf("TX") != -1){
            show_div('tx_series_warning_div');
        }
        else{
            hide_div('tx_series_warning_div');
        }
    }

}

function calculate_and_get_answers()
{
    hide_div('error_div');
    display_error_text('');
    //var data = $('calculator-form').serialize();
    var opt = {
            method: 'post',
        //    parameters: data,
        //    onComplete:function(request, json){
        //       //alert('got ' + request.responseText);
        //    },
            on404: function(t) {
                  alert('Error 404: location "' + t.statusText + '" was not found.');
            },
            onFailure: function(t) {
                  alert('Error ' + t.status + ' -- ' + t.statusText);
            },
            onSuccess: function(request, json) {
                  //alert('got response: ' + request.responseText);
                  var content = request.responseText;
                  if(content.indexOf('Error') > -1){
                      display_error_text(content);
                      show_div('error_div');
                  }
                  else{
//alert('got: ' + content);
                      var answers = content.split(":");
                      populate_field('dimension_d', answers[0], false);
                      populate_field('k_factor', answers[1], false);
                  }
            }
     }
    var meter_type = document.getElementById('TYPE').value;
    var installation_type = document.getElementById('installation_type').value;
    var fitting_material = document.getElementById('fitting_material').value;
    var fitting_size = document.getElementById('fitting_size').value;
    if(document.getElementById('unit_type_si').checked == 1){
        var units = document.getElementById('unit_type_si').value;
    }
    else if(document.getElementById('unit_type_british').checked == 1){
        var units = document.getElementById('unit_type_british').value;
    }
    else if(document.getElementById('unit_type_si_2').checked == 1){
        var units = document.getElementById('unit_type_si_2').value;
    }
    var ext_dia = document.getElementById('ext_dia').value;
    var thick = document.getElementById('thick').value;
    var url_text = "/cgi-bin/seaKalc.cgi?TYPE=" + meter_type + "&installation_type=" + installation_type + "&fitting_material=" + fitting_material + "&fitting_size=" + fitting_size + "&unit_type=" + units + "&ext_dia=" + ext_dia + "&thick=" + thick;
    $ajax = new Ajax.Request(url_text, opt);
}


