/*
 * jQuery UI Stars v2.0.0
 *
 * Copyright (c) 2009 Orkan (orkans@gmail.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Rev: 50 $
 * $Date:: 2009-05-05 #$
 * $Build: 3 (2009-05-05)
 *
 * Depends:
 *  ui.core.js
 *
 */	
 (function($){$.fn.clearField=function(s){s=jQuery.extend({blurClass:'clearFieldBlurred',activeClass:'clearFieldActive',attribute:'rel',value:''},s);return $(this).each(function(){var el=$(this);s.value=el.val();if(el.attr(s.attribute)==undefined){el.attr(s.attribute,el.val()).addClass(s.blurClass)}else{s.value=el.attr(s.attribute)}el.focus(function(){if(el.val()==el.attr(s.attribute)){el.val('').removeClass(s.blurClass).addClass(s.activeClass)}});el.blur(function(){if(el.val()==''){el.val(el.attr(s.attribute)).removeClass(s.activeClass).addClass(s.blurClass)}})})}})(jQuery);

 (function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);

 
(function(A){A.widget("ui.stars",{_init:function(){var B=this,E=this.options;E.isSelect=E.inputType=="select";this.$selec=E.isSelect?A("select",this.element):null;this.$rboxs=E.isSelect?A("option",this.$selec):A(":radio",this.element);this.$stars=this.$rboxs.map(function(H){if(H==0){E.split=typeof E.split!="number"?0:E.split;E.val2id=[];E.id2val=[];E.id2title=[];E.name=E.isSelect?B.$selec.get(0).name:this.name;E.disabled=E.disabled||(E.isSelect?A(B.$selec).attr("disabled"):A(this).attr("disabled"));E.items=0}E.items++;E.val2id[this.value]=H;E.id2val[H]=this.value;E.id2title[H]=(E.isSelect?this.text:this.title)||this.value;if(E.selected==H||(E.selected==-1&&(E.isSelect?this.defaultSelected:this.defaultChecked))){E.checked=H;E.value=E.id2val[H];E.title=E.id2title[H]}var G=A("<div/>").addClass(E.starClass);var I=A("<a/>").attr("title",E.showTitles?E.id2title[H]:"").text(this.value);if(E.split){var F=(H%E.split);var J=Math.floor(E.starWidth/E.split);G.width(J);I.css("margin-left","-"+(F*J)+"px")}return G.append(I).get(0)});this.$cancel=A("<div/>").addClass(E.cancelClass).append(A("<a/>").attr("title",E.showTitles?E.cancelTitle:"").text(E.cancelValue));this.$value=A('<input type="hidden" name="'+E.name+'" value="'+E.value+'" />');E.cancelShow&=!E.disabled&&!E.oneVoteOnly;if(E.cancelShow){this.element.append(this.$cancel)}this.element.append(this.$stars);this.element.append(this.$value);E.isSelect?this.$selec.remove():this.$rboxs.remove();if(E.checked===undefined){E.checked=-1;E.value=E.cancelValue;E.title="";if(E.cancelShow){this._disableCancel()}}else{C(E.checked,false)}E.disabled&&this.disable();A(window).bind("unload",function(){B.$cancel.unbind(".stars");B.$stars.unbind(".stars");B.$selec=B.$rboxs=B.$stars=B.$value=B.$cancel=null});function D(){B.$stars.removeClass(E.starOnClass+" "+E.starHoverClass);B._showCap("")}function C(F,H){if(F!=-1){var I=H?E.starHoverClass:E.starOnClass;var G=H?E.starOnClass:E.starHoverClass;B.$stars.eq(F).prevAll("."+E.starClass).andSelf().removeClass(G).addClass(I);B.$stars.eq(F).nextAll("."+E.starClass).removeClass(E.starHoverClass+" "+E.starOnClass);B._showCap(E.id2title[F])}else{D()}}this.$stars.bind("click.stars",function(){if(!E.forceSelect&&E.disabled){return false}var F=B.$stars.index(this);E.checked=F;E.value=E.id2val[F];E.title=E.id2title[F];B.$value.attr({disabled:E.disabled?"disabled":"",value:E.value});C(F,false);B._disableCancel();if(!E.forceSelect){B.callback("star")}}).bind("mouseover.stars",function(){if(E.disabled){return false}var F=B.$stars.index(this);C(F,true)}).bind("mouseout.stars",function(){if(E.disabled){return false}C(B.options.checked,false)});this.$cancel.bind("click.stars",function(){if(!E.forceSelect&&(E.disabled||(E.value==E.cancelValue))){return false}E.checked=-1;E.value=E.cancelValue;E.title="";B.$value.attr({disabled:"disabled",value:E.value});D();B._disableCancel();(!E.forceSelect)&&B.callback("cancel")}).bind("mouseover.stars",function(){if(B._disableCancel()){return false}B.$cancel.addClass(E.cancelHoverClass);D();B._showCap(E.cancelTitle)}).bind("mouseout.stars",function(){if(B._disableCancel()){return false}B.$cancel.removeClass(E.cancelHoverClass);B.$stars.triggerHandler("mouseout.stars")})},_disableCancel:function(){var C=this.options,B=C.disabled||C.oneVoteOnly||(C.value==C.cancelValue);if(B){this.$cancel.removeClass(C.cancelHoverClass).addClass(C.cancelDisabledClass)}else{this.$cancel.removeClass(C.cancelDisabledClass)}this.$cancel.css("opacity",B?0.5:1);return B},_disableAll:function(){var B=this.options;this._disableCancel();if(B.disabled){this.$stars.filter("div").addClass(B.starDisabledClass)}else{this.$stars.filter("div").removeClass(B.starDisabledClass)}},_showCap:function(B){var C=this.options;if(C.captionEl){C.captionEl.text(B)}},value:function(){return this.options.value},select:function(D){var C=this.options,B=(D==C.cancelValue)?this.$cancel:this.$stars.eq(C.val2id[D]);C.forceSelect=true;B.triggerHandler("click.stars");C.forceSelect=false},selectID:function(D){var C=this.options,B=(D==-1)?this.$cancel:this.$stars.eq(D);C.forceSelect=true;B.triggerHandler("click.stars");C.forceSelect=false},enable:function(){this.options.disabled=false;this._disableAll()},disable:function(){this.options.disabled=true;this._disableAll()},destroy:function(){this.options.isSelect?this.$selec.appendTo(this.element):this.$rboxs.appendTo(this.element);this.$cancel.unbind(".stars").remove();this.$stars.unbind(".stars").remove();this.$value.remove();this.element.unbind(".stars").removeData("stars")},callback:function(B){var C=this.options;C.callback(this,B,C.value);C.oneVoteOnly&&!C.disabled&&this.disable()}});A.extend(A.ui.stars,{version:"2.0.0",getter:"value",defaults:{inputType:"radio",split:0,selected:-1,disabled:false,cancelTitle:"Cancel Rating",cancelValue:0,cancelShow:true,oneVoteOnly:false,showTitles:false,captionEl:null,callback:function(C,B,D){},starWidth:16,cancelClass:"ui-stars-cancel",starClass:"ui-stars-star",starOnClass:"ui-stars-star-on",starHoverClass:"ui-stars-star-hover",starDisabledClass:"ui-stars-star-disabled",cancelHoverClass:"ui-stars-cancel-hover",cancelDisabledClass:"ui-stars-cancel-disabled"}})})(jQuery);


/*
composed by Brian Jaeger
home page: brianjaeger.com
*/
(function ($) {
  $.fn.limitkeypress = function (options) {
    var defaults = {
		rexp: /^[-+]?\d*\.?\d*$/ //only positive or negitive decimal numbers are allowed 
	};
	var options = $.extend(defaults, options);
	
	return this.each(function() {
		var regExpression = options.rexp; //get the regular expression
		
		$(this).blur(function() { 
			//this fixes the problem of paste of invalid data then loss of focus ie clicked submit button or tab 
			sanitize(this);
		});
		
		$(this).keypress(function(e) {
			//allow backspace(8), enter(13), and other non character keypress events
			if (e.which == "0" || e.which == "8" || e.which == "13" || e.ctrlKey || e.altKey){ 
				return;
			}
			
			//this fixes the problem of blur not triggering on enter keypress and it alows valid keypress events after an invalid paste/auto complete
			sanitizeWithSelection(this); 
			
			var pressedChar = String.fromCharCode(e.which),  //get string value for pressed char
				//insert the pressed char at the caret/cursor location for testing
				updatedInput = this.value.substring(0, getSelectionStart(this))+pressedChar+this.value.substring(getSelectionEnd(this), this.value.length);
			if (!regExpression.test(updatedInput)) {
				e.preventDefault(); //stop the keypress event
				return;
			}
			return;
		});
		
		//steps throu each char  of a text input value validating each char + the next if the add is valid... 
		function sanitizeWithSelection(o) {
			var startCaretPos = getSelectionStart(o),
				endCaretPos = getSelectionEnd(o),
				temp = "",
				testPlusChar = "",
				selectionCharInfo = [];
			
			//records selection information for each char
			for (i=0;i<o.value.length;i++) {
				if (startCaretPos > i){
					selectionCharInfo[i] = 'beforeSelection';
				} else if ((startCaretPos <= i) && (endCaretPos > i)) {
					selectionCharInfo[i] = 'inSelection';
				} //note: if a char after the selection is invalid the selection would not change if that char is removed...
			}
			
			for (i=0;i<o.value.length;i++) {
				var iPlusOne = i + 1;
				testPlusChar += o.value.substring(i,iPlusOne);
				if ((!regExpression.test(testPlusChar))) {
					var lastChar = testPlusChar.length-1;
					temp = testPlusChar.substring(0,lastChar);
					testPlusChar = temp;
					if (selectionCharInfo[i] == 'beforeSelection'){
						startCaretPos = startCaretPos - 1;
						endCaretPos = endCaretPos - 1;
					} else if (selectionCharInfo[i] == 'inSelection'){
						endCaretPos = endCaretPos - 1;
					}
				}
			}
			o.value = testPlusChar;
			setSelectionRange (o,startCaretPos,endCaretPos);
		}
		
		//steps throu each char  of a text input value validating each char + the next if the add is valid... 
		function sanitize(o) {
			var temp = "",
				testPlusChar = "";
				
			for (i=0;i<o.value.length;i++) {
				var iPlusOne = i+1;
				testPlusChar += o.value.substring(i,iPlusOne);
				if ((!regExpression.test(testPlusChar))) {
					var lastChar = testPlusChar.length-1;
					temp = testPlusChar.substring(0,lastChar);
					testPlusChar = temp;
				}
			}
			o.value = testPlusChar;
		}
		
		//from: http://javascript.nwbox.com/cursor_position/
		function getSelectionStart(o) {
			if (o.createTextRange) {
				var r = document.selection.createRange().duplicate()
				r.moveEnd('character', o.value.length)
				if (r.text == '') return o.value.length
				return o.value.lastIndexOf(r.text)
			} else return o.selectionStart
		}
		
		//from: http://javascript.nwbox.com/cursor_position/
		function getSelectionEnd(o) {
			if (o.createTextRange) {
				var r = document.selection.createRange().duplicate()
				r.moveStart('character', -o.value.length)
				return r.text.length
			} else return o.selectionEnd
		}
		
		//from http://www.codingforums.com/archive/index.php/t-90176.html
		function setSelectionRange(input, selectionStart, selectionEnd){
			if (input.setSelectionRange) {
				input.focus();
				input.setSelectionRange(selectionStart, selectionEnd);
			}
			else if (input.createTextRange) {
				var range = input.createTextRange();
				range.collapse(true);
				range.moveEnd('character', selectionEnd);
				range.moveStart('character', selectionStart);
				range.select();
			}
		}
    });
  };
})(jQuery);
