YAHOO.namespace('istore.page');

YAHOO.istore.page.Contacts = function() {
	
	var subjectInp, isIdInp, isIdRow;
	
	var params = {
		'feedback_subject': {
			title: 'Subject',
			name: 'feedback_subject',
			type: 'string',
			validator: YAHOO.istore.utils.Validator.isString,
			required: false
		},
		'feedback_name': {
			title: 'Your Name',
			name: 'feedback_name',
			type: 'string',
			validator: YAHOO.istore.utils.Validator.isString,
			required: true
		},
		'feedback_email': {
			title: 'Email Address',
			name: 'feedback_email',
			type: 'string',
			validator: YAHOO.istore.utils.Validator.isEmail,
			required: true
		},
		'feedback_interstoreid': {
			title: 'Product InterStore #',
			name: 'feedback_interstoreid',
			type: 'string',
			validator: YAHOO.istore.utils.Validator.isInterstoreId,
			required: false
		},
		'feedback_comment': {
			title: 'Question or Comments',
			name: 'feedback_comment',
			type: 'string',
			validator: YAHOO.istore.utils.Validator.isString,
			required: true
		}
	};
	
	
	var onSubmitHandler = function () {
		if (validateForm()) {
			YAHOO.util.Dom.addClass(this.parentNode.parentNode.parentNode.parentNode, 'disabled');
			this.disabled = true;
			YAHOO.util.Dom.get('feedback-form').submit();
			
			// custom validataion
			
		} else {
			return false;
		}
	}
	
	var onSubjectChange = function () {
		if (this.options[this.selectedIndex].title == 'product_question') {
			showIsIdField();
		} else {
			hideIsIdFeild();
		}
	}
	
	
	var hideIsIdFeild = function () {
		YAHOO.util.Dom.removeClass(isIdRow, 'visible');
		isIdInp.value = '';
	}
	
	var showIsIdField = function () {
		YAHOO.util.Dom.addClass(isIdRow, 'visible');
	}
	
	var showMessage = function (subject, type, context) {
		YAHOO.istore.app.Msg.prototype.hideAll(true);
		
		var msg;
		var msgName = 'feedback-err-' + YAHOO.extension.funclib.JSHash(subject);
		
		if (!(msg = YAHOO.istore.app.Msg.prototype.messages[msgName])) {
			msg = new YAHOO.istore.app.Msg(
				subject,
				{
					name: msgName,
					type: type,
					context: context,
					autohideLimit: 2
				}
			);
		}
		
		msg.show();
		
	}
	
	
	var validateForm = function () {
		
		for (name in params) {
			
			var param = params[name];
			var paramEl = document.getElementsByName(name)[0];
			
			if (param.required && YAHOO.lang.trim(paramEl.value) == '') {
				showMessage(param.title + ' is required', 'err', paramEl);
				return false;
			}
			
			if (YAHOO.lang.trim(paramEl.value) != '' && !param.validator(paramEl.value)) {
				showMessage(param.title + ' is invalid', 'err', paramEl);
				return false;
			}
			
			// custom validation
			switch (name) {
				case 'feedback_interstoreid':
					
					// if subject is product question
					if (subjectInp.options[subjectInp.selectedIndex].title == 'product_question') {
						// validate product interstore #
						if (!param.validator(isIdInp.value)) {
							showMessage(param.title + ' is required', 'err', paramEl);
							return false;
						}
					}
					
				break;
			}
			
		}
		
		return true;
	}
	
	
	var loadHandler = function () {
		YAHOO.istore.page.Contacts.init();
	}
	
	
	YAHOO.util.Event.onContentReady('feedback-form', loadHandler);
	
	
	/* public methods */
	return {
		
		init : function() {
			
			// subject combobox field
			subjectInp = document.getElementsByName('feedback_subject')[0];
			
			// interstore# input field && row
			isIdInp = document.getElementsByName('feedback_interstoreid')[0];
			isIdRow = document.getElementById('feedback_interstoreid_row');
			
			YAHOO.util.Event.addListener('feedback-btn-submit', 'click', onSubmitHandler);
			YAHOO.util.Event.addListener('feedback-form', 'submit', onSubmitHandler);
			YAHOO.util.Event.addListener(subjectInp, 'change', onSubjectChange);
			
		}
		
	};
	
}();

