(function($) {
	//Helper Functions for Caret positioning
	function getCaretPosition(ctl){
		var res = {begin: 0, end: 0 };
		if (ctl.setSelectionRange){
			res.begin = ctl.selectionStart;
			res.end = ctl.selectionEnd;
		}else if (document.selection && document.selection.createRange){
			var range = document.selection.createRange();
			res.begin = 0 - range.duplicate().moveStart('character', -100000);
			res.end = res.begin + range.text.length;
		}
		return res;
	};

	function setCaretPosition(ctl, pos){
		if(ctl.setSelectionRange){
			ctl.focus();
			ctl.setSelectionRange(pos,pos);
		}else if (ctl.createTextRange){
			var range = ctl.createTextRange();
			range.collapse(true);
			range.moveEnd('character', pos);
			range.moveStart('character', pos);
			range.select();
		}
	};

	//Predefined character definitions
	var charMap={
		'9':"[0-9]",
		'a':"[A-Za-z]",
		'*':"[A-Za-z0-9]"
	};

	//Helper method to inject character definitions
	$.mask={
		addPlaceholder : function(c,r){
			charMap[c]=r;
		}
	};

	$.fn.unmask=function(){
		return this.trigger("unmask");
	};

	//Main Method
	$.fn.mask = function(mask,settings) {
		settings = $.extend({
			placeholder: "_",
			completed: null
		}, settings);

		//Build Regex for format validation
		var reString="^";
		for(var i=0;i<mask.length;i++)
			reString+=(charMap[mask.charAt(i)] || ("\\"+mask.charAt(i)));
		reString+="$";
		var re = new RegExp(reString);

		return this.each(function(){
			var input=$(this);
			var buffer=new Array(mask.length);
			var locked=new Array(mask.length);

			//Build buffer layout from mask
			for(var i=0;i<mask.length;i++){
				locked[i]=charMap[mask.charAt(i)]==null;
				buffer[i]=locked[i]?mask.charAt(i):settings.placeholder;
			}

			/*Event Bindings*/
			function focusEvent(){
				checkVal();
				writeBuffer();
				setTimeout(function(){
					setCaretPosition(input[0],0);
				},0);
			};
			input.bind("focus",focusEvent);

			input.bind("blur",checkVal);

			//Paste events for IE and Mozilla thanks to Kristinn Sigmundsson
			if ($.browser.msie)
				this.onpaste= function(){setTimeout(checkVal,0);};
			else if ($.browser.mozilla)
				this.addEventListener('input',checkVal,false);

			var ignore=false;  //Variable for ignoring control keys

			function keydownEvent(e){
				var pos=getCaretPosition(this);
				var k = e.keyCode;
				ignore=(k < 16 || (k > 16 && k < 32 ) || (k > 32 && k < 41));

				//delete selection before proceeding
				if((pos.begin-pos.end)!=0 && (!ignore || k==8 || k==46)){
					clearBuffer(pos.begin,pos.end);
				}
				//backspace and delete get special treatment
				if(k==8){//backspace
					while(pos.begin-->=0){
						if(!locked[pos.begin]){
							buffer[pos.begin]=settings.placeholder;
							if($.browser.opera){
								//Opera won't let you cancel the backspace, so we'll let it backspace over a dummy character.
								writeBuffer(pos.begin);
								setCaretPosition(this,pos.begin+1);
							}else{
								writeBuffer();
								setCaretPosition(this,pos.begin);
							}
							return false;
						}
					}
				}else if(k==46){//delete
					clearBuffer(pos.begin,pos.begin+1);
					writeBuffer();
					setCaretPosition(this,pos.begin);
					return false;
				}else if (k==27){
					clearBuffer(0,mask.length);
					writeBuffer();
					setCaretPosition(this,0);
					return false;
				}

			};
			input.bind("keydown",keydownEvent);

			function keypressEvent(e){
				if(ignore){
					ignore=false;
					return;
				}
				e=e||window.event;
				var k=e.charCode||e.keyCode||e.which;

				var pos=getCaretPosition(this);
				var caretPos=pos.begin;

				if(e.ctrlKey || e.altKey){//Ignore
					return true;
				}else if ((k>=41 && k<=122) ||k==32 || k>186){//typeable characters
					while(pos.begin<mask.length){
						var reString=charMap[mask.charAt(pos.begin)];
						var match;
						if(reString){
							var reChar=new RegExp(reString);
							match=String.fromCharCode(k).match(reChar);
						}else{//we're on a mask char, go forward and try again
							pos.begin+=1;
							pos.end=pos.begin;
							caretPos+=1;
							continue;
						}

						if(match)
							buffer[pos.begin]=String.fromCharCode(k);
						else
							return false;//reject char

						while(++caretPos<mask.length){//seek forward to next typable position
							if(!locked[caretPos])
								break;
						}
						break;
					}
				}else
					return false;

				writeBuffer();
				if(settings.completed && caretPos>=buffer.length)
					settings.completed.call(input);
				else
					setCaretPosition(this,caretPos);

				return false;
			};
			input.bind("keypress",keypressEvent);

			/*Helper Methods*/
			function clearBuffer(start,end){
				for(var i=start;i<end;i++){
					if(!locked[i])
						buffer[i]=settings.placeholder;
				}
			};

			function writeBuffer(pos){
				var s="";
				for(var i=0;i<mask.length;i++){
					s+=buffer[i];
					if(i==pos)
						s+=settings.placeholder;
				}
				input.val(s);
				return s;
			};

			function checkVal(){
				//try to place charcters where they belong
				var test=input.val();
				var pos=0;
				for(var i=0;i<mask.length;i++){
					if(!locked[i]){
						while(pos++<test.length){
							//Regex Test each char here.
							var reChar=new RegExp(charMap[mask.charAt(i)]);
							if(test.charAt(pos-1).match(reChar)){
								buffer[i]=test.charAt(pos-1);
								break;
							}
						}
					}
				}
				var s=writeBuffer();
				if(!s.match(re)){
					input.val("");
					clearBuffer(0,mask.length);
				}
			};

			input.one("unmask",function(){
				input.unbind("focus",focusEvent);
				input.unbind("blur",checkVal);
				input.unbind("keydown",keydownEvent);
				input.unbind("keypress",keypressEvent);
				if ($.browser.msie)
					this.onpaste= null;
				else if ($.browser.mozilla)
					this.removeEventListener('input',checkVal,false);
			});

		});
	};
})(jQuery);
$().ready(function() {

	// validate signup form on keyup and submit
	$("#signupForm").validate({
		rules: {
			interest: "required",
                        surname: "required",
                        name: "required",
                        bplace: "required",
			bnation: "required",
//                        regnum: {
//                                required: true,
//                                minlength:10,
//                                remote:
//                                    {
//                                    url: "register_check.php",
//                                    type: "post"
//                                }
//                        },
                        iunum: "required",
                        address:"required",
                        jnum: "required",
                        gpnum: "required",
                        phone: "required",
                        as_golch_1:"required",
                        ag_phone_1:"required",
                        at_tsalary_1:"required",
                        at_tduty_1:"required",
                        at_tachieve_1:"required",
                        at_tbuatn_1:"required",
                        at_tbuatw_1:"required",
                        at_tbuatp_1:"required",
                        at_treason_1:"required",
                        at_ddmail_1:"required",
                        email: {
				required: true,
				email: true
			},
                        ag_who_1: "required",
                        ag_name_1: "required",
                        ag_byear_1: "required",
                        ag_company_1: "required",
                        ag_job_1: "required",
                        as_where_1: "required",
                        as_sname_1: "required",
                        as_eyear_1: "required",
                        as_tyear_1: "required",
                        as_job_1: "required",
                        as_bolowsrol_1: "required",
                        as_zereg_1: "required",
                        ah_name_1: "required",
                        ah_time_1: "required",
                        ah_listen_1: "required",
                        ah_speak_1: "required",
                        ah_read_1: "required",
                        ah_write_1: "required",
                        at_tbname_1: "required",
                        at_taname_1: "required",
                        at_tstart_1: "required",
                        at_tyear_1: "required",
                        at_treason_1: "required",
                        at_dname_1: "required",
                        at_dprof_1: "required",
                        at_dcontact_1: "required",
                        at_cword_1: "required",
                        at_cexcel_1: "required",
                        at_caccess_1: "required",
                        at_cproject_1: "required",
                        at_cproject_1: "required",
                        at_cppt_1: "required",
                        at_cps_1: "required",
                        at_cpmaker_1: "required",
                        at_ccd_1: "required",
                        a_nemeh: "required",
                        a_hasah: "required",
                        anket_possiblehour:"required",
                        anket_bdate:"required",
                        otherinterest_1: "required",
                        minsalary: "required",
                        maxsalary: "required",
                        chaptcha: {
                            required: true,
                            number: true,
                            equalTo: "#chaptchas"
                        },
                        possiblehour: "required",
                        avatar: {
				required: true,
				accept:true
			},
                        diploma_copy:{
                           required: true,
                           accept:true
                        }
		},
		messages: {
                    chaptcha: "&nbsp;Та зөв бодно уу !!! &nbsp;"
                    /*
			interest: "interst",
                        surname: "Please full",
                        name: "required",
                        byear: "required",
                        bmonth: "required",
                        bday: "required",
                        bplace: "required",
			bnation: "required",
                        regnum: "required",
                        iunum: "required",
                        address:"required",
                        jnum: "required",
                        gpnum: "required",
                        phone: "required",
                        email: "Only email",
                        ag_who_1: "required",
                        ag_name_1: "required",
                        ag_byear_1: "required",
                        ag_company_1: "required",
                        ag_job_1: "required",
                        as_where_1: "required",
                        as_sname_1: "required",
                        as_eyear_1: "required",
                        as_tyear_1: "required",
                        as_job_1: "required",
                        as_bolowsrol_1: "required",
                        as_zereg_1: "required",
                        ah_name_1: "required",
                        ah_time_1: "required",
                        ah_listen_1: "required",
                        ah_speak_1: "required",
                        ah_read_1: "required",
                        ah_write_1: "required",
                        at_tbname_1: "required",
                        at_taname_1: "required",
                        at_tstart_1: "required",
                        at_tyear_1: "required",
                        at_treason_1: "required",
                        at_dname_1: "required",
                        at_dprof_1: "required",
                        at_dcontact_1: "required",
                        at_cword_1: "required",
                        at_cexcel_1: "required",
                        at_caccess_1: "required",
                        at_cproject_1: "required",
                        at_cproject_1: "required",
                        at_cppt_1: "required",
                        at_cps_1: "required",
                        at_cpmaker_1: "required",
                        at_ccd_1: "required",
                        a_nemeh: "required",
                        a_hasah: "required",
                        otherinterest: "required",
                        minsalary: "required",
                        maxsalary: "required",
                        possiblehour: "required",
                        inter: "required",
                        inter: "required"*/
		}

	});
        $("input.phone").mask("99999999");
        $("input.name").mask("99999999");
	// propose username by combining first- and lastname
	$("#username").focus(function() {
		var firstname = $("#firstname").val();
		var lastname = $("#lastname").val();
		if(firstname && lastname && !this.value) {
			this.value = firstname + "." + lastname;
		}
	});

	//code to hide topic selection, disable for demo
	var newsletter = $("#newsletter");
	// newsletter topics are optional, hide at first
	var inital = newsletter.is(":checked");
	var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
	var topicInputs = topics.find("input").attr("disabled", !inital);
	// show when newsletter is checked
	newsletter.click(function() {
		topics[this.checked ? "removeClass" : "addClass"]("gray");
		topicInputs.attr("disabled", !this.checked);
	});
});


