// 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 = '#bbb';
 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 = '#bbb';
 }
 };
}
