﻿//syneity.js
//----------------------------------------------------

function OptionInvokeChanged(option, methodToInv) {
    $(option).change(methodToInv);
}
function CCascadeOption(InpOpt, TrgOpt, Url) {
    this.InpOpt = InpOpt;
    this.TrgOpt = TrgOpt;
    this.Url = Url;
    this.FnOptChanged = FnOptChanged;
    $('#' + this.InpOpt).change(this.FnOptChanged);
    function FnOptChanged() {
        var jsonurl = Url();
        if (jsonurl != "") {
            $("#" + TrgOpt).html("<option value=''>Loading...</option>");

            $.getJSON(jsonurl, {}, function (values) {
                var options = "<option value=''>--Select--</option>";
                for (var i = 0; i < values.length; i++) {
                    options += "<option value='" + values[i].Id + "'>" + values[i].Name + "</option>";
                }
                $("#" + TrgOpt).html(options);
            });
        }
        else {
            $("#" + TrgOpt).html("");
        }
    }
}

function getSelectedValue(option) {
    return $("#" + option + " > option:selected").attr("Value");
}


//jquery validate
//-------------------------------------------------------------

/*
* jQuery validation plug-in 1.7
*
* http://bassistance.de/jquery-plugins/jquery-plugin-validation/
* http://docs.jquery.com/Plugins/Validation
*
* Copyright (c) 2006 - 2008 JÃ¶rn Zaefferer
*
* $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
*
* Dual licensed under the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*/
(function ($) {
    $.extend($.fn, { validate: function (options) { if (!this.length) { options && options.debug && window.console && console.warn("nothing selected, can't validate, returning nothing"); return; } var validator = $.data(this[0], 'validator'); if (validator) { return validator; } validator = new $.validator(options, this[0]); $.data(this[0], 'validator', validator); if (validator.settings.onsubmit) { this.find("input, button").filter(".cancel").click(function () { validator.cancelSubmit = true; }); if (validator.settings.submitHandler) { this.find("input, button").filter(":submit").click(function () { validator.submitButton = this; }); } this.submit(function (event) { if (validator.settings.debug) event.preventDefault(); function handle() { if (validator.settings.submitHandler) { if (validator.submitButton) { var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm); } validator.settings.submitHandler.call(validator, validator.currentForm); if (validator.submitButton) { hidden.remove(); } return false; } return true; } if (validator.cancelSubmit) { validator.cancelSubmit = false; return handle(); } if (validator.form()) { if (validator.pendingRequest) { validator.formSubmitted = true; return false; } return handle(); } else { validator.focusInvalid(); return false; } }); } return validator; }, valid: function () { if ($(this[0]).is('form')) { return this.validate().form(); } else { var valid = true; var validator = $(this[0].form).validate(); this.each(function () { valid &= validator.element(this); }); return valid; } }, removeAttrs: function (attributes) { var result = {}, $element = this; $.each(attributes.split(/\s/), function (index, value) { result[value] = $element.attr(value); $element.removeAttr(value); }); return result; }, rules: function (command, argument) { var element = this[0]; if (command) { var settings = $.data(element.form, 'validator').settings; var staticRules = settings.rules; var existingRules = $.validator.staticRules(element); switch (command) { case "add": $.extend(existingRules, $.validator.normalizeRule(argument)); staticRules[element.name] = existingRules; if (argument.messages) settings.messages[element.name] = $.extend(settings.messages[element.name], argument.messages); break; case "remove": if (!argument) { delete staticRules[element.name]; return existingRules; } var filtered = {}; $.each(argument.split(/\s/), function (index, method) { filtered[method] = existingRules[method]; delete existingRules[method]; }); return filtered; } } var data = $.validator.normalizeRules($.extend({}, $.validator.metadataRules(element), $.validator.classRules(element), $.validator.attributeRules(element), $.validator.staticRules(element)), element); if (data.required) { var param = data.required; delete data.required; data = $.extend({ required: param }, data); } return data; } }); $.extend($.expr[":"], { blank: function (a) { return !$.trim("" + a.value); }, filled: function (a) { return !!$.trim("" + a.value); }, unchecked: function (a) { return !a.checked; } }); $.validator = function (options, form) { this.settings = $.extend(true, {}, $.validator.defaults, options); this.currentForm = form; this.init(); }; $.validator.format = function (source, params) { if (arguments.length == 1) return function () { var args = $.makeArray(arguments); args.unshift(source); return $.validator.format.apply(this, args); }; if (arguments.length > 2 && params.constructor != Array) { params = $.makeArray(arguments).slice(1); } if (params.constructor != Array) { params = [params]; } $.each(params, function (i, n) { source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); }); return source; }; $.extend($.validator, { defaults: { messages: {}, groups: {}, rules: {}, errorClass: "error", validClass: "valid", errorElement: "label", focusInvalid: true, errorContainer: $([]), errorLabelContainer: $([]), onsubmit: true, ignore: [], ignoreTitle: false, onfocusin: function (element) { this.lastActive = element; if (this.settings.focusCleanup && !this.blockFocusCleanup) { this.settings.unhighlight && this.settings.unhighlight.call(this, element, this.settings.errorClass, this.settings.validClass); this.errorsFor(element).hide(); } }, onfocusout: function (element) { if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) { this.element(element); } }, onkeyup: function (element) { if (element.name in this.submitted || element == this.lastElement) { this.element(element); } }, onclick: function (element) { if (element.name in this.submitted) this.element(element); else if (element.parentNode.name in this.submitted) this.element(element.parentNode); }, highlight: function (element, errorClass, validClass) { $(element).addClass(errorClass).removeClass(validClass); }, unhighlight: function (element, errorClass, validClass) { $(element).removeClass(errorClass).addClass(validClass); } }, setDefaults: function (settings) { $.extend($.validator.defaults, settings); }, messages: { required: "This field is required.", remote: "Please fix this field.", email: "Please enter a valid email address.", url: "Please enter a valid URL.", date: "Please enter a valid date.", dateISO: "Please enter a valid date (ISO).", number: "Please enter a valid number.", digits: "Please enter only digits.", creditcard: "Please enter a valid credit card number.", equalTo: "Please enter the same value again.", accept: "Please enter a value with a valid extension.", maxlength: $.validator.format("Please enter no more than {0} characters."), minlength: $.validator.format("Please enter at least {0} characters."), rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."), range: $.validator.format("Please enter a value between {0} and {1}."), max: $.validator.format("Please enter a value less than or equal to {0}."), min: $.validator.format("Please enter a value greater than or equal to {0}.") }, autoCreateRanges: false, prototype: { init: function () { this.labelContainer = $(this.settings.errorLabelContainer); this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); this.containers = $(this.settings.errorContainer).add(this.settings.errorLabelContainer); this.submitted = {}; this.valueCache = {}; this.pendingRequest = 0; this.pending = {}; this.invalid = {}; this.reset(); var groups = (this.groups = {}); $.each(this.settings.groups, function (key, value) { $.each(value.split(/\s/), function (index, name) { groups[name] = key; }); }); var rules = this.settings.rules; $.each(rules, function (key, value) { rules[key] = $.validator.normalizeRule(value); }); function delegate(event) { var validator = $.data(this[0].form, "validator"), eventType = "on" + event.type.replace(/^validate/, ""); validator.settings[eventType] && validator.settings[eventType].call(validator, this[0]); } $(this.currentForm).validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate).validateDelegate(":radio, :checkbox, select, option", "click", delegate); if (this.settings.invalidHandler) $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); }, form: function () { this.checkForm(); $.extend(this.submitted, this.errorMap); this.invalid = $.extend({}, this.errorMap); if (!this.valid()) $(this.currentForm).triggerHandler("invalid-form", [this]); this.showErrors(); return this.valid(); }, checkForm: function () { this.prepareForm(); for (var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++) { this.check(elements[i]); } return this.valid(); }, element: function (element) { element = this.clean(element); this.lastElement = element; this.prepareElement(element); this.currentElements = $(element); var result = this.check(element); if (result) { delete this.invalid[element.name]; } else { this.invalid[element.name] = true; } if (!this.numberOfInvalids()) { this.toHide = this.toHide.add(this.containers); } this.showErrors(); return result; }, showErrors: function (errors) { if (errors) { $.extend(this.errorMap, errors); this.errorList = []; for (var name in errors) { this.errorList.push({ message: errors[name], element: this.findByName(name)[0] }); } this.successList = $.grep(this.successList, function (element) { return !(element.name in errors); }); } this.settings.showErrors ? this.settings.showErrors.call(this, this.errorMap, this.errorList) : this.defaultShowErrors(); }, resetForm: function () { if ($.fn.resetForm) $(this.currentForm).resetForm(); this.submitted = {}; this.prepareForm(); this.hideErrors(); this.elements().removeClass(this.settings.errorClass); }, numberOfInvalids: function () { return this.objectLength(this.invalid); }, objectLength: function (obj) { var count = 0; for (var i in obj) count++; return count; }, hideErrors: function () { this.addWrapper(this.toHide).hide(); }, valid: function () { return this.size() == 0; }, size: function () { return this.errorList.length; }, focusInvalid: function () { if (this.settings.focusInvalid) { try { $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus().trigger("focusin"); } catch (e) { } } }, findLastActive: function () { var lastActive = this.lastActive; return lastActive && $.grep(this.errorList, function (n) { return n.element.name == lastActive.name; }).length == 1 && lastActive; }, elements: function () { var validator = this, rulesCache = {}; return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function () { !this.name && validator.settings.debug && window.console && console.error("%o has no name assigned", this); if (this.name in rulesCache || !validator.objectLength($(this).rules())) return false; rulesCache[this.name] = true; return true; }); }, clean: function (selector) { return $(selector)[0]; }, errors: function () { return $(this.settings.errorElement + "." + this.settings.errorClass, this.errorContext); }, reset: function () { this.successList = []; this.errorList = []; this.errorMap = {}; this.toShow = $([]); this.toHide = $([]); this.currentElements = $([]); }, prepareForm: function () { this.reset(); this.toHide = this.errors().add(this.containers); }, prepareElement: function (element) { this.reset(); this.toHide = this.errorsFor(element); }, check: function (element) {
        element = this.clean(element); if (this.checkable(element)) { element = this.findByName(element.name)[0]; } var rules = $(element).rules(); var dependencyMismatch = false; for (method in rules) {
            var rule = { method: method, parameters: rules[method] }; try { var result = $.validator.methods[method].call(this, element.value.replace(/\r/g, ""), element, rule.parameters); if (result == "dependency-mismatch") { dependencyMismatch = true; continue; } dependencyMismatch = false; if (result == "pending") { this.toHide = this.toHide.not(this.errorsFor(element)); return; } if (!result) { this.formatAndAdd(element, rule); return false; } } catch (e) {
                this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
+ ", check the '" + rule.method + "' method", e); throw e;
            }
        } if (dependencyMismatch) return; if (this.objectLength(rules)) this.successList.push(element); return true;
    }, customMetaMessage: function (element, method) { if (!$.metadata) return; var meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata(); return meta && meta.messages && meta.messages[method]; }, customMessage: function (name, method) { var m = this.settings.messages[name]; return m && (m.constructor == String ? m : m[method]); }, findDefined: function () { for (var i = 0; i < arguments.length; i++) { if (arguments[i] !== undefined) return arguments[i]; } return undefined; }, defaultMessage: function (element, method) { return this.findDefined(this.customMessage(element.name, method), this.customMetaMessage(element, method), !this.settings.ignoreTitle && element.title || undefined, $.validator.messages[method], "<strong>Warning: No message defined for " + element.name + "</strong>"); }, formatAndAdd: function (element, rule) { var message = this.defaultMessage(element, rule.method), theregex = /\$?\{(\d+)\}/g; if (typeof message == "function") { message = message.call(this, rule.parameters, element); } else if (theregex.test(message)) { message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters); } this.errorList.push({ message: message, element: element }); this.errorMap[element.name] = message; this.submitted[element.name] = message; }, addWrapper: function (toToggle) { if (this.settings.wrapper) toToggle = toToggle.add(toToggle.parent(this.settings.wrapper)); return toToggle; }, defaultShowErrors: function () { for (var i = 0; this.errorList[i]; i++) { var error = this.errorList[i]; this.settings.highlight && this.settings.highlight.call(this, error.element, this.settings.errorClass, this.settings.validClass); this.showLabel(error.element, error.message); } if (this.errorList.length) { this.toShow = this.toShow.add(this.containers); } if (this.settings.success) { for (var i = 0; this.successList[i]; i++) { this.showLabel(this.successList[i]); } } if (this.settings.unhighlight) { for (var i = 0, elements = this.validElements(); elements[i]; i++) { this.settings.unhighlight.call(this, elements[i], this.settings.errorClass, this.settings.validClass); } } this.toHide = this.toHide.not(this.toShow); this.hideErrors(); this.addWrapper(this.toShow).show(); }, validElements: function () { return this.currentElements.not(this.invalidElements()); }, invalidElements: function () { return $(this.errorList).map(function () { return this.element; }); }, showLabel: function (element, message) { var label = this.errorsFor(element); if (label.length) { label.removeClass().addClass(this.settings.errorClass); label.attr("generated") && label.html(message); } else { label = $("<" + this.settings.errorElement + "/>").attr({ "for": this.idOrName(element), generated: true }).addClass(this.settings.errorClass).html(message || ""); if (this.settings.wrapper) { label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); } if (!this.labelContainer.append(label).length) this.settings.errorPlacement ? this.settings.errorPlacement(label, $(element)) : label.insertAfter(element); } if (!message && this.settings.success) { label.text(""); typeof this.settings.success == "string" ? label.addClass(this.settings.success) : this.settings.success(label); } this.toShow = this.toShow.add(label); }, errorsFor: function (element) { var name = this.idOrName(element); return this.errors().filter(function () { return $(this).attr('for') == name; }); }, idOrName: function (element) { return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); }, checkable: function (element) { return /radio|checkbox/i.test(element.type); }, findByName: function (name) { var form = this.currentForm; return $(document.getElementsByName(name)).map(function (index, element) { return element.form == form && element.name == name && element || null; }); }, getLength: function (value, element) { switch (element.nodeName.toLowerCase()) { case 'select': return $("option:selected", element).length; case 'input': if (this.checkable(element)) return this.findByName(element.name).filter(':checked').length; } return value.length; }, depend: function (param, element) { return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; }, dependTypes: { "boolean": function (param, element) { return param; }, "string": function (param, element) { return !!$(param, element.form).length; }, "function": function (param, element) { return param(element); } }, optional: function (element) { return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch"; }, startRequest: function (element) { if (!this.pending[element.name]) { this.pendingRequest++; this.pending[element.name] = true; } }, stopRequest: function (element, valid) { this.pendingRequest--; if (this.pendingRequest < 0) this.pendingRequest = 0; delete this.pending[element.name]; if (valid && this.pendingRequest == 0 && this.formSubmitted && this.form()) { $(this.currentForm).submit(); this.formSubmitted = false; } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) { $(this.currentForm).triggerHandler("invalid-form", [this]); this.formSubmitted = false; } }, previousValue: function (element) { return $.data(element, "previousValue") || $.data(element, "previousValue", { old: null, valid: true, message: this.defaultMessage(element, "remote") }); }
    }, classRuleSettings: { required: { required: true }, email: { email: true }, url: { url: true }, date: { date: true }, dateISO: { dateISO: true }, dateDE: { dateDE: true }, number: { number: true }, numberDE: { numberDE: true }, digits: { digits: true }, creditcard: { creditcard: true} }, addClassRules: function (className, rules) { className.constructor == String ? this.classRuleSettings[className] = rules : $.extend(this.classRuleSettings, className); }, classRules: function (element) { var rules = {}; var classes = $(element).attr('class'); classes && $.each(classes.split(' '), function () { if (this in $.validator.classRuleSettings) { $.extend(rules, $.validator.classRuleSettings[this]); } }); return rules; }, attributeRules: function (element) { var rules = {}; var $element = $(element); for (method in $.validator.methods) { var value = $element.attr(method); if (value) { rules[method] = value; } } if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) { delete rules.maxlength; } return rules; }, metadataRules: function (element) { if (!$.metadata) return {}; var meta = $.data(element.form, 'validator').settings.meta; return meta ? $(element).metadata()[meta] : $(element).metadata(); }, staticRules: function (element) { var rules = {}; var validator = $.data(element.form, 'validator'); if (validator.settings.rules) { rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; } return rules; }, normalizeRules: function (rules, element) { $.each(rules, function (prop, val) { if (val === false) { delete rules[prop]; return; } if (val.param || val.depends) { var keepRule = true; switch (typeof val.depends) { case "string": keepRule = !!$(val.depends, element.form).length; break; case "function": keepRule = val.depends.call(element, element); break; } if (keepRule) { rules[prop] = val.param !== undefined ? val.param : true; } else { delete rules[prop]; } } }); $.each(rules, function (rule, parameter) { rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; }); $.each(['minlength', 'maxlength', 'min', 'max'], function () { if (rules[this]) { rules[this] = Number(rules[this]); } }); $.each(['rangelength', 'range'], function () { if (rules[this]) { rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; } }); if ($.validator.autoCreateRanges) { if (rules.min && rules.max) { rules.range = [rules.min, rules.max]; delete rules.min; delete rules.max; } if (rules.minlength && rules.maxlength) { rules.rangelength = [rules.minlength, rules.maxlength]; delete rules.minlength; delete rules.maxlength; } } if (rules.messages) { delete rules.messages; } return rules; }, normalizeRule: function (data) { if (typeof data == "string") { var transformed = {}; $.each(data.split(/\s/), function () { transformed[this] = true; }); data = transformed; } return data; }, addMethod: function (name, method, message) { $.validator.methods[name] = method; $.validator.messages[name] = message != undefined ? message : $.validator.messages[name]; if (method.length < 3) { $.validator.addClassRules(name, $.validator.normalizeRule(name)); } }, methods: { required: function (value, element, param) { if (!this.depend(param, element)) return "dependency-mismatch"; switch (element.nodeName.toLowerCase()) { case 'select': var val = $(element).val(); return val && val.length > 0; case 'input': if (this.checkable(element)) return this.getLength(value, element) > 0; default: return $.trim(value).length > 0; } }, remote: function (value, element, param) { if (this.optional(element)) return "dependency-mismatch"; var previous = this.previousValue(element); if (!this.settings.messages[element.name]) this.settings.messages[element.name] = {}; previous.originalMessage = this.settings.messages[element.name].remote; this.settings.messages[element.name].remote = previous.message; param = typeof param == "string" && { url: param} || param; if (previous.old !== value) { previous.old = value; var validator = this; this.startRequest(element); var data = {}; data[element.name] = value; $.ajax($.extend(true, { url: param, mode: "abort", port: "validate" + element.name, dataType: "json", data: data, success: function (response) { validator.settings.messages[element.name].remote = previous.originalMessage; var valid = response === true; if (valid) { var submitted = validator.formSubmitted; validator.prepareElement(element); validator.formSubmitted = submitted; validator.successList.push(element); validator.showErrors(); } else { var errors = {}; var message = (previous.message = response || validator.defaultMessage(element, "remote")); errors[element.name] = $.isFunction(message) ? message(value) : message; validator.showErrors(errors); } previous.valid = valid; validator.stopRequest(element, valid); } }, param)); return "pending"; } else if (this.pending[element.name]) { return "pending"; } return previous.valid; }, minlength: function (value, element, param) { return this.optional(element) || this.getLength($.trim(value), element) >= param; }, maxlength: function (value, element, param) { return this.optional(element) || this.getLength($.trim(value), element) <= param; }, rangelength: function (value, element, param) { var length = this.getLength($.trim(value), element); return this.optional(element) || (length >= param[0] && length <= param[1]); }, min: function (value, element, param) { return this.optional(element) || value >= param; }, max: function (value, element, param) { return this.optional(element) || value <= param; }, range: function (value, element, param) { return this.optional(element) || (value >= param[0] && value <= param[1]); }, email: function (value, element) { return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value); }, url: function (value, element) { return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); }, date: function (value, element) { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); }, dateISO: function (value, element) { return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value); }, number: function (value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value); }, digits: function (value, element) { return this.optional(element) || /^\d+$/.test(value); }, creditcard: function (value, element) { if (this.optional(element)) return "dependency-mismatch"; if (/[^0-9-]+/.test(value)) return false; var nCheck = 0, nDigit = 0, bEven = false; value = value.replace(/\D/g, ""); for (var n = value.length - 1; n >= 0; n--) { var cDigit = value.charAt(n); var nDigit = parseInt(cDigit, 10); if (bEven) { if ((nDigit *= 2) > 9) nDigit -= 9; } nCheck += nDigit; bEven = !bEven; } return (nCheck % 10) == 0; }, accept: function (value, element, param) { param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif"; return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); }, equalTo: function (value, element, param) { var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function () { $(element).valid(); }); return value == target.val(); } }
    }); $.format = $.validator.format;
})(jQuery); ; (function ($) { var ajax = $.ajax; var pendingRequests = {}; $.ajax = function (settings) { settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings)); var port = settings.port; if (settings.mode == "abort") { if (pendingRequests[port]) { pendingRequests[port].abort(); } return (pendingRequests[port] = ajax.apply(this, arguments)); } return ajax.apply(this, arguments); }; })(jQuery); ; (function ($) { if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) { $.each({ focus: 'focusin', blur: 'focusout' }, function (original, fix) { $.event.special[fix] = { setup: function () { this.addEventListener(original, handler, true); }, teardown: function () { this.removeEventListener(original, handler, true); }, handler: function (e) { arguments[0] = $.event.fix(e); arguments[0].type = fix; return $.event.handle.apply(this, arguments); } }; function handler(e) { e = $.event.fix(e); e.type = fix; return $.event.handle.call(this, e); } }); }; $.extend($.fn, { validateDelegate: function (delegate, type, handler) { return this.bind(type, function (event) { var target = $(event.target); if (target.is(delegate)) { return handler.apply(target, arguments); } }); } }); })(jQuery);

//Main Navigation script.js
//---------------------------------
var menuSlider=function(){
	var m,e,g,s,q,i; e=[]; q=8; i=8;
	return{
		init:function(j,k){
			m=document.getElementById(j); e=m.getElementsByTagName('li');
			var i,l,w,p; i=0; l=e.length;
			for(i;i<l;i++){
				var c,v; c=e[i]; v=c.value; if(v==1){s=c; w=c.offsetWidth; p=c.offsetLeft}
				c.onmouseover=function(){menuSlider.mo(this)}; c.onmouseout=function(){menuSlider.mo(s)};
			}
			g=document.getElementById(k); g.style.width=w+'px'; g.style.left=p+'px';
		},
		mo:function(d){
			clearInterval(m.tm);
			var el,ew; el=parseInt(d.offsetLeft); ew=parseInt(d.offsetWidth);
			m.tm=setInterval(function(){menuSlider.mv(el,ew)},i);
		},
		mv:function(el,ew){
			var l,w; l=parseInt(g.offsetLeft); w=parseInt(g.offsetWidth);
			if(l!=el||w!=ew){
				if(l!=el){var ld,lr,li; ld=(l>el)?-1:1; lr=Math.abs(el-l); li=(lr<q)?ld*lr:ld*q; g.style.left=(l+li)+'px'}
				if(w!=ew){var wd,wr,wi; wd=(w>ew)?-1:1; wr=Math.abs(ew-w); wi=(wr<q)?wd*wr:wd*q; g.style.width=(w+wi)+'px'}
			}else{clearInterval(m.tm)}
}};}();

//News Jquery ScrollTo
//------------------------------------------------------
/**
 * jQuery.ScrollTo
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 *
 * @projectDescription Easy element scrolling using jQuery.
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 * Works with jQuery +1.2.6. Tested on FF 2/3, IE 6/7/8, Opera 9.5/6, Safari 3, Chrome 1 on WinXP.
 *
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * @id jQuery.scrollTo
 * @id jQuery.fn.scrollTo
 * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
 *	  The different options for target are:
 *		- A number position (will be applied to all axes).
 *		- A string position ('44', '100px', '+=90', etc ) will be applied to all axes
 *		- A jQuery/DOM element ( logically, child of the element to scroll )
 *		- A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
 *		- A hash { top:x, left:y }, x and y can be any kind of number/string like above.
*		- A percentage of the container's dimension/s, for example: 50% to go to the middle.
 *		- The string 'max' for go-to-end. 
 * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
 * @param {Object,Function} settings Optional set of settings or the onAfter callback.
 *	 @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
 *	 @option {Number} duration The OVERALL length of the animation.
 *	 @option {String} easing The easing method for the animation.
 *	 @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
 *	 @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
 *	 @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
 *	 @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
 *	 @option {Function} onAfter Function to be called after the scrolling ends. 
 *	 @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
 * @return {jQuery} Returns the same jQuery object, for chaining.
 *
 * @desc Scroll to a fixed position
 * @example $('div').scrollTo( 340 );
 *
 * @desc Scroll relatively to the actual position
 * @example $('div').scrollTo( '+=340px', { axis:'y' } );
 *
 * @dec Scroll using a selector (relative to the scrolled element)
 * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
 *
 * @ Scroll to a DOM element (same for jQuery object)
 * @example var second_child = document.getElementById('container').firstChild.nextSibling;
 *			$('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
 *				alert('scrolled!!');																   
 *			}});
 *
 * @desc Scroll on both axes, to different values
 * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
 */
;(function( $ ){
	
	var $scrollTo = $.scrollTo = function( target, duration, settings ){
		$(window).scrollTo( target, duration, settings );
	};

	$scrollTo.defaults = {
		axis:'xy',
		duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1
	};

	// Returns the element that needs to be animated to scroll the window.
	// Kept for backwards compatibility (specially for localScroll & serialScroll)
	$scrollTo.window = function( scope ){
		return $(window)._scrollable();
	};

	// Hack, hack, hack :)
	// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
	$.fn._scrollable = function(){
		return this.map(function(){
			var elem = this,
				isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;

				if( !isWin )
					return elem;

			var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
			
			return $.browser.safari || doc.compatMode == 'BackCompat' ?
				doc.body : 
				doc.documentElement;
		});
	};

	$.fn.scrollTo = function( target, duration, settings ){
		if( typeof duration == 'object' ){
			settings = duration;
			duration = 0;
		}
		if( typeof settings == 'function' )
			settings = { onAfter:settings };
			
		if( target == 'max' )
			target = 9e9;
			
		settings = $.extend( {}, $scrollTo.defaults, settings );
		// Speed is still recognized for backwards compatibility
		duration = duration || settings.speed || settings.duration;
		// Make sure the settings are given right
		settings.queue = settings.queue && settings.axis.length > 1;
		
		if( settings.queue )
			// Let's keep the overall duration
			duration /= 2;
		settings.offset = both( settings.offset );
		settings.over = both( settings.over );

		return this._scrollable().each(function(){
			var elem = this,
				$elem = $(elem),
				targ = target, toff, attr = {},
				win = $elem.is('html,body');

			switch( typeof targ ){
				// A number will pass the regex
				case 'number':
				case 'string':
					if( /^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ) ){
						targ = both( targ );
						// We are done
						break;
					}
					// Relative selector, no break!
					targ = $(targ,this);
				case 'object':
					// DOMElement / jQuery
					if( targ.is || targ.style )
						// Get the real position of the target 
						toff = (targ = $(targ)).offset();
			}
			$.each( settings.axis.split(''), function( i, axis ){
				var Pos	= axis == 'x' ? 'Left' : 'Top',
					pos = Pos.toLowerCase(),
					key = 'scroll' + Pos,
					old = elem[key],
					max = $scrollTo.max(elem, axis);

				if( toff ){// jQuery / DOMElement
					attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );

					// If it's a dom element, reduce the margin
					if( settings.margin ){
						attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
						attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
					}
					
					attr[key] += settings.offset[pos] || 0;
					
					if( settings.over[pos] )
						// Scroll to a fraction of its width/height
						attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
				}else{ 
					var val = targ[pos];
					// Handle percentage values
					attr[key] = val.slice && val.slice(-1) == '%' ? 
						parseFloat(val) / 100 * max
						: val;
				}

				// Number or 'number'
				if( /^\d+$/.test(attr[key]) )
					// Check the limits
					attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );

				// Queueing axes
				if( !i && settings.queue ){
					// Don't waste time animating, if there's no need.
					if( old != attr[key] )
						// Intermediate animation
						animate( settings.onAfterFirst );
					// Don't animate this axis again in the next iteration.
					delete attr[key];
				}
			});

			animate( settings.onAfter );			

			function animate( callback ){
				$elem.animate( attr, duration, settings.easing, callback && function(){
					callback.call(this, target, settings);
				});
			};

		}).end();
	};
	
	// Max scrolling position, works on quirks mode
	// It only fails (not too badly) on IE, quirks mode.
	$scrollTo.max = function( elem, axis ){
		var Dim = axis == 'x' ? 'Width' : 'Height',
			scroll = 'scroll'+Dim;
		
		if( !$(elem).is('html,body') )
			return elem[scroll] - $(elem)[Dim.toLowerCase()]();
		
		var size = 'client' + Dim,
			html = elem.ownerDocument.documentElement,
			body = elem.ownerDocument.body;

		return Math.max( html[scroll], body[scroll] ) 
			 - Math.min( html[size]  , body[size]   );
			
	};

	function both( val ){
		return typeof val == 'object' ? val : { top:val, left:val };
	};

})( jQuery );

//News NewsSlideShow
//-------------------------------------------------------------------

$(document).ready(function () {

            //Speed of the slideshow
            var speed = 5000;

            //You have to specify width and height in #slider CSS properties
            //After that, the following script will set the width and height accordingly
            $('#mask-gallery, #gallery li').width($('#slider').width());
            $('#gallery').width($('#slider').width() * $('#gallery li').length);
            $('#mask-gallery, #gallery li, #mask-excerpt, #excerpt li').height($('#slider').height());

            //Assign a timer, so it will run periodically
            var run = setInterval('newsscoller(0)', speed);

            $('#gallery li:first, #excerpt li:first').addClass('selected');

            //Pause the slidershow with clearInterval
            $('#btn-pause').click(function () {
                clearInterval(run);
                return false;
            });

            //Continue the slideshow with setInterval
            $('#btn-play').click(function () {
                run = setInterval('newsscoller(0)', speed);
                return false;
            });

            //Next Slide by calling the function
            $('#btn-next').click(function () {
                newsscoller(0);
                return false;
            });

            //Previous slide by passing prev=1
            $('#btn-prev').click(function () {
                newsscoller(1);
                return false;
            });

            //Mouse over, pause it, on mouse out, resume the slider show
            $('#slider').hover(

		function () {
		    clearInterval(run);
		},
		function () {
		    run = setInterval('newsscoller(0)', speed);
		}
	);

        });


        function newsscoller(prev) {

            //Get the current selected item (with selected class), if none was found, get the first item
            var current_image = $('#gallery li.selected').length ? $('#gallery li.selected') : $('#gallery li:first');
            var current_excerpt = $('#excerpt li.selected').length ? $('#excerpt li.selected') : $('#excerpt li:first');

            //if prev is set to 1 (previous item)
            if (prev) {

                //Get previous sibling
                var next_image = (current_image.prev().length) ? current_image.prev() : $('#gallery li:last');
                var next_excerpt = (current_excerpt.prev().length) ? current_excerpt.prev() : $('#excerpt li:last');

                //if prev is set to 0 (next item)
            } else {

                //Get next sibling
                var next_image = (current_image.next().length) ? current_image.next() : $('#gallery li:first');
                var next_excerpt = (current_excerpt.next().length) ? current_excerpt.next() : $('#excerpt li:first');
            }

            //clear the selected class
            $('#excerpt li, #gallery li').removeClass('selected');

            //reassign the selected class to current items
            next_image.addClass('selected');
            next_excerpt.addClass('selected');

            //Scroll the items
            $('#mask-gallery').scrollTo(next_image, 800);
            $('#mask-excerpt').scrollTo(next_excerpt, 800);

        }



        // slide show
        //---------------------------------------------------------------------------

        /*
        * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
        *
        * Uses the built in easing capabilities added In jQuery 1.1
        * to offer multiple easing options
        *
        * TERMS OF USE - jQuery Easing
        * 
        * Open source under the BSD License. 
        * 
        * Copyright © 2008 George McGinley Smith
        * All rights reserved.
        * 
        * Redistribution and use in source and binary forms, with or without modification, 
        * are permitted provided that the following conditions are met:
        * 
        * Redistributions of source code must retain the above copyright notice, this list of 
        * conditions and the following disclaimer.
        * Redistributions in binary form must reproduce the above copyright notice, this list 
        * of conditions and the following disclaimer in the documentation and/or other materials 
        * provided with the distribution.
        * 
        * Neither the name of the author nor the names of contributors may be used to endorse 
        * or promote products derived from this software without specific prior written permission.
        * 
        * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
        * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
        * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
        *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
        *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
        *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
        * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
        *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
        * OF THE POSSIBILITY OF SUCH DAMAGE. 
        *
        */

        // t: current time, b: begInnIng value, c: change In value, d: duration
        jQuery.easing['jswing'] = jQuery.easing['swing'];

        jQuery.extend(jQuery.easing,
{
    def: 'easeOutQuad',
    swing: function (x, t, b, c, d) {
        //alert(jQuery.easing.default);
        return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
    },
    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;
    }
});

        /*
        *
        * TERMS OF USE - EASING EQUATIONS
        * 
        * Open source under the BSD License. 
        * 
        * Copyright © 2001 Robert Penner
        * All rights reserved.
        * 
        * Redistribution and use in source and binary forms, with or without modification, 
        * are permitted provided that the following conditions are met:
        * 
        * Redistributions of source code must retain the above copyright notice, this list of 
        * conditions and the following disclaimer.
        * Redistributions in binary form must reproduce the above copyright notice, this list 
        * of conditions and the following disclaimer in the documentation and/or other materials 
        * provided with the distribution.
        * 
        * Neither the name of the author nor the names of contributors may be used to endorse 
        * or promote products derived from this software without specific prior written permission.
        * 
        * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
        * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
        * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
        *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
        *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
        *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
        * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
        *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
        * OF THE POSSIBILITY OF SUCH DAMAGE. 
        *
        */



        // jquery Gallery view
        //-----------------------------------------------------------------------------------------------

        /*

        GalleryView - jQuery Content Gallery Plugin
        Author: 		Jack Anderson
        Version:		1.1 (April 5, 2009)
        Documentation: 	http://www.spaceforaname.com/jquery/galleryview/
	
        Please use this development script if you intend to make changes to the
        plugin code.  For production sites, please use jquery.galleryview-1.0.1-pack.js.
	
        */
        (function ($) {
            $.fn.galleryView = function (options) {
                var opts = $.extend($.fn.galleryView.defaults, options);

                var id;
                var iterator = 0;
                var gallery_width;
                var gallery_height;
                var frame_margin = 10;
                var strip_width;
                var wrapper_width;
                var item_count = 0;
                var slide_method;
                var img_path = "/resources/scripts/";
                var paused = false;
                var frame_caption_size = 20;
                var frame_margin_top = 5;
                var pointer_width = 2;

                //Define jQuery objects for reuse
                var j_gallery;
                var j_filmstrip;
                var j_frames;
                var j_panels;
                var j_pointer;

                /************************************************/
                /*	Plugin Methods								*/
                /************************************************/
                function showItem(i) {
                    //Disable next/prev buttons until transition is complete
                    $('img.nav-next').unbind('click');
                    $('img.nav-prev').unbind('click');
                    j_frames.unbind('click');
                    if (has_panels) {
                        if (opts.fade_panels) {
                            //Fade out all panels and fade in target panel
                            j_panels.fadeOut(opts.transition_speed).eq(i % item_count).fadeIn(opts.transition_speed, function () {
                                if (!has_filmstrip) {
                                    $('img.nav-prev').click(showPrevItem);
                                    $('img.nav-next').click(showNextItem);
                                }
                            });
                        }
                    }

                    if (has_filmstrip) {
                        //Slide either pointer or filmstrip, depending on transition method
                        if (slide_method == 'strip') {
                            //Stop filmstrip if it's currently in motion
                            j_filmstrip.stop();

                            //Determine distance between pointer (eventual destination) and target frame
                            var distance = getPos(j_frames[i]).left - (getPos(j_pointer[0]).left + 2);
                            var leftstr = (distance >= 0 ? '-=' : '+=') + Math.abs(distance) + 'px';

                            //Animate filmstrip and slide target frame under pointer
                            //If target frame is a duplicate, jump back to 'original' frame
                            j_filmstrip.animate({
                                'left': leftstr
                            }, opts.transition_speed, opts.easing, function () {
                                //Always ensure that there are a sufficient number of hidden frames on either
                                //side of the filmstrip to avoid empty frames
                                if (i > item_count) {
                                    i = i % item_count;
                                    iterator = i;
                                    j_filmstrip.css('left', '-' + ((opts.frame_width + frame_margin) * i) + 'px');
                                } else if (i <= (item_count - strip_size)) {
                                    i = (i % item_count) + item_count;
                                    iterator = i;
                                    j_filmstrip.css('left', '-' + ((opts.frame_width + frame_margin) * i) + 'px');
                                }

                                if (!opts.fade_panels) {
                                    j_panels.hide().eq(i % item_count).show();
                                }
                                $('img.nav-prev').click(showPrevItem);
                                $('img.nav-next').click(showNextItem);
                                enableFrameClicking();
                            });
                        } else if (slide_method == 'pointer') {
                            //Stop pointer if it's currently in motion
                            j_pointer.stop();
                            //Get position of target frame
                            var pos = getPos(j_frames[i]);
                            //Slide the pointer over the target frame
                            j_pointer.animate({
                                'left': (pos.left - 2 + 'px')
                            }, opts.transition_speed, opts.easing, function () {
                                if (!opts.fade_panels) {
                                    j_panels.hide().eq(i % item_count).show();
                                }
                                $('img.nav-prev').click(showPrevItem);
                                $('img.nav-next').click(showNextItem);
                                enableFrameClicking();
                            });
                        }

                        if ($('a', j_frames[i])[0]) {
                            j_pointer.unbind('click').click(function () {
                                var a = $('a', j_frames[i]).eq(0);
                                if (a.attr('target') == '_blank') { window.open(a.attr('href')); }
                                else { location.href = a.attr('href'); }
                            });
                        }
                    }
                };
                function showNextItem() {
                    $(document).stopTime("transition");
                    if (++iterator == j_frames.length) { iterator = 0; }
                    showItem(iterator);
                    $(document).everyTime(opts.transition_interval, "transition", function () {
                        showNextItem();
                    });
                };
                function showPrevItem() {
                    $(document).stopTime("transition");
                    if (--iterator < 0) { iterator = item_count - 1; }
                    //alert(iterator);
                    showItem(iterator);
                    $(document).everyTime(opts.transition_interval, "transition", function () {
                        showNextItem();
                    });
                };
                function getPos(el) {
                    var left = 0, top = 0;
                    var el_id = el.id;
                    if (el.offsetParent) {
                        do {
                            left += el.offsetLeft;
                            top += el.offsetTop;
                        } while (el = el.offsetParent);
                    }
                    //If we want the position of the gallery itself, return it
                    if (el_id == id) { return { 'left': left, 'top': top }; }
                    //Otherwise, get position of element relative to gallery
                    else {
                        var gPos = getPos(j_gallery[0]);
                        var gLeft = gPos.left;
                        var gTop = gPos.top;

                        return { 'left': left - gLeft, 'top': top - gTop };
                    }
                };
                function enableFrameClicking() {
                    j_frames.each(function (i) {
                        //If there isn't a link in this frame, set up frame to slide on click
                        //Frames with links will handle themselves
                        if ($('a', this).length == 0) {
                            $(this).click(function () {
                                $(document).stopTime("transition");
                                showItem(i);
                                iterator = i;
                                $(document).everyTime(opts.transition_interval, "transition", function () {
                                    showNextItem();
                                });
                            });
                        }
                    });
                };

                function buildPanels() {
                    //If there are panel captions, add overlay divs
                    if ($('.panel-overlay').length > 0) { j_panels.append('<div class="overlay"></div>'); }

                    if (!has_filmstrip) {
                        //Add navigation buttons
                        $('<img />').addClass('nav-next').attr('src', img_path + opts.nav_theme + '/next.png').appendTo(j_gallery).css({
                            'position': 'absolute',
                            'zIndex': '1100',
                            'cursor': 'pointer',
                            'top': ((opts.panel_height - 22) / 2) + 'px',
                            'right': '10px',
                            'display': 'none'
                        }).click(showNextItem);
                        $('<img />').addClass('nav-prev').attr('src', img_path + opts.nav_theme + '/prev.png').appendTo(j_gallery).css({
                            'position': 'absolute',
                            'zIndex': '1100',
                            'cursor': 'pointer',
                            'top': ((opts.panel_height - 22) / 2) + 'px',
                            'left': '10px',
                            'display': 'none'
                        }).click(showPrevItem);

                        $('<img />').addClass('nav-overlay').attr('src', img_path + opts.nav_theme + '/panel-nav-next.png').appendTo(j_gallery).css({
                            'position': 'absolute',
                            'zIndex': '1099',
                            'top': ((opts.panel_height - 22) / 2) - 10 + 'px',
                            'right': '0',
                            'display': 'none'
                        });

                        $('<img />').addClass('nav-overlay').attr('src', img_path + opts.nav_theme + '/panel-nav-prev.png').appendTo(j_gallery).css({
                            'position': 'absolute',
                            'zIndex': '1099',
                            'top': ((opts.panel_height - 22) / 2) - 10 + 'px',
                            'left': '0',
                            'display': 'none'
                        });
                    }
                    j_panels.css({
                        'width': (opts.panel_width - parseInt(j_panels.css('paddingLeft').split('px')[0], 10) - parseInt(j_panels.css('paddingRight').split('px')[0], 10)) + 'px',
                        'height': (opts.panel_height - parseInt(j_panels.css('paddingTop').split('px')[0], 10) - parseInt(j_panels.css('paddingBottom').split('px')[0], 10)) + 'px',
                        'position': 'absolute',
                        'top': (opts.filmstrip_position == 'top' ? (opts.frame_height + frame_margin_top + (opts.show_captions ? frame_caption_size : frame_margin_top)) + 'px' : '0px'),
                        'left': '0px',
                        'overflow': 'hidden',
                        'background': 'white',
                        'display': 'none'
                    });
                    $('.panel-overlay', j_panels).css({
                        'position': 'absolute',
                        'zIndex': '999',
                        'width': (opts.panel_width - 20) + 'px',
                        'height': opts.overlay_height + 'px',
                        'top': (opts.overlay_position == 'top' ? '0' : opts.panel_height - opts.overlay_height + 'px'),
                        'left': '0',
                        'padding': '0 10px',
                        'color': opts.overlay_text_color,
                        'fontSize': opts.overlay_font_size
                    });
                    $('.panel-overlay a', j_panels).css({
                        'color': opts.overlay_text_color,
                        'textDecoration': 'underline',
                        'fontWeight': 'bold'
                    });
                    $('.overlay', j_panels).css({
                        'position': 'absolute',
                        'zIndex': '998',
                        'width': opts.panel_width + 'px',
                        'height': opts.overlay_height + 'px',
                        'top': (opts.overlay_position == 'top' ? '0' : opts.panel_height - opts.overlay_height + 'px'),
                        'left': '0',
                        'background': opts.overlay_color,
                        'opacity': opts.overlay_opacity
                    });
                    $('.panel iframe', j_panels).css({
                        'width': opts.panel_width + 'px',
                        'height': (opts.panel_height - opts.overlay_height) + 'px',
                        'border': '0'
                    });
                };

                function buildFilmstrip() {
                    //Add wrapper to filmstrip to hide extra frames
                    j_filmstrip.wrap('<div class="strip_wrapper"></div>');
                    if (slide_method == 'strip') {
                        j_frames.clone().appendTo(j_filmstrip);
                        j_frames.clone().appendTo(j_filmstrip);
                        j_frames = $('li', j_filmstrip);
                    }
                    //If captions are enabled, add caption divs and fill with the image titles
                    if (opts.show_captions) {
                        j_frames.append('<div class="caption"></div>').each(function (i) {
                            $(this).find('.caption').html($(this).find('img').attr('title'));
                        });
                    }

                    j_filmstrip.css({
                        'listStyle': 'none',
                        'margin': '0',
                        'padding': '0',
                        'width': strip_width + 'px',
                        'position': 'absolute',
                        'zIndex': '900',
                        'top': '0',
                        'left': '0',
                        'height': (opts.frame_height + 10) + 'px',
                        'background': opts.background_color
                    });
                    j_frames.css({
                        'float': 'left',
                        'position': 'relative',
                        'height': opts.frame_height + 'px',
                        'zIndex': '901',
                        'marginTop': frame_margin_top + 'px',
                        'marginBottom': '0px',
                        'marginRight': frame_margin + 'px',
                        'padding': '0',
                        'cursor': 'pointer'
                    });
                    $('img', j_frames).css({
                        'border': 'none'
                    });
                    $('.strip_wrapper', j_gallery).css({
                        'position': 'absolute',
                        'top': (opts.filmstrip_position == 'top' ? '0px' : opts.panel_height + 'px'),
                        'left': ((gallery_width - wrapper_width) / 2) + 'px',
                        'width': wrapper_width + 'px',
                        'height': (opts.frame_height + frame_margin_top + (opts.show_captions ? frame_caption_size : frame_margin_top)) + 'px',
                        'overflow': 'hidden'
                    });
                    $('.caption', j_gallery).css({
                        'position': 'absolute',
                        'top': opts.frame_height + 'px',
                        'left': '0',
                        'margin': '0',
                        'width': opts.frame_width + 'px',
                        'padding': '0',
                        'color': opts.caption_text_color,
                        'textAlign': 'center',
                        'fontSize': '10px',
                        'height': frame_caption_size + 'px',

                        'lineHeight': frame_caption_size + 'px'
                    });
                    var pointer = $('<div></div>');
                    pointer.attr('id', 'pointer').appendTo(j_gallery).css({
                        'position': 'absolute',
                        'zIndex': '1000',
                        'cursor': 'pointer',
                        'top': getPos(j_frames[0]).top - (pointer_width / 2) + 'px',
                        'left': getPos(j_frames[0]).left - (pointer_width / 2) + 'px',
                        'height': opts.frame_height - pointer_width + 'px',
                        'width': opts.frame_width - pointer_width + 'px',
                        'border': (has_panels ? pointer_width + 'px solid ' + (opts.nav_theme == 'dark' ? 'black' : 'white') : 'none')
                    });
                    j_pointer = $('#pointer', j_gallery);
                    if (has_panels) {
                        var pointerArrow = $('<img />');
                        pointerArrow.attr('src', img_path + opts.nav_theme + '/pointer' + (opts.filmstrip_position == 'top' ? '-down' : '') + '.png').appendTo($('#pointer')).css({
                            'position': 'absolute',
                            'zIndex': '1001',
                            'top': (opts.filmstrip_position == 'bottom' ? '-' + (10 + pointer_width) + 'px' : opts.frame_height + 'px'),
                            'left': ((opts.frame_width / 2) - 10) + 'px'
                        });
                    }

                    //If the filmstrip is animating, move the strip to the middle third
                    if (slide_method == 'strip') {
                        j_filmstrip.css('left', '-' + ((opts.frame_width + frame_margin) * item_count) + 'px');
                        iterator = item_count;
                    }
                    //If there's a link under the pointer, enable clicking on the pointer
                    if ($('a', j_frames[iterator])[0]) {
                        j_pointer.click(function () {
                            var a = $('a', j_frames[iterator]).eq(0);
                            if (a.attr('target') == '_blank') { window.open(a.attr('href')); }
                            else { location.href = a.attr('href'); }
                        });
                    }

                    //Add navigation buttons
                    $('<img />').addClass('nav-next').attr('src', img_path + opts.nav_theme + '/next.png').appendTo(j_gallery).css({
                        'position': 'absolute',
                        'cursor': 'pointer',
                        'top': (opts.filmstrip_position == 'top' ? 0 : opts.panel_height) + frame_margin_top + ((opts.frame_height - 22) / 2) + 'px',
                        'right': (gallery_width / 2) - (wrapper_width / 2) - 10 - 22 + 'px'
                    }).click(showNextItem);
                    $('<img />').addClass('nav-prev').attr('src', img_path + opts.nav_theme + '/prev.png').appendTo(j_gallery).css({
                        'position': 'absolute',
                        'cursor': 'pointer',
                        'top': (opts.filmstrip_position == 'top' ? 0 : opts.panel_height) + frame_margin_top + ((opts.frame_height - 22) / 2) + 'px',
                        'left': (gallery_width / 2) - (wrapper_width / 2) - 10 - 22 + 'px'
                    }).click(showPrevItem);
                };

                //Check mouse to see if it is within the borders of the panel
                //More reliable than 'mouseover' event when elements overlay the panel
                function mouseIsOverPanels(x, y) {
                    var pos = getPos(j_gallery[0]);
                    var top = pos.top;
                    var left = pos.left;
                    return x > left && x < left + opts.panel_width && y > top && y < top + opts.panel_height;
                };

                /************************************************/
                /*	Main Plugin Code							*/
                /************************************************/
                return this.each(function () {
                    j_gallery = $(this);
                    //Determine path between current page and filmstrip images
                    //Scan script tags and look for path to GalleryView plugin
                    $('script').each(function (i) {
                        var s = $(this);
                        if (s.attr('src') && s.attr('src').match(/jquery\.galleryview/)) {
                            img_path = s.attr('src').split('jquery.galleryview')[0] + 'themes/';
                        }
                    });

                    //Hide gallery to prevent Flash of Unstyled Content (FoUC) in IE
                    j_gallery.css('visibility', 'hidden');

                    //Assign elements to variables for reuse
                    j_filmstrip = $('.filmstrip', j_gallery);
                    j_frames = $('li', j_filmstrip);
                    j_panels = $('.panel', j_gallery);

                    id = j_gallery.attr('id');

                    has_panels = j_panels.length > 0;
                    has_filmstrip = j_frames.length > 0;

                    if (!has_panels) opts.panel_height = 0;

                    //Number of frames in filmstrip
                    item_count = has_panels ? j_panels.length : j_frames.length;

                    //Number of frames that can display within the screen's width
                    //64 = width of block for navigation button * 2
                    //5 = minimum frame margin
                    strip_size = has_panels ? Math.floor((opts.panel_width - 64) / (opts.frame_width + frame_margin)) : Math.min(item_count, opts.filmstrip_size);


                    /************************************************/
                    /*	Determine transition method for filmstrip	*/
                    /************************************************/
                    //If more items than strip size, slide filmstrip
                    //Otherwise, slide pointer
                    if (strip_size >= item_count) {
                        slide_method = 'pointer';
                        strip_size = item_count;
                    }
                    else { slide_method = 'strip'; }

                    /************************************************/
                    /*	Determine dimensions of various elements	*/
                    /************************************************/

                    //Width of gallery block
                    gallery_width = has_panels ? opts.panel_width : (strip_size * (opts.frame_width + frame_margin)) - frame_margin + 64;

                    //Height of gallery block = screen + filmstrip + captions (optional)
                    gallery_height = (has_panels ? opts.panel_height : 0) + (has_filmstrip ? opts.frame_height + frame_margin_top + (opts.show_captions ? frame_caption_size : frame_margin_top) : 0);

                    //Width of filmstrip
                    if (slide_method == 'pointer') { strip_width = (opts.frame_width * item_count) + (frame_margin * (item_count)); }
                    else { strip_width = (opts.frame_width * item_count * 3) + (frame_margin * (item_count * 3)); }

                    //Width of filmstrip wrapper (to hide overflow)
                    wrapper_width = ((strip_size * opts.frame_width) + ((strip_size - 1) * frame_margin));

                    /************************************************/
                    /*	Apply CSS Styles							*/
                    /************************************************/
                    j_gallery.css({
                        'position': 'relative',
                        'margin': '0',
                        'background': opts.background_color,
                        'border': opts.border,
                        'width': gallery_width + 'px',
                        'height': gallery_height + 'px'
                    });

                    /************************************************/
                    /*	Build filmstrip and/or panels				*/
                    /************************************************/
                    if (has_filmstrip) {
                        buildFilmstrip();
                    }
                    if (has_panels) {
                        buildPanels();
                    }


                    /************************************************/
                    /*	Add events to various elements				*/
                    /************************************************/
                    if (has_filmstrip) enableFrameClicking();



                    $().mousemove(function (e) {
                        if (mouseIsOverPanels(e.pageX, e.pageY)) {
                            if (opts.pause_on_hover) {
                                $(document).oneTime(500, "animation_pause", function () {
                                    $(document).stopTime("transition");
                                    paused = true;
                                });
                            }
                            if (has_panels && !has_filmstrip) {
                                $('.nav-overlay').fadeIn('fast');
                                $('.nav-next').fadeIn('fast');
                                $('.nav-prev').fadeIn('fast');
                            }
                        } else {
                            if (opts.pause_on_hover) {
                                $(document).stopTime("animation_pause");
                                if (paused) {
                                    $(document).everyTime(opts.transition_interval, "transition", function () {
                                        showNextItem();
                                    });
                                    paused = false;
                                }
                            }
                            if (has_panels && !has_filmstrip) {
                                $('.nav-overlay').fadeOut('fast');
                                $('.nav-next').fadeOut('fast');
                                $('.nav-prev').fadeOut('fast');
                            }
                        }
                    });


                    /************************************************/
                    /*	Initiate Automated Animation				*/
                    /************************************************/
                    //Show the first panel
                    j_panels.eq(0).show();

                    //If we have more than one item, begin automated transitions
                    if (item_count > 1) {
                        $(document).everyTime(opts.transition_interval, "transition", function () {
                            showNextItem();
                        });
                    }

                    //Make gallery visible now that work is complete
                    j_gallery.css('visibility', 'visible');
                });
            };

            $.fn.galleryView.defaults = {
                panel_width: 400,
                panel_height: 300,
                frame_width: 80,
                frame_height: 80,
                filmstrip_size: 3,
                overlay_height: 70,
                overlay_font_size: '1em',
                transition_speed: 400,
                transition_interval: 6000,
                overlay_opacity: 0.6,
                overlay_color: 'black',
                background_color: 'black',
                overlay_text_color: 'white',
                caption_text_color: 'white',
                border: '1px solid black',
                nav_theme: 'light',
                easing: 'swing',
                filmstrip_position: 'bottom',
                overlay_position: 'bottom',
                show_captions: false,
                fade_panels: true,
                pause_on_hover: false
            };
        })(jQuery);


        //jquery Timers
        //----------------------------------------------------------------------------

        /**
        * jQuery.timers - Timer abstractions for jQuery
        * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
        * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
        * Date: 2009/02/08
        *
        * @author Blair Mitchelmore
        * @version 1.1.2
        *
        **/

        jQuery.fn.extend({
            everyTime: function (interval, label, fn, times, belay) {
                return this.each(function () {
                    jQuery.timer.add(this, interval, label, fn, times, belay);
                });
            },
            oneTime: function (interval, label, fn) {
                return this.each(function () {
                    jQuery.timer.add(this, interval, label, fn, 1);
                });
            },
            stopTime: function (label, fn) {
                return this.each(function () {
                    jQuery.timer.remove(this, label, fn);
                });
            }
        });

        jQuery.event.special

        jQuery.extend({
            timer: {
                global: [],
                guid: 1,
                dataKey: "jQuery.timer",
                regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
                powers: {
                    // Yeah this is major overkill...
                    'ms': 1,
                    'cs': 10,
                    'ds': 100,
                    's': 1000,
                    'das': 10000,
                    'hs': 100000,
                    'ks': 1000000
                },
                timeParse: function (value) {
                    if (value == undefined || value == null)
                        return null;
                    var result = this.regex.exec(jQuery.trim(value.toString()));
                    if (result[2]) {
                        var num = parseFloat(result[1]);
                        var mult = this.powers[result[2]] || 1;
                        return num * mult;
                    } else {
                        return value;
                    }
                },
                add: function (element, interval, label, fn, times, belay) {
                    var counter = 0;

                    if (jQuery.isFunction(label)) {
                        if (!times)
                            times = fn;
                        fn = label;
                        label = interval;
                    }

                    interval = jQuery.timer.timeParse(interval);

                    if (typeof interval != 'number' || isNaN(interval) || interval <= 0)
                        return;

                    if (times && times.constructor != Number) {
                        belay = !!times;
                        times = 0;
                    }

                    times = times || 0;
                    belay = belay || false;

                    var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});

                    if (!timers[label])
                        timers[label] = {};

                    fn.timerID = fn.timerID || this.guid++;

                    var handler = function () {
                        if (belay && this.inProgress)
                            return;
                        this.inProgress = true;
                        if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
                            jQuery.timer.remove(element, label, fn);
                        this.inProgress = false;
                    };

                    handler.timerID = fn.timerID;

                    if (!timers[label][fn.timerID])
                        timers[label][fn.timerID] = window.setInterval(handler, interval);

                    this.global.push(element);

                },
                remove: function (element, label, fn) {
                    var timers = jQuery.data(element, this.dataKey), ret;

                    if (timers) {

                        if (!label) {
                            for (label in timers)
                                this.remove(element, label, fn);
                        } else if (timers[label]) {
                            if (fn) {
                                if (fn.timerID) {
                                    window.clearInterval(timers[label][fn.timerID]);
                                    delete timers[label][fn.timerID];
                                }
                            } else {
                                for (var fn in timers[label]) {
                                    window.clearInterval(timers[label][fn]);
                                    delete timers[label][fn];
                                }
                            }

                            for (ret in timers[label]) break;
                            if (!ret) {
                                ret = null;
                                delete timers[label];
                            }
                        }

                        for (ret in timers) break;
                        if (!ret)
                            jQuery.removeData(element, this.dataKey);
                    }
                }
            }
        });

        jQuery(window).bind("unload", function () {
            jQuery.each(jQuery.timer.global, function (index, item) {
                jQuery.timer.remove(item);
            });
        });



        //*****************for tooltip help**************************//
        function prepareInputsForHints() {
            var inputs = document.getElementsByTagName("input");
            for (var i = 0; i < inputs.length; i++) {
                // test to see if the hint span exists first
                if (inputs[i].parentNode.getElementsByTagName("span")[0]) {
                    // the span exists!  on focus, show the hint
                    inputs[i].onfocus = function () {
                        this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
                    }
                    // when the cursor moves away from the field, hide the hint
                    inputs[i].onblur = function () {
                        this.parentNode.getElementsByTagName("span")[0].style.display = "none";
                    }
                }
            }
            // repeat the same tests as above for selects
            var selects = document.getElementsByTagName("select");
            for (var k = 0; k < selects.length; k++) {
                if (selects[k].parentNode.getElementsByTagName("span")[0]) {
                    selects[k].onfocus = function () {
                        this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
                    }
                    selects[k].onblur = function () {
                        this.parentNode.getElementsByTagName("span")[0].style.display = "none";
                    }
                }
            }
        }

        //*******************************************************************//

        //******************************JQuery DateTime picker**************//
        jQuery(function ($) {
            $.datepicker.regional['en-GB'] = {
                closeText: 'Done',
                prevText: 'Prev',
                nextText: 'Next',
                currentText: 'Today',
                monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
		'July', 'August', 'September', 'October', 'November', 'December'],
                monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
		'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
                dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
                dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
                dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
                weekHeader: 'Wk',
                dateFormat: 'dd/mm/yy',
                firstDay: 1,
                isRTL: false,
                showMonthAfterYear: false,
                yearSuffix: ''
            };
            $.datepicker.setDefaults($.datepicker.regional['en-GB']);
        });


        //************************************************************************//



        
