RegisterUser = {
	
	zipcodes : null,
	
	init: function(){
		dojo.require('dojo.parser');	
		dojo.require('dijit.dijit');
		dojo.require("dijit.Dialog");
		dojo.require("dijit.form.Button");
	},
	
	createInit: function(){
		RegisterUser.init();
		
		dojo.require('dijit.form.DateTextBox');
		dojo.require("dijit.Dialog");
		dojo.require("dijit.form.Button");
		
		dojo.attr('createUserBtn', 'disabled', true);
		
		dojo.connect(dojo.byId('chkUserBtn'), 'onclick', function(){
			
			var checkStr = '';
			if (!(/^[a-zA-Z][\.a-zA-Z0-9]{3,18}[a-zA-Z0-9]$/.test(dojo.byId('user_id').value)))	checkStr += '<li>帳號長度為5到20個字元，可包含英文字母與數字。</li>';
			if (!((/^[A-Z][1-2]{1}\d{8}$/.test(dojo.byId('id_card').value))&&(RegisterUser.checkROCId(dojo.byId('id_card').value)))) checkStr += '<li>請輸入正確之身分證字號</li>';
			if (!(/^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/.test(dojo.byId('email').value))) checkStr += '<li>請輸入正確之電子郵件</li>';
			
			if (checkStr != '') {
				dojo.byId('alertMsg').innerHTML = checkStr;
				dijit.byId('alertDialog').show();
				return false;
			}
			
			var isValid1 = false;
			var isValid2 = false;
			var isValid3 = false;
			var erMsg = '';
			
			dojo.xhrGet({
				url: '/resources/users?user_id=' + dojo.byId('user_id').value,
				handleAs: 'json',
				sync: true,
				//timeout: 5000,
				load: function(data, ioArgs){
					if (data.length == 0) isValid1 = true;
					else {
						checkStr += '<li>此帳號已註冊</li>';
						isValid1 = false;
					}
				},
				error: function(error, ioArgs){
					alert('ajax request error: ' + error);
				}
			});
			
			//** check id_card & email.
			dojo.xhrGet({
				url: '/resources/users?id_card=' + dojo.byId('id_card').value,
				handleAs: 'json',
				sync: true,
				//timeout: 5000,
				load: function(data, ioArgs){
					if (data.length == 0) isValid2 = true;
					else {
						checkStr += '<li>此身分證字號已註冊</li>';
						isValid2 = false;
					}
				},
				error: function(error, ioArgs){
					alert('ajax request error: ' + error);
				}
			});
			dojo.xhrGet({
				url: '/resources/users?email=' + dojo.byId('email').value,
				handleAs: 'json',
				sync: true,
				//timeout: 5000,
				load: function(data, ioArgs){
					if (data.length == 0) isValid3 = true;
					else {
						checkStr += '<li>此電子郵件已註冊</li>';
						isValid3 = false;
					}
				},
				error: function(error, ioArgs){
					alert('ajax request error: ' + error);
				}
			});
			
			if (isValid1 && isValid2 && isValid3) {
				dojo.attr('user_id', 'readOnly', true);
				dojo.attr('id_card', 'readOnly', true);
				dojo.attr('email', 'readOnly', true);
				dojo.style('chkUserBtn', 'display', 'none');
				dojo.style('resetUserBtn', 'display', '');
				dojo.attr('createUserBtn', 'disabled', false);
				
				dojo.style('chkUserMsg', 'color', 'green');
				dojo.byId('chkUserMsg').innerHTML = '此帳號可使用!';
				
				dojo.style('regContent', 'display', '');
			}
			else {
				dojo.byId('alertMsg').innerHTML = checkStr;
				dijit.byId('alertDialog').show();
			}
			
		});
				
		dojo.connect(dojo.byId('resetUserBtn'), 'onclick', function(){
			dojo.style('chkUserBtn', 'display', '');
			dojo.style('resetUserBtn', 'display', 'none');
			dojo.attr('createUserBtn', 'disabled', true);
			dojo.attr('user_id', 'readOnly', false);
			dojo.attr('id_card', 'readOnly', false);
			dojo.attr('email', 'readOnly', false);
			dojo.byId('chkUserMsg').innerHTML = '';
			
			dojo.style('regContent', 'display', 'none');
		});
		
		if (dojo.byId('o_district').value != '') RegisterUser.selectDistrict('county', 'district', dojo.byId('o_district').value);
	},
	
	createUser: function(){
		
		var checkStr = '';
		if (!(/^[a-zA-Z0-9]{6,}$/.test(dojo.byId('user_pswd').value))) checkStr += '<li>請輸入六個字母或數字以上之密碼</li>';
		if (dojo.byId('user_pswd').value != dojo.byId('re_user_pswd').value) checkStr += '<li>密碼不符</li>';
		if (dojo.byId('last_name').value == '') checkStr += '<li>請輸入姓氏</li>';
		if (dojo.byId('first_name').value == '') checkStr += '<li>請輸入名字</li>';
		if (!((/^[A-Z][1-2]{1}\d{8}$/.test(dojo.byId('id_card').value))&&(RegisterUser.checkROCId(dojo.byId('id_card').value)))) checkStr += '<li>請輸入正確之身分證字號</li>';
		if (dojo.query('input[name="gender"]:checked').length == 0) checkStr += '<li>請選擇性別</li>';
		if (dojo.byId('birthday').value == '') checkStr += '<li>請輸入生日</li>';
		if (!(/^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/.test(dojo.byId('email').value))) checkStr += '<li>請輸入正確之電子郵件</li>';
		
		if (dojo.byId('phone').value == '') checkStr += '<li>請輸入室內電話號碼</li>';
		if ((dojo.byId('phone').value != '')&&(!(/^\(0\d{1,2}\)(\d{6,8}$|\d{6,8}#\d{1,5}$)/.test(dojo.byId('phone').value)))) checkStr += '<li>請輸入正確之室內電話號碼</li>';
		if (dojo.byId('mobile').value == '') checkStr += '<li>請輸入手機號碼</li>';
		if ((dojo.byId('mobile').value != '')&&(!(/^09\d{8}/.test(dojo.byId('mobile').value)))) checkStr += '<li>請輸入正確之手機號碼</li>';
		
		if ((dojo.byId('fax').value != '')&&(!(/^\(0\d{1,2}\)(\d{6,8}$|\d{6,8}#\d{1,5}$)/.test(dojo.byId('fax').value)))) checkStr += '<li>請輸入正確之傳真號碼</li>';
		
		if (dojo.query('.impairedTypeOption:checked').length == 0) checkStr += '<li>請選擇障別</li>';
		if (dojo.byId('severity').value == 0) checkStr += '<li>請選擇程度</li>';
		if (dojo.byId('pswd_hint').value == 0) checkStr += '<li>請選擇密碼提示問題</li>';
		if (dojo.byId('pswd_ans').value == '') checkStr += '<li>請輸入密碼提示答案</li>';
		if (dojo.query('input[name="client_enable"]:checked').length == 0) checkStr += '<li>請選擇是否使用轉譯服務</li>';
		if (dojo.byId('validCode').value == '') checkStr += '<li>請輸入驗證碼</li>';
		if (!dojo.byId('checkAgreement').checked) checkStr += '<li>請檢視並接受服務條款</li>';
		
		if (checkStr != '') {
			//alert(checkStr);
			dojo.byId('alertMsg').innerHTML = checkStr;
			dijit.byId('alertDialog').show();
			return false;
		}
		
		var impairedIds = '';
		dojo.query('.impairedTypeOption:checked').forEach(function(item){
			impairedIds += item.value + ',';
		});
		dojo.byId('impaired').value = impairedIds;
		
		dojo.byId('thisForm').submit();
	},

	selectDistrict: function(countyDomId, districtDomId, presetValue){
		dojo.xhrGet({
			url: '/resources/zipcodes?county__equals=' + encodeURI(dojo.byId(countyDomId).value),
			handleAs: 'json',
			load: function(data, ioArgs){
				zipcodes = data;
				var selectNode = dojo.byId(districtDomId);
				var optionNode;
				selectNode.innerHTML = '';
				var blankOptionNode = document.createElement('option');
				blankOptionNode.value = '';
				blankOptionNode.innerHTML = '請選擇';
				selectNode.appendChild(blankOptionNode);

				for (var i = 0; i < zipcodes.length; i++) {
					optionNode = document.createElement('option');
					optionNode.value = zipcodes[i].district;
					optionNode.innerHTML = zipcodes[i].district;
					//** preset district value.
					if ((presetValue) && (zipcodes[i].district == presetValue)) {
						optionNode.selected = 'selected';
					}
					selectNode.appendChild(optionNode);
				}
			},
			error: function(error, ioArgs){
				alert('ajax request error: ' + error);
			}
		});			
	},
	
	selectZipcode: function(index, zipcodeDomId){
		dojo.byId(zipcodeDomId).value = zipcodes[index-1].zipcode;
	},
	
	checkIdCard: function(isFocused){
		
		var skipValidator = isFocused;
		if(this.state == "Error") skipValidator = false;
		
		if ((/^[A-Z][1-2]{1}\d{8}$/.test(this.textbox.value))&&(RegisterUser.checkROCId(this.textbox.value))) {
			return true;
		}
		else {
			return skipValidator || false;
		}
	},
	
	checkROCId: function(id){
		var char_table = [10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33];  
						/* A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z */
		var char_digit = char_table[id.charCodeAt(0)-'A'.charCodeAt(0)];
		var checksum = 0;
		checksum += Math.floor(char_digit / 10);
		checksum += (char_digit % 10) * 9;
		for (var i = 1, p = 8; i <= 8; i++, p--) {
			checksum += parseInt(id.charAt(i)) * p;
		}
		checksum += parseInt(id.charAt(9));
		return ((checksum % 10) == 0)?true:false;
	},
	
	resetPwdCheck: function(){
		dojo.byId('alertMsg').innerHTML = '';
		if(dojo.byId('user_account').value == ''){
			dojo.byId('alertMsg').innerHTML = '請輸入使用者帳號。';
			dijit.byId('alertDialog').show();
			return;
		}
		if(dojo.byId('user_ques').value == '0'){
			dojo.byId('alertMsg').innerHTML = '請選擇問題類別。';
			dijit.byId('alertDialog').show();
			return;
		}
		if(dojo.byId('user_ans').value == ''){
			dojo.byId('alertMsg').innerHTML = '請輸入答案。';
			dijit.byId('alertDialog').show();
			return;
		}
		
		dojo.style('cmdBar', 'display', 'none');
		dojo.style('loadingImg', 'display', '');
		
		dojo.xhrPost({
			url: '/register/resetPwd.groovy',
			form: 'thisForm',
			load: function(response, ioArgs){
				if(response == 'yes_correct'){
					dojo.byId('alertMsg').innerHTML = '密碼已重設並寄送至您註冊的電子郵件信箱。';
					dijit.byId('alertDialog').show();
				}else if(response == 'no_incorrect'){
					dojo.byId('alertMsg').innerHTML = '您選擇的問題或答案不正確，請重新輸入。';
					dijit.byId('alertDialog').show();
				}else if(response == 'no_user'){
					dojo.byId('alertMsg').innerHTML = '查無此使用者帳號。';
					dijit.byId('alertDialog').show();
				}
				dojo.style('loadingImg', 'display', 'none');
				dojo.style('cmdBar', 'display', '');
			},
			error: function(error, ioArgs){
				alert('ajax request error: ' + error);
				dojo.style('loadingImg', 'display', 'none');
				dojo.style('cmdBar', 'display', '');
			}
		});
		
	}
};