
// c2 Javascript Library version 1.0
// jQuery > 1.3.2 required


// openWindow

function openWindow(url,name,specs,replace) {
	var _url = "";
	var _name = "_blank";
	var _replace = false;
	// assign site defaults in _specs, remove fields you don't need
	var _specs = {
		height: 500,
		width: 500,
		location: 'yes',
		menubar: 'no',
		resizable: 'yes',
		scrollbars: 'yes',
		status: 'yes',
		titlebar: 'yes',
		toolbar: 'no'
		};
	if(url) { _url = url; }
	// cleans up name so it doesn't cause ie6 errors
	if(name) { _name = name.replace(/[\s-]*/g,""); }
	if(replace) { _replace = replace; }
	$.extend(_specs, specs);
	specs = "";
	for(var key in _specs) {
		if(specs.length !== 0) { specs += ","; }
		specs += key + '=' + _specs[key];
	}
	var win = window.open(_url,_name,specs,_replace);
	win.focus();
	return false;
}


// Submit on Enter Key
// onkeypress="return enterKey(event,'objectID')"
function enterKey(e,selector) {
	if(!e) e = window.event;
	var key = e.which;
	if(!key) key = e.keyCode;
	
	if (key && key == 13) {
		jQuery(selector).each(function() {
			if(this.tagName == 'A') {
				var href = this.href.replace(window.location,"");
				if(href.indexOf('javascript') >= 0) {
					eval(unescape(this.href.replace(/^javascript:/i,"")));
				}
				else {
					this.onclick();
				}
				return false;
			}
			else if(this.tagName == 'INPUT' || this.tagName == 'BUTTON') {
				this.click();
				return false;
			}
			else if(this.tagName == 'FORM') {
				this.submit();
			}
		});
	}
	return true;
}

(function($) {

$.fn.enterKey = function(selector) {
	return this.each(function() {
		$(this).keypress(function(e) {
			if(e.which == 13) {
				$(selector).each(function() {
					if(this.tagName == 'A') {
						var href = this.href.replace(window.location,"");
						if(href.indexOf('javascript') >= 0) {
							eval(unescape(this.href.replace(/^javascript:/i,"")));
						}
						else {
							this.onclick();
						}
						e.preventDefault();
					}
					else if(this.tagName == 'INPUT' || this.tagName == 'BUTTON') {
						this.click();
						e.preventDefault();
					}
					else if(this.tagName == 'FORM') {
						this.submit();
					}
				});
			}
		});
	});
};

})(jQuery);


function inputFocus(object, defaultValue) {
    var val;
    if(defaultValue) { val = defaultValue; }
    else { val = object.defaultValue; }
    if(val == object.value) {
        object.value = "";
    }
	$(object).removeClass('defaultValue').addClass('userValue');
}
function inputBlur(object, defaultValue) {
    if(object.value.replace(/\s/g,"").length < 1) {
		$(object).addClass('defaultValue').removeClass('userValue');
        var val;
        if(defaultValue) { val = defaultValue; }
        else { val = object.defaultValue; }
        object.value = val;
    }
}

(function($) {

$.fn.defaultVal = function(defaultValue) {
	return this.each(function() {
		var val = this.defaultValue;
		if(defaultValue) { val = defaultValue; }
		$(this).focus(function() {
			if(val == this.value && !$(this).hasClass('userValue')) {
				this.value = "";
			}
			$(this).removeClass('defaultValue').addClass('userValue');
		});
		$(this).blur(function() {
			if(this.value.replace(/\s/g,"").length < 1) {
				$(this).addClass('defaultValue').removeClass('userValue');
				this.value = val;
			}
		});
	});
};

})(jQuery);


// Slider

(function($) {

$.fn.slider = function(options) {
	var opts = $.extend({}, $.fn.slider.defaults, options);
	var anim = {time:0, begin:0, change:0.0, timer:null, rotate:null};
	var current = 1;
	var count = 1;
	var hover = false;
	var frame = this[0];
	
	if(frame) {
		
		if(frame.id.length > 0 && opts.prefix == $.fn.slider.defaults.prefix) {
			opts.prefix = frame.id + '_';
		}
		
		var wrapper = $(frame).find('>ul');
		var slides = wrapper.find('>li');
		count = slides.length;
		for(var x=0;x<count;x++) {
			slides[x].id = opts.prefix + (x+1);
		}
		
		if(opts.direction === 0) {
			wrapper.css('width', slides[0].offsetWidth * (slides.length + opts.totalVisible) + "px");
			//wrapper.style.paddingRight = this.frame.offsetWidth + "px"
			
			frame.scrollLeft = opts.padding;
		}
		else {
			//wrapper.style.height = slides[0].offsetHeight * (slides.length + this.settings.totalVisible) + "px";
			wrapper.css('padding-bottom', frame.offsetHeight + "px");
			
			frame.scrollTop = opts.padding;
		}
		
		if(opts.pauseOnMouseOver && opts.setRotate > 0) {
			$(frame, opts.next, opts.previous).hover(function() {
				clearTimeout(anim.rotate);
				anim.rotate = null;
				hover = true;
			},
			function() {
				clearTimeout(anim.rotate);
				anim.rotate = null;
				hover = false;
				anim.rotate = setTimeout(function() { moveNext(); }, opts.setRotate);
			});
		}
		
		if(opts.scrollWheel) {
			initWheel();
		}
		
		if(opts.next) {
			$(opts.next).click(function(e) {
				moveNext();
				e.preventDefault();
			});
		}
		if(opts.previous) {
			$(opts.previous).click(function(e) {
				movePrevious();
				e.preventDefault();
			});
		}
		
		if(opts.onAfterInit) {
			opts.onAfterInit();
		}
		
		if(opts.debug) {
			if(opts.trimEnding && opts.pageSlide) { alert('Warning:\nsettings.trimEnding and settings.pageSlide are both set to "true".'); }
		}
		
		if(opts.setRotate > 0 && !hover) {
			anim.rotate = setTimeout(function() { moveNext(); }, opts.setRotate);
		}
	}
	function go(num) {
		clearTimeout(anim.rotate);
		anim.rotate = null;
		
		if(opts.onBeforeMove) {
			opts.onBeforeMove(num);
		}
		
		current = num;
		
		var position = $('#' + opts.prefix + current).position();
		var offset = $('#' + opts.prefix + 1).position();
		
		
		var scrollOffset = 0;
		if(opts.direction === 0) {
			scrollOffset = frame.scrollLeft - opts.padding;
			anim.change = position.left - offset.left - scrollOffset;
		}
		else if(opts.direction == 1) {
			scrollOffset = frame.scrollTop - opts.padding;
			anim.change = position.top - offset.top - scrollOffset;
		}
		
		if (anim.timer !== null) {
			clearInterval(anim.timer);
			anim.timer = null;
		}
		anim.time = 0;
		anim.begin = scrollOffset;
		
		anim.timer = setInterval(function() { scroll(); }, opts.speed);
	}
	function scroll() {
		if (anim.time > opts.duration) {
			clearInterval(anim.timer);
			anim.timer = null;
			
			if(opts.setRotate > 0 && !hover) {
				anim.rotate = setTimeout(function() { moveNext(); }, opts.setRotate);
			}
			
			if(opts.onMoveComplete) {
				opts.onMoveComplete();
			}
		}
		else {
			var move = $.easing[opts.ease](null, anim.time, anim.begin, anim.change, opts.duration);
			if(opts.direction === 0) {
				frame.scrollLeft = move + opts.padding;
			}
			else if(opts.direction == 1) {
				frame.scrollTop = move + opts.padding;
			}
			anim.time++;
		}
	}
	function moveNext() {
		var num;
		if(opts.pageSlide) {
			num = current + opts.totalVisible;
		}
		else {
			num = current + 1;
		}
		if((opts.trimEnding && num > count - opts.totalVisible + 1) || (!opts.trimEnding && num > count)) {
			if(opts.disableWrap) {
				return false;
			}
			else {
				num = 1;
			}
		}
		go(num);
	}
	function movePrevious() {
		var num;
		if(opts.pageSlide) {
			num = current - opts.totalVisible;
		}
		else {
			num = current - 1;
		}
		if(num < 1) {
			if(opts.disableWrap) {
				return false;
			}
			else {
				if(opts.trimEnding) {
					num = count - opts.totalVisible + 1;
				}
				else {
					if(opts.pageSlide) {
						if(count % opts.totalVisible !== 0) {
							num = count - (count % opts.totalVisible) + 1;
						}
						else {
							num = count - opts.totalVisible + 1;
						}
					}
					else {
						num = count;
					}
				}
			}
		}
		go(num);
	}
	function initWheel() {
		$(frame).mousewheel(function(e, delta) {
			if(delta < 0) {
				moveNext();
			}
			else if(delta > 0) {
				movePrevious();
			}
			e.preventDefault();
		});
	}
};
$.fn.slider.defaults = {
	next: null,
	previous: null,
	direction: 0,
	totalVisible: 1,
	prefix: "filmstrip",
	ease: "easeInOutSine",
	trimEnding: false,
	disableWrap: false,
	setRotate: 0,
	pauseOnHover: false,
	scrollWheel: false,
	pageSlide: false,
	padding: 0,
	duration: 50,
	speed: 15, 
	debug: false,
	onBeforeMove: null,
	onMoveComplete: null,
	onAfterInit: null
};

})(jQuery);


// slideshow

(function($) {

$.fn.slideshow = function(options) {
	var opts = $.extend({}, $.fn.slideshow.defaults, options);
	var anim = {paused:false,rotate:null,fade:null,number:0,previous:0,count:0,opacity:0};
	anim.paused = opts.paused;
	var frame = this[0];
	
	if(frame) {
		frame.style.position = "relative";
		
		var slides = frame.getElementsByTagName('li');
		anim.count = slides.length;
		if(slides.length > 1) {
			for(var x=0;x<slides.length;x++) {
				slides[x].style.position = "absolute";
				slides[x].style.top = "0px";
				slides[x].style.left = "0px";
				if(x > 0) {
					slides[x].style.zIndex = "100";
					slides[x].style.opacity = "0";
					slides[x].style.filter = "alpha(Opacity=0)";
				}
				else {
					slides[0].style.zIndex = "200";
				}
			}
			if(!anim.paused) {
				callInterval();
			}
		}

		if(opts.next) {
			$(opts.next).click(function(e) {
				change('++');
				e.preventDefault();
			});
		}
		if(opts.previous) {
			$(opts.previous).click(function(e) {
				change('--');
				e.preventDefault();
			});
		}
		if(opts.togglePlay) {
			$(opts.togglePlay).click(function(e) {
				if(!anim.paused) {
					clearTimeout(anim.rotate);
					anim.paused = true;
					$(frame).removeClass('slidePause');
				}
				else {
					callInterval();
					anim.paused = false;
					$(frame).addClass('slidePause');
				}
				e.preventDefault();
			});
		}
	}
		
	function callInterval() {
		anim.rotate = setTimeout(function() { change('++'); }, opts.slideSpeed);
	}
	function state(num,casenum) {
		var node = slides[num];
		switch(casenum) {
			case 1:
				node.style.zIndex = "100";
				node.style.opacity = "0";
				node.style.filter = "alpha(Opacity=0)";
				break;
			case 2:
				node.style.zIndex = "150";
				node.style.opacity = "1";
				node.style.filter = "alpha(Opacity=100)";
				break;
			case 3:
				node.style.zIndex = "200";
				node.style.opacity = (anim.opacity / 100);
				node.style.filter = "alpha(Opacity="+anim.opacity+")";
				break;
		}
	}
	function bounds(num) {
		if(num >= anim.count) {
			num = 0;
		}
		if(num < 0) {
			num = anim.count - 1;
		}
		return num;
	}
	function change(arg) {
		if(slides.length > 1) {
			clearInterval(anim.fade);
			clearTimeout(anim.rotate);
			
			if(anim.previous != anim.number) {
				// hide the previous slide
				state(anim.previous,1);
				// set the previous slide to the current
				anim.previous = anim.number;
				anim.opacity = 50;
			}

			// increment the current slide
			if(arg == '++') {
				anim.number = anim.number + 1;
			}
			else if(arg == '--') {
				anim.number = anim.number - 1;
			}
			else {
				anim.number = Number(arg);
			}
			anim.number = bounds(anim.number);
			
			// set the slides to the correct states
			state(anim.previous,2);
			state(anim.number,3);
			
			anim.fade = setInterval(function() {fade(); }, opts.fadeSpeed);
		}
	}
	function fade() {
		var nextNode = slides[anim.number];
		anim.opacity = anim.opacity + opts.fadeChange;
		if(anim.opacity >= 100) {
			nextNode.style.opacity = "1";
			nextNode.style.filter = "alpha(Opacity=100)";
			// hide the previous slide
			state(anim.previous,1);
			
			anim.opacity = 0;
			anim.previous = anim.number;
			clearInterval(anim.fade);
			if(!anim.paused) {
				anim.rotate = setTimeout(function() { change('++'); }, opts.slideSpeed);
			}
		}
		else {
			nextNode.style.opacity = (anim.opacity / 100);
			nextNode.style.filter = "alpha(Opacity="+anim.opacity+")";
		}
	}
	return this;
};
$.fn.slideshow.defaults = {
	next: null,
	previous: null,
	togglePlay: null,
	slideSpeed: 5000,
	fadeSpeed: 25,
	fadeChange: 5,
	paused: false
};

})(jQuery);


/*
Required:
	- scrollBox.elems.frame;  //The viewing window of the box you want to scroll.

Optional: 
	- scrollBox.elems.up;    	 	  //The up button.
	- scrollBox.elems.down;  		  //The down button.
	- scrollBox.options.mouseWheel;   //Set to 'false' if scrolling with mousewheel is not wanted. Defaults to 'true'.
	- scrollBox.options.scrollSpeed;  //How fast the animation of the scrolling is called.
	- scrollBox.options.wheelSpeed;   //How many pixels the box scrolls on mousewheel.
	- scrollBox.options.clickSpeed;   //How many pixles the box scrolls based on click of up/down buttons.
*/

function scrollBox() {
	var self = this;
	this.elems = {frame: null, up: null, down: null};
	this.options = {scrollSpeed: 20, wheelSpeed: 30, clickSpeed: 2, increment: 2, mouseWheel: true};
	this.anim = {slideDown: null, slideUp: null };
	this.init = function () {
		if(this.elems.frame){
			if(this.elems.down){
				this.elems.down.onmousedown = function() {
					self.options.increment = self.options.clickSpeed;
					self.anim.slideDown = setInterval(function(){self.scrollDown();}, self.options.scrollSpeed);
					return false;
				};
				this.elems.down.onmouseup = this.elems.down.onmouseout = function() {
					if(typeof(self.anim.slideDown) != 'undefined') {
						clearInterval(self.anim.slideDown);
					}
				};
			}
			if(this.elems.up){
				this.elems.up.onmousedown = function() {
					self.options.increment = self.options.clickSpeed;
					self.anim.slideUp = setInterval(function(){self.scrollUp();}, self.options.scrollSpeed);
					return false;
				};
				this.elems.up.onmouseup = this.elems.up.onmouseout = function() {
					if(typeof(self.anim.slideUp) != 'undefined') {
						clearInterval(self.anim.slideUp);
					}
				};
			}
			if(this.options.mouseWheel){
				self.initWheel();
			}
		}
	};
	this.scrollDown = function() {
		this.elems.frame.scrollTop = this.elems.frame.scrollTop + this.options.increment;
	};
	this.scrollUp = function() {
		this.elems.frame.scrollTop = this.elems.frame.scrollTop - this.options.increment;
	};
	this.initWheel = function() {
		if (this.elems.frame.addEventListener) {
			/** DOMMouseScroll is for mozilla. */
			this.elems.frame.addEventListener('DOMMouseScroll', self.scrollWheel, false);
		}
		/** IE/Opera. */
		this.elems.frame.onmousewheel = this.scrollWheel;
	};			
	this.scrollWheel = function(event){
		var delta = 0;
        if (!event) { /* For IE. */
            event = window.event;
		}
        if (event.wheelDelta) { /* IE/Opera. */
            delta = event.wheelDelta/120;
        } 
		else if (event.detail) { /** Mozilla case. */
            delta = -event.detail/3;
        }
        if (delta) {
			if(delta < 0) {
				self.options.increment = self.options.wheelSpeed;
				self.scrollDown();
			}
			else {
				self.options.increment = self.options.wheelSpeed;
				self.scrollUp();
			}
		}
        if (event.preventDefault) {
			event.preventDefault();
		}
		event.returnValue = false;
	};
}


// textLimit

(function($) {

$.fn.textLimit = function(options) {
	var opts = $.extend({}, $.fn.textLimit.defaults, options);

	return this.each(function() {
		
		var $this = $(this);
		if(!opts.allowOver) {
			$this.keydown(function(e) {
				if(this.value.length >= opts.limit) {
					if(document.selection && document.selection.createRange().text.length > 0) {
						return;
					}
					else if(this.selectionEnd - this.selectionStart > 0) {
						return;
					}
					var key = e.which;
					if(key > 46 || key == 13 || key == 32) {
						e.preventDefault();
					}
				}
			});
		}
		$this.bind('keyup onchange', function() {
			var val = clean(this.value);
			if(!opts.allowOver && val.length > opts.limit) {
				val = val.substr(0, opts.limit);
			}
			if(this.value != val) {
				this.value = val;
				this.scrollTop = this.scrollHeight;
			}
			setCount(val.length);
			setRemaining(val.length);
		});
		setTimeout(function() {
				setCount($this.val().length);
				setRemaining($this.val().length);
			}, 10);
		
	});
	
	function setCount(length) {
		if(opts.count) {
			opts.count.innerHTML = length;
			adjustStyle(opts.count, length);
		}
	}
	function setRemaining(length) {
		if(opts.remaining) {
			opts.remaining.innerHTML = opts.limit - length;
			adjustStyle(opts.remaining, length);
		}
	}
	function adjustStyle(object, length) {
		if(length > opts.limit) {
			$(object).addClass(opts.overClass);
		}
		else {
			$(object).removeClass(opts.overClass);
		}
	}
	function clean(value) {
		return value.replace(opts.regex, '');
	}
};
$.fn.textLimit.defaults = {
	limit: 200,
	regex: /<[^ ]\/?[^>]+>/gi,
	allowOver: false,
	count: null,
	remaining: null,
	overClass: 'error'
};

})(jQuery);



// HTML Truncator:
//		var html = document.getElementById('html').value.truncate(500, '&hellip;');

String.prototype.truncate = function(maxLength, suffix) {
	if(!maxLength) { maxLength = 100; }
	var html = this.replace(/& /g,"&amp; ").replace(/< /g,"&lt; ").replace(/\n|\t/g,"").replace(/(<script\ .*?>.*?<\/script>)|<!.*?>/ig,"").replace(/  /g," ");
	var re = /(?:(?:<([a-z0-9\/]+)([^<>]*)>)|(&[a-z]+;|#[0-9]+;))([^<&]*)/im;
	var teaser = "";
	if(html.match(re)) {
		teaser = html.substring(0, html.indexOf(html.match(re)[0]));
	}
	else {
		teaser = html;
	}
	var count = teaser.length;
	if(count >= maxLength) {
		teaser = teaser.substring(0, maxLength);
		if(suffix && count != maxLength) {
			teaser += suffix;
		}
	}
	else if(html.length > maxLength) {
		var stack = [];
		var startIndex = 0;
		var totalLength = html.length;
		var result, pos, temp;
		while(startIndex < totalLength) {
			result = re.exec(html);
			if (result && result.length > 0 && result[0].length > 0 && count < maxLength) {
				pos = html.indexOf(result[0]);
				startIndex += pos;
				if(result[1] && result[1].indexOf('/') < 0) {
					if(result[2].length === 0 || result[2].lastIndexOf('/') != result[2].length-1) {
						stack.push(result[1]);
					}
					teaser += "<" + result[1] + result[2] + ">";
				}
				else if(result[3]) {
					teaser += result[3];
					count++;
				}
				else {
					var pop = stack.pop();
					if("/" + pop == result[1]) {
						teaser += "<" + result[1] + ">";
					}
					else {
						alert('invalid html: ' + result[0]);
						break;
					}
				}
				temp = result[4];
				if(count + temp.length > maxLength) {
					temp = temp.substring(0, maxLength - count);
					teaser += temp;
					if(suffix) {
						teaser += suffix;
					}
					break;
				}
				else {
					teaser += temp;
					count += temp.length;
				}
				html = html.substr(pos + result[0].length);
				startIndex += result[0].length;
			}
			else if(suffix && count == maxLength && result[4].length > 0) {
				teaser += suffix;
				break;
			}
			else {
				break;
			}
		}
		for(var x=stack.length-1;x>-1;x--) {
			teaser += "</" + stack[x] + ">";
		}
	}
	else {
		teaser = html;
	}
	return teaser;
};

String.prototype.trim = function(str) {
	if(str && str.length > 0) {
		var s = this;
		if(s.indexOf(str) === 0) {
			s = s.substring(str.length,s.length);
		}
		if(s.lastIndexOf(str) == s.length - str.length) {
			s = s.substring(0, s.length - str.length);
		}
		return s;
	}
	else {
		return this.replace(/^\s+|\s+$/g,"");
	}
};

String.prototype.ltrim = function(str) {
	if(str && str.length > 0) {
		if(this.indexOf(str) === 0) {
			return this.substring(str.length,this.length);
		}
		else {
			return this;
		}
	}
	else {
		return this.replace(/^\s+/,"");
	}
};

String.prototype.rtrim = function(str) {
	if(str && str.length > 0) {
		if(this.lastIndexOf(str) == this.length - str.length) {
			return this.substring(0, this.length - str.length);
		}
		else {
			return this;
		}
	}
	else {
		return this.replace(/\s+$/,"");
	}
};


// validation

(function($) {

$.fn.validation = function(options) {
	var opts = $.extend({}, $.fn.validation.defaults, options);
	var frame = this[0];
	
	if(frame) {
		$(frame).find('.requiredField')
			.blur(function() {
				checkRequired(this);
			})
			.end()
			.find('.requiredEmail')
			.blur(function() {
				checkEmail(this);
			});
		if(opts.button) {
			if(opts.button.tagName == "FORM") {
				$(opts.button).submit(function(e) {
					if(!submit()) {
						e.preventDefault();
					}
				});
			}
			else {
				$(opts.button).click(function(e) {
					if(!submit()) {
						e.preventDefault();
					}
				});
			}
		}
		else {
			$(frame).find('input:submit, input:image').click(function(e) {
				if(!submit()) {
					e.preventDefault();
				}
			});
		}
	}
	function submit() {
	    var count = 0;
		if(opts.beforeSubmit) { opts.beforeSubmit(); }
		if(opts.customValidation) { count = opts.customValidation(); }
		var requiredField = $(frame).find('.requiredField');
		for(var x=0;x<requiredField.length;x++) {
			if(!checkRequired(requiredField[x])) {
				count++;
			}
		}
		var requiredEmail = $(frame).find('.requiredEmail');
		for(x=0;x<requiredEmail.length;x++) {
			if(!checkEmail(requiredEmail[x])) {
				count++;
			}
		}
		if(opts.afterSubmit) { opts.afterSubmit(); }
		if(count > 0) {
			if(opts.validationFail) { opts.validationFail(); }
			return false;
		}
		else {
			if(opts.validationSuccess) { opts.validationSuccess(); }
			return true;
		}
	}
	function checkRequired(field) {
		if(!field.disabled) {
			var reqFieldName = null;
			if(field.id.length > 0) {
			    reqFieldName = field.id + opts.suffix;
			}
			if(field.tagName == "INPUT" || field.tagName == "TEXTAREA") {
				if(field.type == "text" || field.type == "password" || field.type == "hidden" || field.tagName == "TEXTAREA") {
					if($.trim(field.value).length > 0) {
						$(field).removeClass('highlight');
						if(reqFieldName && document.getElementById(reqFieldName)) {
							document.getElementById(reqFieldName).innerHTML = "";
						}
						return true;
					}
					else {
						$(field).addClass('highlight');
						if(field.title.length > 0) {
							if(reqFieldName && document.getElementById(reqFieldName)) {
								document.getElementById(reqFieldName).innerHTML = field.title;
							}
							else {
								$(field).after('<span id="'+reqFieldName+'" class="required">'+field.title+'</span>');
							}
						}
						return false;
					}
				}
				if(field.type == "checkbox") {
					if(field.checked) {
						if(reqFieldName && document.getElementById(reqFieldName)) {
							document.getElementById(reqFieldName).innerHTML = "";
						}
						return true;
					}
					else {
						if(field.title.length > 0) {
							if(reqFieldName && document.getElementById(reqFieldName)) {
								document.getElementById(reqFieldName).innerHTML = field.title;
							}
							else {
								$(field).after('<span id="'+reqFieldName+'" class="required">'+field.title+'</span>');
							}
						}
						return false;
					}
				}
			}
			if(field.tagName == "SELECT") {
				if(field.selectedIndex > 0) {
					$(field).removeClass('highlight');
					if(reqFieldName && document.getElementById(reqFieldName)) {
						document.getElementById(reqFieldName).innerHTML = "";
					}
					return true;
				}
				else {
					$(field).addClass('highlight');
					if(field.title.length > 0) {
						if(reqFieldName && document.getElementById(reqFieldName)) {
							document.getElementById(reqFieldName).innerHTML = field.title;
						}
						else {
							$(field).after('<span id="'+reqFieldName+'" class="required">'+field.title+'</span>');
						}
					}
					return false;
				}
			}
		}
		else {
			return true;
		}
	}
	function checkEmail(field) {
		if(!field.disabled) {
			var reqFieldName = null;
			if(field.id.length > 0) {
			    reqFieldName = field.id + opts.suffix;
			}
			var emailRegex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/ig;
			if(field.value.match(emailRegex)) {
				$(field).removeClass('highlight');
				if(reqFieldName && document.getElementById(reqFieldName)) {
					document.getElementById(reqFieldName).innerHTML = "";
				}
				return true;
			}
			else {
				$(field).addClass('highlight');
				if(reqFieldName && document.getElementById(reqFieldName)) {
					document.getElementById(reqFieldName).innerHTML = field.title;
				}
				else {
					$(field).after('<span id="'+reqFieldName+'" class="required">'+field.title+'</span>');
				}
				return false;
			}
		}
		else {
			return true;
		}
	}
	return this;
};
$.fn.validation.defaults = {
	button: null,
	suffix: "_validate",
	beforeSubmit: null,
	afterSubmit: null,
	validationFail: null,
	validationSuccess: null,
	customValidation: null
};

})(jQuery);


jQuery.fn.posRelativeToId = function(id) {
	var elemX = 0;
	var elemY = 0;
	var elemFind = this[0];
	do {
		if(id && elemFind.id == id) { break; }
		elemX += elemFind.offsetLeft;
		elemY += elemFind.offsetTop;
	} while(elemFind = elemFind.offsetParent)
	return {left:elemX, top:elemY};
};
jQuery.getQuery = function(param) {
	var p = escape(unescape(param));
	var regex = new RegExp("[?&]" + p + "(?:=([^&]*))?","i");
	var match = regex.exec(window.location.search);
	var value = null;
	if( match !== null ){
		value = match[1];
	}
	return value;
};
jQuery.randomInt = function(min, max) {
	return Math.floor(Math.random()*(max+1-min)) + min;
};


jQuery.extend( jQuery.easing,
{
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

/*! Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 * 
 * Requires: 1.2.2+
 */

(function($) {

var types = ['DOMMouseScroll', 'mousewheel'];

$.event.special.mousewheel = {
	setup: function() {
		if ( this.addEventListener )
			for ( var i=types.length; i; )
				this.addEventListener( types[--i], handler, false );
		else
			this.onmousewheel = handler;
	},
	
	teardown: function() {
		if ( this.removeEventListener )
			for ( var i=types.length; i; )
				this.removeEventListener( types[--i], handler, false );
		else
			this.onmousewheel = null;
	}
};
$.fn.extend({
	mousewheel: function(fn) {
		return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
	},
	
	unmousewheel: function(fn) {
		return this.unbind("mousewheel", fn);
	}
});
function handler(event) {
	var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;
	
	event = $.event.fix(event || window.event);
	event.type = "mousewheel";
	
	if ( event.wheelDelta ) delta = event.wheelDelta/120;
	if ( event.detail     ) delta = -event.detail/3;
	
	// Add events and delta to the front of the arguments
	args.unshift(event, delta);

	return $.event.handle.apply(this, args);
}

})(jQuery);

