/**
 * @class: Util
 * @description: Defines Util functions
 * @version: 1.0
 **/
(function($){

	function initUploadImgCreate(){
		var uploadEl = $('#frmCreateProfile');
		var btnUpload;
		uploadEl.fileUpload({
			action: $('#frmCreateProfile').find('a').attr('href'),
			name: 'fileLogo',
			
			autoSubmit: true,
			triggerChoose: '.btnSmall',
			triggerSubmit: '.btnSmall',
			
			hoverClass: 'hover',
			disabledClass: 'disabled',
			
			onChange: function(fname){ 
				var ext = fname.substring(fname.lastIndexOf('.') + 1).toLowerCase(),
					allowExt = ['jpg', 'jpeg', 'png', 'gif'];
					
				for(var i = 0, len = allowExt.length; i < len; i++){
					if(ext == allowExt[i]){
						btnUpload = this;
						return true;
					}
				}
				
				alert('failed image type');
				return false;
			},
			onFailedSubmit: function(){
				alert('please choose an image.');
			},
			onSubmit: function(fname){

			},
			onComplete: function(response){
				if(response){
					var json = $.parseJSON(response);
					if(json){ 
						if(typeof json.status == 'undefined' || json.status == '1'){
							btnUpload.find('img').attr('src',json.url);
							btnUpload.next().next().val(json.path);
						}else{
							alert(json.msg);
						}
					}else{
						alert('iframe response, not valid json');
					}
				}else{
					alert('no response');
				}
			}
		});
	}	
	
	$.fn.validLoginFrm = function(options){
		var defaults = {
			alertLayer: '.alertLayer'
		};
		options = $.extend(defaults, options); 						
		return this.each(function(){
			var that = $(this);
			that.vars = {
				
			};
			var btnLogin = that.find('#submitLogin');
			var txtUser = that.find('#username');
			var txtPass = that.find('#password');
			btnLogin.unbind('click.validFromLogin').bind('click.validFromLogin',function(){
				if(!AlertForm.requireField(txtUser, '')){
					AlertForm.show(txtUser, L10N.required.userName);
					return false;
				}
				
				if(!AlertForm.requireField(txtPass, '')){
					AlertForm.show(txtPass, L10N.required.passWord);
					return false;
				}
				
				if(!AlertForm.requirePass(txtPass, '')){
					AlertForm.show(txtPass, L10N.valid.passWord);
					return false;
				}
			});	
		});			
	};
	
	$.fn.validCreateFrm = function(options){
		var defaults = {
			alertLayer: '.alertLayer'
		};
		options = $.extend(defaults, options); 						
		return this.each(function(){
			var that = $(this);
			that.vars = {
				
			};
			var btnCreate = that.find('#btnCreate');
			var txtName = that.find('#lastname');
			var txtSureName = that.find('#firstname');
			var txtEmail = that.find('#email');
			var txtUserName = that.find('#username');
			var txtPassword = that.find('#password');
			var txtRePassword = that.find('#rePassword');
			initUploadImgCreate();
			btnCreate.unbind('click.validCreateFrm').bind('click.validCreateFrm',function(){
				if(!AlertForm.requireField(txtName, '')){
					AlertForm.show(txtName, L10N.required.name);
					return false;
				}
				
				if(!AlertForm.requireField(txtSureName, '')){
					AlertForm.show(txtSureName, L10N.required.sureName);
					return false;
				}
				
				if(!AlertForm.requireField(txtEmail, '')){
					AlertForm.show(txtEmail, L10N.required.email);
					return false;
				}
				
				if(!AlertForm.validEmail(txtEmail)){
					AlertForm.show(txtEmail, L10N.valid.email);
					return false;
				}
				
				if(!AlertForm.requireField(txtUserName, '')){
					AlertForm.show(txtUserName, L10N.required.name);
					return false;
				}
				
				if(!AlertForm.requireField(txtPassword, '')){
					AlertForm.show(txtPassword, L10N.required.passWord);
					return false;
				}
				
				if(!AlertForm.requirePass(txtPassword, '')){
					AlertForm.show(txtPassword, L10N.valid.passWord);
					return false;
				}
				
				if(!AlertForm.requireField(txtRePassword, '')){
					AlertForm.show(txtRePassword, L10N.required.repassWord);
					return false;
				}
				
				if(!AlertForm.requirePass(txtRePassword, '')){
					AlertForm.show(txtRePassword, L10N.valid.repassWord);
					return false;
				}
				
				if(!AlertForm.validRePass(txtRePassword,txtPassword)){
					AlertForm.show(txtRePassword, L10N.alert.repassWord);
					return false;
				}
				that.submit();
			});
		});			
	};
	
	$.fn.fileUpload = function(options){
		var defaults = {
			action: 'upload.php',
			name: 'userfile',
			
			data: false, 
			
			autoSubmit: true,
			triggerSubmit: '',
			triggerChoose: '',
			
			hoverClass: 'hover',
			disabledClass: 'disabled',
			
			onChange: null,
			onSubmit: null,
			onComplete: null,
			onFailedSubmit: null,
			
			onHover: false,
			onOut: false,
			
			disabled: false
		};
				
		return this.each(function(){
			var vars = $.extend(defaults, options),
				jelems = {
					jcontainer: $(this)
				},
		
				getUID = (function(){
					var id = 0;
					return function(){
						return 'jfileupload-' + id++;
					};
				}
				)(),
				
				initialize = function(button){
				
					var jbutton = $(button).unbind('mouseover.zupload').bind('mouseover.zupload', function(){
						if (vars.disabled)
						{
							return;
						}
						
						if (!jelems.jfile)
						{
							createInput();
						}
						
						var offset = jbutton.offset();
						jelems.jfileCont.css(
							{
								display: 'block',
								visibility: 'visible',
								top: offset.top,
								width: jbutton.outerWidth(),
								height: jbutton.outerHeight(),
								left: offset.left
							}
						);
					});
					
					jelems.jbutton = jbutton;
					fuEnable();
					
					if(vars.triggerSubmit && !vars.autoSubmit)
					{
						jelems.jcontainer.find(vars.triggerSubmit).unbind('click.zupload').bind('click.zupload', function()
							{
								fuSubmit();
								
								return false;
							}
						);
					}
				},
				
				fuDisable = function()
				{
					jelems.jbutton.addClass(vars.disabledClass);
					vars.disabled = true;
					if(jelems.jfileCont)
					{
						jelems.jfileCont.css('visibility', 'hidden');
					}
				},
				
				fuEnable = function()
				{
					jelems.jbutton.removeClass(vars.disabledClass);
					vars.disabled = false;
				},
				
				createInput = function()
				{
					var jfile = $('<input type="file" name="' + vars.name +'"/>').css(
						{
							position : 'absolute',
							right : 0,
							margin : 0,
							padding : 0,
							fontSize : '360px',
							cursor: 'pointer',
							fontFamily : 'sans-serif'
						}
					);

					var jfileCont = $('<div></div>').css(
						{
							display : 'block',
							position : 'absolute',
							overflow : 'hidden',
							margin : 0,
							padding : 0,
							opacity : 0,
							direction : 'ltr',
							zIndex: 2147483583
						}
					);
					
					if(vars.onHover){
						jfileCont.mouseenter(vars.onHover);
					}
					
					if(vars.onOut){
						jfileCont.mouseenter(vars.onOut);
					}
					
					jfile.change(function()
						{
							if(vars.onChange && vars.onChange.call(jelems.jcontainer, jfile.val()) == false){
								clearInput();
								return;
							}

							if (vars.autoSubmit){
								fuSubmit();
							}
						}
					).mouseover(function()
						{
							jelems.jbutton.addClass(vars.hoverClass);
						}
					).mouseout(function()
						{
							jelems.jbutton.removeClass(vars.hoverClass);
							jfileCont.css(
								{
									visibility: 'hidden'
								}
							);
						}
					);
					
					jfileCont.append(jfile).appendTo(document.body);
					
					jelems.jfile = jfile;
					jelems.jfileCont = jfileCont;
				},
				
				clearInput = function()
				{
					if(!jelems.jfile)
					{
						return;
					}
					
					jelems.jfile.remove();
					jelems.jfileCont.remove();
					jelems.jfile = null;
					jelems.jfileCont = null;
				},
				
				fuSubmit = function(data)
				{
					if(!jelems.jfile || !jelems.jfile.val())
					{
						if(vars.onFailedSubmit)
						{
							vars.onFailedSubmit.call(jelems.jcontainer);
						}
					
						return;
					}
					
					if(vars.onSubmit && vars.onSubmit.call(jelems.jcontainer, jelems.jfile.val()) == false)
					{
						clearInput();
						return;
					}
					
					var newid = getUID(),
						iframe = $('<iframe src="javascript:false;" id="' + newid + '" name="' + newid + '"/>').css('display', 'none').appendTo(document.body),
						form = $('<form method="post" action="' + vars.action + '" target="' + newid + '" enctype="multipart/form-data"></form>').css('display', 'none').appendTo(document.body);
					
					if(vars.data)
					{
						for (var key in vars.data)
						{
							var pair = vars.data[key];
							form.append('<input name="' + pair.name + '" value="' + pair.value + '"/>');
						}
					}
					
					jelems.jbutton.removeClass(vars.hoverClass);
					form.append(jelems.jfile);
					form.submit();

					setTimeout(function()
						{
							form.remove();
							clearInput();
						}, 
						100
					);
					
					var complete = false;
					iframe.bind('load', function()
						{
							if(this.src == "javascript:'%3Chtml%3E%3C/html%3E';" || this.src == "javascript:'<html></html>';")
							{
								if(complete)
								{
									setTimeout(function()
									{
										iframe.remove();
									}, 100);
								}
															
								return;
							}
							
							var doc = this.contentDocument ? this.contentDocument : window.frames[this.id].document;
							if(doc.readyState && doc.readyState != 'complete')
							{
							   return;
							}

							if(doc.body && doc.body.innerHTML == 'false')
							{
								return;
							}
							
							var response;
							if(doc.XMLDocument)
							{
								response = doc.XMLDocument;
							}
							else if (doc.body)
							{
								response = doc.body.innerHTML;
							}
							else
							{
								response = doc;
							}
							
							if(vars.onComplete)
							{
								vars.onComplete.call(jelems.jcontainer, response);
							}
							
							complete = true;
							this.src = "javascript:'<html></html>';";
						}
					);
				};
				
			
			return initialize(jelems.jcontainer.find(vars.triggerChoose));
		});
	};
	
	$.fn.accordion = function(options){
		var defaults = {
			
		};
		options = $.extend(defaults, options); 						
		return this.each(function(){
			var that = $(this);
			that.vars = {
				dtContent:null,
				ddContent:null
			};
			that.vars.ddContent = that.find('dd');
			var idPage = $('#idPage');
			var divContent = $('.blockRight');
			that.vars.dtContent = that.find('dt');
			that.vars.dtContent.removeClass('active');
			that.vars.dtContent.each(function(){
				var dt = $(this);
				var height = dt.next().css('display', 'block').outerHeight();
				dt.next().css({
					height: 0
				});
				var liTags = dt.next().find('li');
				dt.unbind('click.Accordion').bind('click.Accordion',function(){
					if(liTags.length){
						if(dt.hasClass('active')){
							dt.removeClass('active');
							dt.next().removeClass('ajaxLi');
							dt.next().css('height', height).animate({
								height: 0
							});
							$.ajax({
								url:"/ajax.php",
								data: "id=" + dt.find('span').attr('id'),
								// beforeSend: function(){
									// divContent.initAjaxLoad();
								// },						
								type:'POST',
								success:function(result)
								{
									var data = $(result);
									//divContent.removeAjaxLoad();
									divContent.html(data).hide().fadeIn();
									jQuery('.fckDefault ').accordionPost();		
								}
							});
						}else{
						
							that.vars.dtContent.each(function(){
								var dt = $(this);
								if(dt.hasClass('active')){
									dt.removeClass('active');
									dt.next().removeClass('ajaxLi');
									dt.next().find('li').removeClass('active');
									dt.next().animate({
										height: 0
									});
								}
							});
							dt.addClass('active');
							dt.next().css('height', 0).animate({
								height: height
							},function(){
								dt.next().addClass('ajaxLi');
								jQuery('.ajaxLi').ajaxLi();
								$.ajax({
									url:"/ajax.php",
									data: "id=" + dt.find('span').attr('id'),
									// beforeSend: function(){
										// divContent.initAjaxLoad();
									// },						
									type:'POST',
									success:function(result)
									{
										var data = $(result);
										//divContent.removeAjaxLoad();
										divContent.html(data).hide().fadeIn();
										jQuery('.fckDefault ').accordionPost();		
									}
								});
							});		
						}
					}else{
						that.vars.dtContent.each(function(){
							var dt = $(this);
							if(dt.hasClass('active')){
								dt.removeClass('active');
								dt.next().removeClass('ajaxLi');
								dt.next().find('li').removeClass('active');
								dt.next().animate({
									height: 0
								});
							}
						});
						$.ajax({
							url:"/ajax.php",
							data: "id=" + dt.find('span').attr('id'),
							// beforeSend: function(){
								// divContent.initAjaxLoad();
							// },						
							type:'POST',
							success:function(result)
							{
								dt.addClass('active');
								var data = $(result);
								//divContent.removeAjaxLoad();
								divContent.html(data).hide().fadeIn();
								jQuery('.fckDefault ').accordionPost();		
							}
						});		
					}
					return false;
				});
			});	
		});			
	};
	
	$.fn.accordionPost = function(options){
		var defaults = {
			
		};
		options = $.extend(defaults, options); 						
		return this.each(function(){
			var that = $(this);
			that.vars = {
				dtContent:null,
				ddContent:null
			};
			that.vars.ddContent = that.find('dd');
			that.vars.dtContent = that.find('dt');
			that.vars.dtContent.removeClass('active');
			that.vars.dtContent.each(function(){
				var dt = $(this);
				var height = dt.next().css('display', 'block').height();
				dt.next().css({
					height: 0
				});
				dt.unbind('click.AccordionPost').bind('click.AccordionPost',function(){
					if(dt.hasClass('active')){
						dt.removeClass('active');
						dt.next().css('height', height).animate({
							height: 0
						});
					}else{
						that.vars.dtContent.each(function(){
							var dt = $(this);
							if(dt.hasClass('active')){
								dt.removeClass('active');
								dt.next().animate({
									height: 0
								});
							}
						});
					
						dt.addClass('active');
						dt.next().css('height', 0).animate({
							height: height
						});	
					}
					return false;			
				});
			});	
		});			
	};
	
	$.fn.showBlockLayer = function(options){
		var defaults = {
			
		};
		options = $.extend(defaults, options); 						
		return this.each(function(){
			var that = $(this);
			that.vars = {
				liTag:null
			};
			that.vars.liTag = that.find('.last');
			var aTag = that.vars.liTag.find('a');
			var warpPopup = $('.warpPopup');
			var flag = false;
			var offSetA= that.vars.liTag.offset();
			var widthBlock = that.vars.liTag.width();
			aTag.unbind('click.showBlockLayer').bind('click.showBlockLayer',function(e){
				if (e) e.preventDefault();
				
				if(warpPopup.hasClass('activeShow')){
					$(this).removeClass('active');	
					warpPopup.css({
						'position':'',
						'top': - 70000
					});
					warpPopup.removeClass('activeShow');
					flag = false;
					$('body').unbind('click.trig');
				}else{
					$(this).addClass('active');
					warpPopup.css({
						'position':'absolute',
						'right': $(window).width() - (offSetA.left + widthBlock),
						'top': offSetA.top+21,
						'z-index':1000
					});
					warpPopup.addClass('activeShow');
					flag = true;
					$('body').unbind('click.trig').bind('click.trig',function(e){
						if (flag && !$(e.target).closest('span.numNofi').closest('li.last').length){
							aTag.removeClass('active');	
							warpPopup.css({
								'position':'',
								'top': - 70000
							});
							warpPopup.removeClass('activeShow');
							flag = false;
							$('body').unbind('click.trig');
						}
					});
				}				
			});
			$(window).resize(function(){
				offSetA= that.vars.liTag.offset();
				widthBlock = that.vars.liTag.width();
				if(warpPopup.hasClass('activeShow')){
					$(this).addClass('active');
					warpPopup.css({
						'position':'absolute',
						'right': $(window).width() - (offSetA.left + widthBlock),
						'top': offSetA.top+21,
						'z-index':1000
					});	
				}
			});
		
		});	
	};
	
	$.fn.ajaxLi = function(options){
		var defaults = {
			
		};
		options = $.extend(defaults, options); 						
		return this.each(function(){
			var that = $(this);
			that.vars = {
				ulContent:null	
			};
			that.vars.ulContent = that.find('ul');
			var liTags = that.vars.ulContent.children();
			var divContent = $('.blockRight');
			liTags.each(function(index){
				var liTag = $(this);
				liTag.unbind('click.ajaxLi').bind('click.ajaxLi',function(){
					liTags.removeClass('active');
					$(this).addClass('active');
					$.ajax({
						url:"/ajax.php",
						data: "Id=" + $(this).attr('id'),
						// beforeSend: function(){
							// divContent.initAjaxLoad();
						// },						
						type:'POST',
						success:function(result)
						{
							var data = $(result);
							//divContent.removeAjaxLoad();
							divContent.html(data).hide().fadeIn();
							jQuery('.fckDefault ').accordionPost();				
						}
					});			
					return false;
				});
			});
		});			
	};
	
	$.fn.initAjaxLoad = function() {
		var defaults={
			
		};
		return this.each(function(){
			var jcontainer = $(this);
			jcontainer.children().addClass('hidden');
			jcontainer.append('<div class="ajaxLoading"><img src="/wp-content/themes/hjerneskadet/images/ajax_load.gif" width="16" height="16"/></div').find('.ajaxLoading img').css({top: (150 - 16) / 2, left: (jcontainer.width() - 16) / 2});
		});
	};
	
	$.fn.removeAjaxLoad = function() {
		var defaults={
			
		};
		return this.each(function(){
			var jcontainer = $(this);
			jcontainer.find('.ajaxLoading').remove();
			jcontainer.children().removeClass('hidden');
		});
	};
	
	$.fn.validateLogin = function(options){
		var defaults = {
			
		};
		options = $.extend(defaults, options); 						
		return this.each(function(){
			var that = $(this);
			that.vars = {
			
			};
			var username = that.find('#username');
			var password = that.find('#password');
			var btnLogin = that.find('.btnmain');
			username.unbind('blur.alter').unbind('focus.alter').bind('blur.alter', function(){
				   if(username.val() == ''){
						username.val("Brugernavn");
				    }
			}).bind('focus.alter', function(){
				   if(username.val() == "Brugernavn"){
						username.val('');
				    }
				});
			password.unbind('blur.alter').unbind('focus.alter').bind('blur.alter', function(){
				   if(password.val() == ''){
						password.val("Kodeord");
				    }
			}).bind('focus.alter', function(){
				   if(password.val() == "Kodeord"){
						password.val('');
				    }
				});	
			// btnLogin.unbind('click.validlogin').bind('click.validlogin',function(){
				// if(!AlertForm.requireField(username, 'Brugernavn')){
					// AlertForm.show(username, L10N.required.userName);
					// return false;
				// }
				
				// if(!AlertForm.requireField(password, 'Kodeord')){
					// AlertForm.show(password, L10N.required.passWord);
					// return false;
				// }
			// });	
		});			
	};
	
})(jQuery);

/**
 * @class: AlertForm
 * @description: minimal validation formulaire
 **/
var AlertForm = {
    vars: {
        layerClass: 'alertLayer',
        timeHide: 2000,
        timeWait: null,
        reEmail: /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i,
        rePass: /^\d{6,6}/
    },
    initialize: function(options){
        $.extend(this.vars, options);
		
        this.layer = $('<div id="alert-form" class="' + this.vars.layerClass + '">' + 
							'<p class="message">Du har tilmeldt dig nyheds-brevet � derfor har vi brug for din e-mailadresse</p>' +
						'</div>').appendTo(document.body).css('top' , -70000);
						
        $(document).unbind('mousedown.zhlayer').bind('mousedown.zhlayer', function(){
            AlertForm.hide();
        });
    },		
    show: function(element, message, offset){
			var elm = $(element),
			offs = {
				x: -4, 
				y: 1, 
				w: -4, 
				h: 0
			},
			elmoffs = elm.offset();
				
		$.extend(offs, offset);
		this.layer.css('width', 'auto').find('p.message').html(message);
		this.layer.css({
			'top': elmoffs.top + elm.outerHeight() + offs.y,
			'left': elmoffs.left + offs.x,
			'width': Math.max(0, Math.min($(window).width() - elmoffs.left + offs.x, Math.max(elm.outerWidth(), this.layer.width()))) + offs.w
		});
		
		var tag = elm[0].tagName;
		if(tag == 'INPUT' || tag == 'TEXTAREA'){
			elm[0].select();
			elm[0].focus();
		}
		
		this.layer.stop(true).fadeTo(300, 1);				
        this.layer.data('show', 1);
		
		var scrollTop = $(window).scrollTop(),
			wndHeight = $(window).height(),
			layerTop = this.layer.offset().top;
			
		if(layerTop < scrollTop){
			$('html, body').stop().animate({
				scrollTop: Math.max(0, layerTop - 50)
			});
		}else if(layerTop > scrollTop + wndHeight){
			$('html, body').stop().animate({
				scrollTop: Math.max(0, layerTop - wndHeight + 50)
			});
		}
		
        var that = this;
        clearInterval(this.vars.timeWait);
        this.vars.timeWait = setInterval(function(){
            AlertForm.hide();
        }, this.vars.timeHide);
    },
    hide: function(){
        if(this.layer.data('show')){
			clearInterval(this.vars.timeWait);
		
		
			this.layer.stop(true).fadeTo(200, 0, function(){
				AlertForm.layer.css('top', -50000);
			});
		
			
			this.layer.data('show', 0);
		}
    },
    range: function(element){
        var result = {
            text: '',
            start: 0,
            end: 0,
            length: 0 
        };
		
        if (element.setSelectionRange){	/* W3C/Gecko/IE9+ */
            result.start= element.selectionStart;
            result.end	= element.selectionEnd;
            result.text	= (result.start !== result.end) ? element.value.substring(result.start, result.end): '';
        }else if (document.selection){	/* IE8- */
            var selRange, txtRange, txtRangeDup;
            if (element.tagName && element.tagName === 'TEXTAREA'){
                selRange = document.selection.createRange().duplicate();
                txtRange = element.createTextRange();
                txtRange.collapse(false);
                txtRange.moveToBookmark(selRange.getBookmark());
                if (selRange.text === ''){
                    txtRangeDup	= txtRange.duplicate();
                    txtRangeDup.moveEnd('character', 1);
                    if (selRange.boundingWidth === txtRangeDup.boundingWidth && selRange.boundingHeight === txtRangeDup.boundingHeight){
                        txtRange = txtRangeDup;
                    }
                }
            }else{
                txtRange = document.selection.createRange().duplicate();
            }
			
            result.text = txtRange.text;
            result.start = Math.abs(txtRange.moveStart('character', -1000000));
            result.end = result.text.length + result.start;
        }else if (document.getSelection){	/* Netscape 4 */
            result.text	= document.getSelection();
            result.end	= result.text.length;
        }
		
        result.length	= result.text.length;
		
        return result;
    },
    initAlterText: function(element, init){
        var jelm = $(element);
        jelm.unbind('blur.alter').unbind('focus.alter').bind('blur.alter', function(){
            if($.trim(jelm.val()) == ''){
                jelm.val(init);
            }
        }).bind('focus.alter', function(){
            if($.trim(jelm.val()) == init){
                jelm.val('');
            }
        });
    },
    initTextRemain: function(element, counter, limit){		
		var defaults = {
			maxlength: limit
		};

		var options = $.extend(defaults, options);
		
		var update = function(e) {
			var jinput = $(this),
				jcounter = jinput.data('jcounter'),
				counted = jinput.data('counted');
			
			if(counted < 0 || counted > options.maxlength) {
				normalize(jinput, jcounter);
			}
		
			counted = options.maxlength - jinput.val().length;
			jinput.data('counted', counted);
			jcounter.text(counted);
			
			return;
		},				
		
		stop = function(e) {
			var keys = [46, 8, 9, 35, 36, 37, 38, 39, 40, 32],
				jinput = $(this);
				
			if((jinput.data('counted') || 0) <= 0){
				if(e.keyCode !== keys[0] && e.keyCode !== keys[1] && e.keyCode !== keys[2] && e.keyCode !== keys[3] && e.keyCode !== keys[4] && e.keyCode !== keys[5] && e.keyCode !== keys[6] && e.keyCode !== keys[7] && e.keyCode !== keys[8]){
					return false;
				}
			}
		},
		
		normalize = function(jinput, jcounter) {
			jinput.val(jinput.val().substring(0, options.maxlength));
			jcounter.text(options.maxlength);
		};
		
		$(element).bind('keypress.counter keydown.counter keyup.counter blur.counter focus.counter change.counter paste.counter', update)
				.bind('keydown.counter', stop)
				.data('counted', 0)
				.data('jcounter', $(counter))
				.trigger('keydown');
    },
    restrictField: function(element, strRE){
        $(element).unbind('keypress.restrict').bind('keypress.restrict', function(e){
            var code = typeof(e.charCode) != 'undefined' ? e.charCode : e.keyCode,
            key = (code == 0) ? '' : String.fromCharCode(code),
            re = new RegExp(strRE);
				
            if(key != '' && !re.test(key)){ 
                return false;
            }
        });
    },
    requireField: function(element, init){
        if(element.length && ($.trim(element.val()).length == 0 || $.trim(element.val()) == init)){
            return false;
        }
		
        return true;
    },
    validEmail: function(element){
        return this.vars.reEmail.test(element.val());
    },
	requirePass: function(element){
        return this.vars.rePass.test(element.val());
    },
	validRePass: function(element,value){
        if(element.length && ($.trim(element.val()) != $.trim(value.val()))){
            return false;
        }
		
        return true;
    }
};

