
/* Routes */
function cz_get_route(level, id) {
	cz_current_level = level;
	document.getElementById('cz_selected_route_id').value = id ;
	var ls = document.getElementById('cz_routes').children;
	for (var i = 0; i < ls.length; i++) {
		if ( ls[i].getAttribute('id').split('_').pop() > level ) {
			ls[i].parentNode.removeChild(ls[i]);
		}
	}
	var x1 = new jXHR();
	x1.onerror = function(){};
	x1.onreadystatechange = function(data){
		if (x1.readyState === 4) {
			var d = document.createElement("div");
			d.innerHTML = data.html;
			while (d.firstChild) {
				document.getElementById("cz_routes").appendChild(d.firstChild);
			}
		}
	};
	x1.open("GET", site + '/contact/script_select_route/' + id +'?callback=?');
	x1.send();
}

/* Form Submit */
function cz_submit() {
  f = document.getElementById('cz_form');

  /* validation */
  var errors = [];
	var els = f.getElementsByTagName('*');
  var validateNextField = false;
	for ( var idx = 0; idx < els.length; idx++ ) {
		var el = els[idx];
    if ( el.className.indexOf('cz_validate_presence' ) > -1 ) {
      validateNextField = true;
    }
    if ( validateNextField &&
         ( el.tagName.toLowerCase() == 'input' ||
           el.tagName.toLowerCase() == 'textarea' ||
           el.tagName.toLowerCase() == 'select' )) {
      switch( el.type ) {
        case 'select':
        case 'select-one':
          if ( !el.selectedIndex ) {
            errors.push(el.name);
          }
          break;
        case 'radio':
          var radLength = f.elements[el.name].length;
          if( radLength == undefined ) {
            if ( !el.checked ) errors.push(el.name);
          } else {
            var rSelected = false;
            for ( var i = 0; i < radLength; i++ ) {
              if ( f.elements[el.name][i].checked ) {
                rSelected = true;
              }
            }
            if ( !rSelected ) errors.push(el.name);
          }
          break;
        case 'text':
        case 'textarea':
          if ( el.value == "" ) errors.push(el.name);
          break;
      }
      validateNextField = false;
    }
  }
  var errorCount = errors.length;
  if ( errorCount > 0 ) {
    var error_msg = "Oops! To send a contact:\n"
    for ( var idx = 0; idx < errorCount; idx++ ) {
      switch( errors[idx] ) {
        case 'contact[sender_email]':
          error_msg += "Enter an email address.\n";
          break;
        case 'contact[sender_email_confirmation]':
          error_msg += "Your email addresses must match.\n";
          break;
        case 'contact[message]':
          error_msg += "Enter a message.\n";
          break;
        default:
          switch( /^(.*)\[/.exec(errors[idx])[1] ) {
            case 'field':
              fieldName = /\[(.*)\]/.exec(errors[idx])[1];
              if ( field_errors[fieldName] )
                error_msg += field_errors[fieldName] + "\n";
              else
                error_msg += /\[(.*)\]/.exec(errors[idx])[1] + " is required.\n";
              break;
            case 'route':
              routeName = /\[(.*)\]/.exec(errors[idx])[1];
              if ( route_errors[routeName] )
                error_msg += route_errors[routeName] + "\n";
              else
                error_msg += /\[(.*)\]/.exec(errors[idx])[1] + " is required.\n";
              break;
          }
          break;
      }
    }
    alert(error_msg);
    return false;
  }
  
	var button = document.getElementById('cz_submit_button');
	var loader = document.getElementById('cz_loader');
	button.style.display = 'none';
	loader.style.display = 'block';
	var x1 = new jXHR();
	/*
	x1.onerror = function(){
		loader.style.display = 'none';
		button.style.display = 'block';
	}; */
	x1.onreadystatechange = function(data){
		if (x1.readyState === 4) {
			loader.style.display = 'none';
			button.style.display = 'block';
			window.scrollTo(0,0);
			if (data.errors != undefined) {
				document.getElementById('cz_errors').innerHTML = data.errors;
			} else {
				document.getElementById('cz_content').innerHTML = data.message;
				if (data.redirect) {
					setTimeout("location.href = '" + data.redirect + "';",2500);
				}
			}
		}
	};
	x1.open("GET", site + '/contact/page_widget_send?callback=?&'+serializeForm(f));
	x1.send();
	return false;
}


/* Configuration */
var cz_home = 'https://contactize.com';
var site = 'https://jetcity.contactize.com';

document.write('<div id="cz_content">Loading contact form...<\/div>');
document.getElementById('cz_content').innerHTML = "\n\t\t<div id=\"cz_errors\"></div>\n\t<form action=\"\" id=\"cz_form\" method=\"post\"><div style=\"margin:0;padding:0;display:inline\"><input name=\"authenticity_token\" type=\"hidden\" value=\"ZocAGfBU1iiGpGrLGPOAsj6YOfAHlHgNg66S3zxaFls=\" /></div>\n\t\t<input id=\"cz_referrer\" name=\"contact[referrer]\" type=\"hidden\" />\n\t\t<input id=\"cz_selected_route_id\" name=\"contact[route_id]\" type=\"hidden\" />\n\t\t<p>\n\t\t\t<label for=\"contact[sender_name]\">Your name</label><br/>\n\t\t\t<input id=\"contact_sender_name\" name=\"contact[sender_name]\" size=\"30\" type=\"text\" />\n\t\t</p>\n\t\t<p class=\"cz_required cz_validate_presence\">\n\t\t\t<label for=\"contact[sender_email]\">Your email address</label><br/>\n\t\t\t<input id=\"contact_sender_email\" name=\"contact[sender_email]\" size=\"50\" type=\"text\" />\n\t\t</p>\n\t\t<p class=\"cz_required cz_validate_presence\">\n\t\t\t<label for=\"contact[sender_email_confirmation]\">Please confirm your email address</label><br/>\n\t\t\t<input id=\"contact_sender_email_confirmation\" name=\"contact[sender_email_confirmation]\" size=\"50\" type=\"text\" />\n\t\t</p>\n\t\t<p class=\"cz_required cz_validate_presence\">\n\t\t\t<label for=\"contact[message]\">Your question/comment/feedback</label><br />\n\t\t\t<textarea cols=\"50\" id=\"contact_message\" name=\"contact[message]\" rows=\"8\"></textarea>\n\t\t</p>\n\t\t\n\t\t<div id=\"cz_routes\">\n\t\t\t\n\t\t</div>\n\t\t\t\t<p>\n\t\t\t<input type=\"button\" id=\"cz_submit_button\" value=\"Send\" onclick=\"cz_submit()\"/>\n\t\t\t<div id=\"cz_loader\"><img src=\"https://www.contactize.com/images/ajax-loader.gif\" title=\"Submitting...\" alt=\"Submitting...\" /></div>\n\t\t</p>\n\t\t<p>\n\t\t\t<label class=\"cz_required\">Required</label>\n\t\t</p>\n\t</form>";
var cz_current_level = 0;
document.getElementById('cz_referrer').value = document.referrer;


/* Initialize error messages */
var field_errors = [];

var route_errors = [];


// jXHR.js (JSON-P XHR)
// v0.1 (c) Kyle Simpson
// MIT License

(function(global){
	var SETTIMEOUT = global.setTimeout, // for better compression
		doc = global.document,
		callback_counter = 0;

	global.jXHR = function() {
		var script_url,
			script_loaded,
			jsonp_callback,
			scriptElem,
			publicAPI = null;

		function removeScript() { try { scriptElem.parentNode.removeChild(scriptElem); } catch (err) { } }

		function reset() {
			script_loaded = false;
			script_url = "";
			removeScript();
			scriptElem = null;
			fireReadyStateChange(0);
		}

		function ThrowError(msg) {
			try { publicAPI.onerror.call(publicAPI,msg,script_url); } catch (err) { throw new Error(msg); }
		}

		function handleScriptLoad() {
			if ((this.readyState && this.readyState!=="complete" && this.readyState!=="loaded") || script_loaded) { return; }
			this.onload = this.onreadystatechange = null; // prevent memory leak
			script_loaded = true;
			if (publicAPI.readyState !== 4) ThrowError("Script failed to load ["+script_url+"].");
			removeScript();
		}

		function fireReadyStateChange(rs,args) {
			args = args || [];
			publicAPI.readyState = rs;
			if (typeof publicAPI.onreadystatechange === "function") publicAPI.onreadystatechange.apply(publicAPI,args);
		}

		publicAPI = {
			onerror:null,
			onreadystatechange:null,
			readyState:0,
			open:function(method,url){
				reset();
				internal_callback = "cb"+(callback_counter++);
				(function(icb){
					global.jXHR[icb] = function() {
						try { fireReadyStateChange.call(publicAPI,4,arguments); }
						catch(err) {
							publicAPI.readyState = -1;
							ThrowError("Script failed to run ["+script_url+"].");
						}
						global.jXHR[icb] = null;
					};
				})(internal_callback);
				script_url = url.replace(/=\?/,"=jXHR."+internal_callback);
				fireReadyStateChange(1);
			},
			send:function(){
				SETTIMEOUT(function(){
					scriptElem = doc.createElement("script");
					scriptElem.setAttribute("type","text/javascript");
					scriptElem.onload = scriptElem.onreadystatechange = function(){handleScriptLoad.call(scriptElem);};
					scriptElem.setAttribute("src",script_url);
					doc.getElementsByTagName("head")[0].appendChild(scriptElem);
				},0);
				fireReadyStateChange(2);
			},
			setRequestHeader:function(){}, // noop
			getResponseHeader:function(){return "";}, // basically noop
			getAllResponseHeaders:function(){return [];} // ditto
		};

		reset();

		return publicAPI;
	};
})(window);


function serializeForm(f) {
	// Return value
	var retVal = '';

	// Getting ALL elements inside of form element
	var els = f.getElementsByTagName('*');

	// Looping through all elements inside of form and checking to see if they're "form elements"
	for( var idx = 0; idx < els.length; idx++ ) {
		var el = els[idx];

		// According to the HTTP/HTML specs we shouldn't serialize disabled controls
		// Notice also that according to the HTTP/HTML standards we should also serialize the
		// name/value pair meaning that the name attribute are being used as the ID of the control
		// Though for Ra controls the name attribute will have the same value as the ID attribute
		if( !el.disabled && el.name && el.name.length > 0 ) {
			switch(el.tagName.toLowerCase()) {
				case 'input':
					switch( el.type ) {
						// Note we SKIP Buttons and Submits since there are no reasons as to why we
						// should submit those anyway
						case 'checkbox':
						case 'radio':
							if( el.checked ) {
								if( retVal.length > 0 ) {
									retVal += '&';
								}
								retVal += el.name + '=' + encodeURIComponent(el.value);
							}
							break;
						case 'hidden':
						case 'password':
						case 'text':
							if( retVal.length > 0 ) {
								retVal += '&';
							}
							retVal += el.name + '=' + encodeURIComponent(el.value);
							break;
					}
					break;
				case 'select':
        case 'select-one':
				case 'textarea':
					if( retVal.length > 0 ) {
						retVal += '&';
					}
					retVal += el.name + '=' + encodeURIComponent(el.value);
					break;
			}
		}
	}
	return retVal;
}

