/**************** Util *******************/
var Util = new Object();
Util.eyelevel = function(element){
	showElement(element);
	var windim = getViewportDimensions();
    var winpos = getViewportPosition();
	var edim = getElementDimensions(element);
	var ex = ( windim.w  - edim.w  ) / 2;
    var ey = ( windim.h - edim.h ) / 3 + winpos.y;

    ex = ( ex < 0 ) ? 0 : ex;
    ey = ( ey < 0 ) ? 0 : ey;

    var elemcoord = new Coordinates(ex, ey);
	setElementPosition(element, elemcoord);
	
}
/*********************** Notificatoins **********************/
var Notification = function(msg) {
	this.detail = "";
	if(arguments.length>1){
		this.detail = arguments[1];
	}
	this.msg = msg;
	this.whole_msg = "<p>" + this.msg + "</p><div>" + this.detail + "</div>";
	this.id = "notification_" + Math.random();
	this.historyid = "notification_history";
	var elem = DIV({"id":this.id, "class":"notification"});
	appendChildNodes(document.body, elem);
	this.movesig = null;
}


Notification.prototype.notify = function(){
	var elem = $(this.id);
	elem.innerHTML =  this.whole_msg;
	Util.eyelevel(elem);
	//roundClass("div", "notification", {corners:'all', bgColor:'white'});
	this.movesig = connect(document, 'onmousemove', this, "close");
}
Notification.prototype.notifyDetail = function() {
	if($(this.historyid)){
		showElement(this.historyid);
		$(this.historyid).innerHTML = this.whole_msg;
		//window.location = "#navigation_history_anchor";
		//ScrollTo("navigation_history_anchor");
	}
}
Notification.prototype.close = function(event){
	disconnect(this.movesig);
	var id = this.id;
	var historyid = this.historyid;
	var detail = this.detail;
	var whole_msg = this.whole_msg;
	fade( this.id, {afterFinish: function(){
		//log("notificatoin id 1:", id);
		removeElement(id);
		if(detail){
			if($(historyid)){
				showElement(historyid);
				$(historyid).innerHTML = whole_msg;
				//window.location = "#navigation_history_anchor";
				//ScrollTo("navigation_history_anchor");
			}
		}
	}});
	//log("notificatoin id 1:", this.id);
	
}

function notify(msg) {
	var n = new Notification(msg);
	n.notify();
}
function notifyDetail(msg, detail){
	var n = new Notification(msg, detail);
	//n.notifyDetail();
	n.notify();
}
/*********************** Array *********************/
Array.prototype.remove = function(val){
	var idx = findValue(this, val);
	if (idx != -1) {
		this.splice(idx, 1);
	}
}
Array.prototype.addUnique = function(val){
	var idx = findValue(this, val);
	if(idx == -1){
		this.push(val);
	}
}
/******************** FormUtil **********************/
var FormUtil = new Object();
FormUtil.reqSurveyFields = ["email"];
FormUtil.reqInfoFields = ["email"];
FormUtil.reqPhyFields = ["name", "aop", "phone", "email", "zip"];
FormUtil.reqPartnerFields = ["name", "title", "company", "phone", "email", "zip"];
FormUtil.friendlyMessage = {"name":"Please enter your Name",
							"email":"Please enter your E-mail",
							"zip":"Please enter your Zip code",
							"aop":"Please enter your area of practice",
							"title":"Please enter your job title",
							"company":"Please enter the name of your company",
							"phone":"Please enter your phone number"};



FormUtil.updateReqSurveyFields = function(event){
	var elem = event.target();
	if (elem.id == "survey_anon") {
		if (FormUtil.isSelected(elem)) {
			FormUtil.reqSurveyFields.remove("email");
		}
		else {
			FormUtil.reqSurveyFields.addUnique("email");
			
		}
	}
	else {
		if (FormUtil.isSelected(elem)) {
			FormUtil.reqSurveyFields.addUnique("email");
		}
		else {
			FormUtil.reqSurveyFields.remove("email");
		}
	}
}

FormUtil.isSelected = function(elemid) {
	var elem = $(elemid);
	var result = false;
	if(elem){
		if(elem.tagName == "INPUT"){
			var type = elem.type;
			switch(type) {
				case "radio":
							result = elem.checked;
							break;
				case "checkbox":
							result = elem.checked;
							break;
				case "text":
							//result = !FormUtil.isEmpty(elem.value);
							result = true;
							break;
				
			}
		}
		else if(elem.tagName == "TEXTAREA"){
			result = !FormUtil.isEmpty(elem.value);
		}
	}
	return result;
}

FormUtil.toggleElem = function(elemid, flag){
	var elem = $(elemid);
	if(elem){
		if(elem.tagName == "INPUT"){
			var type = elem.type;
			switch(type) {
				case "radio":
							elem.checked = flag;
							break;
				case "checkbox":
							elem.checked = flag;
							break;
				case "text":
							if(flag) elem.select();
							else elem.value = "";
							break;	
								
			}
		}
	}
	return flag;
}

FormUtil.toggleParent = function(childid, parentid){
	return FormUtil.toggleElem(parentid, FormUtil.isSelected(childid));
}

FormUtil.getValue = function(elemid){
	var elem = $(elemid);
	var result = null;
	if (elem) {
		if (elem.tagName == "INPUT") {
			if (elem.type == "text") {
				result = elem.value;
			}
		}
		else if(elem.tagName == "TEXTAREA"){
			result = elem.value;
		}
	}
	return result;
}
FormUtil.getFormValue = function(formelem){
	var result = null;
	if (formelem) {
		var multi = isArrayLike(formelem);
		if (multi) {
			result = new Array();
			for (var i = 0; i < formelem.length; i++) {
				var e = formelem[i];
				result.push(FormUtil.getFormValue(e));
			}
			
		}
		else {
			var type = formelem.type;
			switch (type) {
				case "text":
					result = formelem.value;
					break;
				case "textarea":
					result = formelem.value;
					break;
					
				case "checkbox":
					result = formelem.checked;
					break;
				case "radio":
					result = formelem.checked;
					break;
			}
		}
	}
	return result;
}
FormUtil.isEmpty = function(val) {
	var val = strip(val);
	return (val == null || val == '' || val == undefined);
}
FormUtil.isArrayEmpty = function(arr){
	if (isEmpty(arr)) {
		return true;
	}
	else {
		var sum =0;
		for (var j = 0; j < arr.length; j++) {
			var v = arr[j];
			if (!v) 
				sum++;
		}
		return sum == arr.length;
		
	}
}
FormUtil.isEmail = function(val){
	var pattern = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
	var val = strip(val);
	if(!FormUtil.isEmpty(val)){
		var match = val.match(pattern);
		return match != null;
	}
	return false;
}

FormUtil.checkRequired = function(formid, reqfields){
	//log(formid);
	var form = $(formid);
	
	var missing = new Array();
	for(var i=0;i<reqfields.length;i++){
		var fieldname = reqfields[i];
		var field = form.elements[fieldname];
		////log(fieldname);
		var val = FormUtil.getFormValue(field)
		//log(fieldname, val);
		if (isArrayLike(val) && FormUtil.isArrayEmpty(val)) {
			missing.push(FormUtil.friendlyMessage[fieldname]);
		}
		else if (FormUtil.isEmpty(val)) {
			missing.push(FormUtil.friendlyMessage[fieldname]);
		}
		else if(fieldname == "email" && !FormUtil.isEmail(val)){
			missing.push("Please enter a valid e-mail address");
		}
	}
	if(missing.length>0){
		callLater( .05, notifyDetail, "Some required information is missing", missing.join("<br/>"));
		return false;
	}
	return true;
}


/************************ rules ************************/
var Rules = new Object();

Rules.checkEmail = function(event) {
	var val = FormUtil.getValue(event.target());
	if(!FormUtil.isEmail(val)){
		notify("Invalid e-mail");
	}
}

Rules.toggleParents = function(event){
	var childelem = event.target();
	var parentids = getNodeAttribute(childelem, "parentids").split(";");
	forEach(parentids, function(parentid){
		FormUtil.toggleParent(childelem.id, parentid);	
	});
}

Rules.toggleChildren = function(event){
	var parentelem = event.target();
	var childid = getNodeAttribute(parentelem, "childid");
	var children = getElementsByTagAndClassName("input", null, $(childid));
	
	forEach(children, function(child){
		var selected = FormUtil.isSelected(parentelem.id);
		if(selected) FormUtil.toggleElem(child.id, false);
	});
}
Rules.toggleChildren2 = function(event){
	var parentelem = event.target();
	var childid = getNodeAttribute(parentelem, "childid");
	var children = getElementsByTagAndClassName("input", null, $(childid));
	
	forEach(children, function(child){
		var selected = !FormUtil.isSelected(parentelem.id);
		if(selected) FormUtil.toggleElem(child.id, false);
	});
}
Rules.toggleParentsForChildren = function(event) {
	var srcelem = event.src();
	
	var childelems = getElementsByTagAndClassName("input", null, srcelem);
	var parentid = getNodeAttribute(srcelem, "parentid");
	//log(srcelem.id, childelems.length, parentid);
	var selected = false;
	for(var i=0;i<childelems.length;i++){
		var childelem = childelems[i];
		if(FormUtil.isSelected(childelem.id)){
			selected = true;
			FormUtil.toggleElem(parentid, selected);
			break;
		}
	}
	//log(selected);
	//FormUtil.toggleElem(parentid, selected);
	//event.preventDefault();
}

Rules.clearBetaFlag = function(event){
	var emailelem = event.target();
	var val = strip(FormUtil.getValue(emailelem.id));
	if(FormUtil.isEmpty(val)){
		FormUtil.toggleElem("beta", false);
	}
}
function onLoad() {
	if ($("survey_form")) {
		//connect("email", "onblur", Rules.checkEmail);
		connect("otherolhealth", "onkeyup", Rules.toggleParents)
		connect("q8_subq", "onclick", Rules.toggleParentsForChildren);
		connect("q10_subq", "onclick", Rules.toggleParentsForChildren);
		connect("ga_yes", "onclick", Rules.toggleChildren);
		connect("q7_subq", "onclick", Rules.toggleParentsForChildren);
		connect("q9a_subq", "onclick", Rules.toggleParentsForChildren);
		connect("otherdiet", "onkeyup", Rules.toggleParents)
		connect("q9_subq", "onclick", Rules.toggleParentsForChildren);
		// connect("q11_subq", "onclick", Rules.toggleParentsForChildren);
		connect("mdhsvc_comment", "onkeyup", Rules.toggleParents);
		//connect("mdhsvc_yes", "onclick", Rules.toggleChildren);
		//connect("mdhsvc_comment", "onkeyup", Rules.toggleChildren);
		// connect("othernouse", "onkeyup", Rules.toggleParents);
		connect("q1_subq", "onclick", Rules.toggleParentsForChildren);
		connect("checkup_yes", "onclick", Rules.toggleChildren);
		connect("q8_3", "onclick", Rules.toggleChildren2);
		connect("q9a_1", "onclick", Rules.toggleChildren);
		connect("q9a_2", "onclick", Rules.toggleChildren);
		connect("q9a_3", "onclick", Rules.toggleChildren);
		//connect("q11_5", "onclick", Rules.toggleChildren2);
		//connect("enterme2win", "onclick", FormUtil.updateReqSurveyFields);
		connect("qsig_7", "onclick", Rules.toggleChildren2);
		connect("othersig", "onkeyup", Rules.toggleParents);
		connect("survey_anon", "onclick", Rules.toggleChildren);
		connect("email", "onkeyup", Rules.toggleParents);
		connect("email", "onkeyup", Rules.clearBetaFlag);
		connect("email", "onkeyup", FormUtil.updateReqSurveyFields);
		connect("beta", "onclick", Rules.toggleParents);
		connect("beta", "onclick", FormUtil.updateReqSurveyFields);
		connect("survey_email", "onclick", FormUtil.updateReqSurveyFields);
		connect("survey_anon", "onclick", FormUtil.updateReqSurveyFields);
		if (FormUtil.isSelected("survey_anon")) FormUtil.reqSurveyFields.remove("email");
		else FormUtil.reqSurveyFields.addUnique("email");
		
	
	}
}
addLoadEvent(onLoad);
/** Swap images **/
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
