// page init
jQuery(function() {
    initBrowserDetect();
    initCustomForms();
    initNavigation();
    initOpenClose();
    initInputs();
    initTracking();
    
    // ajax and popups
    initPopups();
    initAjaxSenders();
    initAjaxRemovers();
    initFormValidation();
    initPopupValidation();
    initAutoComplete();
    initDeleteThisRow();

    initUsernameExistErrorHandling();
});

function initTracking() {
    $('.downloadAll').click(function() {
        _gaq.push(['_trackPageview', '/download-all']);
    });
    $('.downloadPdf').click(function() {
        _gaq.push(['_trackPageview', '/download-pdf']);
    });
    $('.emailPdf').click(function() {
        _gaq.push(['_trackPageview', '/email-pdf']);
    });
    $('a[target=_blank]').click(function() {
        _gaq.push(['_trackPageview', $(this).attr('href')]);
    });
    $('.order a').click(function() {
        _gaq.push(['_trackPageview', '/order-referral-pads']);
    });
}

function initUsernameExistErrorHandling() {
    if ($('.form-ret-reg').length && !$('.update-form').length) {
        var _error = false;
        if($('.submit input[type=hidden]').length)
            _error = $('.submit input[type=hidden]').val().length ? true : false;
        var _errorClass = 'error';
        if (_error) {
            var _form = $('.form-ret-reg');
            var _errorList = _form.find('.form-error').show();
            var _errorListText = _errorList.find('.form-error-list');
            $('<li>').html('Email address already exists in our system. Please use a different email address.').appendTo(_errorListText);
            $('.required-match-email').parent().parent().addClass(_errorClass).one('focus change', function() {
                $(this).parent().parent().removeClass(_errorClass);
            });
        }
    }
}

function initDeleteThisRow() {
    var _tableHolder = $('.table-holder');
    var _tableBody = _tableHolder.find('tbody.table-body');
    if (_tableHolder.length) {
        _tableHolder.find('tr').each(function() {
            var _row = $(this)
            var _remove = _row.find('a.delete');
            _remove.click(function() {
                _row.remove();
                if (!_tableBody.children().length) _tableHolder.hide();
                return false;
            });
        });
    }
    if (!_tableBody.children().length) _tableHolder.hide();
}

// form validation
function initFormValidation() {
	var _animSpeed = 400;
	var _easing = 'swing';
	var _errorClass = 'error';
	var _regEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	$('.form-ret-reg').each(function() { //VINH
	    var _form = $(this);
	    var _scrollFlag = _form.hasClass('scrollto');
	    var _errorList = _form.find('.form-error').hide();
	    var _errorListText = _errorList.find('.form-error-list');
	    var hasErrors = false;
	    // reset clear inputs here
	    //_form.find('input:text, input:password, textarea').unbind('focus blur').show().val('');
	    _form.find('input:text, input:password, textarea').unbind('focus blur').show();
	    if (_errorList.is(':hidden') && !$('.update-form').length && !$('.submit input[type=hidden]').val().length) {
	        _form.find('input:text, input:password, textarea').val('');
	    }
	    _form.find('input.fakeInput').remove();

	    function checkFields() {
	        var _flag = false;
	        _form.find('.' + _errorClass).removeClass(_errorClass);
	        _errorListText.empty();

	        // fields validation
	        _form.find('select.required').each(function() {
	            if (!this.selectedIndex) addError(this);
	        });
	        var matchEmailVal;
	        _form.find('input.required-match-email').each(function() {
	            if (!_regEmail.test(this.value)) addError(this);
	            if (!matchEmailVal) matchEmailVal = this.value;
	            else if (this.value != matchEmailVal) addError(this);
	        });
	        var matchPassVal;
	        _form.find('input.required-match-password').each(function() {
	            if ((!this.value.length && !$('.update-form').length) || this.value == $(this).data('val')) addError(this);
	            if (!matchPassVal) matchPassVal = this.value;
	            else if (this.value != matchPassVal) addError(this);
	        });
	        _form.find('input.required-email').each(function() {
	            if (!_regEmail.test(this.value)) addError(this);
	        });
	        _form.find('input.required-checkbox').each(function() {
	            if (!this.checked) addError(this);
	        });
	        _form.find('input.required, textarea.required').each(function() {
	            if (!this.value.length || this.value == $(this).data('val')) addError(this);
	        });

	        // error class adding
	        function addError(_obj) {
	            // add error
	            $(_obj).parents('div[class^=sector]').children().addClass(_errorClass);

	            var errorInfo = $(_obj).data('val') || $(_obj).attr('title');
	            if (_errorListText.html().indexOf(errorInfo) < 0) {
	                $('<li>').html(errorInfo).appendTo(_errorListText);
	            }
	            _errorList.show();

	            // remove error on interaction
	            $(_obj).one('focus change', function() {
	                $(_obj).parents('.' + _errorClass).removeClass(_errorClass);
	            });
	            _flag = true;
	        }
	        return _flag;
	    }

	    // submit button
	    _form.find('a.button-submit').click(function() {
	        _form.submit();
	        if (hasErrors) return false;
	    })

	    // catch form submit event
	    _form.submit(function() {
	        if (checkFields()) {
	            if (_scrollFlag) $.scrollTo(_form, _animSpeed, { easing: _easing });
	            hasErrors = true;
	            return false;
	        }
	        hasErrors = false;
	    });
	});
}

// resize popup
function resizePopup(h) {
	$('.lightbox:visible').find('iframe').css({height:h});
	$(window).trigger('resize');
}

// popup form validation //FUNCTION CHANGED
function initPopupValidation() {
	var _animSpeed = 400;
	var _easing = 'swing';
	var _errorClass = 'error';
	var _regEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

	$('.form-sign-in').each(function() { //VINH
	    var _form = $(this);
	    var _warning = _form.find('div.warning').hide();
	    var validationFailed = false;
	    function checkFields() {
	        var _flag = false;
	        _form.find('.' + _errorClass).removeClass(_errorClass);
	        _warning.hide();

	        // fields validation
	        var matchVal;
	        _form.find('input.required-match-email').each(function() {
	            if (!_regEmail.test(this.value)) addError(this);
	            if (!matchVal) matchVal = this.value;
	            else if (this.value != matchVal) addError(this);
	        });
	        _form.find('input.required-email').each(function() {
	            if (!_regEmail.test(this.value)) addError(this);
	        });
	        _form.find('input.required').each(function() {
	            if (!this.value.length || this.value == $(this).data('val')) addError(this);
	        });

	        // error class adding
	        function addError(_obj) {
	            // add error
	            _warning.show();
	            $(_obj).parents('div.row').addClass(_errorClass);

	            // remove error on interaction
	            $(_obj).one('focus', function() {
	                $(_obj).parents('.' + _errorClass).removeClass(_errorClass);
	            });
	            _flag = true;
	        }
	        return _flag;
	    }

	    _form.find('input').keydown(function(e) {
	        if (!e) e = window.event;
	        if (e.keyCode == 13) {
	            _form.submit();
	            if (validationFailed)
	                return false;
	            else
	                __doPostBack(_form.find('a.button-submit').attr('id'), '');
	        }
	    });

	    // submit button
	    _form.find('a.button-submit').click(function() {
	        _form.submit();
	        if (validationFailed) return false; //VINH
	    });

	    // catch form submit event
	    _form.submit(function() {
	        validationFailed = checkFields();
	        window.parent.resizePopup($('.lightbox').height());
	        if (validationFailed) return false;
	    });
	});

	$('.form-sign-in2').each(function() { //VINH
	    var _form = $('.form-sign-in2');
	    _form.find('input').keydown(function(e) {
	        if (!e) e = window.event;
	        if (e.keyCode == 13) {
	            var btnId = _form.find('.button1').attr('id').replace(/_/gi,'$');
	            __doPostBack(btnId,'');
	        }
	    });
	});
	if ($('.lightbox .alert .form-sign-in2').length) {
	    window.parent.resizePopup($('.lightbox').height());
	}
}

// json autocomplete
function initAutoComplete() {
	var _startCount = 1;
	var _fClass = 'factive';
	var _hClass = 'hactive';
	var _alwaysRefresh = false;

	$('div.autocomplete-area').each(function() {
	    var _hold = $(this);
	    var _target = _hold.attr('title');
	    var _input = _hold.find('input.autocomplete-field');
	    var _ajaxHolder = _hold.find('div.drop').hide();
	    var _scrollable = _ajaxHolder.find('.inside');
	    var _ajaxList = _ajaxHolder.find('ul.ajax-list');
	    var _attrName = _input.attr('name');
	    var _tableHolder = _hold.find('.table-holder');
	    var _tableBody = _tableHolder.find('tbody.table-body');
	    var _btn = _hold.find('.button2');
	    var _keyboardFocus = false;
	    _input.attr('autocomplete', 'off');
	    _btn.click(function() {
	        _hold.addClass("error");
	        return false;
	    });
	    // init custom scroll
	    _ajaxHolder.show();
	    function addCustomScroll() {
	        _scrollable.jScrollPane({
	            showArrows: false,
	            scrollbarWidth: 12,
	            scrollbarMargin: 3
	        });
	    }
	    addCustomScroll();
	    _ajaxHolder.hide();

	    // autocomplete event
	    _hold.removeAttr('title');
	    _input.keyup(handleKeydown);
	    _input.blur(function() {
	        if (!_keyboardFocus) {
	            setTimeout(function() {
	                _ajaxHolder.hide();
	            }, 200);
	        }
	    });

	    // regexp replace
	    RegExp.escape = function(str) {
	        var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g"); // .*+?|()[]{}\
	        return str.replace(specials, "\\$&");
	    }
	    function highlightWords(str, word) {
	        var regex = new RegExp("(" + RegExp.escape(word) + ")", "gi");
	        return str.replace(regex, "<strong>$1</strong>");
	    }

	    // add table row
	    function addTableRow(item) {
	        _hold.removeClass("error");
	        _ajaxHolder.hide();
	        _keyboardFocus = false;
	        _input.val('').blur();

	        if (item && item.length) {
	            _tableHolder.show();
	            var _head = item.attr('head').length < 50 ? item.attr('head') : item.attr('head').substring(0, 50) + "...";
	            var _row = $('<tr><td class="col1">' + _head + '</td><td class="col2">' + item.attr('city') + '</td><td class="col3">' + item.attr('state') + '</td><td class="col4"><a class="delete" href="#">Delete</a><input type="hidden" name="hval" value="' + item.attr('uid') + '" /></td></tr>').show();
	            var _remove = _row.find('a.delete');
	            _remove.click(function() {
	                $.ajax({
	                    url: _remove.attr('href'),
	                    type: 'POST',
	                    data: 'ajax=1'
	                });
	                _row.remove();
	                if (!_tableBody.children().length) _tableHolder.hide();
	                return false;
	            });
	            _tableBody.append(_row);
	        }
	    }

	    // keydown event handler
	    function handleKeydown(e) {
	        // skip
	        if (!e) e = window.event;
	        if (e.keyCode == 27 || e.keyCode == 13 || e.keyCode == 38 || e.keyCode == 40) return;

	        // default key
	        if (_input.val().length < _startCount && !_alwaysRefresh) {
	            _ajaxHolder.hide();
	            return;
	        }
	        if (_input.val().length == _startCount || _alwaysRefresh) {
	            $.getJSON(_target, function(json) {
	                _ajaxList.empty();
	                for (var i = 0; i < json.length; i++) {
	                    $('<li><a head="' + json[i].head + '" city="' + json[i].city + '" state="' + json[i].state + '" uid="' + json[i].id + '" href="#"><span>' + json[i].query + '</span></a></li>').appendTo(_ajaxList).click(function() {
	                        addTableRow($(this).find('a'));
	                        return false;
	                    });
	                }
	            });
	        } else {
	            filterResults();
	        }
	    }

	    // results filtering
	    function filterResults() {
	        if (!_alwaysRefresh) {
	            _ajaxList.find('li').each(function() {
	                var lnk = $(this).find('a span');
	                lnk.html(lnk.html().replace('<strong>', '').replace('</strong>', ''));

	                if ($(this).text().toUpperCase().indexOf(_input.val().toUpperCase()) != -1) $(this).show();
	                else $(this).hide();

	                // hover functions
	                $(this).mouseenter(function() {
	                    _ajaxHolder.find('li').removeClass(_hClass);
	                    $(this).addClass(_hClass);
	                });
	            });
	            _ajaxHolder.mouseleave(function() {
	                _ajaxHolder.find('li').removeClass(_hClass);
	            });

	            // show/hide drop if any items matched
	            _ajaxHolder.show();
	            var matchedItems = _ajaxList.find('li:visible');
	            if (matchedItems.length) {
	                // make matching text bold
	                matchedItems.each(function() {
	                    var txt = $(this).find('a span');
	                    txt.html(highlightWords(txt.text(), _input.val()));
	                });

	                // show drop
	                _ajaxHolder.show();
	                _hold.addClass(_fClass);
	            } else {
	                _hold.removeClass(_fClass);
	                _ajaxHolder.hide();
	            }
	        }
	        addCustomScroll();
	    }

	    // autocomplete nav
	    function keyboardNav(direction) {
	        var _elements = _ajaxHolder.find('li:visible');
	        var _currentIndex = _elements.index(_elements.filter('.' + _hClass).eq(0));
	        if (_currentIndex < 0) _currentIndex = -1;
	        _keyboardFocus = true;

	        if (direction) {
	            if (_currentIndex < _elements.length - 1) _currentIndex++;
	        } else {
	            if (_currentIndex > 0) _currentIndex--;
	            else _currentIndex = 0;
	        }
	        _elements.removeClass(_hClass).eq(_currentIndex).addClass(_hClass);
	        _scrollable[0].scrollTo(_elements.eq(_currentIndex).height() * (_currentIndex));
	    }

	    // keyboard handle
	    _input.keydown(function(e) {
	        if (!e) e = window.event;
	        if (e.keyCode == 13) {
	            var _elements = _ajaxHolder.find('li:visible');
	            var _cIndex = _elements.index(_elements.filter('.' + _hClass).eq(0));

	            _ajaxHolder.hide();
	            addTableRow(_elements.eq(_cIndex).find('a'));
	            _hold.removeClass(_fClass);
	            _keyboardFocus = false;
	            return false;
	        }
	        if (e.keyCode == 27) {
	            _ajaxHolder.hide();
	            _hold.removeClass(_fClass);
	            _keyboardFocus = false;
	        }
	        if (e.keyCode == 38) {
	            keyboardNav(false);
	        }
	        if (e.keyCode == 40) {
	            keyboardNav(true);
	        }
	    })
	});
}

// ajax remove
function initAjaxRemovers() {
	var _animSpeed = 500;
	var _disabledClass = 'no-items';
	var totalNumber = $('#header strong.total');

	$('div.library-block').each(function() {
	    var _holder = $(this);
	    var _blocks = _holder.find('div.block > div.box');

	    _blocks.each(function() {
	        var _box = $(this);
	        var _btnRemove = _box.find('a.remove');
	        var _target = _btnRemove.attr('href');

	        _btnRemove.click(function() {
	            // send ajax request
	            $.ajax({
	                type: 'GET',
	                url: _target,
	                success: function(msg) {
	                    var num = parseInt(msg, 10);
	                    var old = parseInt(totalNumber.text(), 10);
	                    var newNum = old - 1;
	                    if (num < 0) totalNumber.text(newNum < 10 ? '0' + newNum : newNum);
	                },
	                error: function(msg) {
	                    alert('AJAX Error!');
	                }
	            })
	            // hide block
	            _box.animate({ marginLeft: -_box.width() }, { duration: _animSpeed, complete: function() {
	                _box.slideUp(_animSpeed, function() {
	                    _box.remove();
	                    if (_holder.find('div.block > div.box').length) _holder.removeClass(_disabledClass); else _holder.addClass(_disabledClass);
	                })
	            }
	            });
	            return false;
	        });
	    })
	});
}

// ajax links
function initAjaxSenders() {
	var totalNumber = $('#header strong.total')
	var ajaxLinks = $('a.ajax-sender');

	ajaxLinks.each(function(){
		var _link = $(this);
		var _target = _link.attr('href');
		_link.attr('newtitle',_link.attr('title')).removeAttr('title');

		_link.click(function(){
			$.ajax({
				type:'GET',
				url:_target,
				success: function(msg){
					var num = parseInt(msg,10);
					if(num > 0) totalNumber.text(num<10 ? '0'+num : num);
					_link.attr('href',_link.attr('rel')).unbind('click').find('span.ares').text(_link.attr('newtitle'));
				},
				error: function(){
					alert('AJAX Error!');
				}
});
            _gaq.push(['_trackPageview', '/add-to-library']);
			return false;
		});
	});
}

// clear inputs
function initInputs() {
    $('input:text, input:password, textarea').each(function() {
        var _input = $(this);
        if (_input.val().length && _input.val() != _input.attr('title')) return;
        _input.data('val', _input.attr('title')).removeAttr('title');
        if (!$('.form-ret-reg').length) {
            _input.val(_input.data('val'));
        }

        if (_input.is(':password')) {
            if (!$('.update-form').length) {
                var _fake = $('<input type="text" />').addClass('fakeInput').val(_input.data('val')).insertAfter(_input.val('').hide());
                _fake.bind('focus', function() {
                    _input.addClass('focus').parent().addClass('parent-focus');
                    _fake.hide();
                    _input.show().focus();
                });
                _input.bind('blur', function() {
                    _input.removeClass('focus').parent().removeClass('parent-focus');
                    if (!_input.val().length) {
                        _input.hide();
                        _fake.show();
                    }
                });
            }
        } else {
            _input.bind('focus', function() {
                _input.addClass('focus').parent().addClass('parent-focus');
                if (_input.val() == _input.data('val')) _input.val('');
            }).bind('blur', function() {
                _input.removeClass('focus').parent().removeClass('parent-focus');
                if (_input.val() == '') _input.val(_input.data('val'));
            });
        }
    });
}

// page init
function initCustomForms() {
	$('input:checkbox').customCheckbox();
	$('input:radio').customRadio();
	$('select').customSelect({
		onCreate:function(select, replaced, optHolder){
		    optHolder.show();
		    var replacedWidth = replaced.width() + 1;
		    var scrollable = optHolder.find('.inside');
		    var sizer = optHolder.find('.m');
		    var diffInner = 11;
			var diffWidth = 34;
			optHolder.css({ width: replacedWidth });
			sizer.css({ width: replacedWidth - diffInner });
			scrollable.children().css({ width: replacedWidth - diffWidth });
			scrollable.jScrollPane({
				showArrows:false,
				scrollbarWidth:12,
				scrollbarMargin:3
			});
		}
	});
}

// navigation init
function initNavigation() {
	initAutoScalingNav({
		menuId: "nav",
		tag: "a",
		minPaddings: 0,
		spacing: 1,
		constant: 0,
		sideClasses: true
	});
}

// open-close init
function initOpenClose() {
	$('ul.result-list > li').OpenClose({
		activeClass:'active',
		opener:'a.open-close',
		slider:'div.slide',
		slideSpeed: 500
	});
}

// open-close plugin
jQuery.fn.OpenClose = function(_options){
	// default options
	var _options = jQuery.extend({
		activeClass:'active',
		opener:'.opener',
		slider:'.slide',
		slideSpeed: 400,
		animStart:false,
		animEnd:false,
		event:'click'
	},_options);

	return this.each(function(){
		// options
		var _holder = jQuery(this);
		var _slideSpeed = _options.slideSpeed;
		var _activeClass = _options.activeClass;
		var _opener = jQuery(_options.opener, _holder);
		var _slider = jQuery(_options.slider, _holder);
		var _animStart = _options.animStart;
		var _animEnd = _options.animEnd;
		var _event = _options.event;
		if(_slider.length) {
			_opener.bind(_event,function(){
				if(!_slider.is(':animated')) {
					if(typeof _animStart === 'function') _animStart();
					if(_holder.hasClass(_activeClass)) {
						_slider.slideUp(_slideSpeed,function(){
							if(typeof _animEnd === 'function') _animEnd();
						});
						_holder.removeClass(_activeClass);
					} else {
						_holder.addClass(_activeClass);
						_slider.slideDown(_slideSpeed,function(){
							if(typeof _animEnd === 'function') _animEnd();
						});
					}
				}
				return false;
			});
			if(_holder.hasClass(_activeClass)) _slider.show();
			else _slider.hide();
		}
	});
}

// custom selects module
jQuery.fn.customSelect = function(_options) {
var _options = jQuery.extend({
	selectStructure: '<div class="select-wrap"><div class="select"></div><a class="link-select" href="#"></a><div class="disabled"></div></div>',
	optStructure: '<div class="drop"><div class="content"><div class="wrap"><div class="l"></div><div class="m"><div class="inside"><ul></ul></div></div><div class="r"></div></div></div></div>',
	hideOnMouseOut: false,
	copyClass: true,
	onCreate: false,
	activeClass: 'active',
	selectText: '.select',
	selectBtn: '.link-select',
	selectDisabled: '.disabled',
	optList: 'ul'
}, _options);
return this.each(function() {
	var select = jQuery(this);
	if(!select.hasClass('outtaHere')) {
		if(select.is(':visible')) {
			var activeClass = _options.activeClass;
			var hideOnMouseOut = _options.hideOnMouseOut;
			var copyClass = _options.copyClass;
			var onCreate = _options.onCreate;
			var replaced = jQuery(_options.selectStructure);
			var selectText = replaced.find(_options.selectText);
			var selectBtn = replaced.find(_options.selectBtn);
			var selectDisabled = replaced.find(_options.selectDisabled).hide();
			var optHolder = jQuery(_options.optStructure);
			var optList = optHolder.find(_options.optList);
			if(copyClass) optHolder.addClass('drop-'+select.attr('class'));

			if(select.attr('disabled')) selectDisabled.show();
			select.find('option').each(function(){
				var selOpt = $(this);
				var _opt = jQuery('<li><a href="#"><span>' + selOpt.html() + '</span></a></li>');
				if(selOpt.attr('selected')) {
					selectText.html(selOpt.html());
					_opt.addClass('selected');
				}
				_opt.children('a').click(function() {
					optList.find('li').removeClass('selected');
					select.find('option').removeAttr('selected');
					$(this).parent().addClass('selected');
					selOpt.attr('selected', 'selected');
					selectText.html(selOpt.html());
					select.change();
					optHolder.hide();
					replaced.removeClass(activeClass);
					return false;
				});
				optList.append(_opt);
			});
			replaced.width(select.outerWidth());
			replaced.insertBefore(select);
			optHolder.css({
				width: select.outerWidth(),
				display: 'none',
				position: 'absolute'
			});

			replaced.append(optHolder);
			if(typeof onCreate === 'function') onCreate(select, replaced, optHolder);
			optHolder.hide();

			var optTimer;
			replaced.hover(function() {
				if(optTimer) clearTimeout(optTimer);
			}, function() {
				if(hideOnMouseOut) {
					optTimer = setTimeout(function() {
						optHolder.hide();
						replaced.removeClass(activeClass);
					}, 200);
				}
			});
			optHolder.hover(function(){
				if(optTimer) clearTimeout(optTimer);
			}, function() {
				if(hideOnMouseOut) {
					optTimer = setTimeout(function() {
						optHolder.hide();
						replaced.removeClass(activeClass);
					}, 200);
				}
});
selectText.click(function() {
    if (optHolder.is(':visible')) {
        optHolder.hide();
        replaced.removeClass(activeClass);
    }
    else {
        replaced.addClass(activeClass);
        optHolder.show().children('ul').css({ height: 'auto', overflow: 'hidden' });
    }
    return false;
});
			selectBtn.click(function() {
				if(optHolder.is(':visible')) {
					optHolder.hide();
					replaced.removeClass(activeClass);
				}
				else{
					replaced.addClass(activeClass);
					optHolder.show().children('ul').css({height:'auto', overflow:'hidden'});
				}
				return false;
			});
			$('body').click(function(e){
				if (!$(e.target).parents('div.select-wrap').length) {
					optHolder.hide();
					replaced.removeClass(activeClass);
				}
			});
			select.addClass('outtaHere');
		}
	}
});
}

// custom radios module
jQuery.fn.customRadio = function(_options){
	var _options = jQuery.extend({
		radioStructure: '<div></div>',
		radioDisabled: 'disabled',
		radioDefault: 'radioArea',
		radioChecked: 'radioAreaChecked'
	}, _options);
	return this.each(function(){
		var radio = jQuery(this);
		if(!radio.hasClass('outtaHere') && radio.is(':radio')){
			var replaced = jQuery(_options.radioStructure);
			this._replaced = replaced;
			if(radio.is(':disabled')) replaced.addClass(_options.radioDisabled);
			else if(radio.is(':checked')) replaced.addClass(_options.radioChecked);
			else replaced.addClass(_options.radioDefault);
			replaced.click(function(){
				if($(this).hasClass(_options.radioDefault)){
					radio.attr('checked', 'checked');
					changeRadio(radio.get(0));
				}
			});
			radio.click(function(){
				changeRadio(this);
			});
			replaced.insertBefore(radio);
			radio.addClass('outtaHere');
		}
	});
	function changeRadio(_this){
		$(_this).change();
		$('input:radio[name='+$(_this).attr("name")+']').not(_this).each(function(){
			if(this._replaced && !$(this).is(':disabled')) this._replaced.removeClass().addClass(_options.radioDefault);
		});
		_this._replaced.removeClass().addClass(_options.radioChecked);
	}
}

// custom checkboxes module
jQuery.fn.customCheckbox = function(_options) {
    var _options = jQuery.extend({
        checkboxStructure: '<div></div>',
        checkboxDisabled: 'disabled',
        checkboxDefault: 'checkboxArea',
        checkboxChecked: 'checkboxAreaChecked'
    }, _options);
    return this.each(function() {
        var checkbox = jQuery(this);
        if (!checkbox.hasClass('outtaHere') && checkbox.is(':checkbox')) {
            var replaced = jQuery(_options.checkboxStructure);
            this._replaced = replaced;
            if (checkbox.is(':disabled')) replaced.addClass(_options.checkboxDisabled);
            else if (checkbox.is(':checked')) replaced.addClass(_options.checkboxChecked);
            else replaced.addClass(_options.checkboxDefault);

            replaced.click(function() {
                if (checkbox.is(':checked')) checkbox.removeAttr('checked');
                else checkbox.attr('checked', 'checked');
                changeCheckbox(checkbox);
            });
            checkbox.click(function() {
                changeCheckbox(checkbox);
            });
            replaced.insertBefore(checkbox);
            checkbox.addClass('outtaHere');
        }
    });
    function changeCheckbox(_this) {
        _this.change();
        if (_this.is(':checked')) {
            _this.get(0)._replaced.removeClass().addClass(_options.checkboxChecked);
            if(_this.get(0)._replaced.parent().hasClass('chkPBPRegister'))
                $('.pnlPBPStatus').removeClass('hide');
        }
        else {
            _this.get(0)._replaced.removeClass().addClass(_options.checkboxDefault);
            if(_this.get(0)._replaced.parent().hasClass('chkPBPRegister'))
                $('.pnlPBPStatus').addClass('hide');
        }
    }
}

// popups function
function initPopups() {
	var _zIndex = 1000;
	var _fadeSpeed = 350;
	var _faderOpacity = 0.75;
	var _faderBackground = '#000';
	var _faderId = 'lightbox-overlay';
	var _closeLink = 'a.close';
	var _fader;
	var _lightbox = $('<div class="lightbox"><div class="t"></div><div class="m"><div class="inside"><a href="#" class="close">Close</a><div class="holder"></div></div></div><div class="b"></div></div>');
	var _iframeHolder = _lightbox.find('.holder');
	var _btnClose = _lightbox.find('a.close');
	var _openers = jQuery('a.iframe-popup');
	var _page = jQuery(document);
	var _minWidth = parseInt(jQuery('body').css('minWidth'));
	var _scroll = false;

	// init popup fader
	_fader = jQuery('#'+_faderId);
	if(!_fader.length) {
		_fader = jQuery('<div />');
		_fader.attr('id',_faderId);
		jQuery('body').append(_fader).append(_lightbox.hide());
	}
	_fader.css({
		opacity:_faderOpacity,
		backgroundColor:_faderBackground,
		position:'absolute',
		overflow:'hidden',
		display:'none',
		top:0,
		left:0,
		zIndex:_zIndex
	});

	// IE6 iframe fix
	if(jQuery.browser.msie && jQuery.browser.version < 7) {
		if(!_fader.children().length) {
			var _frame = jQuery('<iframe src="javascript:false" frameborder="0" scrolling="no" />');
			_frame.css({
				opacity:0,
				width:'100%',
				height:'100%'
			});
			var _frameOverlay = jQuery('<div>');
			_frameOverlay.css({
				top:0,
				left:0,
				zIndex:1,
				opacity:0,
				background:'#000',
				position:'absolute',
				width:'100%',
				height:'100%'
			});
			_fader.empty().append(_frame).append(_frameOverlay);
		}
	}

	// lightbox positioning function
	function positionLightbox() {
		if(_lightbox) {
			var _windowHeight = jQuery(window).height();
			var _windowWidth = jQuery(window).width();
			var _lightboxWidth = _lightbox.outerWidth();
			var _lightboxHeight = _lightbox.outerHeight();
			var _pageHeight = _page.height();

			if (_windowWidth < _minWidth) _fader.css('width',_minWidth);
				else _fader.css('width','100%');
			if (_windowHeight < _pageHeight) _fader.css('height',_pageHeight);
				else _fader.css('height',_windowHeight);

			_lightbox.css({
				position:'absolute',
				zIndex:(_zIndex+1)
			});

			// vertical position
			if (_windowHeight > _lightboxHeight) {
				if (jQuery.browser.msie && jQuery.browser.version < 7) {
					_lightbox.css({
						position:'absolute',
						top: parseInt(jQuery(window).scrollTop()) + (_windowHeight - _lightboxHeight) / 2
					});
				} else {
					_lightbox.css({
						position:'fixed',
						top: (_windowHeight - _lightboxHeight) / 2
					});
				}
			} else {
				var _faderHeight = _fader.height();
				if(_faderHeight < _lightboxHeight) _fader.css('height',_lightboxHeight);
				if (!_scroll) {
					if (_faderHeight - _lightboxHeight > parseInt(jQuery(window).scrollTop())) {
						_faderHeight = parseInt(jQuery(window).scrollTop())
						_scroll = _faderHeight;
					} else {
						_scroll = _faderHeight - _lightboxHeight;
					}
				}
				_lightbox.css({
					position:'absolute',
					top: _scroll
				});
			}

			// horizontal position
			if (_lightbox.outerWidth() < $(window).width()) {
			    _lightbox.css({ left: ($(window).width() - _lightbox.outerWidth()) / 2 });
			} else {
			    if (_fader.width() > _lightbox.outerWidth()) _lightbox.css({ left: (_fader.width() - _lightbox.outerWidth()) / 2 });
			    else _lightbox.css({ left: 0 });
			}
		}
	}

	// show/hide lightbox
	function toggleState(_state) {
		if(!_lightbox) return;
		if(_state) {
			_fader.fadeIn(_fadeSpeed,function(){
				_lightbox.fadeIn(_fadeSpeed);
			});
			_scroll = false;
			positionLightbox();
		} else {
			_lightbox.fadeOut(_fadeSpeed,function(){
				_fader.fadeOut(_fadeSpeed);
				_scroll = false;
			});
		}
	}

	// close lightbox button
	_btnClose.click(function(){
		toggleState(false);
		return false;
	})

	// lightbox openers
	_openers.each(function(){
		var _opener = jQuery(this);
		var _meta = _opener.attr('rel').split('|');
		var _target = _opener.attr('href');

		_opener.click(function(){
			var _iframe = $('<iframe allowtransparency="true" frameborder="0" scrolling="no"></iframe>');
			_iframe.attr('width', _meta[0]);
			_iframe.attr('height', _meta[1]);
			_iframe.attr('src', _target);
			_iframeHolder.empty().append(_iframe);
			toggleState(true);
			return false;
		});
	});

	// event handlers
	jQuery(window).resize(positionLightbox);
	jQuery(window).scroll(positionLightbox);
	jQuery(document).keydown(function (e) {
		if (e.keyCode == 27) toggleState(false);
	});
	_fader.click(function(){
		if(!_fader.is(':animated')) toggleState(false);
		return false;
	});
}

// detect browser
function initBrowserDetect() {
	var u = navigator.userAgent.toLowerCase();
	var _html = document.getElementsByTagName("html")[0];

	if(is("win")) addClass("win");
	else if(is("mac")) addClass("mac");
	else if(is("linux") || is("x11")) addClass("linux");

	if(is("msie 8.0")) addClass("ie8");
	else if(is("msie 7.0")) addClass("ie7");
	else if(is("msie 6.0")) addClass("ie6");
	else if(is("firefox/2")) addClass("ff2");
	else if(is("firefox/3.0")) addClass("ff30");
	else if(is("firefox/3")) addClass("ff3");
	else if(is("opera") && is("version/10")) addClass("opera10");
	else if(is("opera/9")) addClass("opera9");
	else if(is("safari") && is("version/3")) addClass("safari3");
	else if(is("safari") && is("version/4")) addClass("safari4");
	else if(is("safari") && is("version/5")) addClass("safari5");
	else if(is("chrome")) addClass("chrome");
	else if(is("safari")) addClass("safari2");
	else if(is("unknown")) addClass("unknown");

	if(is("msie")) addClass("trident");
	else if(is("applewebkit")) addClass("webkit");
	else if(is("gecko")) addClass("gecko");
	else if(is("opera")) addClass("presto");

	function is(browser)
	{
		if(u.indexOf(browser) !=-1) return true;
	}
	function addClass(_class)
	{
		_html.className += (" " + _class);
	}
}

// auto scaling module
function initAutoScalingNav(o) {
	if (!o.menuId) o.menuId = "nav";
	if (!o.tag) o.tag = "a";
	if (!o.spacing) o.spacing = 0;
	if (!o.constant) o.constant = 0;
	if (!o.minPaddings) o.minPaddings = 0;
	if (!o.liHovering) o.liHovering = false;
	if (!o.sideClasses) o.sideClasses = false;
	if (!o.equalLinks) o.equalLinks = false;
	if (!o.flexible) o.flexible = false;
	var nav = document.getElementById(o.menuId);
	if(nav) {
		nav.className += " scaling-active";
		var lis = nav.getElementsByTagName("li");
		var asFl = [];
		var lisFl = [];
		var width = 0;
		for (var i=0, j=0; i<lis.length; i++) {
			if(lis[i].parentNode == nav) {
				var t = lis[i].getElementsByTagName(o.tag).item(0);
				asFl.push(t);
				asFl[j++].width = t.offsetWidth;
				lisFl.push(lis[i]);
				if(width < t.offsetWidth) width = t.offsetWidth;
			}
			if(o.liHovering) {
				lis[i].onmouseover = function() {
					this.className += " hover";
				}
				lis[i].onmouseout = function() {
					this.className = this.className.replace("hover", "");
				}
			}
		}
		var menuWidth = nav.clientWidth - asFl.length*o.spacing - o.constant;
		if(o.equalLinks && width * asFl.length < menuWidth) {
			for (var i=0; i<asFl.length; i++) {
				asFl[i].width = width;
			}
		}
		width = getItemsWidth(asFl);
		if(width < menuWidth) {
			var version = navigator.userAgent.toLowerCase();
			for (var i=0; getItemsWidth(asFl) < menuWidth; i++) {
				asFl[i].width++;
				if(!o.flexible) {
					asFl[i].style.width = asFl[i].width + "px";
				}
				if(i >= asFl.length-1) i=-1;
			}
			if(o.flexible) {
				for (var i=0; i<asFl.length; i++) {
					width = (asFl[i].width - o.spacing - o.constant/asFl.length)/menuWidth*100;
					if(i != asFl.length-1) {
						lisFl[i].style.width = width + "%";
					}
					else {
						if(navigator.appName.indexOf("Microsoft Internet Explorer") == -1 || version.indexOf("msie 8") != -1 || version.indexOf("msie 9") != -1)
							lisFl[i].style.width = width + "%";
					}
				}
			}
		}
		else if(o.minPaddings > 0) {
			for (var i=0; i<asFl.length; i++) {
				asFl[i].style.paddingLeft = o.minPaddings + "px";
				asFl[i].style.paddingRight = o.minPaddings + "px";
			}
		}
		if(o.sideClasses) {
			lisFl[0].className += " first-child";
			lisFl[0].getElementsByTagName(o.tag).item(0).className += " first-child-a";
			lisFl[lisFl.length-1].className += " last-child";
			lisFl[lisFl.length-1].getElementsByTagName(o.tag).item(0).className += " last-child-a";
		}
		nav.className += " scaling-ready";
	}
	function getItemsWidth(a) {
		var w = 0;
		for(var q=0; q<a.length; q++) {
			w += a[q].width;
		}
		return w;
	}
}

/* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ */
jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});

/* jQuery.ScrollTo - Date: 5/25/2009 - Ariel Flesler - @version 1.4.2 - http://flesler.blogspot.com/2007/10/jqueryscrollto.html */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

/* 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(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(f){var d=[].slice.call(arguments,1),g=0,e=true;f=c.event.fix(f||window.event);f.type="mousewheel";if(f.wheelDelta){g=f.wheelDelta/120}if(f.detail){g=-f.detail/3}d.unshift(f,g);return c.event.handle.apply(this,d)}})(jQuery);


/* Copyright (c) 2009 Kelvin Luck (kelvin AT kelvinluck DOT com || http://www.kelvinluck.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * See http://kelvinluck.com/assets/jquery/jScrollPane/
 * $Id: jScrollPane.js 93 2010-06-01 08:17:28Z kelvin.luck $
 */
;(function(a){a.jScrollPane={active:[]};a.fn.jScrollPane=function(c){c=a.extend({},a.fn.jScrollPane.defaults,c);var b=function(){return false};return this.each(function(){var t=a(this);var E=this;var an=0;var L;var ao;var r;var ad=c.topCapHeight;var j;if(a(this).parent().is(".jScrollPaneContainer")){j=a(this).parent();an=c.maintainPosition?t.position().top:0;var q=a(this).parent();L=q.innerWidth();ao=q.outerHeight();a(">.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown, >.jScrollCap",q).remove();t.css({top:0})}else{t.data("originalStyleTag",t.attr("style"));t.css("overflow","hidden");this.originalPadding=t.css("paddingTop")+" "+t.css("paddingRight")+" "+t.css("paddingBottom")+" "+t.css("paddingLeft");this.originalSidePaddingTotal=(parseInt(t.css("paddingLeft"))||0)+(parseInt(t.css("paddingRight"))||0);L=t.innerWidth();ao=t.innerHeight();j=a("<div></div>").attr({className:"jScrollPaneContainer"}).css({height:ao+"px",width:L+"px"});if(c.enableKeyboardNavigation){j.attr("tabindex",c.tabIndex)}t.wrap(j);j=t.parent();a(document).bind("emchange",function(ap,aq,p){t.jScrollPane(c)})}r=ao;if(c.reinitialiseOnImageLoad){var s=a.data(E,"jScrollPaneImagesToLoad")||a("img",t);var i=[];if(s.length){s.each(function(p,ap){a(this).bind("load readystatechange",function(){if(a.inArray(p,i)==-1){i.push(ap);s=a.grep(s,function(at,ar){return at!=ap});a.data(E,"jScrollPaneImagesToLoad",s);var aq=a.extend(c,{reinitialiseOnImageLoad:false});t.jScrollPane(aq)}}).each(function(aq,ar){if(this.complete||this.complete===undefined){this.src=this.src}})})}}var Y=this.originalSidePaddingTotal;var aj=L-c.scrollbarWidth-c.scrollbarMargin-Y;var U={height:"auto",width:aj+"px"};if(c.scrollbarOnLeft){U.paddingLeft=c.scrollbarMargin+c.scrollbarWidth+"px"}else{U.paddingRight=c.scrollbarMargin+"px"}t.css(U);var W=t.outerHeight();var R=ao/W;var V=R<0.99;j[V?"addClass":"removeClass"]("jScrollPaneScrollable");if(V){j.append(a("<div></div>").addClass("jScrollCap jScrollCapTop").css({height:c.topCapHeight}),a("<div></div>").attr({className:"jScrollPaneTrack"}).css({width:c.scrollbarWidth+"px"}).append(a("<div></div>").attr({className:"jScrollPaneDrag"}).css({width:c.scrollbarWidth+"px"}).append(a("<div></div>").attr({className:"jScrollPaneDragTop"}).css({width:c.scrollbarWidth+"px"}),a("<div></div>").attr({className:"jScrollPaneDragBottom"}).css({width:c.scrollbarWidth+"px"}))),a("<div></div>").addClass("jScrollCap jScrollCapBottom").css({height:c.bottomCapHeight}));var ak=a(">.jScrollPaneTrack",j);var u=a(">.jScrollPaneTrack .jScrollPaneDrag",j);var am;var g=[];var aa;var S=function(){if(aa>4||aa%4==0){ai(af+am*I)}aa++};if(c.enableKeyboardNavigation){j.bind("keydown.jscrollpane",function(p){switch(p.keyCode){case 38:am=-1;aa=0;S();g[g.length]=setInterval(S,100);return false;case 40:am=1;aa=0;S();g[g.length]=setInterval(S,100);return false;case 33:case 34:return false;default:}}).bind("keyup.jscrollpane",function(ap){if(ap.keyCode==38||ap.keyCode==40){for(var p=0;p<g.length;p++){clearInterval(g[p])}return false}})}if(c.showArrows){var P;var y;var o=function(p){a("html").unbind("mouseup",o);P.removeClass("jScrollActiveArrowButton");clearInterval(y)};var H=function(){a("html").bind("mouseup",o);P.addClass("jScrollActiveArrowButton");aa=0;S();y=setInterval(S,100)};j.append(a("<a></a>").attr({href:"javascript:;",className:"jScrollArrowUp",tabindex:-1}).css({width:c.scrollbarWidth+"px",top:c.topCapHeight+"px"}).html("Scroll up").bind("mousedown",function(){P=a(this);am=-1;H();this.blur();return false}).bind("click",b),a("<a></a>").attr({href:"javascript:;",className:"jScrollArrowDown",tabindex:-1}).css({width:c.scrollbarWidth+"px",bottom:c.bottomCapHeight+"px"}).html("Scroll down").bind("mousedown",function(){P=a(this);am=1;H();this.blur();return false}).bind("click",b));var v=a(">.jScrollArrowUp",j);var m=a(">.jScrollArrowDown",j)}if(c.arrowSize){r=ao-c.arrowSize-c.arrowSize;ad+=c.arrowSize}else{if(v){var ab=v.height();c.arrowSize=ab;r=ao-ab-m.height();ad+=ab}}r-=c.topCapHeight+c.bottomCapHeight;ak.css({height:r+"px",top:ad+"px"});var ag=a(this).css({position:"absolute",overflow:"visible"});var d;var F;var I;var af=0;var C=R*ao/2;var G=function(ap,ar){var aq=ar=="X"?"Left":"Top";return ap["page"+ar]||(ap["client"+ar]+(document.documentElement["scroll"+aq]||document.body["scroll"+aq]))||0};var O=function(){return false};var ae=function(){X();d=u.offset(false);d.top-=af;F=r-u[0].offsetHeight;I=2*c.wheelSpeed*F/W};var e=function(p){ae();C=G(p,"Y")-af-d.top;a("html").bind("mouseup",z).bind("mousemove",Q).bind("mouseleave",z);if(a.browser.msie){a("html").bind("dragstart",O).bind("selectstart",O)}return false};var z=function(){a("html").unbind("mouseup",z).unbind("mousemove",Q);C=R*ao/2;if(a.browser.msie){a("html").unbind("dragstart",O).unbind("selectstart",O)}};var ai=function(ap){j.scrollTop(0);ap=ap<0?0:(ap>F?F:ap);af=ap;u.css({top:ap+"px"});var aq=ap/F;t.data("jScrollPanePosition",(ao-W)*-aq);ag.css({top:((ao-W)*aq)+"px"});t.trigger("scroll");if(c.showArrows){v[ap==0?"addClass":"removeClass"]("disabled");m[ap==F?"addClass":"removeClass"]("disabled")}};var Q=function(p){ai(G(p,"Y")-d.top-C)};var Z=Math.max(Math.min(R*(ao-c.arrowSize*2),c.dragMaxHeight),c.dragMinHeight);u.css({height:Z+"px"}).bind("mousedown",e);var T;var w;var l;var ac=function(){if(w>8||w%4==0){ai((af-((af-l)/2)))}w++};var al=function(){clearInterval(T);a("html").unbind("mouseup",al).unbind("mousemove",N)};var N=function(p){l=G(p,"Y")-d.top-C};var A=function(p){ae();N(p);w=0;a("html").bind("mouseup",al).bind("mousemove",N);T=setInterval(ac,100);ac();return false};ak.bind("mousedown",A);j.bind("mousewheel",function(ap,ar){ar=ar||(ap.wheelDelta?ap.wheelDelta/120:(ap.detail)?-ap.detail/3:0);ae();X();var aq=af;ai(af-ar*I);var p=aq!=af;return !p});var f;var D;function J(){var p=(f-af)/c.animateStep;if(p>1||p<-1){ai(af+p)}else{ai(f);X()}}var X=function(){if(D){clearInterval(D);delete f}};var ah=function(at,p){if(typeof at=="string"){try{$e=a(at,t)}catch(ar){return}if(!$e.length){return}at=$e.offset().top-t.offset().top}X();var aq=W-ao;at=at>aq?aq:at;t.data("jScrollPaneMaxScroll",aq);var ap=at/aq*F;if(p||!c.animateTo){ai(ap)}else{j.scrollTop(0);f=ap;D=setInterval(J,c.animateInterval)}};t[0].scrollTo=ah;t[0].scrollBy=function(ap){var p=-parseInt(ag.css("top"))||0;ah(p+ap)};ae();ah(-an,true);a("*",this).bind("focus",function(au){var at=a(this);var aw=0;var ap=100;while(at[0]!=t[0]){aw+=at.position().top;at=at.offsetParent();if(!ap--){return}}var p=-parseInt(ag.css("top"))||0;var av=p+ao;var ar=aw>p&&aw<av;if(!ar){var aq=aw-c.scrollbarMargin;if(aw>p){aq+=a(this).height()+15+c.scrollbarMargin-ao}ah(aq)}});if(c.observeHash){if(location.hash&&location.hash.length>1){setTimeout(function(){ah(location.hash)},a.browser.safari?100:0)}a(document).bind("click",function(ap){$target=a(ap.target);if($target.is("a")){var p=$target.attr("href");if(p&&p.substr(0,1)=="#"&&p.length>1){setTimeout(function(){ah(p,!c.animateToInternalLinks)},a.browser.safari?100:0)}}})}function B(p){a(document).bind("mousemove.jScrollPaneDragging",x);a(document).bind("mouseup.jScrollPaneDragging",n)}var M;var h;function K(){direction=M<0?-1:1;t[0].scrollBy(M/2)}function k(){if(h){clearInterval(h);h=undefined}}function x(aq){var ar=t.parent().offset().top;var p=ar+ao;var ap=G(aq,"Y");M=ap<ar?ap-ar:(ap>p?ap-p:0);if(M==0){k()}else{if(!h){h=setInterval(K,100)}}}function n(p){a(document).unbind("mousemove.jScrollPaneDragging").unbind("mouseup.jScrollPaneDragging");k()}j.bind("mousedown.jScrollPane",B);a.jScrollPane.active.push(t[0])}else{t.css({height:ao+"px",width:L-this.originalSidePaddingTotal+"px",padding:this.originalPadding});t[0].scrollTo=t[0].scrollBy=function(){};t.parent().unbind("mousewheel").unbind("mousedown.jScrollPane").unbind("keydown.jscrollpane").unbind("keyup.jscrollpane")}})};a.fn.jScrollPaneRemove=function(){a(this).each(function(){$this=a(this);var b=$this.parent();if(b.is(".jScrollPaneContainer")){$this.css({top:"",height:"",width:"",padding:"",overflow:"",position:""});$this.attr("style",$this.data("originalStyleTag"));b.after($this).remove()}})};a.fn.jScrollPane.defaults={scrollbarWidth:10,scrollbarMargin:5,wheelSpeed:18,showArrows:false,arrowSize:0,animateTo:false,dragMinHeight:1,dragMaxHeight:99999,animateInterval:100,animateStep:3,maintainPosition:true,scrollbarOnLeft:false,reinitialiseOnImageLoad:false,tabIndex:0,enableKeyboardNavigation:true,animateToInternalLinks:false,topCapHeight:0,bottomCapHeight:0,observeHash:true};a(window).bind("unload",function(){var c=a.jScrollPane.active;for(var b=0;b<c.length;b++){c[b].scrollTo=c[b].scrollBy=null}})})(jQuery);
