if (!editMode) jQuery(window).bind("load",function(){var findItForMeForm = new FindItForMeForm();});

FormUtility.changeLabelColor = function(fieldList, color) {
	var currElem, currElemType;
	for (var i=0; i<fieldList.length; i++) {
		var currElem = fieldList[i];
		if (!currElem) break;
		currType = currElem.type;
		labelId = currElem.name + "_label";
		if (!currElem.length || currType == "select-one") {			
			var label = document.getElementById(labelId);
			label.className = label.className + " required";			
		} else {
			for (var j=0; j<currElem.length; j++) currElem[j].style.backgroundColor = color;
		}
	}
};

FormUtility.unHighlightLabels = function(fieldList) {
	var currElem, currElemType;
	if (!fieldList) var fieldList = FormUtility.highlightedFields;
	for (var i=0; i<fieldList.length; i++) {
		var currElem = fieldList[i];
		if (!currElem) break;
		currType = currElem.type;
		labelId = currElem.name + "_label";
		if ((currType != "button") && (currType != "submit") && (currType != "reset")) {
			if (!currElem.length || currType == "select-one") {				
				var label = document.getElementById(labelId);
				label.className = label.className.replace(/[\s]*required[\s]*/, '');				
			} else {
				for (var j=0; j<currElem.length; j++) currElem[j].style.backgroundColor = color;
			}
		}
	}	
}

function FindItForMeForm() {
	this._FindItForMeForm();
	this.exteriorGallery = new Cobalt.photoGallery(this.ELEMENTS.RAW_EXT_COLORS);
	this.interiorGallery = new Cobalt.photoGallery(this.ELEMENTS.RAW_INT_COLORS);
	this.viewOtherModels = new ViewOtherModels();
}
FindItForMeForm.prototype = {
	
	ELEMENTS: {
		ERROR_MESSAGE:			jQuery("#frmErrorMsg"),
		FORM: 					jQuery("#frmFindItForMe"),
		SUBMIT:					jQuery("button.submit"),
		FORM_FIELDSET: 			jQuery("#frmFindItForMe fieldset"),
		MODEL_INFO: 			jQuery("#moreInfo span.info"),
		RAW_EXT_COLORS: 		jQuery("#exteriorColors ul"),
		RAW_FEATURES: 			jQuery(".featureRow .feature input"),
		RAW_INT_COLORS: 		jQuery("#interiorColors ul"),
		RAW_TRIMS: 				jQuery("#trims input"),
		SCRUBBED_EXT_COLORS: 	jQuery('<input type="hidden" id="selectedExtColors" name="selectedExtColors"/>'),
		SCRUBBED_FEATURES: 		jQuery('<input type="hidden" id="selectedFeatures" name="selectedFeatures"/>'),
		SCRUBBED_INT_COLORS: 	jQuery('<input type="hidden" id="selectedIntColors" name="selectedIntColors"/>'),
		SCRUBBED_TRIMS: 		jQuery('<input type="hidden" id="selectedTrims" name="selectedTrims"/>'),
		TRIMS: 					jQuery(".trim label")
	},
	
	_FindItForMeForm: function() {
		
		var my = this;
		
		this.initForm();
		
		this.ELEMENTS.SUBMIT.bind("click", function(e) { my.ELEMENTS.FORM.submit(); });
		this.ELEMENTS.FORM.bind("submit", function(e) { return my.formIsValid(e.target); } );
		
		this.ELEMENTS.TRIMS.tooltip({
			top: -34, left: 45, showURL: false,
			delay: 100, track: true,
			extraClass: "trims",
			bodyHandler: function() { return my.fmtTooltipContents(jQuery(this).siblings(".deets").html()); }
		});
		
		this.ELEMENTS.MODEL_INFO.tooltip({
			top: -34, left: 45, showURL: false,
			opacity: .95, delay: 100, track: true,
			extraClass: "info",
			bodyHandler: function() { return my.fmtTooltipContents(jQuery(this).siblings(".deets").html()); }
		}).click( function() { return false });
		
		
	},
	
	initForm: function() {
		var fieldset = "#" + this.ELEMENTS.FORM.attr("id") + " fieldset";
		this.ELEMENTS.SCRUBBED_TRIMS.appendTo(fieldset);
		this.ELEMENTS.SCRUBBED_FEATURES.appendTo(fieldset);
		this.ELEMENTS.SCRUBBED_EXT_COLORS.appendTo(fieldset);
		this.ELEMENTS.SCRUBBED_INT_COLORS.appendTo(fieldset);
	},
	
	formIsValid: function(form) {
		
		var my = this;
		this.ELEMENTS.SCRUBBED_TRIMS.val(my.getSelectedCheckboxes(my.ELEMENTS.RAW_TRIMS));
		this.ELEMENTS.SCRUBBED_FEATURES.val(my.getSelectedCheckboxes(my.ELEMENTS.RAW_FEATURES));
		this.ELEMENTS.SCRUBBED_EXT_COLORS.val(my.getSelectedColors(my.exteriorGallery));
		this.ELEMENTS.SCRUBBED_INT_COLORS.val(my.getSelectedColors(my.interiorGallery));
		
		FormUtility.resetErrors([], "label");
				
		try {
			var missingFields = FormUtility.getMissingRequired(form);
			if (missingFields.length) throw new MissingRequiredError(missingFields, this.ELEMENTS.ERROR_MESSAGE.attr("id"), "label");				
			var badFields = FormUtility.getBadlyFormatted(form);
			if (badFields.length) throw new BadFormatError(badFields, this.ELEMENTS.ERROR_MESSAGE.attr("id"), "label");
		}
		catch(err) {
			this.ELEMENTS.ERROR_MESSAGE.show();
			handleException(err);
			return false;
		}
		return true;
	},
	
	getSelectedCheckboxes: function(element) {
		var data = [];
		element.each( function() { if (this.checked == true) data.push(this.value); });
		return data.toString();
	},
	
	getSelectedColors: function(gallery) {
		var data = [];
		var swatches = gallery.getSelectedSwatches();
		for (i = 0; i < swatches.length; i++) {
			data.push(swatches[i].title);
		}
		return data.toString();
	},
	
	fmtTooltipContents: function(body) {
		var html = '<div class="tooltip-header">';
		html += '<span class="tooltip-header-left"></span><span class="tooltip-header-right"></span>';
		html += '</div>';
		html += '<div class="tooltip-body">';
		html += '<div class="tooltip-body-content">';
		html += body;
		html += '</div>';
		html += '</div>';
		html += '<div class="tooltip-footer">';
		html += '<span class="tooltip-footer-left"></span><span class="tooltip-footer-right"></span>	';					
		html += '</div>';
		html += '<span class="tooltip-arrow tooltip-arrow-left"></span>';
		return html;
	}
	
};

function ViewOtherModels() {	
    this._ViewOtherModels();
}
ViewOtherModels.prototype = {
    // properties
    view_link: jQuery([]),
    view_span: jQuery([]),
    view_menu: jQuery([]),
    view_list: jQuery([]),
    view_ifrm: jQuery([]),
    // methods
    _ViewOtherModels: function() {
        this.view_link = jQuery("#viewOtherModels");
        this.view_span = this.view_link.find('>span.viewOtherModels');
        this.view_menu = jQuery("#otherModels").css('visibility', 'hidden').css('display', 'block');
        this.view_list = this.view_menu.find('>ul');
        this.view_ifrm = this.view_menu.find('>iframe');
        
        this.defineUIBehavior();
        this.setPosition();
    }, 	
    defineUIBehavior: function() {
        var self = this;

        this.view_ifrm.height(this.view_list.height());
        this.view_list.css('position', 'relative');

        this.view_menu.hide().bind('mouseenter', function () {
            self.showOtherModels();
        }).css('background-color', '#fff');
        
        this.view_link.bind("mouseleave", function () {
            self.removeOtherModels();
        }).find('>span.viewOtherModels').bind('click', function () {
            self.showOtherModels();
        });
    },	
    setPosition: function () {
        var xPos = this.view_span.position().left + this.view_span.outerWidth(),
            yPos = this.view_span.position().top;

        this.view_menu.css("left", xPos + "px").css("top", yPos + "px");
    },
    showOtherModels: function () {
        this.view_menu.stop(true, true).css('visibility', 'visible').show().fadeIn('fast');
    },	
    removeOtherModels: function () {
        this.view_menu.stop(true, true).fadeOut(600);
    }	
}; // end ViewOtherModels
