Ext.namespace('SiteBuilder', 'SiteBuilder.widget', 'SiteBuilder.util');

/* util */
SiteBuilder.util.ScriptParameters = function(i){
	var qs = document.getElementsByTagName("script")[i].src.match(/\w+=\w+/g), qstring = {}, t, i = qs.length;
    while (i--) {
        t = qs[i].split("=");
        qstring[t[0]] = t[1];
    }
    return qstring;
}

SiteBuilder.util.ClearField = function(object){
    object.value = "";
}

SiteBuilder.util.SelectField = function(object){
    object.select();
}

SiteBuilder.util.OpenWindow = function(config){
    if (screen.width) {
        var winl = (screen.width - config.width) / 2;
        var wint = (screen.height - config.height) / 2;
    }else{
        winl = 0;
        wint = 0;
    }
    if (winl < 0) 
        winl = 0;
    if (wint < 0) 
        wint = 0;	
		
    var settings = 'height=' + config.height + ',';
    settings += 'width=' + config.width + ',';
    settings += 'top=' + wint + ',';
    settings += 'left=' + winl + ',';
    settings += config.features;
    
    win = window.open(config.url, config.name, settings);
    win.window.focus();
}

SiteBuilder.widget.Submitter = function(form, options){	
    var options = options || {};			   
	
	// Old style shortcut
	if(options.type !== undefined){
		switch(options.type){
			case 'contact':
				options.processor = 'forms/sendContactNotice';
				break;
			case 'appointment':
				options.processor = 'forms/sendAppointmentNotice';
				break;
			case 'custom':
				options.processor = 'forms/sendCustomNotice';
				break;
			default:
				break;
		}		
	}
    
    // Find the submit
    var submitButton = Ext.DomQuery.selectNode("input[type=submit]", form.id);
    this.submitText = submitButton.value;
    
    // Collect the labels
    var oLabel = new Object;
    oLabel['form'] = form.id;
    var nodes = Ext.DomQuery.select("label", form.id);
    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        oLabel[node.attributes['for'].value + 'Label'] = node.innerHTML;      
    };
    
    Ext.Ajax.on('beforerequest', function(){
        submitButton.value = 'Processing...';
    }, this, {
        single: true
    });
    
    Ext.Ajax.on('requestcomplete', function(){
        submitButton.value = this.submitText;
    }, this, {
        single: true
    });
	
    Ext.Ajax.request({
        method: 'post',
        url: '/forms/ajaxProcessForm.html',
        params: Ext.Ajax.serializeForm(form) + '&' + Ext.urlEncode(oLabel) + '&' + Ext.urlEncode(options)+ '&sb=' + SiteBuilder.util.ScriptParameters(2).sb,
        callback: (options.callback !== undefined) ? options.callback : function(){
        },
        success: function(response, o){
            // Update element after
            if (options.update !== undefined) {
                Ext.get(options.update).update(response.responseText);
                return;
            }
            var result = Ext.decode(response.responseText);
            if (result.success == true) {
                // Overwrite form div after                
                if (options.showConfirm == undefined) {
                    Ext.DomHelper.overwrite(form, '<p>Thank you! Your request has been processed.</p>');
                }
                
                // Show some div after
                if (options.showAfter !== undefined) {
                    Ext.get(options.showAfter).show();
                }
            } else {
                // Clear previous error markers							
                var nodes = Ext.DomQuery.select("*[class*=sbFormError]", form.id);
                for (var i = 0; i < nodes.length; i++) {
                    Ext.get(nodes[i].id).removeClass('sbFormError');
                };
                
                // Build current error string				
                var str = 'Sorry, there were errors in your request:\n\n';
                for (var i in result.errors) {
                
                    // display the error
                    var node = Ext.DomQuery.selectNode("label[for=" + i + "]", form.id);
                    var label = node.innerHTML;
                    
                    // mark the input
                    var node = Ext.DomQuery.selectNode("*[name=" + i + "]", form.id);
                    Ext.get(node).addClass('sbFormError');
                    str += label + ' : ' + result.errors[i] + '\n';
                }
                alert(str);
            }
        },
        failure: function(response, options){
            var result = Ext.decode(response.responseText);
            alert('There was an error processing your request. Please contact an adminstrator.');
        }
    });
    return false;
}


/* Widgets */
SiteBuilder.widget.Include = function(config){
    var config = config || {};
    Ext.onReady(function(){
        Ext.Ajax.request({
            method: 'GET',
            url: config.url,
            success: function(response, options){
                Ext.get(config.target).update(response.responseText, true);
            },
            failure: function(response, options){
                var result = Ext.decode(response.responseText);
                alert('There was an error processing your request. Please contact an adminstrator.');
            },
            loadScripts: true
        });
    }, this);
}

/* Start Google globals */
var google_conversion_id = "";
var google_conversion_language = "";
var google_conversion_format = "";
var google_conversion_color = "";
var google_conversion_label = "";
/* End Google global vars */

SiteBuilder.widget.GoogleConversionTracker = function(config){
    var config = config || {};
    
    google_conversion_id = config.id;
    google_conversion_language = "en_US";
    google_conversion_format = "3";
    google_conversion_color = "ffffff";
    google_conversion_label = "HuZxCP76cBDcgqbvAw";
    
    Ext.DomHelper.append(Ext.getBody(), {
        tag: 'img',
        height: '1',
        width: '1',
        src: 'http://www.googleadservices.com/pagead/conversion/' + google_conversion_id + '/?label=' + google_conversion_label + '&amp;script=0'
    });
    return false;
}

SiteBuilder.widget.OnClickWindow = function(config){	
	Ext.get(config.id).setStyle({cursor: 'pointer'});
	Ext.get(config.id).on('click', function(){				
		SiteBuilder.util.OpenWindow(config);
	});	
}