/**
 *
 */
dojo.require('dojo.NodeList-manipulate');
dojo.require('dojo.NodeList-traverse');
dojo.require('dojo.behavior');
dojo.require('dijit.layout.ContentPane');
dojo.require('dojox.widget.AutoRotator');
dojo.require('dojox.widget.rotator.Pan');
dojo.require('dojox.widget.rotator.Controller');
dojo.require('dojo.fx.easing');
dojo.require('dijit.form.ComboBox');
dojo.require("dijit.Dialog");
dojo.require('dijit.form.DateTextBox');
dojo.require('dojo.data.ItemFileReadStore');
//dojo.require('dojox.grid.EnhancedGrid');
//dojo.require('dojox.grid.enhanced.plugins.IndirectSelection');



/* Extending dojo.connect to remove attaching event when null is passed */
dojo._extconnect = dojo.connect;

dojo.connect = function (source, event, object, method, once) {
	if (source !== null) {
		dojo._extconnect.apply(dojo, arguments);
	}
}

/* Other funnctions goes here */
var count = 1;

var loadCss = function (cssfile) {
	var newCss = dojo.create("link", { "rel" : "stylesheet"});
	dojo.attr(newCss, "href", cssfile);
	dojo.place(newCss, dojo.query('head')[0], "last");
}

var createDateTextBox = function (id, name) {
	var dob = new dijit.form.DateTextBox({
		id : id,
		name : name,
	}, id);
}

var cloneAddMember = function (boneNode) {
	if (boneNode === null) {
		return
	}
	var newNode = dojo.clone(boneNode);
	var nodeId = 'family-member-' + count;
	var dobId = 'dob-' + count;

	// add and set attributes
	newNode.attr('id', nodeId);
	dojo.query('#family-members-wrapper').append(newNode);

	dojo.query('#' + nodeId + ' > .remove-member').style('display', 'block');
	dojo.query('#' + nodeId + ' #dob').attr('id', dobId);

	// create datetextbox
	createDateTextBox(dobId, 'dob[]');

	// apply the newly added behavior
	dojo.behavior.apply();
	count++;
}

var cloneFields = function (clone) {
	var cloneItem = dojo.clone(clone);
	var nodeId = 'family-member-elements-' + count;
	var dobId = 'family_dob' + count;

	var newlname = 'family_lastname['+count+']';
	//dojo.query(cloneItem).addClass("cloned-fields");
	cloneItem.attr('id', nodeId);
	dojo.query("#family-member-wrapper").append(cloneItem);
	dojo.query('#'+ nodeId + ' #remove-members').style('display', 'block');

	cloneItem.children().children().forEach(function (element, index){
		if(element.getAttribute("name") == null){

		}
		else{
			split = element.getAttribute("name").split('_');
			split[1] = element.getAttribute("id").split('_')[1] +"["+ count +"]";
			console.log(element.getAttribute("name", split.join('_')));
			//dojo.query('#' + nodeId + ' #family_firstname').attr('name', split.join('_'));
		}
	});

	a = dojo.query('#' + nodeId + ' #family_dob').attr('id', dobId);
	a.attr('name')[0].split('_')[1] = 'dob['+count+']';
	//dojo.query('#' + nodeId + dobId).attr('name', 'family_dob['+count+']');
	b = dojo.query('#' + nodeId + ' #family_lastname').attr('name')[0].split('_');
	b[1] = 'lastname['+count+']';
	//console.log(b);
	c = b.join('_');
//	console.log(c);
	dojo.query('#' + nodeId + ' #family_lastname').attr('name',c);
	dojo.query('#' + nodeId + ' #family_firstname').attr('name', 'family_firstname['+count+']');
	dojo.query('#' + nodeId + ' #family_socialsecurity').attr('name', 'family_socialsecurity['+count+']');
	//dojo.query(cloneItem).insertBefore(insertAbove);
	// create datetextbox
	createDateTextBox(dobId, 'family_dob[]');

	// apply the newly added behavior
	dojo.behavior.apply();
	count++;
}

var cloneAddFee = function (boneNode) {
	if (boneNode === null) {
		return
	}
	var newNode = dojo.clone(boneNode);
	var nodeId = 'new-fee-' + count;

	// add and set attributes
	newNode.attr('id', nodeId);
	dojo.query('#new-fee').append(newNode);

	dojo.query('#' + nodeId + ' > .remove-fee').style('display', 'block');

	// apply the newly added behavior
	dojo.behavior.apply();
	count++;
}

var updateUserList = function (url, content, target) {
	dojo.xhrGet({
		url : url,
		//form : dojo.byId(form_id),
		content: content,
		load : function (data) {
		dojo.query(target).empty().addContent(data);
		dojo.behavior.apply();
	}
	});
}

var calcUpdate = function (content) {
	dojo.xhrGet({
		url: APP_BASEPATH +'/pages/calculate',
		handleAs: 'json',
		content: content,
		load: function (data) {
		//dojo.byId('monthly').innerHTML = data.monthly;
		//dojo.byId('membership-yearly').innerHTML = data.membershipyearly;
		dojo.byId('yearly').innerHTML = data.yearly;
	},
	error: function (error) {

	}
	});
}

var getAdminObject = function () {
	return dojo.mixin(getPracticeObject(), {
		"practice": dojo.byId("practice").value
	});
}

var getPracticeObject = function () {
	var start
	var end
	if(String(dijit.byId("end").value) == 'Invalid Date'){
		start = '';
	}else{
		start = dijit.byId("start").value;
	}
	if(String(dijit.byId("end").value) == 'Invalid Date'){
		end = '';
	}else{
		end = dijit.byId("end").value ;
	}
	return {
		"status": dojo.byId("status").value,
		"start" : start,
		"end" : end,
		"userplan": dojo.byId("userplan").value
	}
}

var zipSearch = function () {

	dojo.xhrGet({
		url: APP_BASEPATH + "/user/feesbyzip",
		content: {
		"zip-code": dojo.byId("zipcode").value
	},
	handleAs: 'text',
	load: function (data) {
		dojo.query('#procedure-fee-result').empty().addContent(data);
		dojo.behavior.apply();
	},
	error: function (error) {
		// do nothing on error
		console.log('haha');
		//dojo.query('#procedure-fee-list').empty().addContent(data);
	}
	});
}

var quickSearch = {
		isFireable : false,
		isFired : false,
		oldKeywordValue : null,

		OnFocus : function (evt) {
	this.oldKeywordValue = evt.target.value;
	if (dojo.trim(this.oldKeywordValue) === 'Start Typing Name') {
		evt.target.value = '';
	}
},
OnBlur : function (evt) {
	if (dojo.trim(evt.target.value) === '') {
		evt.target.value = this.oldKeywordValue;
	}
},
OnKeyup : function (evt, url, content, target_id) {
	var self = this;
	if (self.isFireable && !self.isFired) {
		setTimeout(function () {
			updateUserList(url, content, target_id);
			self.isFired = false;
		}, 500);
	}
	self.isFired = true;
	evt.preventDefault();
},
OnKeypress : function (evt) {
	if (evt.charCode) {
		this.isFireable = true;
	}
	else if (evt.keyCode === dojo.keys.BACKSPACE) {
		if (dojo.trim(evt.target.value) !== '') {
			this.isFireable = true;
		}
		else {
			this.isFireable = false;
		}
	}
	else {
		this.isFireable = false;
	}
}
}

function checkForEnterKey(evt){
	if(evt.keyCode == dojo.keys.ENTER){
		return true;             
	}
	return false;
};

var format = function (val) {
	var val = val.replace("(","").replace(")","").replace("-","");
	val = (val.length > 3) ? "("+val.substring(0,3)+")"+val.substring(3,val.length) : val;
	val = (val.length > 7 ) ? val.substring(0,8) + "-" + val.substring(8,val.length) : val;
	return val;
}


function init() {
//	alert('dd');
	//Initializing dialog box
	var count = 1;
	var clone = dojo.query("#family-member-elements-0");
	clone = dojo.clone(clone);

	var secondDlg = new dijit.Dialog({
		title: "Programatic Dialog Creation",
		style: "width: 300px"
	});
	// create necessary bone nodes for cloning
	var boneMember = (dojo.byId('family-member') === null) ? null :
		dojo.query('#family-member').clone();
	var boneFee = (dojo.byId('new-fee') === null) ? null :
		dojo.query('#new-fee').clone();

	createDateTextBox('dob', 'dob[]');
	createDateTextBox('family_dob', 'family_dob[]');
	// create autocomplete box
	var emailStore = new dojo.data.ItemFileReadStore({
		identifier : 'email',
		url : APP_BASEPATH +'/admin/getemail'
	});
	var emailSelect = new dijit.form.ComboBox({
		id : 'quick-email',
		name : 'quick-email',
		value : '',
		store : emailStore,
		searchAttr : 'email'
	}, 'quick-email');

	// add behaviors
	dojo.behavior.add({
		"#add-member" : {
			"onclick" : function (evt) {
				cloneAddMember(boneMember);
			}
		},
		"#add-fee" : {
			"onclick" : function (evt) {
				cloneAddFee(boneFee);
			}
		},
	/*"#sign-up-popup" : {
		"onclick" : function (evt){
		dojo.query('#pop-up').style('display','block');
		evt.preventDefault();
	}
	},
	"#pop-close" : {
		"onclick" : function (evt){
		dojo.query('##pop-up').style('display','none');
		evt.preventDefault();
	}
	},*/
		"#popup-why" : {
				"onclick" : function (evt){
					dojo.query('#simple-model-dialouge').style('display','block');
					evt.preventDefault();
				}
		},
		"#why-close" : {
				"onclick" : function (evt){
					dojo.query('#simple-model-dialouge').style('display','none');
					evt.preventDefault();
				}
		},
		".remove-member" : {
				"onclick" : function (evt) {
					dojo.empty(evt.target.parentNode);
				}
		},
		".remove-fee" : {
				"onclick" : function (evt) {
					dojo.empty(evt.target.parentNode);
				}
		},
		"#individual-individual" : {
				"onclick" : function (evt) {
					if (evt.target.checked) {
						dojo.style(dojo.byId('family-members'), 'display', 'none');
					}
					else {
						dojo.style(dojo.byId('family-members'), 'display', 'block');
					}
				}
		},
		"#individual-family" : {
			"onclick" : function (evt) {
				if (evt.target.checked) {
					dojo.style(dojo.byId('family-members'), 'display', 'block');
				}
				else {
					dojo.style(dojo.byId('family-members'), 'display', 'none');
				}
			}
		},
		"#membership" : {
			"onchange" : function (evt) {
			if (dojo.trim(evt.target.value) === "Individual") {
				dojo.style(dojo.byId('family-members'), 'display', 'none');
			}
			else if (dojo.trim(evt.target.value) === "Family"){
				dojo.style(dojo.byId('family-members'), 'display', 'block');
			}
			else {}
		}
		},
		"#refineadmin" : {
			"onclick" : function (evt) {
			updateUserList(APP_BASEPATH+'/admin/viewusers',
					getAdminObject(), '#admin-users-list tbody');
			evt.preventDefault();
		}
		},
		"#refinepractice" : {
			"onclick" : function (evt) {
			updateUserList(APP_BASEPATH +'/affiliatepractice/viewusers',
					getPracticeObject(), '#practice-users-list tbody');
			evt.preventDefault();
		}
		},
		"#check-all" : {
			"onclick" : function (evt) {
			var nList = dojo.query('#' + dojo.query(evt.target).closest('table').attr('id')[0] + " .check-me");
			if (evt.target.checked) {
				nList.forEach(function (node, index, nodeList) {
					node.checked = true;
				});
			}
			else {
				nList.forEach(function (node, index, nodeList) {
					node.checked = false;
				});
			}
		}
		},
		"#keywordsadmin" : {
			"onfocus" : function (evt) {
			quickSearch.OnFocus(evt);
		},
		"onblur" : function (evt) {
			quickSearch.OnBlur(evt);
		},
		"onkeyup" : function (evt) {
			quickSearch.OnKeyup(evt, APP_BASEPATH +'/admin/viewusers',
					dojo.mixin(getAdminObject(), {
						"keywordsadmin": dojo.byId("keywordsadmin").value
					}), '#admin-users-list tbody');
			dojo.attr(dojo.query('#admin-users-list th')[0], "keywords", dojo.byId('keywordsadmin').value);
		},
		"onkeypress" : function (evt) {
			quickSearch.OnKeypress(evt);
		}
		},
		"#keywordspractice" : {
			"onfocus" : function (evt) {
			quickSearch.OnFocus(evt);
		},
		"onblur" : function (evt) {
			quickSearch.OnBlur(evt);
		},
		"onkeyup" : function (evt) {
			quickSearch.OnKeyup(evt, APP_BASEPATH +'/affiliatepractice/viewusers',
					dojo.mixin(getPracticeObject(), {
						"keywordspractice": dojo.byId("keywordspractice").value
					}), '#practice-users-list tbody');
			dojo.attr(dojo.query('#practice-users-list th')[0], "keywords", dojo.byId('keywordspractice').value);
		},
		"onkeypress" : function (evt) {
			quickSearch.OnKeypress(evt);
		}
		},
		"#quickemail-add" : {
			"onclick" : function (evt) {
			var value = dijit.byId('quick-email').attr('value');
			var node = dojo.create('div', {
				innerHTML : '<input type="hidden" name="email[]" value="'+ value + '"/>' +
				value + '<span class="quick-remove">Remove</span>'
			});
	
			dojo.query('#selected-email').append(node);
			dojo.behavior.apply();
		}
		},
		".quick-remove" : {
			"onclick" : function (evt) {
			dojo.destroy(evt.target.parentNode);
		}
		},
		"#others-element" : {
			"found" : function (ele) {
			ele.style.display = 'none';
		}
		},
		"#referaltype" : {
			"onchange" : function (evt) {
			if (dojo.trim(evt.target.value) === 'others') {
				dojo.byId('others-element').style.display = 'block';
			}
			else {
				dojo.byId('others-element').style.display = 'none';
			}
		}
		},
		"#plan" : {
			"onchange" : function (evt) {
			if (dojo.trim(evt.target.value) === 'individual') {
	
				dojo.byId("familycount-element").style.display = 'none';
				dojo.byId("familycount-label").style.display = 'none';
				calcUpdate({
					"plan": 'individual'
				});
			}
			else if (dojo.trim(evt.target.value) === 'family') {
				dojo.byId("familycount-element").style.display = 'block';
				dojo.byId("familycount-label").style.display = 'block';
				calcUpdate({
					"plan": 'family',
					"familycount": '2'
				});
			}
			else {
				dojo.byId("familycount-element").style.display = 'block';
				dojo.byId("familycount-label").style.display = 'block';
			}
		}
		},
		"#familycount" : {
			"onchange" : function (evt) {
			calcUpdate({
				"plan": 'family',
				"familycount": evt.target.value
			});
		}
		},
		"#paymenttype" : {
			"onchange" : function (evt) {
			dojo.xhrGet({
				url: APP_BASEPATH +'/user/calculatefees',
				handleAs: 'json',
				content: {
				"paymentid" : dojo.byId("paymentid").value,
				"paymentplan" : dojo.byId("paymentplan").value,
				"paymenttype" : evt.target.value
			},
			load: function (data) {
				dojo.byId("paymentcost").value = data.paymentcost;
			},
			error: function (error) {
	
			}
			});
		}
		},
		"#admin-users-list th" : {
			"onclick" : function (evt) {
			var node = evt.target;
			var order = dojo.hasClass(node, "asc") ? "desc" : "asc";
			if (dojo.hasClass(node, "sortable")) {
				dojo.xhrGet({
					url: APP_BASEPATH + "/admin/viewusers",
					content: dojo.mixin(getAdminObject(), {
						"sortby": dojo.attr(node, "name"),
						"order" : order,
						"keywords": dojo.attr(dojo.query('#admin-users-list th')[0], 'keywords')
					}),
					load: function (data) {
					dojo.query('#admin-users-list th').removeClass(["asc", "desc"]);
					dojo.addClass(node, order);
					dojo.query('#admin-users-list tbody').empty().addContent(data);
	
				},
				error: function (data) {
					// do nothing on error
				}
				});
			}
			dojo.behavior.apply();
		}
		},
		"#practice-users-list th" : {
			"onclick" : function (evt) {
			var node = evt.target;
			var order = dojo.hasClass(node, "asc") ? "desc" : "asc";
			if (dojo.hasClass(node, "sortable")) {
				dojo.xhrGet({
					url: APP_BASEPATH + "/affiliatepractice/viewusers",
					content: dojo.mixin(getPracticeObject(), {
						"sortby": dojo.attr(node, "name"),
						"order" : order,
						"keywords": dojo.attr(dojo.query('#practice-users-list th')[0], 'keywords')
					}),
					load: function (data) {
					dojo.query('#practice-users-list th').removeClass(["asc", "desc"]);
					dojo.addClass(node, order);
					dojo.query('#practice-users-list tbody').empty().addContent(data);
	
				},
				error: function (data) {
					// do nothing on error
				}
				});
			}
			dojo.behavior.apply();
		}
		},
		"#zipcodego" : {
			"onclick" : function (evt) {
			dojo.xhrGet({
				url: APP_BASEPATH + "/user/calculatezip",
				content: {
				"zip": dojo.byId("zipcode").value
			},
			handleAs: 'text',
			load: function (data) {
				dojo.query('#selected-box').empty().addContent(data);
				dojo.behavior.apply();
			},
			error: function (error) {
				console.log('haha');
				// do nothing on error
			}
			});
		}
		},
		"#ZipGo" : {
			"onclick" : function (evt) {
			zipSearch();
			//evt.preventDefault();
		}
		},
		"#zipcode" : {
			"onkeydown" : function (evt) {
			if(evt.keyCode == dojo.keys.ENTER){
				zipSearch();
				dojo.stopEvent(evt);
			}
			evt.stopPropagation();
		}
		},
		"#selected-box .select-button" : {
			"onclick" : function (evt) {
			dojo.query("#selected-box .select-button").attr("disabled", true);
			dojo.attr(dojo.byId('selectedpractice'), 'value', dojo.query(evt.target).attr("name")[0]);
			dojo.create('span', {innerHTML: 'Change', 'class': 'change'}, evt.target, "after");
			dojo.behavior.apply();
		}
		},
		"#selected-box .change" : {
			"onclick" : function (evt) {
			dojo.destroy(evt.target);
			dojo.query("#selected-box .select-button").attr("disabled", false);
		}
		},
		"#slidshow-wapper" : {
			"found" : function (ele) {
			var rotator = new dojox.widget.AutoRotator({
				transition: "dojox.widget.rotator.pan",
				easing: "dojo.fx.easing.sineIn",
				autoStart: true,
				transitionParams: "quick:false,continuous:false,overflow:false",
				duration: 6000
			}, dojo.byId('slidshow'));
		}
		},
		"li.membership-nav-bg" : {
			"onclick" : function (evt) {
			dojo.publish('slidshow/rotator/control', ['go', 0]);
		}
		},
		"li.affiliated-nab-bg" : {
			"onclick" : function (evt) {
			dojo.publish('slidshow/rotator/control', ['go', 1]);
		}
		},
		"li.procedure-nav-bg" : {
			"onclick" : function (evt) {
			dojo.publish('slidshow/rotator/control', ['go', 2]);
		}
		},
		"li.insurance-nav-bg" : {
			"onclick" : function (evt) {
			dojo.publish('slidshow/rotator/control', ['go', 3]);
		}
		},
		"li.emergencies-nav-bg" : {
			"onclick" : function (evt) {
			dojo.publish('slidshow/rotator/control', ['go', 4]);
		}
		},
	
		".phone-number" : {
			"onkeyup" : function (evt) {
			if(evt.keyCode == dojo.keys.BACKSPACE){
				return true;             
			}
			else{
				evt.target.value = format(evt.target.value);
				//}
			}
			evt.stopPropagation();
		}
		},
	
		".user-delete" : {
			"onclick" : function (evt) {
			//console.log('dd');
			var arg = dojo.attr(evt.target,'id');
			//console.log(arg);
			dojo.xhrGet(
			{
				url: APP_BASEPATH + "/admin/calculateremainingfee/",
				content: {
					"id": arg
				},
				handleAs: 'text',
				load: function (data) 
				{
					//console.log(data);
					var check = confirm(data);
					if(check)
					{
						dojo.xhrGet(
						{
							url: APP_BASEPATH + "/admin/delete/",
							content: 
							{
								"id": arg
							},
							handleAs: 'text',
							load: function (data) 
							{
								dojo.destroy(evt.target.parentNode.parentNode);
								//console.log(evt.target.parentNode.parentNode);
							},
							error: function (error) 
							{
								console.log('haha');
								// do nothing on error
							}
						});
					}
					/*secondDlg.attr("content", data);
		        	secondDlg.show();*/
				},
				error: function (error) 
				{
					console.log('haha');
					// do nothing on error
				}
			});
			evt.preventDefault();
		}
		},
	
		//modify display on membership select changes
		"#membershipplan" : {
			"onchange" : function(evt) {
			var value = dojo.query(this).val().trim();
			if(value == "Family") {
				dojo.query("#familymembers-label").style({display : "block"});
				dojo.query("#familymembers-element").style({display : "block"});
			}
	
			else {
				dojo.query("#familymembers-label").style({display : "none"});
				dojo.query("#familymembers-element").style({display : "none"});
			}
		}
		},
	
		//clone the family information fields when add more is clicked
		"#addfamilymember" : {
			"onclick" : function(evt) {
			//var insertAbove = dojo.query(this).parent(".hint");
			cloneFields(clone);
			//dojo.behavior.apply();
		}
		},
	
		//remove the family information fields if remove is clicked
		"#remove-members" : {
			"onclick" : function(evt) {
			//console.log('asdfasdf');
			currentGroup = dojo.query(this).parent().parent();
			dojo.query(currentGroup).forEach(function (element, index) {
				dojo.destroy(element);
			});
		}
		},
		".family-datepicker" : {
			"found" : function (ele) {
				createDateTextBox(ele.id, ele.id);
			}
		},
		
		".datepicker" : {
			"found" : function (ele) {
				createDateTextBox(ele.id, ele.id);
			}
		},
		"#paymode-payjunction" : {
			"onclick" : function(evt) {
			dojo.query("#make-payment #field-element").style({display : "block"});
		}
		},
		"#paymode-paypal" : {
			"onclick" : function(evt) {
			dojo.query("#make-payment #field-element").style({display : "none"});
		}
		},
		".dependent-delete" : {
			"onclick" : function (evt) 
			{
				//console.log('dd');
				var newNode = new dojo.NodeList(evt.target.parentNode);
				//console.log(newNode.query('.family-id').val());
				var uid = newNode.query('.user-id').val();
				var fid = newNode.query('.family-id').val()
				var check = confirm("Do you want to delete?");
				if(check){
					dojo.xhrGet(
					{
						url: APP_BASEPATH + "/admin/deletedependent/",
						content: 
						{
							"id": fid,
							"uid": uid
						},
						handleAs: 'text',
						load: function (data) 
						{
							dojo.destroy(evt.target.parentNode.parentNode);
							//console.log(evt.target.parentNode.parentNode);
						},
						error: function (error) 
						{
							console.log('haha');
							// do nothing on error
						}
					});
				}
				evt.preventDefault();
			}
		}
	
	});
	dojo.behavior.apply();

}

dojo.addOnLoad(init);

