if (typeof EFX001 == 'undefined') {
    var EFX001 = {};
}
EFX001.namespace = function(){
    var a = arguments;
    var names, obj, i, n;
    for (i = 0; i < arguments.length; ++i) {
        names = arguments[i].split(".");
        obj = EFX001;

        for (n = (names[0] == 'EFX001') ? 1 : 0; n < names.length; ++n) {
            obj[names[n]] = obj[names[n]] || {};
            obj = obj[names[n]];
        }
    }
    return obj;
}
EFX001.namespace('ajax');
EFX001.ajax = {
	getHTTPObject : function() {
		var xhr = false;
		if (window.XMLHttpRequest) {
			xhr = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject('Msxml2.XMLHTTP');
			}
			catch(e) {
				try {
					xhr = new ActiveXObject('Microsoft.XMLHTTP');
				}
				catch(e) {
					xhr = false;
				}
			}
		}
		return xhr;
	},
	grabFile : function(file,nspace) {
		var request = EFX001.ajax.getHTTPObject();
		if (request) {
			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					if (request.status == 200 || request.status == 304) {
						switch (nspace) {
							case 'profile' : EFX001.profile.displayResponse(request);
						}
					}
				}
			};
			request.open("GET", file, true);
			request.send(null);
		}
	},
	grabValidateFile : function(file,field,nspace) {
		var request = EFX001.ajax.getHTTPObject();
		if (request) {
			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					if (request.status == 200 || request.status == 304) {
						switch (nspace) {
							case 'clientLogin' : EFX001.clientLogin.displayResponse(request,document.getElementById(field).parentNode.parentNode);
							case 'contact' : EFX001.contact.displayResponse(request,document.getElementById(field).parentNode.parentNode);
						}
					}
				}
			};
			request.open("GET", file, true);
			request.send(null);
		}
	}
};
EFX001.namespace('utilities');
EFX001.utilities = {
	/* get the firstChild object with a node type of element - api to fix difference between IE and FF */
	getFirstChild : function(parentId, level) {
		switch (level) {
			case 2 : return (document.getElementById(parentId).firstChild.nodeType==1) ? document.getElementById(parentId).firstChild.firstChild : document.getElementById(parentId).childNodes[1].childNodes[1]; break;
			case 3 : return (document.getElementById(parentId).firstChild.nodeType==1) ? document.getElementById(parentId).firstChild.firstChild.firstChild : document.getElementById(parentId).childNodes[1].childNodes[1].childNodes[1]; break;
			case 4 : return (document.getElementById(parentId).firstChild.nodeType==1) ? document.getElementById(parentId).firstChild.firstChild.firstChild.firstChild : document.getElementById(parentId).childNodes[1].childNodes[1].childNodes[1].childNodes[1]; break;
			case 5 : return (document.getElementById(parentId).firstChild.nodeType==1) ? document.getElementById(parentId).firstChild.firstChild .firstChild.firstChild.firstChild: document.getElementById(parentId).childNodes[1].childNodes[1].childNodes[1].childNodes[1].childNodes[1]; break;
			default : return (document.getElementById(parentId).firstChild.nodeType==1) ? document.getElementById(parentId).firstChild : document.getElementById(parentId).childNodes[1]; break;
		}
	},
	/* get the nextSibling object with a node type of element - api to fix difference between IE and FF */
	getNextSibling : function(obj) {
		return (obj.nextSibling.nodeType==1) ? obj.nextSibling : obj.nextSibling.nextSibling;
	},
	/* swap field with default value */
	swapFieldValue : function(e,helperText,fieldId) {
		if (e.type=='blur') {
			if (document.getElementById(fieldId).value=='') {
				document.getElementById(fieldId).value=helperText;
				YAHOO.util.Dom.addClass(fieldId, 'helperText');
			}
		} else {
			if (document.getElementById(fieldId).value==helperText) {
				document.getElementById(fieldId).value='';
				YAHOO.util.Dom.removeClass(fieldId, 'helperText');
			}
		}
	},
	/* disable form button */
	disableButton : function() {
		YAHOO.util.Dom.addClass(this, 'disabled');
	},
	/* remove all helper text */
	removeHelperText : function() {
		for (var i=0; i<YAHOO.util.Dom.getElementsByClassName('helperText').length; i++) {
			YAHOO.util.Dom.getElementsByClassName('helperText')[i].value='';
			YAHOO.util.Dom.removeClass(YAHOO.util.Dom.getElementsByClassName('helperText')[i], 'helperText');
		}
	},
	/* add event for validation */
	validateForm : function(formId,nspace) {
		var formObj = document.getElementById(formId);
		for (var ii=0; ii<formObj.getElementsByTagName('input').length; ii++) {
			if (document.getElementsByTagName('input')[ii].type=='text' || document.getElementsByTagName('input')[ii].type=='password') {
				YAHOO.util.Event.addListener(formObj.getElementsByTagName('input')[ii].id, 'blur', function() {
					EFX001.ajax.grabValidateFile('/validate/?cmd=validate&field='+this.id+'&fieldValue='+this.value, this.id, nspace);
				});
			}
		}
		for (var iii=0; iii<formObj.getElementsByTagName('textarea').length; iii++) {
			YAHOO.util.Event.addListener(formObj.getElementsByTagName('textarea')[iii].id, 'blur', function() {
				EFX001.ajax.grabValidateFile('/validate/?cmd=validate&field='+this.id+'&fieldValue='+this.value, this.id, nspace);
			});
		}
	},
	displayTooltip : function(objId,state) {
		if (state == 1) {
			YAHOO.util.Dom.removeClass(objId, 'footnote');
			var xy = YAHOO.util.Dom.getXY(objId);
			xy[0] = xy[0]-100;
			xy[1] = xy[1]-130;
			YAHOO.util.Dom.addClass(objId, 'tooltipDisplay');
			YAHOO.util.Dom.setXY(objId, xy); 
		} else {
			YAHOO.util.Dom.addClass(objId, 'footnote');
			YAHOO.util.Dom.removeClass(objId, 'tooltipDisplay');
		}
	},
	addTextareaCounter : function() {
		var parentObj = this.id + 'Counter';
		document.getElementById(parentObj).replaceChild(document.createTextNode((3000-this.value.length) + ' characters remaining'), document.getElementById(parentObj).childNodes[0]);
	}
};
EFX001.namespace('init');
EFX001.init = {
	objId : ['clientLogin','contact'],
	init : function() {
		for (var i=0; i<this.objId.length; i++) {
			if (document.getElementById(this.objId[i])) {
				switch (this.objId[i]) {
					case 'clientLogin' : YAHOO.util.Event.onContentReady(this.objId[i], EFX001.clientLogin.init, EFX001.clientLogin, true); break;
					case 'contact' : YAHOO.util.Event.onContentReady(this.objId[i], EFX001.contact.init, EFX001.contact, true); break;
				}
			}
		}
		/* add focus to all form field */
		for (var ii=0; ii<document.getElementsByTagName('input').length; ii++) {
			if (document.getElementsByTagName('input')[ii].type=='text' || document.getElementsByTagName('input')[ii].type=='password') {
				YAHOO.util.Event.addListener(document.getElementsByTagName('input')[ii], 'focus', function() {
					YAHOO.util.Dom.addClass(this.parentNode.parentNode, 'focus');
				});
				YAHOO.util.Event.addListener(document.getElementsByTagName('input')[ii], 'blur', function() {
					YAHOO.util.Dom.removeClass(this.parentNode.parentNode, 'focus');
				});
			}
		}
		for (var iii=0; iii<document.getElementsByTagName('textarea').length; iii++) {
			YAHOO.util.Event.addListener(document.getElementsByTagName('textarea')[iii], 'focus', function() {
				YAHOO.util.Dom.addClass(this.parentNode.parentNode, 'focus');
			});
			YAHOO.util.Event.addListener(document.getElementsByTagName('textarea')[iii], 'blur', function() {
				YAHOO.util.Dom.removeClass(this.parentNode.parentNode, 'focus');
			});
		}
		this.initTooltip();
	},
	initTooltip : function() {
		for (var iiii=0; iiii<YAHOO.util.Dom.getElementsByClassName('tooltip', 'a').length ; iiii++) {
			YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('tooltip', 'a')[iiii], 'mouseover', function() {
				var objId = this.href.split("#");
				EFX001.utilities.displayTooltip(objId[1],1);
			});
			YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('tooltip', 'a')[iiii], 'mouseout', function() {
				var objId = this.href.split("#");
				EFX001.utilities.displayTooltip(objId[1],0);
			});
			YAHOO.util.Event.addListener(YAHOO.util.Dom.getElementsByClassName('tooltip', 'a')[iiii], 'click', function(e) {
				YAHOO.util.Event.preventDefault(e);
			});
		}
	}
};
EFX001.namespace('clientLogin');
EFX001.clientLogin = {
	init : function() {
		/* add event to disable button when clicked */
		YAHOO.util.Event.addListener('login', 'click', EFX001.utilities.disableButton);
		EFX001.utilities.validateForm('clientLogin','clientLogin');
	},
	displayResponse : function(data,field) {
		if (data.responseText.replace(/\s/g, '') == '') {
			YAHOO.util.Dom.removeClass(field, 'error');
		} else {
			YAHOO.util.Dom.addClass(field, data.responseText.replace(/\s/g, ''));
		}
	}
};
EFX001.namespace('contact');
EFX001.contact = {
	init : function() {
		/* add event to disable button when clicked */
		var messageCounter = document.createElement('span');
		messageCounter.id = 'messageCounter';
		messageCounter.appendChild(document.createTextNode((3000-document.getElementById('message').value.length) + ' characters remaining'));
		document.getElementById('message').parentNode.appendChild(messageCounter);
		YAHOO.util.Event.addListener('message', 'keyup', EFX001.utilities.addTextareaCounter);
		YAHOO.util.Event.addListener('submit', 'click', EFX001.utilities.disableButton);
		EFX001.utilities.validateForm('contact','contact');
	},
	displayResponse : function(data,field) {
		if (data.responseText.replace(/\s/g, '') == '') {
			YAHOO.util.Dom.removeClass(field, 'error');
		} else {
			YAHOO.util.Dom.addClass(field, data.responseText.replace(/\s/g, ''));
		}
	}
};
YAHOO.util.Event.onDOMReady(EFX001.init.init, EFX001.init, true);
