/******************* Configurable variables **************/
// Make sure to put on a trailing slash!
var db_base_path = './';


/*********************************************************/
// Global vars
var int1, int2, percent = 0, step = 1, changing = false, set_stage_url = db_base_path + 'set_stage.php', post_url = db_base_path + 'post_form.php', going_forward = true, forgotten_child;
if (window.short_form == undefined) {short_form = false;}

var http = get_http_request();

/***************** Support functions *********************/

function $(ele) {return document.getElementById(ele);}

function get_http_request () {
  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari, IE7...
    http_request = new XMLHttpRequest();
  } else if (window.ActiveXObject) { // older IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
 return http_request;
}

function set_opacity (obj, val) {
  if (obj.filters) {
    val *= 100;
    try {
      obj.filters.item("DXImageTransform.Microsoft.Alpha").opacity = val;
    } catch (e) {
      obj.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity='+val+')';
    }
  } else {
    obj.style.opacity = val;
  }
}

function get_opacity (obj) {
  if (obj.filters) {
    if (obj.filters.item("DXImageTransform.Microsoft.Alpha") && obj.filters.item("DXImageTransform.Microsoft.Alpha").opacity) {
      return obj.filters.item("DXImageTransform.Microsoft.Alpha").opacity / 100;
    } else {
      return 1;
    }
  } else {
    var opacity = obj.style.opacity;
    if (opacity !== undefined) {return opacity;}
    else {return 1;}
  }
}

function get_value(name) {
  var eles, opt;
  if (!name instanceof String) { eles = [name]}
  else { eles = document.getElementsByName(name); }
  
  if (!eles[0]) {return false;}

  switch(eles[0].type) {
    case 'radio':
      for (var i=0; i < eles.length; i++) {if (eles[i].checked) {return eles[i].value}}
      break;
    case 'select': case 'select-one':
      eles = eles[0].getElementsByTagName('option');
      for (var i=0; opt = eles[i]; i++) {if (opt.selected) {return opt.value}}
      break;
    case 'text':  case 'textarea':   case 'hidden': 
      return typeof(eles[0].real_value) == 'string' ? eles[0].real_value : eles[0].value;
      break;
  }
  return false;
}

/****************** End Support Functions *******************/

function change_percent(percent) {
  if (int2) {clearInterval(int2)}
  int2 = setInterval('increment_bar('+percent+')', 50);
}

function increment_bar(upper) {
  percent += going_forward ? 1 : -1;
  var boxWidth = short_form ? 156 : 340;
  var width = boxWidth * (percent / 100), progress_bar = $('progress_bar'), percent_box = $('percent');
  progress_bar.style.width = width + 'px';
  
  if ((going_forward && percent >= upper) || (!going_forward && percent <= upper)) {clearInterval(int2)}
  
  if (percent <= 4) {percent_box.innerHTML = ''; progress_bar.style.width = '4px';}
  else if (percent < 100) {percent_box.innerHTML = percent + '%';}
  else if (percent >= 100) {percent_box.innerHTML = 'Processing, please wait...';}
}


function prev_step() {
  $('the_button').style.display ='none';
  $('next_button').style.display = 'inline';
  
  if (step == 1) {return;}
  else if (step == 4 && !short_form) {$('step_4').appendChild(forgotten_child);}
  else if (step == 2) {$('prev_button').style.display = 'none';}
  going_forward = false;
  changing = true;
  step--;
  if (int1) {clearInterval(int1);}
  int1 = setInterval('fade_out()', 50);
  change_percent(get_percent(step));
}

function get_percent(step) {
  switch(step) {
    case 1: return 0;
    case 2: return 25;
    case 3: return 50;
    case 4: return 75;
    case 5: return 100;
  }
}

function next_step() {
  
  switch(step) {
    case 1:
      if (!get_value('00N30000001Nt2M')) {return;}
      $('prev_button').style.display = 'inline';
      break;
    case 2:
      if (!get_value('00N30000001O1zM')) {return;}
    break;
    case 3:
      var conn_option = get_value('00N30000001O1wF');
      if (!conn_option) {return;}
      
      $('the_button').style.display ='inline';
      $('next_button').style.display = 'none';
      
      
      if (!short_form) {
        forgotten_child = $(conn_option == 'Looking for new connection' ? 'fields_other' : 'fields_dsl');
        var show_child = $(conn_option == 'Looking for new connection' ? 'fields_dsl' : 'fields_other');
        forgotten_child.style.display = 'none';
        show_child.style.display = 'block';
        $('step_4').removeChild(forgotten_child);
      }
      
      break;
    case 4:
      var arr, obj, errors = [];
      var conn_option = get_value('00N30000001O1wF');
      var phone_val = $('phone').value.replace(/[^0-9]/g, '');
      if (short_form) {
        arr = ['first_name', 'last_name', 'company', 'phone', 'email', 'location']
      } else {
        arr = conn_option == 'Looking for a new connection' ? ['first_name', 'last_name', 'company', 'phone', 'email', 'address', 'city', 'state', 'zip', 'location', '00N30000001iiNd'] : ['first_name', 'last_name', 'company', 'phone', 'email', 'location', '00N30000001iiNd']     
      }
      
      for (i=0; obj = arr[i]; i++) {
        if (get_value(obj).replace(/\s+/, '') == '') {
          var err_msg  = 'All fields ';
          if (!short_form) {err_msg += 'except "additional information" ';}
          err_msg += 'are required.';
          errors.push(err_msg);
          break;
        }
      }
      
      if (!(
          (phone_val.match(/^[2-9]/) && phone_val.length >= 10)
            ||
          (phone_val.match(/^1/) && phone_val.length >= 11)
        )) {
        errors.push('Phone number must be valid and include area code.');
      }
      if (!$('email').value.match(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i)) { errors.push('The email address seems to be invalid.  Please check and try again.');}
            
      if (errors.length == 0) {
        $('the_button').style.display ='none';
        change_percent(get_percent(5));
        
        var post_data = [], post_arr = [], eles = $('the_form').elements, ele;
        for (var i=0; ele = eles[i]; i++) {
          if ((ele.type == 'radio' && !ele.checked) || !ele.name) {continue;}
          post_data.push(ele.name + '=' + escape(get_value(ele.name)));
        }
        
        http.open('GET', set_stage_url + '?stage=' + step + '&id='+ global_id);
        http.send('');
        
        var http2 = get_http_request();
        http2.open('POST', post_url, false);
        http2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        http2.send(post_data.join('&'));
        $('the_form').submit();
      } else {
        alert("Please fix the following, and try again: \n\n" + errors.join("\n\n"));
        $('the_button').style.display ='inline';
      }
      //$('the_button').style.display ='none';
      $('next_button').style.display = 'none';
      $('prev_button').style.display = 'none';
      return;
      break;
  }
  
  
  http.open('GET', set_stage_url + '?stage=' + step + '&id='+ global_id, false);
  http.send('');
  
  var prev_step = $('step_' + step), two_steps_ago = $('step_' + (step - 1));
  if (two_steps_ago) {set_opacity(two_steps_ago, 0);}  // Bit of a failsafe, just in case the user clicks *really* fast.
  
  set_opacity(prev_step, .99);
  changing = true;
  step++;
  going_forward = true;
  change_percent(get_percent(step));
  if (int1) {clearInterval(int1);}
  int1 = setInterval('fade_out()', 50);
}

function fade_out() {
  var prev_step = $('step_' + (step - (going_forward ? 1 : -1))), next_step;
  
  var op = get_opacity(prev_step) - .05;
  
  if (op <= 0) {
    set_opacity(prev_step, 0);
    changing = false;
    clearInterval(int1);
    next_step = $('step_' + step);
    prev_step.style.zIndex = 1;
    next_step.style.zIndex = 2;
    next_step.style.display = 'block';
    set_opacity(next_step, 1);
  } else {
    set_opacity(prev_step, op);
  }
}

window.onload = function() {
  if (!short_form) {$('prev_button').style.display = 'none';}
  var inputs = document.getElementsByTagName('input'), input;
  for (var i=0; input = inputs[i]; i++) {if (input.type == 'radio') {input.onclick = function() { next_step(); }}}
}

function add_text(ele, str) {
  if (typeof(ele) == 'string') {ele = document.getElementById(ele);}
  ele.title_txt = str;
  ele.value = str;
  ele.style.color = '#A0A0A0';
  ele.real_value = '';
  ele.onfocus = function () {
    if (!this.has_changed)  {
      this.real_value = this.value = '';
      this.style.color = '#000';
    }
  };
  
  ele.onkeyup = function () {
    this.real_value = this.value;
  };
  
  ele.onblur = function () {
    this.has_changed = this.value.match(/^\s*$/) ? false : true;
    if (!this.has_changed) {
      this.value = this.title_txt;
      this.real_value = '';
      this.style.color = '#A0A0A0';
    }
  };
}
