/*
 * Skydreams referrer form submit
 */

var skyForm = function() { }

skyForm.init = function() 
{
	skyForm.isBound = false;
	skyForm.isReady = false;
}

skyForm.beforeSubmit = function(form)
{
	document.getElementById("leadsubmit").disabled = true;
}

skyForm.errorSubmit = function(form, data)
{
	document.getElementById("leadsubmit").disabled = false;
	
	if(data.result && data.result != 'validation_error') {
		alert(data.result);
	} else if(data.missing_fields) {
		// Reset all faulty fields
		var items = form.getElementsByTagName("span");
		
		for (var i = 0; i < items.length; i++) {
			var rep = items[i].className.match(" error") ? " error" : "error";
			items[i].className = items[i].className.replace(rep,'');
		}
		
		// Set all fields that are missing to red
		for(var i in data.missing_fields) {
			var item = document.getElementById(data.missing_fields[i]);
			if(item) item.className += item.className?' error':'error';
		}
		
		alert(document.getElementById("errormessage").value);
	} else if(data.debug) {
		alert(data.debug);
	} else {
		alert('Error');
	}
}	
	
skyForm.successSubmit = function(form, data) 
{
	document.getElementById('leadform').onsubmit = function() { return true; }
	document.getElementById('leadform').submit();
}
	
skyForm.formSubmit = function() 
{	
	// Try catch environment
	try {
		// Early exit no element selected
		if (this.length == 0) {
			throw("No element selected");
		}

		// Variables for the dynamic script loading
		var callback = "jsonp" + new Date().getTime().toString();
		var url = skyForm.url + "?method_=jsonp&callback_=" + callback + "&identify_=" + skyForm.identify;
		var form = this;
		var formdata = skyForm.formToArray(this);
		var head =  document.getElementsByTagName("head")[0];
		var script = document.createElement("script");  

		// Give pre submit callback
		skyForm.beforeSubmit(form);
		
		// Append parameters 
		for(var i in formdata) {
			url += "&" + encodeURIComponent(formdata[i].name) + "=" + encodeURIComponent(formdata[i].value);
		}
		url = url.replace(" ", "+");
		
		// Find ie
		var msie = ((navigator.appVersion.indexOf("MSIE")!= -1)&&!window.opera)? true : false;
		
		// Check max length
		if(msie && url.length > 2030) {
			throw("A field exceeds the maximum character limit, please correct this field");
		} 
		
		// Create script loader      
	    script.src = url;
	    script.type = "text/javascript";    
		
		// Handle JSONP-style loading
		window[ callback ] = window[ callback ] || function( data ) {
			if(data.result && data.result == 'success') {
				// Call success function
				skyForm.successSubmit(form, data);
			} else  {
				// Call error function
				skyForm.errorSubmit(form, data);
			}
			
			// Garbage collect
			window[ callback ] = undefined;

			try {
				delete window[ callback ];
			} catch(e) {}

			if ( head ) {
				head.removeChild( script );
			}
		};
	    
	    // Set script tag  
	   head.appendChild(script);
	} catch(error) {
		alert('Error: ' + error);
		document.getElementById("leadsubmit").disabled = false;
	}
	
	return false;
}
	
skyForm.formToArray = function(form) 
{
	var a = [];
	if (form.length == 0) return a;
	
	var els = form.elements;
	if (!els) return a;
	
	for(var i=0, max=els.length; i < max; i++) {
		var el = els[i];
		var n = el.name;
		if (!n) continue; 

		var v = skyForm.formFieldValue(el, true);
		if (v && v.constructor == Array) {
			for(var j=0, jmax=v.length; j < jmax; j++) {
				a.push({name: n, value: v[j]});
			}
		}
		else if (v !== null && typeof v != 'undefined') {
			a.push({name: n, value: v});      
		}
	}
	
	return a;
}

skyForm.formFieldValue = function(el, successful)
{
	var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
	if (typeof successful == 'undefined') successful = true;

	if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
		(t == 'checkbox' || t == 'radio') && !el.checked ||
		(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
		tag == 'select' && el.selectedIndex == -1))
			return null;

	if (tag == 'select') {
		var index = el.selectedIndex;
		if (index < 0) return null;
		var a = [], ops = el.options;
		var one = (t == 'select-one');
		var max = (one ? index+1 : ops.length);
		for(var i=(one ? index : 0); i < max; i++) {
			var op = ops[i];
			if (op.selected) {
				var v = op.value;
				if (!v) // extra pain for IE...
					v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
				if (one) return v;
				a.push(v);
			}
		}
		return a;
	}
	return el.value;
}

skyForm.changeType = function(newtype)
{
	// Remove old form
	if (0 in document.getElementById('leadform').getElementsByTagName("div")) {
		var d = document.getElementById('leadform').getElementsByTagName("div")[0];
		document.getElementById('types').appendChild(d);
		d.style.display = 'none';
	}
	
	// First place new form
	document.getElementById('leadform').insertBefore(document.getElementById(newtype),document.getElementById('leadform').firstChild);
	document.getElementById(newtype).style.display = 'block';
	
	// Check box
	try {
		for (var i=0; i < document.getElementById('leadform').type.length; i++) {	
			if(document.getElementById('leadform').type[i].value == newtype ) {
				document.getElementById('leadform').type[i].checked = true;
			}
		}
	} catch(err) {}
	
	try {
		for (var i=0; i < document.getElementById('leadform').business.length; i++) {	
			if(document.getElementById('leadform').business[i].value == newtype ) {
				document.getElementById('leadform').business[i].checked = true;
			}
		}
	} catch(err) {}
	
	try {
		document.getElementById('leadform').gender[0].checked = true;
	} catch(err) {}
}
	
skyForm.ready = function() 
{
	// Check if already executed
	if ( skyForm.isReady ) return;
	skyForm.isReady = true;
	
	// Variables
	skyForm.identify = document.getElementById("identify").value;
	skyForm.url = document.getElementById("api").value;
	
    // Bind on form submit
	if(document.getElementById('leadform')) {
		document.getElementById('leadform').onsubmit = skyForm.formSubmit;
	}	
}
	
skyForm.load = function() 
{
	// Bind on pageload
	if ( skyForm.isBound ) return;
	skyForm.isBound = true;
    
    // Mozilla, Opera and webkit nightlies currently support this event
    if ( document.addEventListener ) {
        // Use the handy event callback
        document.addEventListener( "DOMContentLoaded", function(){
            document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
            skyForm.ready();
        }, false );

    // If IE event model is used
    } else if ( document.attachEvent ) {
        // Ensure firing before onload,
        // Maybe late but safe also for iframes
        document.attachEvent("onreadystatechange", function(){
            if ( document.readyState === "complete" ) {
               	document.detachEvent( "onreadystatechange", arguments.callee );
                skyForm.ready();
            }
        });

        // If IE and not an iframe
        // continually check to see if the document is ready
        if ( document.documentElement.doScroll && window == window.top ) (function(){
	        if ( skyForm.isReady ) return;
	
	        try {
                // If IE is used, use the trick by Diego Perini
                // http://javascript.nwbox.com/IEContentLoaded/
                document.documentElement.doScroll("left");
	        } catch( error ) {
                setTimeout( arguments.callee, 0 );
                return;
	        }
	
	        // and execute any waiting functions
	        skyForm.ready();
        })();
    }
    
    // Do onload hook here works always
    window.onload = skyForm.ready;
}

// Initializes the load sequence
skyForm.init();
skyForm.load();
