").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return t("
").addClass("ui-tooltip-content").appendTo(n),n.appendTo(this.document[0].body),this.tooltips[i]=e,n},_find:function(e){var i=e.data("ui-tooltip-id");return i?t("#"+i):t()},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s[0],e.close(n,!0),t("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(t,e){var i="ui-effects-";t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[c[l].cache]=o[c[l].cache],n=s._rgba=o._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,a.transparent),s):a[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("
")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,o,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(o),o=e);var u=this,d=t.type(n),p=this._rgba=[];return o!==e&&(n=[n,o,r,h],d="array"),"string"===d?this.parse(s(n)||a._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var a=s.cache;f(s.props,function(t,e){if(!u[a]&&s.to){if("alpha"===t||null==n[t])return;u[a]=s.to(u._rgba)}u[a][e.idx]=i(n[t],e,!0)}),u[a]&&0>t.inArray(null,u[a].slice(0,3))&&(u[a][3]=1,s.from&&(u._rgba=s.from(u[a])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),a=c[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(t,n){var a=n.idx,o=r[a],l=s[a],c=u[n.type]||{};null!==l&&(null===o?h[a]=l:(c.mod&&(l-o>c.mod/2?o+=c.mod:o-l>c.mod/2&&(o-=c.mod)),h[a]=i((l-o)*e+o,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,a=t[2]/255,o=t[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==o?1:o]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],a=t[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,e+1/3)),Math.round(255*n(r,o,e)),Math.round(255*n(r,o,e-1/3)),a]},f(c,function(s,n){var a=n.props,o=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===e)return this[o].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[o].slice();return f(a,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[o]=d,n):l(d)},f(a,function(e,i){l.fn[e]||(l.fn[e]=function(n){var a,o=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===o?c:("function"===o&&(n=n.call(this,c),o=t.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=c+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var a,o,r="";if("transparent"!==n&&("string"!==t.type(n)||(a=s(n)))){if(n=l(a||n),!d.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&o&&o.style;)try{r=t.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(o),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},a=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function s(e,i){var s,n,o={};for(s in i)n=i[s],e[s]!==n&&(a[s]||(t.fx.step[s]||!isNaN(parseFloat(n)))&&(o[s]=n));return o}var n=["add","remove","toggle"],a={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(jQuery.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(e,a,o,r){var h=t.speed(a,o,r);return this.queue(function(){var a,o=t(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var e=t(this);return{el:e,start:i(this)}}),a=function(){t.each(n,function(t,i){e[i]&&o[i+"Class"](e[i])})},a(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){a(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(o[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,a){return s?t.effects.animateClass.call(this,{add:i},s,n,a):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,a){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,a):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(i){return function(s,n,a,o,r){return"boolean"==typeof n||n===e?a?t.effects.animateClass.call(this,n?{add:s}:{remove:s},a,o,r):i.apply(this,arguments):t.effects.animateClass.call(this,{toggle:s},n,a,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,a){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,a)}})}(),function(){function s(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function n(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}t.extend(t.effects,{version:"1.10.2",save:function(t,e){for(var s=0;e.length>s;s++)null!==e[s]&&t.data(i+e[s],t[0].style[e[s]])},restore:function(t,s){var n,a;for(a=0;s.length>a;a++)null!==s[a]&&(n=t.data(i+s[a]),n===e&&(n=""),t.css(s[a],n))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("
").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return e.wrap(s),(e[0]===a||t.contains(e[0],a))&&t(a).focus(),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).focus()),e},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var a=e.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),t.fn.extend({effect:function(){function e(e){function s(){t.isFunction(a)&&a.call(n[0]),t.isFunction(e)&&e()}var n=t(this),a=i.complete,r=i.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),s()):o.call(n[0],i,s)}var i=s.apply(this,arguments),n=i.mode,a=i.queue,o=t.effects.effect[i.effect];return t.fx.off||!o?n?this[n](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):a===!1?this.each(e):this.queue(a||"fx",e)},show:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(t.fn.show),hide:function(t){return function(e){if(n(e))return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(t.fn.hide),toggle:function(t){return function(e){if(n(e)||"boolean"==typeof e)return t.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s}})}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}()})(jQuery);(function(t){var e=/up|down|vertical/,i=/up|left|vertical|horizontal/;t.effects.effect.blind=function(s,n){var a,o,r,h=t(this),l=["position","top","bottom","left","right","height","width"],c=t.effects.setMode(h,s.mode||"hide"),u=s.direction||"up",d=e.test(u),p=d?"height":"width",f=d?"top":"left",m=i.test(u),g={},v="show"===c;h.parent().is(".ui-effects-wrapper")?t.effects.save(h.parent(),l):t.effects.save(h,l),h.show(),a=t.effects.createWrapper(h).css({overflow:"hidden"}),o=a[p](),r=parseFloat(a.css(f))||0,g[p]=v?o:0,m||(h.css(d?"bottom":"right",0).css(d?"top":"left","auto").css({position:"absolute"}),g[f]=v?r:o+r),v&&(a.css(p,0),m||a.css(f,r+o)),a.animate(g,{duration:s.duration,easing:s.easing,queue:!1,complete:function(){"hide"===c&&h.hide(),t.effects.restore(h,l),t.effects.removeWrapper(h),n()}})}})(jQuery);(function(t){t.effects.effect.bounce=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"effect"),l="hide"===h,c="show"===h,u=e.direction||"up",d=e.distance,p=e.times||5,f=2*p+(c||l?1:0),m=e.duration/f,g=e.easing,v="up"===u||"down"===u?"top":"left",_="up"===u||"left"===u,b=o.queue(),y=b.length;for((c||l)&&r.push("opacity"),t.effects.save(o,r),o.show(),t.effects.createWrapper(o),d||(d=o["top"===v?"outerHeight":"outerWidth"]()/3),c&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,_?2*-d:2*d).animate(a,m,g)),l&&(d/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g).animate(a,m,g),d=l?2*d:d/2;l&&(n={opacity:0},n[v]=(_?"-=":"+=")+d,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}),y>1&&b.splice.apply(b,[1,0].concat(b.splice(y,f+1))),o.dequeue()}})(jQuery);(function(t){t.effects.effect.clip=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","height","width"],h=t.effects.setMode(o,e.mode||"hide"),l="show"===h,c=e.direction||"vertical",u="vertical"===c,d=u?"height":"width",p=u?"top":"left",f={};t.effects.save(o,r),o.show(),s=t.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[d](),l&&(n.css(d,0),n.css(p,a/2)),f[d]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){l||o.hide(),t.effects.restore(o,r),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.drop=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","opacity","height","width"],o=t.effects.setMode(n,e.mode||"hide"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h?"pos":"neg",u={opacity:r?1:0};t.effects.save(n,a),n.show(),t.effects.createWrapper(n),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===c?-s:s),u[l]=(r?"pos"===c?"+=":"-=":"pos"===c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.explode=function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),m||p.hide(),i()}var a,o,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=t.effects.setMode(p,e.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/d),_=Math.ceil(p.outerHeight()/u),b=[];for(a=0;u>a;a++)for(h=g.top+a*_,c=a-(u-1)/2,o=0;d>o;o++)r=g.left+o*v,l=o-(d-1)/2,p.clone().appendTo("body").wrap("
").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*_}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:_,left:r+(m?l*v:0),top:h+(m?c*_:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:c*_),opacity:m?1:0},e.duration||500,e.easing,s)}})(jQuery);(function(t){t.effects.effect.fade=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}})(jQuery);(function(t){t.effects.effect.fold=function(e,i){var s,n,a=t(this),o=["position","top","bottom","left","right","height","width"],r=t.effects.setMode(a,e.mode||"hide"),h="show"===r,l="hide"===r,c=e.size||15,u=/([0-9]+)%/.exec(c),d=!!e.horizFirst,p=h!==d,f=p?["width","height"]:["height","width"],m=e.duration/2,g={},v={};t.effects.save(a,o),a.show(),s=t.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],u&&(c=parseInt(u[1],10)/100*n[l?0:1]),h&&s.css(d?{height:0,width:c}:{height:c,width:0}),g[f[0]]=h?n[0]:c,v[f[1]]=h?n[1]:0,s.animate(g,m,e.easing).animate(v,m,e.easing,function(){l&&a.hide(),t.effects.restore(a,o),t.effects.removeWrapper(a),i()})}})(jQuery);(function(t){t.effects.effect.highlight=function(e,i){var s=t(this),n=["backgroundImage","backgroundColor","opacity"],a=t.effects.setMode(s,e.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),t.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(o,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===a&&s.hide(),t.effects.restore(s,n),i()}})}})(jQuery);(function(t){t.effects.effect.pulsate=function(e,i){var s,n=t(this),a=t.effects.setMode(n,e.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(e.times||5)+(h?1:0),c=e.duration/l,u=0,d=n.queue(),p=d.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),u=1),s=1;l>s;s++)n.animate({opacity:u},c,e.easing),u=1-u;n.animate({opacity:u},c,e.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&d.splice.apply(d,[1,0].concat(d.splice(p,l+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.puff=function(e,i){var s=t(this),n=t.effects.setMode(s,e.mode||"hide"),a="hide"===n,o=parseInt(e.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};t.extend(e,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(e)},t.effects.effect.scale=function(e,i){var s=t(this),n=t.extend(!0,{},e),a=t.effects.setMode(s,e.mode||"effect"),o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"hide"===a?0:100),r=e.direction||"both",h=e.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},c={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=e.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*c.y,width:l.width*c.x,outerHeight:l.outerHeight*c.y,outerWidth:l.outerWidth*c.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},t.effects.effect.size=function(e,i){var s,n,a,o=t(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],c=["fontSize"],u=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],d=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=t.effects.setMode(o,e.mode||"effect"),f=e.restore||"effect"!==p,m=e.scale||"both",g=e.origin||["middle","center"],v=o.css("position"),_=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===e.mode&&"show"===p?(o.from=e.to||b,o.to=e.from||s):(o.from=e.from||("show"===p?b:s),o.to=e.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(_=_.concat(u),o.from=t.effects.setTransition(o,u,a.from.y,o.from),o.to=t.effects.setTransition(o,u,a.to.y,o.to)),a.from.x!==a.to.x&&(_=_.concat(d),o.from=t.effects.setTransition(o,d,a.from.x,o.from),o.to=t.effects.setTransition(o,d,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(_=_.concat(c).concat(l),o.from=t.effects.setTransition(o,c,a.from.y,o.from),o.to=t.effects.setTransition(o,c,a.to.y,o.to)),t.effects.save(o,_),o.show(),t.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=t.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(u=u.concat(["marginTop","marginBottom"]).concat(c),d=d.concat(["marginLeft","marginRight"]),l=r.concat(u).concat(d),o.find("*[width]").each(function(){var i=t(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&t.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=t.effects.setTransition(i,u,a.from.y,i.from),i.to=t.effects.setTransition(i,u,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=t.effects.setTransition(i,d,a.from.x,i.from),i.to=t.effects.setTransition(i,d,a.to.x,i.to)),i.css(i.from),i.animate(i.to,e.duration,e.easing,function(){f&&t.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),t.effects.restore(o,_),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):t.each(["top","left"],function(t,e){o.css(e,function(e,i){var s=parseInt(i,10),n=t?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),t.effects.removeWrapper(o),i()}})}})(jQuery);(function(t){t.effects.effect.shake=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","height","width"],o=t.effects.setMode(n,e.mode||"effect"),r=e.direction||"left",h=e.distance||20,l=e.times||3,c=2*l+1,u=Math.round(e.duration/c),d="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),_=v.length;for(t.effects.save(n,a),n.show(),t.effects.createWrapper(n),f[d]=(p?"-=":"+=")+h,m[d]=(p?"+=":"-=")+2*h,g[d]=(p?"-=":"+=")+2*h,n.animate(f,u,e.easing),s=1;l>s;s++)n.animate(m,u,e.easing).animate(g,u,e.easing);n.animate(m,u,e.easing).animate(f,u/2,e.easing).queue(function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}),_>1&&v.splice.apply(v,[1,0].concat(v.splice(_,c+1))),n.dequeue()}})(jQuery);(function(t){t.effects.effect.slide=function(e,i){var s,n=t(this),a=["position","top","bottom","left","right","width","height"],o=t.effects.setMode(n,e.mode||"show"),r="show"===o,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u={};t.effects.save(n,a),n.show(),s=e.distance||n["top"===l?"outerHeight":"outerWidth"](!0),t.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,c?isNaN(s)?"-"+s:-s:s),u[l]=(r?c?"+=":"-=":c?"-=":"+=")+s,n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){"hide"===o&&n.hide(),t.effects.restore(n,a),t.effects.removeWrapper(n),i()}})}})(jQuery);(function(t){t.effects.effect.transfer=function(e,i){var s=t(this),n=t(e.to),a="fixed"===n.css("position"),o=t("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
").appendTo(document.body).addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),i()})}})(jQuery);
\ No newline at end of file
diff --git a/app/assets/javascripts/lib/jquery.cycle.all.js b/app/assets/javascripts/lib/jquery.cycle.all.js
new file mode 100644
index 000000000..666afdaf9
--- /dev/null
+++ b/app/assets/javascripts/lib/jquery.cycle.all.js
@@ -0,0 +1,1538 @@
+/*!
+ * jQuery Cycle Plugin (with Transition Definitions)
+ * Examples and documentation at: http://jquery.malsup.com/cycle/
+ * Copyright (c) 2007-2012 M. Alsup
+ * Version: 2.9999.81 (15-JAN-2013)
+ * Dual licensed under the MIT and GPL licenses.
+ * http://jquery.malsup.com/license.html
+ * Requires: jQuery v1.7.1 or later
+ */
+;(function($, undefined) {
+"use strict";
+
+var ver = '2.9999.81';
+
+function debug(s) {
+ if ($.fn.cycle.debug)
+ log(s);
+}
+function log() {
+ if (window.console && console.log)
+ console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
+}
+$.expr[':'].paused = function(el) {
+ return el.cyclePause;
+};
+
+
+// the options arg can be...
+// a number - indicates an immediate transition should occur to the given slide index
+// a string - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
+// an object - properties to control the slideshow
+//
+// the arg2 arg can be...
+// the name of an fx (only used in conjunction with a numeric value for 'options')
+// the value true (only used in first arg == 'resume') and indicates
+// that the resume should occur immediately (not wait for next timeout)
+
+$.fn.cycle = function(options, arg2) {
+ var o = { s: this.selector, c: this.context };
+
+ // in 1.3+ we can fix mistakes with the ready state
+ if (this.length === 0 && options != 'stop') {
+ if (!$.isReady && o.s) {
+ log('DOM not ready, queuing slideshow');
+ $(function() {
+ $(o.s,o.c).cycle(options,arg2);
+ });
+ return this;
+ }
+ // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
+ log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
+ return this;
+ }
+
+ // iterate the matched nodeset
+ return this.each(function() {
+ var opts = handleArguments(this, options, arg2);
+ if (opts === false)
+ return;
+
+ opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
+
+ // stop existing slideshow for this container (if there is one)
+ if (this.cycleTimeout)
+ clearTimeout(this.cycleTimeout);
+ this.cycleTimeout = this.cyclePause = 0;
+ this.cycleStop = 0; // issue #108
+
+ var $cont = $(this);
+ var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
+ var els = $slides.get();
+
+ if (els.length < 2) {
+ log('terminating; too few slides: ' + els.length);
+ return;
+ }
+
+ var opts2 = buildOptions($cont, $slides, els, opts, o);
+ if (opts2 === false)
+ return;
+
+ var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);
+
+ // if it's an auto slideshow, kick it off
+ if (startTime) {
+ startTime += (opts2.delay || 0);
+ if (startTime < 10)
+ startTime = 10;
+ debug('first timeout: ' + startTime);
+ this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards);}, startTime);
+ }
+ });
+};
+
+function triggerPause(cont, byHover, onPager) {
+ var opts = $(cont).data('cycle.opts');
+ if (!opts)
+ return;
+ var paused = !!cont.cyclePause;
+ if (paused && opts.paused)
+ opts.paused(cont, opts, byHover, onPager);
+ else if (!paused && opts.resumed)
+ opts.resumed(cont, opts, byHover, onPager);
+}
+
+// process the args that were passed to the plugin fn
+function handleArguments(cont, options, arg2) {
+ if (cont.cycleStop === undefined)
+ cont.cycleStop = 0;
+ if (options === undefined || options === null)
+ options = {};
+ if (options.constructor == String) {
+ switch(options) {
+ case 'destroy':
+ case 'stop':
+ var opts = $(cont).data('cycle.opts');
+ if (!opts)
+ return false;
+ cont.cycleStop++; // callbacks look for change
+ if (cont.cycleTimeout)
+ clearTimeout(cont.cycleTimeout);
+ cont.cycleTimeout = 0;
+ if (opts.elements)
+ $(opts.elements).stop();
+ $(cont).removeData('cycle.opts');
+ if (options == 'destroy')
+ destroy(cont, opts);
+ return false;
+ case 'toggle':
+ cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
+ checkInstantResume(cont.cyclePause, arg2, cont);
+ triggerPause(cont);
+ return false;
+ case 'pause':
+ cont.cyclePause = 1;
+ triggerPause(cont);
+ return false;
+ case 'resume':
+ cont.cyclePause = 0;
+ checkInstantResume(false, arg2, cont);
+ triggerPause(cont);
+ return false;
+ case 'prev':
+ case 'next':
+ opts = $(cont).data('cycle.opts');
+ if (!opts) {
+ log('options not found, "prev/next" ignored');
+ return false;
+ }
+ $.fn.cycle[options](opts);
+ return false;
+ default:
+ options = { fx: options };
+ }
+ return options;
+ }
+ else if (options.constructor == Number) {
+ // go to the requested slide
+ var num = options;
+ options = $(cont).data('cycle.opts');
+ if (!options) {
+ log('options not found, can not advance slide');
+ return false;
+ }
+ if (num < 0 || num >= options.elements.length) {
+ log('invalid slide index: ' + num);
+ return false;
+ }
+ options.nextSlide = num;
+ if (cont.cycleTimeout) {
+ clearTimeout(cont.cycleTimeout);
+ cont.cycleTimeout = 0;
+ }
+ if (typeof arg2 == 'string')
+ options.oneTimeFx = arg2;
+ go(options.elements, options, 1, num >= options.currSlide);
+ return false;
+ }
+ return options;
+
+ function checkInstantResume(isPaused, arg2, cont) {
+ if (!isPaused && arg2 === true) { // resume now!
+ var options = $(cont).data('cycle.opts');
+ if (!options) {
+ log('options not found, can not resume');
+ return false;
+ }
+ if (cont.cycleTimeout) {
+ clearTimeout(cont.cycleTimeout);
+ cont.cycleTimeout = 0;
+ }
+ go(options.elements, options, 1, !options.backwards);
+ }
+ }
+}
+
+function removeFilter(el, opts) {
+ if (!$.support.opacity && opts.cleartype && el.style.filter) {
+ try { el.style.removeAttribute('filter'); }
+ catch(smother) {} // handle old opera versions
+ }
+}
+
+// unbind event handlers
+function destroy(cont, opts) {
+ if (opts.next)
+ $(opts.next).unbind(opts.prevNextEvent);
+ if (opts.prev)
+ $(opts.prev).unbind(opts.prevNextEvent);
+
+ if (opts.pager || opts.pagerAnchorBuilder)
+ $.each(opts.pagerAnchors || [], function() {
+ this.unbind().remove();
+ });
+ opts.pagerAnchors = null;
+ $(cont).unbind('mouseenter.cycle mouseleave.cycle');
+ if (opts.destroy) // callback
+ opts.destroy(opts);
+}
+
+// one-time initialization
+function buildOptions($cont, $slides, els, options, o) {
+ var startingSlideSpecified;
+ // support metadata plugin (v1.0 and v2.0)
+ var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
+ var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
+ if (meta)
+ opts = $.extend(opts, meta);
+ if (opts.autostop)
+ opts.countdown = opts.autostopCount || els.length;
+
+ var cont = $cont[0];
+ $cont.data('cycle.opts', opts);
+ opts.$cont = $cont;
+ opts.stopCount = cont.cycleStop;
+ opts.elements = els;
+ opts.before = opts.before ? [opts.before] : [];
+ opts.after = opts.after ? [opts.after] : [];
+
+ // push some after callbacks
+ if (!$.support.opacity && opts.cleartype)
+ opts.after.push(function() { removeFilter(this, opts); });
+ if (opts.continuous)
+ opts.after.push(function() { go(els,opts,0,!opts.backwards); });
+
+ saveOriginalOpts(opts);
+
+ // clearType corrections
+ if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
+ clearTypeFix($slides);
+
+ // container requires non-static position so that slides can be position within
+ if ($cont.css('position') == 'static')
+ $cont.css('position', 'relative');
+ if (opts.width)
+ $cont.width(opts.width);
+ if (opts.height && opts.height != 'auto')
+ $cont.height(opts.height);
+
+ if (opts.startingSlide !== undefined) {
+ opts.startingSlide = parseInt(opts.startingSlide,10);
+ if (opts.startingSlide >= els.length || opts.startSlide < 0)
+ opts.startingSlide = 0; // catch bogus input
+ else
+ startingSlideSpecified = true;
+ }
+ else if (opts.backwards)
+ opts.startingSlide = els.length - 1;
+ else
+ opts.startingSlide = 0;
+
+ // if random, mix up the slide array
+ if (opts.random) {
+ opts.randomMap = [];
+ for (var i = 0; i < els.length; i++)
+ opts.randomMap.push(i);
+ opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
+ if (startingSlideSpecified) {
+ // try to find the specified starting slide and if found set start slide index in the map accordingly
+ for ( var cnt = 0; cnt < els.length; cnt++ ) {
+ if ( opts.startingSlide == opts.randomMap[cnt] ) {
+ opts.randomIndex = cnt;
+ }
+ }
+ }
+ else {
+ opts.randomIndex = 1;
+ opts.startingSlide = opts.randomMap[1];
+ }
+ }
+ else if (opts.startingSlide >= els.length)
+ opts.startingSlide = 0; // catch bogus input
+ opts.currSlide = opts.startingSlide || 0;
+ var first = opts.startingSlide;
+
+ // set position and zIndex on all the slides
+ $slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
+ var z;
+ if (opts.backwards)
+ z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;
+ else
+ z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
+ $(this).css('z-index', z);
+ });
+
+ // make sure first slide is visible
+ $(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
+ removeFilter(els[first], opts);
+
+ // stretch slides
+ if (opts.fit) {
+ if (!opts.aspect) {
+ if (opts.width)
+ $slides.width(opts.width);
+ if (opts.height && opts.height != 'auto')
+ $slides.height(opts.height);
+ } else {
+ $slides.each(function(){
+ var $slide = $(this);
+ var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect;
+ if( opts.width && $slide.width() != opts.width ) {
+ $slide.width( opts.width );
+ $slide.height( opts.width / ratio );
+ }
+
+ if( opts.height && $slide.height() < opts.height ) {
+ $slide.height( opts.height );
+ $slide.width( opts.height * ratio );
+ }
+ });
+ }
+ }
+
+ if (opts.center && ((!opts.fit) || opts.aspect)) {
+ $slides.each(function(){
+ var $slide = $(this);
+ $slide.css({
+ "margin-left": opts.width ?
+ ((opts.width - $slide.width()) / 2) + "px" :
+ 0,
+ "margin-top": opts.height ?
+ ((opts.height - $slide.height()) / 2) + "px" :
+ 0
+ });
+ });
+ }
+
+ if (opts.center && !opts.fit && !opts.slideResize) {
+ $slides.each(function(){
+ var $slide = $(this);
+ $slide.css({
+ "margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
+ "margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
+ });
+ });
+ }
+
+ // stretch container
+ var reshape = (opts.containerResize || opts.containerResizeHeight) && !$cont.innerHeight();
+ if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
+ var maxw = 0, maxh = 0;
+ for(var j=0; j < els.length; j++) {
+ var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
+ if (!w) w = e.offsetWidth || e.width || $e.attr('width');
+ if (!h) h = e.offsetHeight || e.height || $e.attr('height');
+ maxw = w > maxw ? w : maxw;
+ maxh = h > maxh ? h : maxh;
+ }
+ if (opts.containerResize && maxw > 0 && maxh > 0)
+ $cont.css({width:maxw+'px',height:maxh+'px'});
+ if (opts.containerResizeHeight && maxh > 0)
+ $cont.css({height:maxh+'px'});
+ }
+
+ var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
+ if (opts.pause)
+ $cont.bind('mouseenter.cycle', function(){
+ pauseFlag = true;
+ this.cyclePause++;
+ triggerPause(cont, true);
+ }).bind('mouseleave.cycle', function(){
+ if (pauseFlag)
+ this.cyclePause--;
+ triggerPause(cont, true);
+ });
+
+ if (supportMultiTransitions(opts) === false)
+ return false;
+
+ // apparently a lot of people use image slideshows without height/width attributes on the images.
+ // Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
+ var requeue = false;
+ options.requeueAttempts = options.requeueAttempts || 0;
+ $slides.each(function() {
+ // try to get height/width of each slide
+ var $el = $(this);
+ this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
+ this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);
+
+ if ( $el.is('img') ) {
+ var loading = (this.cycleH === 0 && this.cycleW === 0 && !this.complete);
+ // don't requeue for images that are still loading but have a valid size
+ if (loading) {
+ if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
+ log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
+ setTimeout(function() {$(o.s,o.c).cycle(options);}, opts.requeueTimeout);
+ requeue = true;
+ return false; // break each loop
+ }
+ else {
+ log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
+ }
+ }
+ }
+ return true;
+ });
+
+ if (requeue)
+ return false;
+
+ opts.cssBefore = opts.cssBefore || {};
+ opts.cssAfter = opts.cssAfter || {};
+ opts.cssFirst = opts.cssFirst || {};
+ opts.animIn = opts.animIn || {};
+ opts.animOut = opts.animOut || {};
+
+ $slides.not(':eq('+first+')').css(opts.cssBefore);
+ $($slides[first]).css(opts.cssFirst);
+
+ if (opts.timeout) {
+ opts.timeout = parseInt(opts.timeout,10);
+ // ensure that timeout and speed settings are sane
+ if (opts.speed.constructor == String)
+ opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10);
+ if (!opts.sync)
+ opts.speed = opts.speed / 2;
+
+ var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
+ while((opts.timeout - opts.speed) < buffer) // sanitize timeout
+ opts.timeout += opts.speed;
+ }
+ if (opts.easing)
+ opts.easeIn = opts.easeOut = opts.easing;
+ if (!opts.speedIn)
+ opts.speedIn = opts.speed;
+ if (!opts.speedOut)
+ opts.speedOut = opts.speed;
+
+ opts.slideCount = els.length;
+ opts.currSlide = opts.lastSlide = first;
+ if (opts.random) {
+ if (++opts.randomIndex == els.length)
+ opts.randomIndex = 0;
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
+ }
+ else if (opts.backwards)
+ opts.nextSlide = opts.startingSlide === 0 ? (els.length-1) : opts.startingSlide-1;
+ else
+ opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;
+
+ // run transition init fn
+ if (!opts.multiFx) {
+ var init = $.fn.cycle.transitions[opts.fx];
+ if ($.isFunction(init))
+ init($cont, $slides, opts);
+ else if (opts.fx != 'custom' && !opts.multiFx) {
+ log('unknown transition: ' + opts.fx,'; slideshow terminating');
+ return false;
+ }
+ }
+
+ // fire artificial events
+ var e0 = $slides[first];
+ if (!opts.skipInitializationCallbacks) {
+ if (opts.before.length)
+ opts.before[0].apply(e0, [e0, e0, opts, true]);
+ if (opts.after.length)
+ opts.after[0].apply(e0, [e0, e0, opts, true]);
+ }
+ if (opts.next)
+ $(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1);});
+ if (opts.prev)
+ $(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0);});
+ if (opts.pager || opts.pagerAnchorBuilder)
+ buildPager(els,opts);
+
+ exposeAddSlide(opts, els);
+
+ return opts;
+}
+
+// save off original opts so we can restore after clearing state
+function saveOriginalOpts(opts) {
+ opts.original = { before: [], after: [] };
+ opts.original.cssBefore = $.extend({}, opts.cssBefore);
+ opts.original.cssAfter = $.extend({}, opts.cssAfter);
+ opts.original.animIn = $.extend({}, opts.animIn);
+ opts.original.animOut = $.extend({}, opts.animOut);
+ $.each(opts.before, function() { opts.original.before.push(this); });
+ $.each(opts.after, function() { opts.original.after.push(this); });
+}
+
+function supportMultiTransitions(opts) {
+ var i, tx, txs = $.fn.cycle.transitions;
+ // look for multiple effects
+ if (opts.fx.indexOf(',') > 0) {
+ opts.multiFx = true;
+ opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
+ // discard any bogus effect names
+ for (i=0; i < opts.fxs.length; i++) {
+ var fx = opts.fxs[i];
+ tx = txs[fx];
+ if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
+ log('discarding unknown transition: ',fx);
+ opts.fxs.splice(i,1);
+ i--;
+ }
+ }
+ // if we have an empty list then we threw everything away!
+ if (!opts.fxs.length) {
+ log('No valid transitions named; slideshow terminating.');
+ return false;
+ }
+ }
+ else if (opts.fx == 'all') { // auto-gen the list of transitions
+ opts.multiFx = true;
+ opts.fxs = [];
+ for (var p in txs) {
+ if (txs.hasOwnProperty(p)) {
+ tx = txs[p];
+ if (txs.hasOwnProperty(p) && $.isFunction(tx))
+ opts.fxs.push(p);
+ }
+ }
+ }
+ if (opts.multiFx && opts.randomizeEffects) {
+ // munge the fxs array to make effect selection random
+ var r1 = Math.floor(Math.random() * 20) + 30;
+ for (i = 0; i < r1; i++) {
+ var r2 = Math.floor(Math.random() * opts.fxs.length);
+ opts.fxs.push(opts.fxs.splice(r2,1)[0]);
+ }
+ debug('randomized fx sequence: ',opts.fxs);
+ }
+ return true;
+}
+
+// provide a mechanism for adding slides after the slideshow has started
+function exposeAddSlide(opts, els) {
+ opts.addSlide = function(newSlide, prepend) {
+ var $s = $(newSlide), s = $s[0];
+ if (!opts.autostopCount)
+ opts.countdown++;
+ els[prepend?'unshift':'push'](s);
+ if (opts.els)
+ opts.els[prepend?'unshift':'push'](s); // shuffle needs this
+ opts.slideCount = els.length;
+
+ // add the slide to the random map and resort
+ if (opts.random) {
+ opts.randomMap.push(opts.slideCount-1);
+ opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
+ }
+
+ $s.css('position','absolute');
+ $s[prepend?'prependTo':'appendTo'](opts.$cont);
+
+ if (prepend) {
+ opts.currSlide++;
+ opts.nextSlide++;
+ }
+
+ if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
+ clearTypeFix($s);
+
+ if (opts.fit && opts.width)
+ $s.width(opts.width);
+ if (opts.fit && opts.height && opts.height != 'auto')
+ $s.height(opts.height);
+ s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
+ s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();
+
+ $s.css(opts.cssBefore);
+
+ if (opts.pager || opts.pagerAnchorBuilder)
+ $.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);
+
+ if ($.isFunction(opts.onAddSlide))
+ opts.onAddSlide($s);
+ else
+ $s.hide(); // default behavior
+ };
+}
+
+// reset internal state; we do this on every pass in order to support multiple effects
+$.fn.cycle.resetState = function(opts, fx) {
+ fx = fx || opts.fx;
+ opts.before = []; opts.after = [];
+ opts.cssBefore = $.extend({}, opts.original.cssBefore);
+ opts.cssAfter = $.extend({}, opts.original.cssAfter);
+ opts.animIn = $.extend({}, opts.original.animIn);
+ opts.animOut = $.extend({}, opts.original.animOut);
+ opts.fxFn = null;
+ $.each(opts.original.before, function() { opts.before.push(this); });
+ $.each(opts.original.after, function() { opts.after.push(this); });
+
+ // re-init
+ var init = $.fn.cycle.transitions[fx];
+ if ($.isFunction(init))
+ init(opts.$cont, $(opts.elements), opts);
+};
+
+// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
+function go(els, opts, manual, fwd) {
+ var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];
+
+ // opts.busy is true if we're in the middle of an animation
+ if (manual && opts.busy && opts.manualTrump) {
+ // let manual transitions requests trump active ones
+ debug('manualTrump in go(), stopping active transition');
+ $(els).stop(true,true);
+ opts.busy = 0;
+ clearTimeout(p.cycleTimeout);
+ }
+
+ // don't begin another timeout-based transition if there is one active
+ if (opts.busy) {
+ debug('transition active, ignoring new tx request');
+ return;
+ }
+
+
+ // stop cycling if we have an outstanding stop request
+ if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)
+ return;
+
+ // check to see if we should stop cycling based on autostop options
+ if (!manual && !p.cyclePause && !opts.bounce &&
+ ((opts.autostop && (--opts.countdown <= 0)) ||
+ (opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
+ if (opts.end)
+ opts.end(opts);
+ return;
+ }
+
+ // if slideshow is paused, only transition on a manual trigger
+ var changed = false;
+ if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
+ changed = true;
+ var fx = opts.fx;
+ // keep trying to get the slide size if we don't have it yet
+ curr.cycleH = curr.cycleH || $(curr).height();
+ curr.cycleW = curr.cycleW || $(curr).width();
+ next.cycleH = next.cycleH || $(next).height();
+ next.cycleW = next.cycleW || $(next).width();
+
+ // support multiple transition types
+ if (opts.multiFx) {
+ if (fwd && (opts.lastFx === undefined || ++opts.lastFx >= opts.fxs.length))
+ opts.lastFx = 0;
+ else if (!fwd && (opts.lastFx === undefined || --opts.lastFx < 0))
+ opts.lastFx = opts.fxs.length - 1;
+ fx = opts.fxs[opts.lastFx];
+ }
+
+ // one-time fx overrides apply to: $('div').cycle(3,'zoom');
+ if (opts.oneTimeFx) {
+ fx = opts.oneTimeFx;
+ opts.oneTimeFx = null;
+ }
+
+ $.fn.cycle.resetState(opts, fx);
+
+ // run the before callbacks
+ if (opts.before.length)
+ $.each(opts.before, function(i,o) {
+ if (p.cycleStop != opts.stopCount) return;
+ o.apply(next, [curr, next, opts, fwd]);
+ });
+
+ // stage the after callacks
+ var after = function() {
+ opts.busy = 0;
+ $.each(opts.after, function(i,o) {
+ if (p.cycleStop != opts.stopCount) return;
+ o.apply(next, [curr, next, opts, fwd]);
+ });
+ if (!p.cycleStop) {
+ // queue next transition
+ queueNext();
+ }
+ };
+
+ debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
+
+ // get ready to perform the transition
+ opts.busy = 1;
+ if (opts.fxFn) // fx function provided?
+ opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
+ else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
+ $.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
+ else
+ $.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
+ }
+ else {
+ queueNext();
+ }
+
+ if (changed || opts.nextSlide == opts.currSlide) {
+ // calculate the next slide
+ var roll;
+ opts.lastSlide = opts.currSlide;
+ if (opts.random) {
+ opts.currSlide = opts.nextSlide;
+ if (++opts.randomIndex == els.length) {
+ opts.randomIndex = 0;
+ opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
+ }
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
+ if (opts.nextSlide == opts.currSlide)
+ opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
+ }
+ else if (opts.backwards) {
+ roll = (opts.nextSlide - 1) < 0;
+ if (roll && opts.bounce) {
+ opts.backwards = !opts.backwards;
+ opts.nextSlide = 1;
+ opts.currSlide = 0;
+ }
+ else {
+ opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;
+ opts.currSlide = roll ? 0 : opts.nextSlide+1;
+ }
+ }
+ else { // sequence
+ roll = (opts.nextSlide + 1) == els.length;
+ if (roll && opts.bounce) {
+ opts.backwards = !opts.backwards;
+ opts.nextSlide = els.length-2;
+ opts.currSlide = els.length-1;
+ }
+ else {
+ opts.nextSlide = roll ? 0 : opts.nextSlide+1;
+ opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
+ }
+ }
+ }
+ if (changed && opts.pager)
+ opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
+
+ function queueNext() {
+ // stage the next transition
+ var ms = 0, timeout = opts.timeout;
+ if (opts.timeout && !opts.continuous) {
+ ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
+ if (opts.fx == 'shuffle')
+ ms -= opts.speedOut;
+ }
+ else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
+ ms = 10;
+ if (ms > 0)
+ p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards); }, ms);
+ }
+}
+
+// invoked after transition
+$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
+ $(pager).each(function() {
+ $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
+ });
+};
+
+// calculate timeout value for current transition
+function getTimeout(curr, next, opts, fwd) {
+ if (opts.timeoutFn) {
+ // call user provided calc fn
+ var t = opts.timeoutFn.call(curr,curr,next,opts,fwd);
+ while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout
+ t += opts.speed;
+ debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
+ if (t !== false)
+ return t;
+ }
+ return opts.timeout;
+}
+
+// expose next/prev function, caller must pass in state
+$.fn.cycle.next = function(opts) { advance(opts,1); };
+$.fn.cycle.prev = function(opts) { advance(opts,0);};
+
+// advance slide forward or back
+function advance(opts, moveForward) {
+ var val = moveForward ? 1 : -1;
+ var els = opts.elements;
+ var p = opts.$cont[0], timeout = p.cycleTimeout;
+ if (timeout) {
+ clearTimeout(timeout);
+ p.cycleTimeout = 0;
+ }
+ if (opts.random && val < 0) {
+ // move back to the previously display slide
+ opts.randomIndex--;
+ if (--opts.randomIndex == -2)
+ opts.randomIndex = els.length-2;
+ else if (opts.randomIndex == -1)
+ opts.randomIndex = els.length-1;
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
+ }
+ else if (opts.random) {
+ opts.nextSlide = opts.randomMap[opts.randomIndex];
+ }
+ else {
+ opts.nextSlide = opts.currSlide + val;
+ if (opts.nextSlide < 0) {
+ if (opts.nowrap) return false;
+ opts.nextSlide = els.length - 1;
+ }
+ else if (opts.nextSlide >= els.length) {
+ if (opts.nowrap) return false;
+ opts.nextSlide = 0;
+ }
+ }
+
+ var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
+ if ($.isFunction(cb))
+ cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
+ go(els, opts, 1, moveForward);
+ return false;
+}
+
+function buildPager(els, opts) {
+ var $p = $(opts.pager);
+ $.each(els, function(i,o) {
+ $.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
+ });
+ opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
+}
+
+$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
+ var a;
+ if ($.isFunction(opts.pagerAnchorBuilder)) {
+ a = opts.pagerAnchorBuilder(i,el);
+ debug('pagerAnchorBuilder('+i+', el) returned: ' + a);
+ }
+ else
+ a = '
'+(i+1)+' ';
+
+ if (!a)
+ return;
+ var $a = $(a);
+ // don't reparent if anchor is in the dom
+ if ($a.parents('body').length === 0) {
+ var arr = [];
+ if ($p.length > 1) {
+ $p.each(function() {
+ var $clone = $a.clone(true);
+ $(this).append($clone);
+ arr.push($clone[0]);
+ });
+ $a = $(arr);
+ }
+ else {
+ $a.appendTo($p);
+ }
+ }
+
+ opts.pagerAnchors = opts.pagerAnchors || [];
+ opts.pagerAnchors.push($a);
+
+ var pagerFn = function(e) {
+ e.preventDefault();
+ opts.nextSlide = i;
+ var p = opts.$cont[0], timeout = p.cycleTimeout;
+ if (timeout) {
+ clearTimeout(timeout);
+ p.cycleTimeout = 0;
+ }
+ var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
+ if ($.isFunction(cb))
+ cb(opts.nextSlide, els[opts.nextSlide]);
+ go(els,opts,1,opts.currSlide < i); // trigger the trans
+// return false; // <== allow bubble
+ };
+
+ if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) {
+ $a.hover(pagerFn, function(){/* no-op */} );
+ }
+ else {
+ $a.bind(opts.pagerEvent, pagerFn);
+ }
+
+ if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble)
+ $a.bind('click.cycle', function(){return false;}); // suppress click
+
+ var cont = opts.$cont[0];
+ var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
+ if (opts.pauseOnPagerHover) {
+ $a.hover(
+ function() {
+ pauseFlag = true;
+ cont.cyclePause++;
+ triggerPause(cont,true,true);
+ }, function() {
+ if (pauseFlag)
+ cont.cyclePause--;
+ triggerPause(cont,true,true);
+ }
+ );
+ }
+};
+
+// helper fn to calculate the number of slides between the current and the next
+$.fn.cycle.hopsFromLast = function(opts, fwd) {
+ var hops, l = opts.lastSlide, c = opts.currSlide;
+ if (fwd)
+ hops = c > l ? c - l : opts.slideCount - l;
+ else
+ hops = c < l ? l - c : l + opts.slideCount - c;
+ return hops;
+};
+
+// fix clearType problems in ie6 by setting an explicit bg color
+// (otherwise text slides look horrible during a fade transition)
+function clearTypeFix($slides) {
+ debug('applying clearType background-color hack');
+ function hex(s) {
+ s = parseInt(s,10).toString(16);
+ return s.length < 2 ? '0'+s : s;
+ }
+ function getBg(e) {
+ for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
+ var v = $.css(e,'background-color');
+ if (v && v.indexOf('rgb') >= 0 ) {
+ var rgb = v.match(/\d+/g);
+ return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
+ }
+ if (v && v != 'transparent')
+ return v;
+ }
+ return '#ffffff';
+ }
+ $slides.each(function() { $(this).css('background-color', getBg(this)); });
+}
+
+// reset common props before the next transition
+$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
+ $(opts.elements).not(curr).hide();
+ if (typeof opts.cssBefore.opacity == 'undefined')
+ opts.cssBefore.opacity = 1;
+ opts.cssBefore.display = 'block';
+ if (opts.slideResize && w !== false && next.cycleW > 0)
+ opts.cssBefore.width = next.cycleW;
+ if (opts.slideResize && h !== false && next.cycleH > 0)
+ opts.cssBefore.height = next.cycleH;
+ opts.cssAfter = opts.cssAfter || {};
+ opts.cssAfter.display = 'none';
+ $(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
+ $(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
+};
+
+// the actual fn for effecting a transition
+$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
+ var $l = $(curr), $n = $(next);
+ var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
+ $n.css(opts.cssBefore);
+ if (speedOverride) {
+ if (typeof speedOverride == 'number')
+ speedIn = speedOut = speedOverride;
+ else
+ speedIn = speedOut = 1;
+ easeIn = easeOut = null;
+ }
+ var fn = function() {
+ $n.animate(opts.animIn, speedIn, easeIn, function() {
+ cb();
+ });
+ };
+ $l.animate(opts.animOut, speedOut, easeOut, function() {
+ $l.css(opts.cssAfter);
+ if (!opts.sync)
+ fn();
+ });
+ if (opts.sync) fn();
+};
+
+// transition definitions - only fade is defined here, transition pack defines the rest
+$.fn.cycle.transitions = {
+ fade: function($cont, $slides, opts) {
+ $slides.not(':eq('+opts.currSlide+')').css('opacity',0);
+ opts.before.push(function(curr,next,opts) {
+ $.fn.cycle.commonReset(curr,next,opts);
+ opts.cssBefore.opacity = 0;
+ });
+ opts.animIn = { opacity: 1 };
+ opts.animOut = { opacity: 0 };
+ opts.cssBefore = { top: 0, left: 0 };
+ }
+};
+
+$.fn.cycle.ver = function() { return ver; };
+
+// override these globally if you like (they are all optional)
+$.fn.cycle.defaults = {
+ activePagerClass: 'activeSlide', // class name used for the active pager link
+ after: null, // transition callback (scope set to element that was shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
+ allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
+ animIn: null, // properties that define how the slide animates in
+ animOut: null, // properties that define how the slide animates out
+ aspect: false, // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
+ autostop: 0, // true to end slideshow after X transitions (where X == slide count)
+ autostopCount: 0, // number of transitions (optionally used with autostop to define X)
+ backwards: false, // true to start slideshow at last slide and move backwards through the stack
+ before: null, // transition callback (scope set to element to be shown): function(currSlideElement, nextSlideElement, options, forwardFlag)
+ center: null, // set to true to have cycle add top/left margin to each slide (use with width and height options)
+ cleartype: !$.support.opacity, // true if clearType corrections should be applied (for IE)
+ cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
+ containerResize: 1, // resize container to fit largest slide
+ containerResizeHeight: 0, // resize containers height to fit the largest slide but leave the width dynamic
+ continuous: 0, // true to start next transition immediately after current one completes
+ cssAfter: null, // properties that defined the state of the slide after transitioning out
+ cssBefore: null, // properties that define the initial state of the slide before transitioning in
+ delay: 0, // additional delay (in ms) for first transition (hint: can be negative)
+ easeIn: null, // easing for "in" transition
+ easeOut: null, // easing for "out" transition
+ easing: null, // easing method for both in and out transitions
+ end: null, // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
+ fastOnEvent: 0, // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
+ fit: 0, // force slides to fit container
+ fx: 'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
+ fxFn: null, // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
+ height: 'auto', // container height (if the 'fit' option is true, the slides will be set to this height as well)
+ manualTrump: true, // causes manual transition to stop an active transition instead of being ignored
+ metaAttr: 'cycle', // data- attribute that holds the option data for the slideshow
+ next: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
+ nowrap: 0, // true to prevent slideshow from wrapping
+ onPagerEvent: null, // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
+ onPrevNextEvent: null, // callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
+ pager: null, // element, jQuery object, or jQuery selector string for the element to use as pager container
+ pagerAnchorBuilder: null, // callback fn for building anchor links: function(index, DOMelement)
+ pagerEvent: 'click.cycle', // name of event which drives the pager navigation
+ pause: 0, // true to enable "pause on hover"
+ pauseOnPagerHover: 0, // true to pause when hovering over pager link
+ prev: null, // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
+ prevNextEvent: 'click.cycle',// event which drives the manual transition to the previous or next slide
+ random: 0, // true for random, false for sequence (not applicable to shuffle fx)
+ randomizeEffects: 1, // valid when multiple effects are used; true to make the effect sequence random
+ requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
+ requeueTimeout: 250, // ms delay for requeue
+ rev: 0, // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
+ shuffle: null, // coords for shuffle animation, ex: { top:15, left: 200 }
+ skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
+ slideExpr: null, // expression for selecting slides (if something other than all children is required)
+ slideResize: 1, // force slide width/height to fixed size before every transition
+ speed: 1000, // speed of the transition (any valid fx speed value)
+ speedIn: null, // speed of the 'in' transition
+ speedOut: null, // speed of the 'out' transition
+ startingSlide: undefined,// zero-based index of the first slide to be displayed
+ sync: 1, // true if in/out transitions should occur simultaneously
+ timeout: 4000, // milliseconds between slide transitions (0 to disable auto advance)
+ timeoutFn: null, // callback for determining per-slide timeout value: function(currSlideElement, nextSlideElement, options, forwardFlag)
+ updateActivePagerLink: null,// callback fn invoked to update the active pager link (adds/removes activePagerClass style)
+ width: null // container width (if the 'fit' option is true, the slides will be set to this width as well)
+};
+
+})(jQuery);
+
+
+/*!
+ * jQuery Cycle Plugin Transition Definitions
+ * This script is a plugin for the jQuery Cycle Plugin
+ * Examples and documentation at: http://malsup.com/jquery/cycle/
+ * Copyright (c) 2007-2010 M. Alsup
+ * Version: 2.73
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+(function($) {
+"use strict";
+
+//
+// These functions define slide initialization and properties for the named
+// transitions. To save file size feel free to remove any of these that you
+// don't need.
+//
+$.fn.cycle.transitions.none = function($cont, $slides, opts) {
+ opts.fxFn = function(curr,next,opts,after){
+ $(next).show();
+ $(curr).hide();
+ after();
+ };
+};
+
+// not a cross-fade, fadeout only fades out the top slide
+$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
+ $slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 });
+ opts.before.push(function(curr,next,opts,w,h,rev) {
+ $(curr).css('zIndex',opts.slideCount + (rev !== true ? 1 : 0));
+ $(next).css('zIndex',opts.slideCount + (rev !== true ? 0 : 1));
+ });
+ opts.animIn.opacity = 1;
+ opts.animOut.opacity = 0;
+ opts.cssBefore.opacity = 1;
+ opts.cssBefore.display = 'block';
+ opts.cssAfter.zIndex = 0;
+};
+
+// scrollUp/Down/Left/Right
+$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
+ $cont.css('overflow','hidden');
+ opts.before.push($.fn.cycle.commonReset);
+ var h = $cont.height();
+ opts.cssBefore.top = h;
+ opts.cssBefore.left = 0;
+ opts.cssFirst.top = 0;
+ opts.animIn.top = 0;
+ opts.animOut.top = -h;
+};
+$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
+ $cont.css('overflow','hidden');
+ opts.before.push($.fn.cycle.commonReset);
+ var h = $cont.height();
+ opts.cssFirst.top = 0;
+ opts.cssBefore.top = -h;
+ opts.cssBefore.left = 0;
+ opts.animIn.top = 0;
+ opts.animOut.top = h;
+};
+$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
+ $cont.css('overflow','hidden');
+ opts.before.push($.fn.cycle.commonReset);
+ var w = $cont.width();
+ opts.cssFirst.left = 0;
+ opts.cssBefore.left = w;
+ opts.cssBefore.top = 0;
+ opts.animIn.left = 0;
+ opts.animOut.left = 0-w;
+};
+$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
+ $cont.css('overflow','hidden');
+ opts.before.push($.fn.cycle.commonReset);
+ var w = $cont.width();
+ opts.cssFirst.left = 0;
+ opts.cssBefore.left = -w;
+ opts.cssBefore.top = 0;
+ opts.animIn.left = 0;
+ opts.animOut.left = w;
+};
+$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
+ $cont.css('overflow','hidden').width();
+ opts.before.push(function(curr, next, opts, fwd) {
+ if (opts.rev)
+ fwd = !fwd;
+ $.fn.cycle.commonReset(curr,next,opts);
+ opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
+ opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
+ });
+ opts.cssFirst.left = 0;
+ opts.cssBefore.top = 0;
+ opts.animIn.left = 0;
+ opts.animOut.top = 0;
+};
+$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
+ $cont.css('overflow','hidden');
+ opts.before.push(function(curr, next, opts, fwd) {
+ if (opts.rev)
+ fwd = !fwd;
+ $.fn.cycle.commonReset(curr,next,opts);
+ opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
+ opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
+ });
+ opts.cssFirst.top = 0;
+ opts.cssBefore.left = 0;
+ opts.animIn.top = 0;
+ opts.animOut.left = 0;
+};
+
+// slideX/slideY
+$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $(opts.elements).not(curr).hide();
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
+ opts.animIn.width = next.cycleW;
+ });
+ opts.cssBefore.left = 0;
+ opts.cssBefore.top = 0;
+ opts.cssBefore.width = 0;
+ opts.animIn.width = 'show';
+ opts.animOut.width = 0;
+};
+$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $(opts.elements).not(curr).hide();
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
+ opts.animIn.height = next.cycleH;
+ });
+ opts.cssBefore.left = 0;
+ opts.cssBefore.top = 0;
+ opts.cssBefore.height = 0;
+ opts.animIn.height = 'show';
+ opts.animOut.height = 0;
+};
+
+// shuffle
+$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
+ var i, w = $cont.css('overflow', 'visible').width();
+ $slides.css({left: 0, top: 0});
+ opts.before.push(function(curr,next,opts) {
+ $.fn.cycle.commonReset(curr,next,opts,true,true,true);
+ });
+ // only adjust speed once!
+ if (!opts.speedAdjusted) {
+ opts.speed = opts.speed / 2; // shuffle has 2 transitions
+ opts.speedAdjusted = true;
+ }
+ opts.random = 0;
+ opts.shuffle = opts.shuffle || {left:-w, top:15};
+ opts.els = [];
+ for (i=0; i < $slides.length; i++)
+ opts.els.push($slides[i]);
+
+ for (i=0; i < opts.currSlide; i++)
+ opts.els.push(opts.els.shift());
+
+ // custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
+ opts.fxFn = function(curr, next, opts, cb, fwd) {
+ if (opts.rev)
+ fwd = !fwd;
+ var $el = fwd ? $(curr) : $(next);
+ $(next).css(opts.cssBefore);
+ var count = opts.slideCount;
+ $el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
+ var hops = $.fn.cycle.hopsFromLast(opts, fwd);
+ for (var k=0; k < hops; k++) {
+ if (fwd)
+ opts.els.push(opts.els.shift());
+ else
+ opts.els.unshift(opts.els.pop());
+ }
+ if (fwd) {
+ for (var i=0, len=opts.els.length; i < len; i++)
+ $(opts.els[i]).css('z-index', len-i+count);
+ }
+ else {
+ var z = $(curr).css('z-index');
+ $el.css('z-index', parseInt(z,10)+1+count);
+ }
+ $el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
+ $(fwd ? this : curr).hide();
+ if (cb) cb();
+ });
+ });
+ };
+ $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
+};
+
+// turnUp/Down/Left/Right
+$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
+ opts.cssBefore.top = next.cycleH;
+ opts.animIn.height = next.cycleH;
+ opts.animOut.width = next.cycleW;
+ });
+ opts.cssFirst.top = 0;
+ opts.cssBefore.left = 0;
+ opts.cssBefore.height = 0;
+ opts.animIn.top = 0;
+ opts.animOut.height = 0;
+};
+$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
+ opts.animIn.height = next.cycleH;
+ opts.animOut.top = curr.cycleH;
+ });
+ opts.cssFirst.top = 0;
+ opts.cssBefore.left = 0;
+ opts.cssBefore.top = 0;
+ opts.cssBefore.height = 0;
+ opts.animOut.height = 0;
+};
+$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
+ opts.cssBefore.left = next.cycleW;
+ opts.animIn.width = next.cycleW;
+ });
+ opts.cssBefore.top = 0;
+ opts.cssBefore.width = 0;
+ opts.animIn.left = 0;
+ opts.animOut.width = 0;
+};
+$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
+ opts.animIn.width = next.cycleW;
+ opts.animOut.left = curr.cycleW;
+ });
+ $.extend(opts.cssBefore, { top: 0, left: 0, width: 0 });
+ opts.animIn.left = 0;
+ opts.animOut.width = 0;
+};
+
+// zoom
+$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,false,false,true);
+ opts.cssBefore.top = next.cycleH/2;
+ opts.cssBefore.left = next.cycleW/2;
+ $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
+ $.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 });
+ });
+ opts.cssFirst.top = 0;
+ opts.cssFirst.left = 0;
+ opts.cssBefore.width = 0;
+ opts.cssBefore.height = 0;
+};
+
+// fadeZoom
+$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,false,false);
+ opts.cssBefore.left = next.cycleW/2;
+ opts.cssBefore.top = next.cycleH/2;
+ $.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
+ });
+ opts.cssBefore.width = 0;
+ opts.cssBefore.height = 0;
+ opts.animOut.opacity = 0;
+};
+
+// blindX
+$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
+ var w = $cont.css('overflow','hidden').width();
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts);
+ opts.animIn.width = next.cycleW;
+ opts.animOut.left = curr.cycleW;
+ });
+ opts.cssBefore.left = w;
+ opts.cssBefore.top = 0;
+ opts.animIn.left = 0;
+ opts.animOut.left = w;
+};
+// blindY
+$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
+ var h = $cont.css('overflow','hidden').height();
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts);
+ opts.animIn.height = next.cycleH;
+ opts.animOut.top = curr.cycleH;
+ });
+ opts.cssBefore.top = h;
+ opts.cssBefore.left = 0;
+ opts.animIn.top = 0;
+ opts.animOut.top = h;
+};
+// blindZ
+$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
+ var h = $cont.css('overflow','hidden').height();
+ var w = $cont.width();
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts);
+ opts.animIn.height = next.cycleH;
+ opts.animOut.top = curr.cycleH;
+ });
+ opts.cssBefore.top = h;
+ opts.cssBefore.left = w;
+ opts.animIn.top = 0;
+ opts.animIn.left = 0;
+ opts.animOut.top = h;
+ opts.animOut.left = w;
+};
+
+// growX - grow horizontally from centered 0 width
+$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,false,true);
+ opts.cssBefore.left = this.cycleW/2;
+ opts.animIn.left = 0;
+ opts.animIn.width = this.cycleW;
+ opts.animOut.left = 0;
+ });
+ opts.cssBefore.top = 0;
+ opts.cssBefore.width = 0;
+};
+// growY - grow vertically from centered 0 height
+$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,true,false);
+ opts.cssBefore.top = this.cycleH/2;
+ opts.animIn.top = 0;
+ opts.animIn.height = this.cycleH;
+ opts.animOut.top = 0;
+ });
+ opts.cssBefore.height = 0;
+ opts.cssBefore.left = 0;
+};
+
+// curtainX - squeeze in both edges horizontally
+$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,false,true,true);
+ opts.cssBefore.left = next.cycleW/2;
+ opts.animIn.left = 0;
+ opts.animIn.width = this.cycleW;
+ opts.animOut.left = curr.cycleW/2;
+ opts.animOut.width = 0;
+ });
+ opts.cssBefore.top = 0;
+ opts.cssBefore.width = 0;
+};
+// curtainY - squeeze in both edges vertically
+$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,true,false,true);
+ opts.cssBefore.top = next.cycleH/2;
+ opts.animIn.top = 0;
+ opts.animIn.height = next.cycleH;
+ opts.animOut.top = curr.cycleH/2;
+ opts.animOut.height = 0;
+ });
+ opts.cssBefore.height = 0;
+ opts.cssBefore.left = 0;
+};
+
+// cover - curr slide covered by next slide
+$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
+ var d = opts.direction || 'left';
+ var w = $cont.css('overflow','hidden').width();
+ var h = $cont.height();
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts);
+ opts.cssAfter.display = '';
+ if (d == 'right')
+ opts.cssBefore.left = -w;
+ else if (d == 'up')
+ opts.cssBefore.top = h;
+ else if (d == 'down')
+ opts.cssBefore.top = -h;
+ else
+ opts.cssBefore.left = w;
+ });
+ opts.animIn.left = 0;
+ opts.animIn.top = 0;
+ opts.cssBefore.top = 0;
+ opts.cssBefore.left = 0;
+};
+
+// uncover - curr slide moves off next slide
+$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
+ var d = opts.direction || 'left';
+ var w = $cont.css('overflow','hidden').width();
+ var h = $cont.height();
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,true,true,true);
+ if (d == 'right')
+ opts.animOut.left = w;
+ else if (d == 'up')
+ opts.animOut.top = -h;
+ else if (d == 'down')
+ opts.animOut.top = h;
+ else
+ opts.animOut.left = -w;
+ });
+ opts.animIn.left = 0;
+ opts.animIn.top = 0;
+ opts.cssBefore.top = 0;
+ opts.cssBefore.left = 0;
+};
+
+// toss - move top slide and fade away
+$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
+ var w = $cont.css('overflow','visible').width();
+ var h = $cont.height();
+ opts.before.push(function(curr, next, opts) {
+ $.fn.cycle.commonReset(curr,next,opts,true,true,true);
+ // provide default toss settings if animOut not provided
+ if (!opts.animOut.left && !opts.animOut.top)
+ $.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 });
+ else
+ opts.animOut.opacity = 0;
+ });
+ opts.cssBefore.left = 0;
+ opts.cssBefore.top = 0;
+ opts.animIn.left = 0;
+};
+
+// wipe - clip animation
+$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
+ var w = $cont.css('overflow','hidden').width();
+ var h = $cont.height();
+ opts.cssBefore = opts.cssBefore || {};
+ var clip;
+ if (opts.clip) {
+ if (/l2r/.test(opts.clip))
+ clip = 'rect(0px 0px '+h+'px 0px)';
+ else if (/r2l/.test(opts.clip))
+ clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
+ else if (/t2b/.test(opts.clip))
+ clip = 'rect(0px '+w+'px 0px 0px)';
+ else if (/b2t/.test(opts.clip))
+ clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
+ else if (/zoom/.test(opts.clip)) {
+ var top = parseInt(h/2,10);
+ var left = parseInt(w/2,10);
+ clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
+ }
+ }
+
+ opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';
+
+ var d = opts.cssBefore.clip.match(/(\d+)/g);
+ var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10);
+
+ opts.before.push(function(curr, next, opts) {
+ if (curr == next) return;
+ var $curr = $(curr), $next = $(next);
+ $.fn.cycle.commonReset(curr,next,opts,true,true,false);
+ opts.cssAfter.display = 'block';
+
+ var step = 1, count = parseInt((opts.speedIn / 13),10) - 1;
+ (function f() {
+ var tt = t ? t - parseInt(step * (t/count),10) : 0;
+ var ll = l ? l - parseInt(step * (l/count),10) : 0;
+ var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h;
+ var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w;
+ $next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
+ (step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
+ })();
+ });
+ $.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
+ opts.animIn = { left: 0 };
+ opts.animOut = { left: 0 };
+};
+
+})(jQuery);
diff --git a/app/assets/javascripts/lib/jquery.fastLiveFilter.js b/app/assets/javascripts/lib/jquery.fastLiveFilter.js
new file mode 100644
index 000000000..b843a6271
--- /dev/null
+++ b/app/assets/javascripts/lib/jquery.fastLiveFilter.js
@@ -0,0 +1,82 @@
+/**
+ * fastLiveFilter jQuery plugin 1.0.3
+ *
+ * Copyright (c) 2011, Anthony Bush
+ * License:
+ * Project Website: http://anthonybush.com/projects/jquery_fast_live_filter/
+ **/
+!function ($) {
+ $.fn.fastLiveFilter = function(list, item, tar, options) {
+ // Options: input, list, timeout, callback
+ options = options || {};
+ list = $(list);
+ var input = this;
+ var target = $(tar);
+ var timeout = options.timeout || 0;
+ var callback = options.callback || function() {};
+
+ var keyTimeout;
+
+ // NOTE: because we cache lis & len here, users would need to re-init the plugin
+ // if they modify the list in the DOM later. This doesn't give us that much speed
+ // boost, so perhaps it's not worth putting it here.
+ var lis = list.find(item);
+ var len = lis.length;
+ var oldDisplay = len > 0 ? lis[0].style.display : "block";
+ callback(len); // do a one-time callback on initialization to make sure everything's in sync
+
+ input.change(function() {
+ // var startTime = new Date().getTime();
+ var filter = input.val().toLowerCase();
+ var li;
+ var numShown = 0;
+ for (var i = 0; i < len; i++) {
+ li = lis.eq(i);
+ if ((li.find(target).text()).toLowerCase().indexOf(filter) >= 0) {
+ if (li.hasClass("mark")) {
+ li.removeClass('mark');
+
+ // for Orbit
+ // var showTags = lis.not('.mark').find('input[type="checkbox"]:checked').length;
+ // if(lis.showTags) {
+ // $('#deselect, #deleteTags').removeClass('hide')
+ // }
+ }
+ numShown++;
+ } else {
+ if (!li.hasClass("mark")) {
+ li.addClass('mark');
+
+ // for Orbit
+ // var showTags = lis.not('.mark').find('input[type="checkbox"]:checked').length;
+ // if(showTags == 0) {
+ // $('#deselect, #deleteTags').addClass('hide')
+ // }
+ li.children('.card').removeClass('active').children('input').attr('checked', false);
+ if($('.tags input[type="checkbox"]:checked').length == 0) {
+ $('#deselect, #deleteTags, #addDefault').addClass('hide')
+ }
+ }
+ }
+ }
+ callback(numShown);
+ // var endTime = new Date().getTime();
+ // console.log('Search for ' + filter + ' took: ' + (endTime - startTime) + ' (' + numShown + ' results)');
+ return false;
+ }).keydown(function(e) {
+ // TODO: one point of improvement could be in here: currently the change event is
+ // invoked even if a change does not occur (e.g. by pressing a modifier key or
+ // something)
+ clearTimeout(keyTimeout);
+ keyTimeout = setTimeout(function() { input.change(); }, timeout);
+ if(e.which == '13') {
+ e.preventDefault();
+ }
+ // } else if(e.which == '8') {
+ // clearTimeout(keyTimeout);
+ // keyTimeout = setTimeout(function() { input.change(); }, timeout);
+ // }
+ });
+ return this; // maintain jQuery chainability
+ }
+}(window.jQuery);
diff --git a/app/assets/javascripts/lib/jquery.mjs.nestedSortable.js b/app/assets/javascripts/lib/jquery.mjs.nestedSortable.js
new file mode 100644
index 000000000..b41af696f
--- /dev/null
+++ b/app/assets/javascripts/lib/jquery.mjs.nestedSortable.js
@@ -0,0 +1,451 @@
+/*
+ * jQuery UI Nested Sortable
+ * v 1.3.5 / 21 jun 2012
+ * http://mjsarfatti.com/code/nestedSortable
+ *
+ * Depends on:
+ * jquery.ui.sortable.js 1.8+
+ *
+ * Copyright (c) 2010-2012 Manuele J Sarfatti
+ * Licensed under the MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+(function($) {
+
+ $.widget("mjs.nestedSortable", $.extend({}, $.ui.sortable.prototype, {
+
+ options: {
+ tabSize: 20,
+ disableNesting: 'mjs-nestedSortable-no-nesting',
+ errorClass: 'mjs-nestedSortable-error',
+ doNotClear: false,
+ listType: 'ol',
+ maxLevels: 0,
+ protectRoot: false,
+ rootID: null,
+ rtl: false,
+ isAllowed: function(item, parent) { return true; }
+ },
+
+ _create: function() {
+ this.element.data('sortable', this.element.data('nestedSortable'));
+
+ if (!this.element.is(this.options.listType))
+ throw new Error('nestedSortable: Please check the listType option is set to your actual list type');
+
+ return $.ui.sortable.prototype._create.apply(this, arguments);
+ },
+
+ destroy: function() {
+ this.element
+ .removeData("nestedSortable")
+ .unbind(".nestedSortable");
+ return $.ui.sortable.prototype.destroy.apply(this, arguments);
+ },
+
+ _mouseDrag: function(event) {
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ var o = this.options;
+
+ //Do scrolling
+ if(this.options.scroll) {
+ var scrolled = false;
+ if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
+
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+
+ } else {
+
+ if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+
+ if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ // Find the top offset before rearrangement,
+ var previousTopOffset = this.placeholder.offset().top;
+
+ //Set the helper position
+ if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
+ if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
+
+ //Rearrange
+ for (var i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
+ if (!intersection) continue;
+
+ if(itemElement != this.currentItem[0] //cannot intersect with itself
+ && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
+ && !$.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
+ && (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)
+ //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
+ ) {
+
+ $(itemElement).mouseenter();
+
+ this.direction = intersection == 1 ? "down" : "up";
+
+ if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
+ $(itemElement).mouseleave();
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ // Clear emtpy ul's/ol's
+ this._clearEmpty(itemElement);
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ var parentItem = (this.placeholder[0].parentNode.parentNode &&
+ $(this.placeholder[0].parentNode.parentNode).closest('.ui-sortable').length)
+ ? $(this.placeholder[0].parentNode.parentNode)
+ : null,
+ level = this._getLevel(this.placeholder),
+ childLevels = this._getChildLevels(this.helper);
+
+ // To find the previous sibling in the list, keep backtracking until we hit a valid list item.
+ var previousItem = this.placeholder[0].previousSibling ? $(this.placeholder[0].previousSibling) : null;
+ if (previousItem != null) {
+ while (previousItem[0].nodeName.toLowerCase() != 'li' || previousItem[0] == this.currentItem[0] || previousItem[0] == this.helper[0]) {
+ if (previousItem[0].previousSibling) {
+ previousItem = $(previousItem[0].previousSibling);
+ } else {
+ previousItem = null;
+ break;
+ }
+ }
+ }
+
+ // To find the next sibling in the list, keep stepping forward until we hit a valid list item.
+ var nextItem = this.placeholder[0].nextSibling ? $(this.placeholder[0].nextSibling) : null;
+ if (nextItem != null) {
+ while (nextItem[0].nodeName.toLowerCase() != 'li' || nextItem[0] == this.currentItem[0] || nextItem[0] == this.helper[0]) {
+ if (nextItem[0].nextSibling) {
+ nextItem = $(nextItem[0].nextSibling);
+ } else {
+ nextItem = null;
+ break;
+ }
+ }
+ }
+
+ var newList = document.createElement(o.listType);
+
+ this.beyondMaxLevels = 0;
+
+ // If the item is moved to the left, send it to its parent's level unless there are siblings below it.
+ if (parentItem != null && nextItem == null &&
+ (o.rtl && (this.positionAbs.left + this.helper.outerWidth() > parentItem.offset().left + parentItem.outerWidth()) ||
+ !o.rtl && (this.positionAbs.left < parentItem.offset().left))) {
+ parentItem.after(this.placeholder[0]);
+ this._clearEmpty(parentItem[0]);
+ this._trigger("change", event, this._uiHash());
+ }
+ // If the item is below a sibling and is moved to the right, make it a child of that sibling.
+ else if (previousItem != null &&
+ (o.rtl && (this.positionAbs.left + this.helper.outerWidth() < previousItem.offset().left + previousItem.outerWidth() - o.tabSize) ||
+ !o.rtl && (this.positionAbs.left > previousItem.offset().left + o.tabSize))) {
+ this._isAllowed(previousItem, level, level+childLevels+1);
+ if (!previousItem.children(o.listType).length) {
+ previousItem[0].appendChild(newList);
+ }
+ // If this item is being moved from the top, add it to the top of the list.
+ if (previousTopOffset && (previousTopOffset <= previousItem.offset().top)) {
+ previousItem.children(o.listType).prepend(this.placeholder);
+ }
+ // Otherwise, add it to the bottom of the list.
+ else {
+ previousItem.children(o.listType)[0].appendChild(this.placeholder[0]);
+ }
+ this._trigger("change", event, this._uiHash());
+ }
+ else {
+ this._isAllowed(parentItem, level, level+childLevels);
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
+
+ //Call callbacks
+ this._trigger('sort', event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function(event, noPropagation) {
+
+ // If the item is in a position not allowed, send it back
+ if (this.beyondMaxLevels) {
+
+ this.placeholder.removeClass(this.options.errorClass);
+
+ if (this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.placeholder);
+ } else {
+ $(this.domPosition.parent).prepend(this.placeholder);
+ }
+
+ this._trigger("revert", event, this._uiHash());
+
+ }
+
+ // Clean last empty ul/ol
+ for (var i = this.items.length - 1; i >= 0; i--) {
+ var item = this.items[i].item[0];
+ this._clearEmpty(item);
+ }
+
+ $.ui.sortable.prototype._mouseStop.apply(this, arguments);
+
+
+ // for Orbit ----> Check the number of pages in each page
+ if($('#items').length) {
+ var $sortable = $('.sortable'),
+ $host = $sortable.children('.navbar').eq(0),
+ $navbar = $('.sortable li').children('.navbar'),
+ $quantity = $sortable.find('li').length;
+ $host.find('.badge').text($quantity);
+ $navbar.each(function(i) {
+ if($navbar.eq(i).next('ol').length>0) {
+ var $amount = $navbar.eq(i).next('ol').find('li').length;
+ $navbar.eq(i).find('.badge').text($amount);
+ }else{
+ $navbar.eq(i).find('.badge').text('0');
+ }
+ if($navbar.eq(i).next('ol').length==1 && $navbar.eq(i).next('ol').children('li').length==0){
+ $navbar.eq(i).next('ol').remove();
+ }
+ $navbar.eq(i).find('.badge').text()>0 ? $navbar.eq(i).find('.badge').addClass('badge-info'):$navbar.eq(i).find('.badge').removeClass('badge-info');
+ });
+ }
+ //
+ },
+
+ serialize: function(options) {
+
+ var o = $.extend({}, this.options, options),
+ items = this._getItemsAsjQuery(o && o.connected),
+ str = [];
+
+ $(items).each(function() {
+ var res = ($(o.item || this).attr(o.attribute || 'id') || '')
+ .match(o.expression || (/(.+)[-=_](.+)/)),
+ pid = ($(o.item || this).parent(o.listType)
+ .parent(o.items)
+ .attr(o.attribute || 'id') || '')
+ .match(o.expression || (/(.+)[-=_](.+)/));
+
+ if (res) {
+ str.push(((o.key || res[1]) + '[' + (o.key && o.expression ? res[1] : res[2]) + ']')
+ + '='
+ + (pid ? (o.key && o.expression ? pid[1] : pid[2]) : o.rootID));
+ }
+ });
+
+ if(!str.length && o.key) {
+ str.push(o.key + '=');
+ }
+
+ return str.join('&');
+
+ },
+
+ toHierarchy: function(options) {
+
+ var o = $.extend({}, this.options, options),
+ sDepth = o.startDepthCount || 0,
+ ret = [];
+
+ $(this.element).children(o.items).each(function () {
+ var level = _recursiveItems(this);
+ ret.push(level);
+ });
+
+ return ret;
+
+ function _recursiveItems(item) {
+ var id = ($(item).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
+ if (id) {
+ var currentItem = {"id" : id[2]};
+ if ($(item).children(o.listType).children(o.items).length > 0) {
+ currentItem.children = [];
+ $(item).children(o.listType).children(o.items).each(function() {
+ var level = _recursiveItems(this);
+ currentItem.children.push(level);
+ });
+ }
+ return currentItem;
+ }
+ }
+ },
+
+ toArray: function(options) {
+
+ var o = $.extend({}, this.options, options),
+ sDepth = o.startDepthCount || 0,
+ ret = [],
+ left = 2;
+
+ ret.push({
+ "item_id": o.rootID,
+ "parent_id": 'none',
+ "depth": sDepth,
+ "left": '1',
+ "right": ($(o.items, this.element).length + 1) * 2
+ });
+
+ $(this.element).children(o.items).each(function () {
+ left = _recursiveArray(this, sDepth + 1, left);
+ });
+
+ ret = ret.sort(function(a,b){ return (a.left - b.left); });
+
+ return ret;
+
+ function _recursiveArray(item, depth, left) {
+
+ var right = left + 1,
+ id,
+ pid;
+
+ if ($(item).children(o.listType).children(o.items).length > 0) {
+ depth ++;
+ $(item).children(o.listType).children(o.items).each(function () {
+ right = _recursiveArray($(this), depth, right);
+ });
+ depth --;
+ }
+
+ id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));
+
+ if (depth === sDepth + 1) {
+ pid = o.rootID;
+ } else {
+ var parentItem = ($(item).parent(o.listType)
+ .parent(o.items)
+ .attr(o.attribute || 'id'))
+ .match(o.expression || (/(.+)[-=_](.+)/));
+ pid = parentItem[2];
+ }
+
+ if (id) {
+ ret.push({"item_id": id[2], "parent_id": pid, "depth": depth, "left": left, "right": right});
+ }
+
+ left = right + 1;
+ return left;
+ }
+
+ },
+
+ _clearEmpty: function(item) {
+
+ var emptyList = $(item).children(this.options.listType);
+ if (emptyList.length && !emptyList.children().length && !this.options.doNotClear) {
+ emptyList.remove();
+ }
+
+ },
+
+ _getLevel: function(item) {
+
+ var level = 1;
+
+ if (this.options.listType) {
+ var list = item.closest(this.options.listType);
+ while (list && list.length > 0 &&
+ !list.is('.ui-sortable')) {
+ level++;
+ list = list.parent().closest(this.options.listType);
+ }
+ }
+
+ return level;
+ },
+
+ _getChildLevels: function(parent, depth) {
+ var self = this,
+ o = this.options,
+ result = 0;
+ depth = depth || 0;
+
+ $(parent).children(o.listType).children(o.items).each(function (index, child) {
+ result = Math.max(self._getChildLevels(child, depth + 1), result);
+ });
+
+ return depth ? result + 1 : result;
+ },
+
+ _isAllowed: function(parentItem, level, levels) {
+ var o = this.options,
+ isRoot = $(this.domPosition.parent).hasClass('ui-sortable') ? true : false,
+ maxLevels = this.placeholder.closest('.ui-sortable').nestedSortable('option', 'maxLevels'); // this takes into account the maxLevels set to the recipient list
+
+ // Is the root protected?
+ // Are we trying to nest under a no-nest?
+ // Are we nesting too deep?
+ if (!o.isAllowed(this.currentItem, parentItem) ||
+ parentItem && parentItem.hasClass(o.disableNesting) ||
+ o.protectRoot && (parentItem == null && !isRoot || isRoot && level > 1)) {
+ this.placeholder.addClass(o.errorClass);
+ if (maxLevels < levels && maxLevels != 0) {
+ this.beyondMaxLevels = levels - maxLevels;
+ } else {
+ this.beyondMaxLevels = 1;
+ }
+ } else {
+ if (maxLevels < levels && maxLevels != 0) {
+ this.placeholder.addClass(o.errorClass);
+ this.beyondMaxLevels = levels - maxLevels;
+ } else {
+ this.placeholder.removeClass(o.errorClass);
+ this.beyondMaxLevels = 0;
+ }
+ }
+ }
+
+ }));
+
+ $.mjs.nestedSortable.prototype.options = $.extend({}, $.ui.sortable.prototype.options, $.mjs.nestedSortable.prototype.options);
+})(jQuery);
diff --git a/app/assets/javascripts/lib/jquery.nanoscroller.js b/app/assets/javascripts/lib/jquery.nanoscroller.js
new file mode 100644
index 000000000..e7f53cc3f
--- /dev/null
+++ b/app/assets/javascripts/lib/jquery.nanoscroller.js
@@ -0,0 +1,752 @@
+/*! nanoScrollerJS - v0.7.2
+* http://jamesflorentino.github.com/nanoScrollerJS/
+* Copyright (c) 2013 James Florentino; Licensed MIT */
+
+
+(function($, window, document) {
+ "use strict";
+
+ var BROWSER_IS_IE7, BROWSER_SCROLLBAR_WIDTH, DOMSCROLL, DOWN, DRAG, KEYDOWN, KEYUP, MOUSEDOWN, MOUSEMOVE, MOUSEUP, MOUSEWHEEL, NanoScroll, PANEDOWN, RESIZE, SCROLL, SCROLLBAR, TOUCHMOVE, UP, WHEEL, defaults, getBrowserScrollbarWidth;
+ defaults = {
+ /**
+ a classname for the pane element.
+ @property paneClass
+ @type String
+ @default 'pane'
+ */
+
+ paneClass: 'pane',
+ /**
+ a classname for the slider element.
+ @property sliderClass
+ @type String
+ @default 'slider'
+ */
+
+ sliderClass: 'slider',
+ /**
+ a classname for the content element.
+ @property contentClass
+ @type String
+ @default 'content'
+ */
+
+ contentClass: 'content',
+ /**
+ a setting to enable native scrolling in iOS devices.
+ @property iOSNativeScrolling
+ @type Boolean
+ @default false
+ */
+
+ iOSNativeScrolling: false,
+ /**
+ a setting to prevent the rest of the page being
+ scrolled when user scrolls the `.content` element.
+ @property preventPageScrolling
+ @type Boolean
+ @default false
+ */
+
+ preventPageScrolling: false,
+ /**
+ a setting to disable binding to the resize event.
+ @property disableResize
+ @type Boolean
+ @default false
+ */
+
+ disableResize: false,
+ /**
+ a setting to make the scrollbar always visible.
+ @property alwaysVisible
+ @type Boolean
+ @default false
+ */
+
+ alwaysVisible: false,
+ /**
+ a default timeout for the `flash()` method.
+ @property flashDelay
+ @type Number
+ @default 1500
+ */
+
+ flashDelay: 1500,
+ /**
+ a minimum height for the `.slider` element.
+ @property sliderMinHeight
+ @type Number
+ @default 20
+ */
+
+ sliderMinHeight: 20,
+ /**
+ a maximum height for the `.slider` element.
+ @property sliderMaxHeight
+ @type Number
+ @default null
+ */
+
+ sliderMaxHeight: null
+ };
+ /**
+ @property SCROLLBAR
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLLBAR = 'scrollbar';
+ /**
+ @property SCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ SCROLL = 'scroll';
+ /**
+ @property MOUSEDOWN
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEDOWN = 'mousedown';
+ /**
+ @property MOUSEMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEMOVE = 'mousemove';
+ /**
+ @property MOUSEWHEEL
+ @type String
+ @final
+ @private
+ */
+
+ MOUSEWHEEL = 'mousewheel';
+ /**
+ @property MOUSEUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ MOUSEUP = 'mouseup';
+ /**
+ @property RESIZE
+ @type String
+ @final
+ @private
+ */
+
+ RESIZE = 'resize';
+ /**
+ @property DRAG
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DRAG = 'drag';
+ /**
+ @property UP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ UP = 'up';
+ /**
+ @property PANEDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ PANEDOWN = 'panedown';
+ /**
+ @property DOMSCROLL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOMSCROLL = 'DOMMouseScroll';
+ /**
+ @property DOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ DOWN = 'down';
+ /**
+ @property WHEEL
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ WHEEL = 'wheel';
+ /**
+ @property KEYDOWN
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYDOWN = 'keydown';
+ /**
+ @property KEYUP
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ KEYUP = 'keyup';
+ /**
+ @property TOUCHMOVE
+ @type String
+ @static
+ @final
+ @private
+ */
+
+ TOUCHMOVE = 'touchmove';
+ /**
+ @property BROWSER_IS_IE7
+ @type Boolean
+ @static
+ @final
+ @private
+ */
+
+ BROWSER_IS_IE7 = window.navigator.appName === 'Microsoft Internet Explorer' && /msie 7./i.test(window.navigator.appVersion) && window.ActiveXObject;
+ /**
+ @property BROWSER_SCROLLBAR_WIDTH
+ @type Number
+ @static
+ @default null
+ @private
+ */
+
+ BROWSER_SCROLLBAR_WIDTH = null;
+ /**
+ Returns browser's native scrollbar width
+ @method getBrowserScrollbarWidth
+ @return {Number} the scrollbar width in pixels
+ @static
+ @private
+ */
+
+ getBrowserScrollbarWidth = function() {
+ var outer, outerStyle, scrollbarWidth;
+ outer = document.createElement('div');
+ outerStyle = outer.style;
+ outerStyle.position = 'absolute';
+ outerStyle.width = '100px';
+ outerStyle.height = '100px';
+ outerStyle.overflow = SCROLL;
+ outerStyle.top = '-9999px';
+ document.body.appendChild(outer);
+ scrollbarWidth = outer.offsetWidth - outer.clientWidth;
+ document.body.removeChild(outer);
+ return scrollbarWidth;
+ };
+ /**
+ @class NanoScroll
+ @param element {HTMLElement|Node} the main element
+ @param options {Object} nanoScroller's options
+ @constructor
+ */
+
+ NanoScroll = (function() {
+
+ function NanoScroll(el, options) {
+ this.el = el;
+ this.options = options;
+ BROWSER_SCROLLBAR_WIDTH || (BROWSER_SCROLLBAR_WIDTH = getBrowserScrollbarWidth());
+ this.$el = $(this.el);
+ this.doc = $(document);
+ this.win = $(window);
+ this.$content = this.$el.children("." + options.contentClass);
+ this.$content.attr('tabindex', 0);
+ this.content = this.$content[0];
+ if (this.options.iOSNativeScrolling && (this.el.style.WebkitOverflowScrolling != null)) {
+ this.nativeScrolling();
+ } else {
+ this.generate();
+ }
+ this.createEvents();
+ this.addEvents();
+ this.reset();
+ }
+
+ /**
+ Prevents the rest of the page being scrolled
+ when user scrolls the `.content` element.
+ @method preventScrolling
+ @param event {Event}
+ @param direction {String} Scroll direction (up or down)
+ @private
+ */
+
+
+ NanoScroll.prototype.preventScrolling = function(e, direction) {
+ if (!this.isActive) {
+ return;
+ }
+ if (e.type === DOMSCROLL) {
+ if (direction === DOWN && e.originalEvent.detail > 0 || direction === UP && e.originalEvent.detail < 0) {
+ e.preventDefault();
+ }
+ } else if (e.type === MOUSEWHEEL) {
+ if (!e.originalEvent || !e.originalEvent.wheelDelta) {
+ return;
+ }
+ if (direction === DOWN && e.originalEvent.wheelDelta < 0 || direction === UP && e.originalEvent.wheelDelta > 0) {
+ e.preventDefault();
+ }
+ }
+ };
+
+ /**
+ Enable iOS native scrolling
+ */
+
+
+ NanoScroll.prototype.nativeScrolling = function() {
+ this.$content.css({
+ WebkitOverflowScrolling: 'touch'
+ });
+ this.iOSNativeScrolling = true;
+ this.isActive = true;
+ };
+
+ /**
+ Updates those nanoScroller properties that
+ are related to current scrollbar position.
+ @method updateScrollValues
+ @private
+ */
+
+
+ NanoScroll.prototype.updateScrollValues = function() {
+ var content;
+ content = this.content;
+ this.maxScrollTop = content.scrollHeight - content.clientHeight;
+ this.contentScrollTop = content.scrollTop;
+ if (!this.iOSNativeScrolling) {
+ this.maxSliderTop = this.paneHeight - this.sliderHeight;
+ this.sliderTop = this.contentScrollTop * this.maxSliderTop / this.maxScrollTop;
+ }
+ };
+
+ /**
+ Creates event related methods
+ @method createEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.createEvents = function() {
+ var _this = this;
+ this.events = {
+ down: function(e) {
+ _this.isBeingDragged = true;
+ _this.offsetY = e.pageY - _this.slider.offset().top;
+ _this.pane.addClass('active');
+ _this.doc.bind(MOUSEMOVE, _this.events[DRAG]).bind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ drag: function(e) {
+ _this.sliderY = e.pageY - _this.$el.offset().top - _this.offsetY;
+ _this.scroll();
+ _this.updateScrollValues();
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0) {
+ _this.$el.trigger('scrolltop');
+ }
+ return false;
+ },
+ up: function(e) {
+ _this.isBeingDragged = false;
+ _this.pane.removeClass('active');
+ _this.doc.unbind(MOUSEMOVE, _this.events[DRAG]).unbind(MOUSEUP, _this.events[UP]);
+ return false;
+ },
+ resize: function(e) {
+ _this.reset();
+ },
+ panedown: function(e) {
+ _this.sliderY = (e.offsetY || e.originalEvent.layerY) - (_this.sliderHeight * 0.5);
+ _this.scroll();
+ _this.events.down(e);
+ return false;
+ },
+ scroll: function(e) {
+ if (_this.isBeingDragged) {
+ return;
+ }
+ _this.updateScrollValues();
+ if (!_this.iOSNativeScrolling) {
+ _this.sliderY = _this.sliderTop;
+ _this.slider.css({
+ top: _this.sliderTop
+ });
+ }
+ if (e == null) {
+ return;
+ }
+ if (_this.contentScrollTop >= _this.maxScrollTop) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, DOWN);
+ }
+ _this.$el.trigger('scrollend');
+ } else if (_this.contentScrollTop === 0) {
+ if (_this.options.preventPageScrolling) {
+ _this.preventScrolling(e, UP);
+ }
+ _this.$el.trigger('scrolltop');
+ }
+ },
+ wheel: function(e) {
+ if (e == null) {
+ return;
+ }
+ _this.sliderY += -e.wheelDeltaY || -e.delta;
+ _this.scroll();
+ return false;
+ }
+ };
+ };
+
+ /**
+ Adds event listeners with jQuery.
+ @method addEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.addEvents = function() {
+ var events;
+ this.removeEvents();
+ events = this.events;
+ if (!this.options.disableResize) {
+ this.win.bind(RESIZE, events[RESIZE]);
+ }
+ if (!this.iOSNativeScrolling) {
+ this.slider.bind(MOUSEDOWN, events[DOWN]);
+ this.pane.bind(MOUSEDOWN, events[PANEDOWN]).bind("" + MOUSEWHEEL + " " + DOMSCROLL, events[WHEEL]);
+ }
+ this.$content.bind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Removes event listeners with jQuery.
+ @method removeEvents
+ @private
+ */
+
+
+ NanoScroll.prototype.removeEvents = function() {
+ var events;
+ events = this.events;
+ this.win.unbind(RESIZE, events[RESIZE]);
+ if (!this.iOSNativeScrolling) {
+ this.slider.unbind();
+ this.pane.unbind();
+ }
+ this.$content.unbind("" + SCROLL + " " + MOUSEWHEEL + " " + DOMSCROLL + " " + TOUCHMOVE, events[SCROLL]);
+ };
+
+ /**
+ Generates nanoScroller's scrollbar and elements for it.
+ @method generate
+ @chainable
+ @private
+ */
+
+
+ NanoScroll.prototype.generate = function() {
+ var contentClass, cssRule, options, paneClass, sliderClass;
+ options = this.options;
+ paneClass = options.paneClass, sliderClass = options.sliderClass, contentClass = options.contentClass;
+ if (!this.$el.find("" + paneClass).length && !this.$el.find("" + sliderClass).length) {
+ this.$el.append("");
+ }
+ this.pane = this.$el.children("." + paneClass);
+ this.slider = this.pane.find("." + sliderClass);
+ if (BROWSER_SCROLLBAR_WIDTH) {
+ cssRule = this.$el.css('direction') === 'rtl' ? {
+ left: -BROWSER_SCROLLBAR_WIDTH
+ } : {
+ right: -BROWSER_SCROLLBAR_WIDTH
+ };
+ this.$el.addClass('has-scrollbar');
+ }
+ if (cssRule != null) {
+ this.$content.css(cssRule);
+ }
+ return this;
+ };
+
+ /**
+ @method restore
+ @private
+ */
+
+
+ NanoScroll.prototype.restore = function() {
+ this.stopped = false;
+ this.pane.show();
+ this.addEvents();
+ };
+
+ /**
+ Resets nanoScroller's scrollbar.
+ @method reset
+ @chainable
+ @example
+ $(".nano").nanoScroller();
+ */
+
+
+ NanoScroll.prototype.reset = function() {
+ var content, contentHeight, contentStyle, contentStyleOverflowY, paneBottom, paneHeight, paneOuterHeight, paneTop, sliderHeight;
+ if (this.iOSNativeScrolling) {
+ this.contentHeight = this.content.scrollHeight;
+ return;
+ }
+ if (!this.$el.find("." + this.options.paneClass).length) {
+ this.generate().stop();
+ }
+ if (this.stopped) {
+ this.restore();
+ }
+ content = this.content;
+ contentStyle = content.style;
+ contentStyleOverflowY = contentStyle.overflowY;
+ if (BROWSER_IS_IE7) {
+ this.$content.css({
+ height: this.$content.height()
+ });
+ }
+ contentHeight = content.scrollHeight + BROWSER_SCROLLBAR_WIDTH;
+ paneHeight = this.pane.outerHeight();
+ paneTop = parseInt(this.pane.css('top'), 10);
+ paneBottom = parseInt(this.pane.css('bottom'), 10);
+ paneOuterHeight = paneHeight + paneTop + paneBottom;
+ sliderHeight = Math.round(paneOuterHeight / contentHeight * paneOuterHeight);
+ if (sliderHeight < this.options.sliderMinHeight) {
+ sliderHeight = this.options.sliderMinHeight;
+ } else if ((this.options.sliderMaxHeight != null) && sliderHeight > this.options.sliderMaxHeight) {
+ sliderHeight = this.options.sliderMaxHeight;
+ }
+ if (contentStyleOverflowY === SCROLL && contentStyle.overflowX !== SCROLL) {
+ sliderHeight += BROWSER_SCROLLBAR_WIDTH;
+ }
+ this.maxSliderTop = paneOuterHeight - sliderHeight;
+ this.contentHeight = contentHeight;
+ this.paneHeight = paneHeight;
+ this.paneOuterHeight = paneOuterHeight;
+ this.sliderHeight = sliderHeight;
+ this.slider.height(sliderHeight);
+ this.events.scroll();
+ this.pane.show();
+ this.isActive = true;
+ if ((content.scrollHeight === content.clientHeight) || (this.pane.outerHeight(true) >= content.scrollHeight && contentStyleOverflowY !== SCROLL)) {
+ this.pane.hide();
+ this.isActive = false;
+ } else if (this.el.clientHeight === content.scrollHeight && contentStyleOverflowY === SCROLL) {
+ this.slider.hide();
+ } else {
+ this.slider.show();
+ }
+ this.pane.css({
+ opacity: (this.options.alwaysVisible ? 1 : ''),
+ visibility: (this.options.alwaysVisible ? 'visible' : '')
+ });
+ return this;
+ };
+
+ /**
+ @method scroll
+ @private
+ @example
+ $(".nano").nanoScroller({ scroll: 'top' });
+ */
+
+
+ NanoScroll.prototype.scroll = function() {
+ if (!this.isActive) {
+ return;
+ }
+ this.sliderY = Math.max(0, this.sliderY);
+ this.sliderY = Math.min(this.maxSliderTop, this.sliderY);
+ this.$content.scrollTop((this.paneHeight - this.contentHeight + BROWSER_SCROLLBAR_WIDTH) * this.sliderY / this.maxSliderTop * -1);
+ if (!this.iOSNativeScrolling) {
+ this.slider.css({
+ top: this.sliderY
+ });
+ }
+ return this;
+ };
+
+ /**
+ Scroll at the bottom with an offset value
+ @method scrollBottom
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollBottom: value });
+ */
+
+
+ NanoScroll.prototype.scrollBottom = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(this.contentHeight - this.$content.height() - offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll at the top with an offset value
+ @method scrollTop
+ @param offsetY {Number}
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTop: value });
+ */
+
+
+ NanoScroll.prototype.scrollTop = function(offsetY) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.$content.scrollTop(+offsetY).trigger(MOUSEWHEEL);
+ return this;
+ };
+
+ /**
+ Scroll to an element
+ @method scrollTo
+ @param node {Node} A node to scroll to.
+ @chainable
+ @example
+ $(".nano").nanoScroller({ scrollTo: $('#a_node') });
+ */
+
+
+ NanoScroll.prototype.scrollTo = function(node) {
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.scrollTop($(node).get(0).offsetTop);
+ return this;
+ };
+
+ /**
+ To stop the operation.
+ This option will tell the plugin to disable all event bindings and hide the gadget scrollbar from the UI.
+ @method stop
+ @chainable
+ @example
+ $(".nano").nanoScroller({ stop: true });
+ */
+
+
+ NanoScroll.prototype.stop = function() {
+ this.stopped = true;
+ this.removeEvents();
+ this.pane.hide();
+ return this;
+ };
+
+ /**
+ To flash the scrollbar gadget for an amount of time defined in plugin settings (defaults to 1,5s).
+ Useful if you want to show the user (e.g. on pageload) that there is more content waiting for him.
+ @method flash
+ @chainable
+ @example
+ $(".nano").nanoScroller({ flash: true });
+ */
+
+
+ NanoScroll.prototype.flash = function() {
+ var _this = this;
+ if (!this.isActive) {
+ return;
+ }
+ this.reset();
+ this.pane.addClass('flashed');
+ setTimeout(function() {
+ _this.pane.removeClass('flashed');
+ }, this.options.flashDelay);
+ return this;
+ };
+
+ return NanoScroll;
+
+ })();
+ $.fn.nanoScroller = function(settings) {
+ return this.each(function() {
+ var options, scrollbar;
+ if (!(scrollbar = this.nanoscroller)) {
+ options = $.extend({}, defaults, settings);
+ this.nanoscroller = scrollbar = new NanoScroll(this, options);
+ }
+ if (settings && typeof settings === "object") {
+ $.extend(scrollbar.options, settings);
+ if (settings.scrollBottom) {
+ return scrollbar.scrollBottom(settings.scrollBottom);
+ }
+ if (settings.scrollTop) {
+ return scrollbar.scrollTop(settings.scrollTop);
+ }
+ if (settings.scrollTo) {
+ return scrollbar.scrollTo(settings.scrollTo);
+ }
+ if (settings.scroll === 'bottom') {
+ return scrollbar.scrollBottom(0);
+ }
+ if (settings.scroll === 'top') {
+ return scrollbar.scrollTop(0);
+ }
+ if (settings.scroll && settings.scroll instanceof $) {
+ return scrollbar.scrollTo(settings.scroll);
+ }
+ if (settings.stop) {
+ return scrollbar.stop();
+ }
+ if (settings.flash) {
+ return scrollbar.flash();
+ }
+ }
+ return scrollbar.reset();
+ });
+ };
+})(jQuery, window, document);
diff --git a/app/assets/javascripts/lib/jquery.nicescroll.js b/app/assets/javascripts/lib/jquery.nicescroll.js
new file mode 100644
index 000000000..cf74ea70d
--- /dev/null
+++ b/app/assets/javascripts/lib/jquery.nicescroll.js
@@ -0,0 +1,2855 @@
+/* jquery.nicescroll
+-- version 3.1.4
+-- copyright 2011-12 InuYaksa*2012
+-- licensed under the MIT
+--
+-- http://areaaperta.com/nicescroll
+-- https://github.com/inuyaksa/jquery.nicescroll
+--
+*/
+
+(function(jQuery){
+
+ // globals
+ var domfocus = false;
+ var mousefocus = false;
+ var zoomactive = false;
+ var tabindexcounter = 5000;
+ var ascrailcounter = 2000;
+
+ var $ = jQuery; // sandbox
+
+ // http://stackoverflow.com/questions/2161159/get-script-path
+ function getScriptPath() {
+ var scripts=document.getElementsByTagName('script');
+ var path=scripts[scripts.length-1].src.split('?')[0];
+ return (path.split('/').length>0) ? path.split('/').slice(0,-1).join('/')+'/' : '';
+ }
+ var scriptpath = getScriptPath();
+
+ // derived by http://blog.joelambert.co.uk/2011/06/01/a-better-settimeoutsetinterval/
+ var setAnimationFrame = (function(){
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ false;
+ })();
+ var clearAnimationFrame = (function(){
+ return window.cancelRequestAnimationFrame ||
+ window.webkitCancelRequestAnimationFrame ||
+ window.mozCancelRequestAnimationFrame ||
+ window.oCancelRequestAnimationFrame ||
+ window.msCancelRequestAnimationFrame ||
+ false;
+ })();
+
+ var browserdetected = false;
+
+ var getBrowserDetection = function() {
+
+ if (browserdetected) return browserdetected;
+
+ var domtest = document.createElement('DIV');
+
+ var d = {};
+
+ d.haspointerlock = "pointerLockElement" in document || "mozPointerLockElement" in document || "webkitPointerLockElement" in document;
+
+ d.isopera = ("opera" in window);
+ d.isopera12 = (d.isopera&&("getUserMedia" in navigator));
+
+ d.isie = (("all" in document) && ("attachEvent" in domtest) && !d.isopera);
+ d.isieold = (d.isie && !("msInterpolationMode" in domtest.style)); // IE6 and older
+ d.isie7 = d.isie&&!d.isieold&&(!("documentMode" in document)||(document.documentMode==7));
+ d.isie8 = d.isie&&("documentMode" in document)&&(document.documentMode==8);
+ d.isie9 = d.isie&&("performance" in window)&&(document.documentMode>=9);
+ d.isie10 = d.isie&&("performance" in window)&&(document.documentMode>=10);
+
+ d.isie9mobile = /iemobile.9/i.test(navigator.userAgent); //wp 7.1 mango
+ if (d.isie9mobile) d.isie9 = false;
+ d.isie7mobile = (!d.isie9mobile&&d.isie7) && /iemobile/i.test(navigator.userAgent); //wp 7.0
+
+ d.ismozilla = ("MozAppearance" in domtest.style);
+
+ d.iswebkit = ("WebkitAppearance" in domtest.style);
+
+ d.ischrome = ("chrome" in window);
+ d.ischrome22 = (d.ischrome&&d.haspointerlock);
+
+ d.cantouch = ("ontouchstart" in document.documentElement)||("ontouchstart" in window); // detection for Chrome Touch Emulation
+ d.hasmstouch = (window.navigator.msPointerEnabled||false); // IE10+ pointer events
+
+ d.ismac = /^mac$/i.test(navigator.platform);
+
+ d.isios = (d.cantouch && /iphone|ipad|ipod/i.test(navigator.platform));
+ d.isios4 = ((d.isios)&&!("seal" in Object));
+
+ d.isandroid = (/android/i.test(navigator.userAgent));
+
+ d.trstyle = false;
+ d.hastransform = false;
+ d.hastranslate3d = false;
+ d.transitionstyle = false;
+ d.hastransition = false;
+ d.transitionend = false;
+
+ var check = ['transform','msTransform','webkitTransform','MozTransform','OTransform'];
+ for(var a=0;anw&&!dd.tt) {
+ self.delaylist[name] = {
+ last:nw+tm,
+ tt:setTimeout(function(){self.delaylist[name].tt=0;fn.call();},tm)
+ }
+ }
+ else if (!dd||!dd.tt) {
+ self.delaylist[name] = {
+ last:nw,
+ tt:0
+ }
+ setTimeout(function(){fn.call();},0);
+ }
+ };
+
+ this.synched = function(name,fn) {
+
+ function requestSync() {
+ if (self.onsync) return;
+ setAnimationFrame(function(){
+ self.onsync = false;
+ for(name in self.synclist){
+ var fn = self.synclist[name];
+ if (fn) fn.call(self);
+ self.synclist[name] = false;
+ }
+ });
+ self.onsync = true;
+ };
+
+ self.synclist[name] = fn;
+ requestSync();
+ return name;
+ };
+
+ this.unsynched = function(name) {
+ if (self.synclist[name]) self.synclist[name] = false;
+ }
+
+ this.css = function(el,pars) { // save & set
+ for(var n in pars) {
+ self.saved.css.push([el,n,el.css(n)]);
+ el.css(n,pars[n]);
+ }
+ };
+
+ this.scrollTop = function(val) {
+ return (typeof val == "undefined") ? self.getScrollTop() : self.setScrollTop(val);
+ };
+
+ this.scrollLeft = function(val) {
+ return (typeof val == "undefined") ? self.getScrollLeft() : self.setScrollLeft(val);
+ };
+
+// derived by by Dan Pupius www.pupius.net
+ BezierClass = function(st,ed,spd,p1,p2,p3,p4) {
+ this.st = st;
+ this.ed = ed;
+ this.spd = spd;
+
+ this.p1 = p1||0;
+ this.p2 = p2||1;
+ this.p3 = p3||0;
+ this.p4 = p4||1;
+
+ this.ts = (new Date()).getTime();
+ this.df = this.ed-this.st;
+ };
+ BezierClass.prototype = {
+ B2:function(t){ return 3*t*t*(1-t) },
+ B3:function(t){ return 3*t*(1-t)*(1-t) },
+ B4:function(t){ return (1-t)*(1-t)*(1-t) },
+ getNow:function(){
+ var nw = (new Date()).getTime();
+ var pc = 1-((nw-this.ts)/this.spd);
+ var bz = this.B2(pc) + this.B3(pc) + this.B4(pc);
+ return (pc<0) ? this.ed : this.st+Math.round(this.df*bz);
+ },
+ update:function(ed,spd){
+ this.st = this.getNow();
+ this.ed = ed;
+ this.spd = spd;
+ this.ts = (new Date()).getTime();
+ this.df = this.ed-this.st;
+ return this;
+ }
+ };
+
+ if (this.ishwscroll) {
+ // hw accelerated scroll
+ this.doc.translate = {x:0,y:0,tx:"0px",ty:"0px"};
+
+ //this one can help to enable hw accel on ios6 http://indiegamr.com/ios6-html-hardware-acceleration-changes-and-how-to-fix-them/
+ if (cap.hastranslate3d&&cap.isios) this.doc.css("-webkit-backface-visibility","hidden"); // prevent flickering http://stackoverflow.com/questions/3461441/
+
+ //derived from http://stackoverflow.com/questions/11236090/
+ function getMatrixValues() {
+ var tr = self.doc.css(cap.trstyle);
+ if (tr&&(tr.substr(0,6)=="matrix")) {
+ return tr.replace(/^.*\((.*)\)$/g, "$1").replace(/px/g,'').split(/, +/);
+ }
+ return false;
+ }
+
+ this.getScrollTop = function(last) {
+ if (!last) {
+ var mtx = getMatrixValues();
+ if (mtx) return (mtx.length==16) ? -mtx[13] : -mtx[5]; //matrix3d 16 on IE10
+ if (self.timerscroll&&self.timerscroll.bz) return self.timerscroll.bz.getNow();
+ }
+ return self.doc.translate.y;
+ };
+
+ this.getScrollLeft = function(last) {
+ if (!last) {
+ var mtx = getMatrixValues();
+ if (mtx) return (mtx.length==16) ? -mtx[12] : -mtx[4]; //matrix3d 16 on IE10
+ if (self.timerscroll&&self.timerscroll.bh) return self.timerscroll.bh.getNow();
+ }
+ return self.doc.translate.x;
+ };
+
+ if (document.createEvent) {
+ this.notifyScrollEvent = function(el) {
+ var e = document.createEvent("UIEvents");
+ e.initUIEvent("scroll", false, true, window, 1);
+ el.dispatchEvent(e);
+ };
+ }
+ else if (document.fireEvent) {
+ this.notifyScrollEvent = function(el) {
+ var e = document.createEventObject();
+ el.fireEvent("onscroll");
+ e.cancelBubble = true;
+ };
+ }
+ else {
+ this.notifyScrollEvent = function(el,add) {}; //NOPE
+ }
+
+ if (cap.hastranslate3d&&self.opt.enabletranslate3d) {
+ this.setScrollTop = function(val,silent) {
+ self.doc.translate.y = val;
+ self.doc.translate.ty = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate3d("+self.doc.translate.tx+","+self.doc.translate.ty+",0px)");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ this.setScrollLeft = function(val,silent) {
+ self.doc.translate.x = val;
+ self.doc.translate.tx = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate3d("+self.doc.translate.tx+","+self.doc.translate.ty+",0px)");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ } else {
+ this.setScrollTop = function(val,silent) {
+ self.doc.translate.y = val;
+ self.doc.translate.ty = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate("+self.doc.translate.tx+","+self.doc.translate.ty+")");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ this.setScrollLeft = function(val,silent) {
+ self.doc.translate.x = val;
+ self.doc.translate.tx = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate("+self.doc.translate.tx+","+self.doc.translate.ty+")");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ }
+ } else {
+ // native scroll
+ this.getScrollTop = function() {
+ return self.docscroll.scrollTop();
+ };
+ this.setScrollTop = function(val) {
+ return self.docscroll.scrollTop(val);
+ };
+ this.getScrollLeft = function() {
+ return self.docscroll.scrollLeft();
+ };
+ this.setScrollLeft = function(val) {
+ return self.docscroll.scrollLeft(val);
+ };
+ }
+
+ this.getTarget = function(e) {
+ if (!e) return false;
+ if (e.target) return e.target;
+ if (e.srcElement) return e.srcElement;
+ return false;
+ };
+
+ this.hasParent = function(e,id) {
+ if (!e) return false;
+ var el = e.target||e.srcElement||e||false;
+ while (el && el.id != id) {
+ el = el.parentNode||false;
+ }
+ return (el!==false);
+ };
+
+//inspired by http://forum.jquery.com/topic/width-includes-border-width-when-set-to-thin-medium-thick-in-ie
+ var _convertBorderWidth = {"thin":1,"medium":3,"thick":5};
+ function getWidthToPixel(dom,prop,chkheight) {
+ var wd = dom.css(prop);
+ var px = parseFloat(wd);
+ if (isNaN(px)) {
+ px = _convertBorderWidth[wd]||0;
+ var brd = (px==3) ? ((chkheight)?(self.win.outerHeight() - self.win.innerHeight()):(self.win.outerWidth() - self.win.innerWidth())) : 1; //DON'T TRUST CSS
+ if (self.isie8&&px) px+=1;
+ return (brd) ? px : 0;
+ }
+ return px;
+ };
+
+ this.getOffset = function() {
+ if (self.isfixed) return {top:parseFloat(self.win.css('top')),left:parseFloat(self.win.css('left'))};
+ if (!self.viewport) return self.win.offset();
+ var ww = self.win.offset();
+ var vp = self.viewport.offset();
+ return {top:ww.top-vp.top+self.viewport.scrollTop(),left:ww.left-vp.left+self.viewport.scrollLeft()};
+ };
+
+ this.updateScrollBar = function(len) {
+ if (self.ishwscroll) {
+ self.rail.css({height:self.win.innerHeight()});
+ if (self.railh) self.railh.css({width:self.win.innerWidth()});
+ } else {
+ var wpos = self.getOffset();
+ var pos = {top:wpos.top,left:wpos.left};
+ pos.top+= getWidthToPixel(self.win,'border-top-width',true);
+ var brd = (self.win.outerWidth() - self.win.innerWidth())/2;
+ pos.left+= (self.rail.align) ? self.win.outerWidth() - getWidthToPixel(self.win,'border-right-width') - self.rail.width : getWidthToPixel(self.win,'border-left-width');
+
+ var off = self.opt.railoffset;
+ if (off) {
+ if (off.top) pos.top+=off.top;
+ if (self.rail.align&&off.left) pos.left+=off.left;
+ }
+
+ if (!self.locked) self.rail.css({top:pos.top,left:pos.left,height:(len)?len.h:self.win.innerHeight()});
+
+ if (self.zoom) {
+ self.zoom.css({top:pos.top+1,left:(self.rail.align==1) ? pos.left-20 : pos.left+self.rail.width+4});
+ }
+
+ if (self.railh&&!self.locked) {
+ var pos = {top:wpos.top,left:wpos.left};
+ var y = (self.railh.align) ? pos.top + getWidthToPixel(self.win,'border-top-width',true) + self.win.innerHeight() - self.railh.height : pos.top + getWidthToPixel(self.win,'border-top-width',true);
+ var x = pos.left + getWidthToPixel(self.win,'border-left-width');
+ self.railh.css({top:y,left:x,width:self.railh.width});
+ }
+
+
+ }
+ };
+
+ this.doRailClick = function(e,dbl,hr) {
+
+ var fn,pg,cur,pos;
+
+ if (self.rail.drag&&self.rail.drag.pt!=1) return;
+ if (self.locked) return;
+ if (self.rail.drag) return;
+
+ self.cancelScroll();
+
+ self.cancelEvent(e);
+
+ if (dbl) {
+ fn = (hr) ? self.doScrollLeft : self.doScrollTop;
+ cur = (hr) ? ((e.pageX - self.railh.offset().left - (self.cursorwidth/2)) * self.scrollratio.x) : ((e.pageY - self.rail.offset().top - (self.cursorheight/2)) * self.scrollratio.y);
+ fn(cur);
+ } else {
+ fn = (hr) ? self.doScrollLeftBy : self.doScrollBy;
+ cur = (hr) ? self.scroll.x : self.scroll.y;
+ pos = (hr) ? e.pageX - self.railh.offset().left : e.pageY - self.rail.offset().top;
+ pg = (hr) ? self.view.w : self.view.h;
+ (cur>=pos) ? fn(pg) : fn(-pg);
+ }
+
+ }
+
+ self.hasanimationframe = (setAnimationFrame);
+ self.hascancelanimationframe = (clearAnimationFrame);
+
+ if (!self.hasanimationframe) {
+ setAnimationFrame=function(fn){return setTimeout(fn,16)}; // 1000/60)};
+ clearAnimationFrame=clearInterval;
+ }
+ else if (!self.hascancelanimationframe) clearAnimationFrame=function(){self.cancelAnimationFrame=true};
+
+ this.init = function() {
+
+ self.saved.css = [];
+
+ if (cap.isie7mobile) return true; // SORRY, DO NOT WORK!
+
+ if (cap.hasmstouch) self.css((self.ispage)?$("html"):self.win,{'-ms-touch-action':'none'});
+
+/*
+ self.ispage = true;
+ self.haswrapper = true;
+// self.win = $(window);
+ self.docscroll = $("body");
+// self.doc = $("body");
+*/
+
+ if (!self.ispage || (!cap.cantouch && !cap.isieold && !cap.isie9mobile)) {
+
+ var cont = self.docscroll;
+ if (self.ispage) cont = (self.haswrapper)?self.win:self.doc;
+
+ if (!cap.isie9mobile) self.css(cont,{'overflow-y':'hidden'});
+
+ if (self.ispage&&cap.isie7) {
+ if (self.doc[0].nodeName=='BODY') self.css($("html"),{'overflow-y':'hidden'}); //IE7 double scrollbar issue
+ else if (self.doc[0].nodeName=='HTML') self.css($("body"),{'overflow-y':'hidden'}); //IE7 double scrollbar issue
+ }
+
+ if (cap.isios&&!self.ispage&&!self.haswrapper) self.css($("body"),{"-webkit-overflow-scrolling":"touch"}); //force hw acceleration
+
+ var cursor = $(document.createElement('div'));
+ cursor.css({
+ position:"relative",top:0,"float":"right",width:self.opt.cursorwidth,height:"0px",
+ 'background-color':self.opt.cursorcolor,
+ border:self.opt.cursorborder,
+ 'background-clip':'padding-box',
+ '-webkit-border-radius':self.opt.cursorborderradius,
+ '-moz-border-radius':self.opt.cursorborderradius,
+ 'border-radius':self.opt.cursorborderradius
+ });
+
+ cursor.hborder = parseFloat(cursor.outerHeight() - cursor.innerHeight());
+ self.cursor = cursor;
+
+ var rail = $(document.createElement('div'));
+ rail.attr('id',self.id);
+
+ var v,a,kp = ["left","right"]; //"top","bottom"
+ for(var n in kp) {
+ a=kp[n];
+ v = self.opt.railpadding[a];
+ (v) ? rail.css("padding-"+a,v+"px") : self.opt.railpadding[a] = 0;
+ }
+
+ rail.append(cursor);
+
+ rail.width = Math.max(parseFloat(self.opt.cursorwidth),cursor.outerWidth()) + self.opt.railpadding['left'] + self.opt.railpadding['right'];
+ rail.css({width:rail.width+"px",'zIndex':(self.ispage)?self.opt.zindex:self.opt.zindex+2,"background":self.opt.background});
+
+ rail.visibility = true;
+ rail.scrollable = true;
+
+ rail.align = (self.opt.railalign=="left") ? 0 : 1;
+
+ self.rail = rail;
+
+ self.rail.drag = false;
+
+ var zoom = false;
+ if (self.opt.boxzoom&&!self.ispage&&!cap.isieold) {
+ zoom = document.createElement('div');
+ self.bind(zoom,"click",self.doZoom);
+ self.zoom = $(zoom);
+ self.zoom.css({"cursor":"pointer",'z-index':self.opt.zindex,'backgroundImage':'url('+scriptpath+'zoomico.png)','height':18,'width':18,'backgroundPosition':'0px 0px'});
+ if (self.opt.dblclickzoom) self.bind(self.win,"dblclick",self.doZoom);
+ if (cap.cantouch&&self.opt.gesturezoom) {
+ self.ongesturezoom = function(e) {
+ if (e.scale>1.5) self.doZoomIn(e);
+ if (e.scale<0.8) self.doZoomOut(e);
+ return self.cancelEvent(e);
+ };
+ self.bind(self.win,"gestureend",self.ongesturezoom);
+ }
+ }
+
+// init HORIZ
+
+ self.railh = false;
+
+ if (self.opt.horizrailenabled) {
+
+ self.css(cont,{'overflow-x':'hidden'});
+
+ var cursor = $(document.createElement('div'));
+ cursor.css({
+ position:"relative",top:0,height:self.opt.cursorwidth,width:"0px",
+ 'background-color':self.opt.cursorcolor,
+ border:self.opt.cursorborder,
+ 'background-clip':'padding-box',
+ '-webkit-border-radius':self.opt.cursorborderradius,
+ '-moz-border-radius':self.opt.cursorborderradius,
+ 'border-radius':self.opt.cursorborderradius
+ });
+
+ cursor.wborder = parseFloat(cursor.outerWidth() - cursor.innerWidth());
+ self.cursorh = cursor;
+
+ var railh = $(document.createElement('div'));
+ railh.attr('id',self.id+'-hr');
+ railh.height = 1+Math.max(parseFloat(self.opt.cursorwidth),cursor.outerHeight());
+ railh.css({height:railh.height+"px",'zIndex':(self.ispage)?self.opt.zindex:self.opt.zindex+2,"background":self.opt.background});
+
+ railh.append(cursor);
+
+ railh.visibility = true;
+ railh.scrollable = true;
+
+ railh.align = (self.opt.railvalign=="top") ? 0 : 1;
+
+ self.railh = railh;
+
+ self.railh.drag = false;
+
+ }
+
+//
+
+ if (self.ispage) {
+ rail.css({position:"fixed",top:"0px",height:"100%"});
+ (rail.align) ? rail.css({right:"0px"}) : rail.css({left:"0px"});
+ self.body.append(rail);
+ if (self.railh) {
+ railh.css({position:"fixed",left:"0px",width:"100%"});
+ (railh.align) ? railh.css({bottom:"0px"}) : railh.css({top:"0px"});
+ self.body.append(railh);
+ }
+ } else {
+ if (self.ishwscroll) {
+ if (self.win.css('position')=='static') self.css(self.win,{'position':'relative'});
+ var bd = (self.win[0].nodeName == 'HTML') ? self.body : self.win;
+ if (self.zoom) {
+ self.zoom.css({position:"absolute",top:1,right:0,"margin-right":rail.width+4});
+ bd.append(self.zoom);
+ }
+ rail.css({position:"absolute",top:0});
+ (rail.align) ? rail.css({right:0}) : rail.css({left:0});
+ bd.append(rail);
+ if (railh) {
+ railh.css({position:"absolute",left:0,bottom:0});
+ (railh.align) ? railh.css({bottom:0}) : railh.css({top:0});
+ bd.append(railh);
+ }
+ } else {
+ self.isfixed = (self.win.css("position")=="fixed");
+ var rlpos = (self.isfixed) ? "fixed" : "absolute";
+
+ if (!self.isfixed) self.viewport = self.getViewport(self.win[0]);
+ if (self.viewport) self.body = self.viewport;
+
+ rail.css({position:rlpos});
+ if (self.zoom) self.zoom.css({position:rlpos});
+ self.updateScrollBar();
+ self.body.append(rail);
+ if (self.zoom) self.body.append(self.zoom);
+ if (self.railh) {
+ railh.css({position:rlpos});
+ self.body.append(railh);
+ }
+ }
+
+ if (cap.isios) self.css(self.win,{'-webkit-tap-highlight-color':'rgba(0,0,0,0)','-webkit-touch-callout':'none'}); // prevent grey layer on click
+
+ if (cap.isie&&self.opt.disableoutline) self.win.attr("hideFocus","true"); // IE, prevent dotted rectangle on focused div
+ if (cap.iswebkit&&self.opt.disableoutline) self.win.css({"outline":"none"});
+
+ }
+
+ if (self.opt.autohidemode===false) {
+ self.autohidedom = false;
+ self.rail.css({opacity:self.opt.cursoropacitymax});
+ if (self.railh) self.railh.css({opacity:self.opt.cursoropacitymax});
+ }
+ else if (self.opt.autohidemode===true) {
+ self.autohidedom = $().add(self.rail);
+ if (self.railh) self.autohidedom=self.autohidedom.add(self.railh);
+ }
+ else if (self.opt.autohidemode=="scroll") {
+ self.autohidedom = $().add(self.rail);
+ if (self.railh) self.autohidedom=self.autohidedom.add(self.railh);
+ }
+ else if (self.opt.autohidemode=="cursor") {
+ self.autohidedom = $().add(self.cursor);
+ if (self.railh) self.autohidedom=self.autohidedom.add(self.railh.cursor);
+ }
+ else if (self.opt.autohidemode=="hidden") {
+ self.autohidedom = false;
+ self.hide();
+ self.locked = false;
+ }
+
+ if (cap.isie9mobile) {
+
+ self.scrollmom = new ScrollMomentumClass2D(self);
+
+ /*
+ var trace = function(msg) {
+ var db = $("#debug");
+ if (isNaN(msg)&&(typeof msg != "string")) {
+ var x = [];
+ for(var a in msg) {
+ x.push(a+":"+msg[a]);
+ }
+ msg ="{"+x.join(",")+"}";
+ }
+ if (db.children().length>0) {
+ db.children().eq(0).before(""+msg+"
");
+ } else {
+ db.append(""+msg+"
");
+ }
+ }
+ window.onerror = function(msg,url,ln) {
+ trace("ERR: "+msg+" at "+ln);
+ }
+*/
+
+ self.onmangotouch = function(e) {
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+
+ if ((py == self.scrollmom.lastscrolly)&&(px == self.scrollmom.lastscrollx)) return true;
+// $("#debug").html('DRAG:'+py);
+
+ var dfy = py-self.mangotouch.sy;
+ var dfx = px-self.mangotouch.sx;
+ var df = Math.round(Math.sqrt(Math.pow(dfx,2)+Math.pow(dfy,2)));
+ if (df==0) return;
+
+ var dry = (dfy<0)?-1:1;
+ var drx = (dfx<0)?-1:1;
+
+ var tm = +new Date();
+ if (self.mangotouch.lazy) clearTimeout(self.mangotouch.lazy);
+
+ if (((tm-self.mangotouch.tm)>80)||(self.mangotouch.dry!=dry)||(self.mangotouch.drx!=drx)) {
+// trace('RESET+'+(tm-self.mangotouch.tm));
+ self.scrollmom.stop();
+ self.scrollmom.reset(px,py);
+ self.mangotouch.sy = py;
+ self.mangotouch.ly = py;
+ self.mangotouch.sx = px;
+ self.mangotouch.lx = px;
+ self.mangotouch.dry = dry;
+ self.mangotouch.drx = drx;
+ self.mangotouch.tm = tm;
+ } else {
+
+ self.scrollmom.stop();
+ self.scrollmom.update(self.mangotouch.sx-dfx,self.mangotouch.sy-dfy);
+ var gap = tm - self.mangotouch.tm;
+ self.mangotouch.tm = tm;
+
+// trace('MOVE:'+df+" - "+gap);
+
+ var ds = Math.max(Math.abs(self.mangotouch.ly-py),Math.abs(self.mangotouch.lx-px));
+ self.mangotouch.ly = py;
+ self.mangotouch.lx = px;
+
+ if (ds>2) {
+ self.mangotouch.lazy = setTimeout(function(){
+// trace('END:'+ds+'+'+gap);
+ self.mangotouch.lazy = false;
+ self.mangotouch.dry = 0;
+ self.mangotouch.drx = 0;
+ self.mangotouch.tm = 0;
+ self.scrollmom.doMomentum(30);
+ },100);
+ }
+ }
+ }
+
+ var top = self.getScrollTop();
+ var lef = self.getScrollLeft();
+ self.mangotouch = {sy:top,ly:top,dry:0,sx:lef,lx:lef,drx:0,lazy:false,tm:0};
+
+ self.bind(self.docscroll,"scroll",self.onmangotouch);
+
+ } else {
+
+ if (cap.cantouch||self.istouchcapable||self.opt.touchbehavior||cap.hasmstouch) {
+
+ self.scrollmom = new ScrollMomentumClass2D(self);
+
+ self.ontouchstart = function(e) {
+ if (e.pointerType&&e.pointerType!=2) return false;
+
+ if (!self.locked) {
+
+ if (cap.hasmstouch) {
+ var tg = (e.target) ? e.target : false;
+ while (tg) {
+ var nc = $(tg).getNiceScroll();
+ if ((nc.length>0)&&(nc[0].me == self.me)) break;
+ if (nc.length>0) return false;
+ if ((tg.nodeName=='DIV')&&(tg.id==self.id)) break;
+ tg = (tg.parentNode) ? tg.parentNode : false;
+ }
+ }
+
+ self.cancelScroll();
+
+ var tg = self.getTarget(e);
+
+ if (tg) {
+ var skp = (/INPUT/i.test(tg.nodeName))&&(/range/i.test(tg.type));
+ if (skp) return self.stopPropagation(e);
+ }
+
+ if (!("clientX" in e) && ("changedTouches" in e)) {
+ e.clientX = e.changedTouches[0].clientX;
+ e.clientY = e.changedTouches[0].clientY;
+ }
+
+ if (self.forcescreen) {
+ var le = e;
+ var e = {"original":(e.original)?e.original:e};
+ e.clientX = le.screenX;
+ e.clientY = le.screenY;
+ }
+
+ self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,st:self.getScrollTop(),sl:self.getScrollLeft(),pt:2};
+
+ if (self.opt.touchbehavior&&self.isiframe&&cap.isie) {
+ var wp = self.win.position();
+ self.rail.drag.x+=wp.left;
+ self.rail.drag.y+=wp.top;
+ }
+
+ self.hasmoving = false;
+ self.lastmouseup = false;
+ self.scrollmom.reset(e.clientX,e.clientY);
+ if (!cap.cantouch&&!this.istouchcapable&&!cap.hasmstouch) {
+
+ var ip = (tg)?/INPUT|SELECT|TEXTAREA/i.test(tg.nodeName):false;
+ if (!ip) {
+ if (!self.ispage&&cap.hasmousecapture) tg.setCapture();
+ return self.cancelEvent(e);
+ }
+ if (/SUBMIT|CANCEL|BUTTON/i.test($(tg).attr('type'))) {
+ pc = {"tg":tg,"click":false};
+ self.preventclick = pc;
+ }
+
+ }
+ }
+
+ };
+
+ self.ontouchend = function(e) {
+ if (e.pointerType&&e.pointerType!=2) return false;
+ if (self.rail.drag&&(self.rail.drag.pt==2)) {
+ self.scrollmom.doMomentum();
+ self.rail.drag = false;
+ if (self.hasmoving) {
+ self.hasmoving = false;
+ self.lastmouseup = true;
+ self.hideCursor();
+ if (cap.hasmousecapture) document.releaseCapture();
+ if (!cap.cantouch) return self.cancelEvent(e);
+ }
+ }
+
+ };
+
+ var moveneedoffset = (self.opt.touchbehavior&&self.isiframe&&!cap.hasmousecapture);
+
+ self.ontouchmove = function(e,byiframe) {
+
+ if (e.pointerType&&e.pointerType!=2) return false;
+
+ if (self.rail.drag&&(self.rail.drag.pt==2)) {
+ if (cap.cantouch&&(typeof e.original == "undefined")) return true; // prevent ios "ghost" events by clickable elements
+
+ self.hasmoving = true;
+
+ if (self.preventclick&&!self.preventclick.click) {
+ self.preventclick.click = self.preventclick.tg.onclick||false;
+ self.preventclick.tg.onclick = self.onpreventclick;
+ }
+
+ var ev = $.extend({"original":e},e);
+ e = ev;
+
+ if (("changedTouches" in e)) {
+ e.clientX = e.changedTouches[0].clientX;
+ e.clientY = e.changedTouches[0].clientY;
+ }
+
+ if (self.forcescreen) {
+ var le = e;
+ var e = {"original":(e.original)?e.original:e};
+ e.clientX = le.screenX;
+ e.clientY = le.screenY;
+ }
+
+ var ofx = ofy = 0;
+
+ if (moveneedoffset&&!byiframe) {
+ var wp = self.win.position();
+ ofx=-wp.left;
+ ofy=-wp.top;
+ }
+
+ var fy = e.clientY + ofy;
+ var my = (fy-self.rail.drag.y);
+
+ var ny = self.rail.drag.st-my;
+
+ if (self.ishwscroll&&self.opt.bouncescroll) {
+ if (ny<0) {
+ ny = Math.round(ny/2);
+// fy = 0;
+ }
+ else if (ny>self.page.maxh) {
+ ny = self.page.maxh+Math.round((ny-self.page.maxh)/2);
+// fy = 0;
+ }
+ } else {
+ if (ny<0) {ny=0;fy=0}
+ if (ny>self.page.maxh) {ny=self.page.maxh;fy=0}
+ }
+
+ var fx = e.clientX + ofx;
+
+ if (self.railh&&self.railh.scrollable) {
+
+ var mx = (fx-self.rail.drag.x);
+
+ var nx = self.rail.drag.sl-mx;
+
+ if (self.ishwscroll&&self.opt.bouncescroll) {
+ if (nx<0) {
+ nx = Math.round(nx/2);
+// fx = 0;
+ }
+ else if (nx>self.page.maxw) {
+ nx = self.page.maxw+Math.round((nx-self.page.maxw)/2);
+// fx = 0;
+ }
+ } else {
+ if (nx<0) {nx=0;fx=0}
+ if (nx>self.page.maxw) {nx=self.page.maxw;fx=0}
+ }
+
+ }
+
+ self.synched("touchmove",function(){
+ if (self.rail.drag&&(self.rail.drag.pt==2)) {
+ if (self.prepareTransition) self.prepareTransition(0);
+ if (self.rail.scrollable) self.setScrollTop(ny);
+ self.scrollmom.update(fx,fy);
+ if (self.railh&&self.railh.scrollable) {
+ self.setScrollLeft(nx);
+ self.showCursor(ny,nx);
+ } else {
+ self.showCursor(ny);
+ }
+ if (cap.isie10) document.selection.clear();
+ }
+ });
+
+ if (!cap.ischrome&&!self.istouchcapable) return self.cancelEvent(e); //chrome touch emulation doesn't like!
+ }
+
+ };
+
+ }
+
+ if (cap.cantouch||self.opt.touchbehavior) {
+
+ self.onpreventclick = function(e) {
+ if (self.preventclick) {
+ self.preventclick.tg.onclick = self.preventclick.click;
+ self.preventclick = false;
+ return self.cancelEvent(e);
+ }
+ }
+
+ self.onmousedown = self.ontouchstart;
+
+ self.onmouseup = self.ontouchend;
+
+ self.onclick = (cap.isios) ? false : function(e) {
+ if (self.lastmouseup) {
+ self.lastmouseup = false;
+ return self.cancelEvent(e);
+ } else {
+ return true;
+ }
+ };
+
+ self.onmousemove = self.ontouchmove;
+
+ if (cap.cursorgrabvalue) {
+ self.css((self.ispage)?self.doc:self.win,{'cursor':cap.cursorgrabvalue});
+ self.css(self.rail,{'cursor':cap.cursorgrabvalue});
+ }
+
+ } else {
+
+ self.onmousedown = function(e,hronly) {
+ if (self.rail.drag&&self.rail.drag.pt!=1) return;
+ if (self.locked) return self.cancelEvent(e);
+ self.cancelScroll();
+ self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,pt:1,hr:(!!hronly)};
+ var tg = self.getTarget(e);
+ if (!self.ispage&&cap.hasmousecapture) tg.setCapture();
+ if (self.isiframe&&!cap.hasmousecapture) {
+ self.saved["csspointerevents"] = self.doc.css("pointer-events");
+ self.css(self.doc,{"pointer-events":"none"});
+ }
+ return self.cancelEvent(e);
+ };
+ self.onmouseup = function(e) {
+ if (self.rail.drag) {
+ if (cap.hasmousecapture) document.releaseCapture();
+ if (self.isiframe&&!cap.hasmousecapture) self.doc.css("pointer-events",self.saved["csspointerevents"]);
+ if(self.rail.drag.pt!=1)return;
+ self.rail.drag = false;
+ //if (!self.rail.active) self.hideCursor();
+ return self.cancelEvent(e);
+ }
+ };
+ self.onmousemove = function(e) {
+
+ if (self.rail.drag) {
+ if(self.rail.drag.pt!=1)return;
+
+ if (cap.ischrome&&e.which==0) return self.onmouseup(e);
+
+ self.cursorfreezed = true;
+
+ if (self.rail.drag.hr) {
+ self.scroll.x = self.rail.drag.sx + (e.clientX-self.rail.drag.x);
+ if (self.scroll.x<0) self.scroll.x=0;
+ var mw = self.scrollvaluemaxw;
+ if (self.scroll.x>mw) self.scroll.x=mw;
+ } else {
+ self.scroll.y = self.rail.drag.sy + (e.clientY-self.rail.drag.y);
+ if (self.scroll.y<0) self.scroll.y=0;
+ var my = self.scrollvaluemax;
+ if (self.scroll.y>my) self.scroll.y=my;
+ }
+
+ self.synched('mousemove',function(){
+ if (self.rail.drag&&(self.rail.drag.pt==1)) {
+ self.showCursor();
+ if (self.rail.drag.hr) self.doScrollLeft(Math.round(self.scroll.x*self.scrollratio.x));
+ else self.doScrollTop(Math.round(self.scroll.y*self.scrollratio.y));
+ }
+ });
+ return self.cancelEvent(e);
+ } else {
+ self.checkarea = true;
+ }
+
+ };
+ }
+
+ if (cap.cantouch||self.opt.touchbehavior) {
+ self.bind(self.win,"mousedown",self.onmousedown);
+ }
+
+ if (cap.hasmstouch) {
+ self.css(self.rail,{'-ms-touch-action':'none'});
+ self.css(self.cursor,{'-ms-touch-action':'none'});
+
+ self.bind(self.win,"MSPointerDown",self.ontouchstart);
+ self.bind(document,"MSPointerUp",self.ontouchend);
+ self.bind(document,"MSPointerMove",self.ontouchmove);
+ self.bind(self.cursor,"MSGestureHold",function(e){e.preventDefault();});
+ self.bind(self.cursor,"contextmenu",function(e){e.preventDefault();});
+ }
+
+ if (this.istouchcapable) { //device with screen touch enabled
+ self.bind(self.win,"touchstart",self.ontouchstart);
+ self.bind(document,"touchend",self.ontouchend);
+ self.bind(document,"touchcancel",self.ontouchend);
+ self.bind(document,"touchmove",self.ontouchmove);
+ }
+
+ self.bind(self.cursor,"mousedown",self.onmousedown);
+ self.bind(self.cursor,"mouseup",self.onmouseup);
+
+ if (self.railh) {
+ self.bind(self.cursorh,"mousedown",function(e){self.onmousedown(e,true)});
+ self.bind(self.cursorh,"mouseup",function(e){
+ if (self.rail.drag&&self.rail.drag.pt==2) return;
+ self.rail.drag = false;
+ self.hasmoving = false;
+ self.hideCursor();
+ if (cap.hasmousecapture) document.releaseCapture();
+ return self.cancelEvent(e);
+ });
+ }
+
+ self.bind(document,"mouseup",self.onmouseup);
+ if (cap.hasmousecapture) self.bind(self.win,"mouseup",self.onmouseup);
+
+ self.bind(document,"mousemove",self.onmousemove);
+ if (self.onclick) self.bind(document,"click",self.onclick);
+
+ if (!cap.cantouch&&!self.opt.touchbehavior) {
+
+ self.jqbind(self.rail,"mouseenter",function() {
+ if (self.canshowonmouseevent) self.showCursor();
+ self.rail.active = true;
+ });
+ self.jqbind(self.rail,"mouseleave",function() {
+ self.rail.active = false;
+ if (!self.rail.drag) self.hideCursor();
+ });
+
+ if (self.opt.sensitiverail) {
+ self.bind(self.rail,"click",function(e){self.doRailClick(e,false,false)});
+ self.bind(self.rail,"dblclick",function(e){self.doRailClick(e,true,false)});
+ self.bind(self.cursor,"click",function(e){self.cancelEvent(e)});
+ self.bind(self.cursor,"dblclick",function(e){self.cancelEvent(e)});
+ }
+
+ if (self.railh) {
+ self.jqbind(self.railh,"mouseenter",function() {
+ if (self.canshowonmouseevent) self.showCursor();
+ self.rail.active = true;
+ });
+ self.jqbind(self.railh,"mouseleave",function() {
+ self.rail.active = false;
+ if (!self.rail.drag) self.hideCursor();
+ });
+
+ if (self.opt.sensitiverail) {
+ self.bind(self.railh, "click", function(e){self.doRailClick(e,false,true)});
+ self.bind(self.railh, "dblclick", function(e){self.doRailClick(e, true, true) });
+ self.bind(self.cursorh, "click", function (e) { self.cancelEvent(e) });
+ self.bind(self.cursorh, "dblclick", function (e) { self.cancelEvent(e) });
+ }
+
+ }
+
+ if (self.zoom) {
+ self.jqbind(self.zoom,"mouseenter",function() {
+ if (self.canshowonmouseevent) self.showCursor();
+ self.rail.active = true;
+ });
+ self.jqbind(self.zoom,"mouseleave",function() {
+ self.rail.active = false;
+ if (!self.rail.drag) self.hideCursor();
+ });
+ }
+
+ }
+
+ if (self.opt.enablemousewheel) {
+ if (!self.isiframe) self.bind((cap.isie&&self.ispage) ? document : self.docscroll,"mousewheel",self.onmousewheel);
+ self.bind(self.rail,"mousewheel",self.onmousewheel);
+ if (self.railh) self.bind(self.railh,"mousewheel",self.onmousewheelhr);
+ }
+
+ if (!self.ispage&&!cap.cantouch&&!(/HTML|BODY/.test(self.win[0].nodeName))) {
+ if (!self.win.attr("tabindex")) self.win.attr({"tabindex":tabindexcounter++});
+
+ self.jqbind(self.win,"focus",function(e) {
+ domfocus = (self.getTarget(e)).id||true;
+ self.hasfocus = true;
+ if (self.canshowonmouseevent) self.noticeCursor();
+ });
+ self.jqbind(self.win,"blur",function(e) {
+ domfocus = false;
+ self.hasfocus = false;
+ });
+
+ self.jqbind(self.win,"mouseenter",function(e) {
+ mousefocus = (self.getTarget(e)).id||true;
+ self.hasmousefocus = true;
+ if (self.canshowonmouseevent) self.noticeCursor();
+ });
+ self.jqbind(self.win,"mouseleave",function() {
+ mousefocus = false;
+ self.hasmousefocus = false;
+ });
+
+ };
+
+ } // !ie9mobile
+
+ //Thanks to http://www.quirksmode.org !!
+ self.onkeypress = function(e) {
+ if (self.locked&&self.page.maxh==0) return true;
+
+ e = (e) ? e : window.e;
+ var tg = self.getTarget(e);
+ if (tg&&/INPUT|TEXTAREA|SELECT|OPTION/.test(tg.nodeName)) {
+ var tp = tg.getAttribute('type')||tg.type||false;
+ if ((!tp)||!(/submit|button|cancel/i.tp)) return true;
+ }
+
+ if (self.hasfocus||(self.hasmousefocus&&!domfocus)||(self.ispage&&!domfocus&&!mousefocus)) {
+ var key = e.keyCode;
+
+ if (self.locked&&key!=27) return self.cancelEvent(e);
+
+ var ctrl = e.ctrlKey||false;
+ var shift = e.shiftKey || false;
+
+ var ret = false;
+ switch (key) {
+ case 38:
+ case 63233: //safari
+ self.doScrollBy(24*3);
+ ret = true;
+ break;
+ case 40:
+ case 63235: //safari
+ self.doScrollBy(-24*3);
+ ret = true;
+ break;
+ case 37:
+ case 63232: //safari
+ if (self.railh) {
+ (ctrl) ? self.doScrollLeft(0) : self.doScrollLeftBy(24*3);
+ ret = true;
+ }
+ break;
+ case 39:
+ case 63234: //safari
+ if (self.railh) {
+ (ctrl) ? self.doScrollLeft(self.page.maxw) : self.doScrollLeftBy(-24*3);
+ ret = true;
+ }
+ break;
+ case 33:
+ case 63276: // safari
+ self.doScrollBy(self.view.h);
+ ret = true;
+ break;
+ case 34:
+ case 63277: // safari
+ self.doScrollBy(-self.view.h);
+ ret = true;
+ break;
+ case 36:
+ case 63273: // safari
+ (self.railh&&ctrl) ? self.doScrollPos(0,0) : self.doScrollTo(0);
+ ret = true;
+ break;
+ case 35:
+ case 63275: // safari
+ (self.railh&&ctrl) ? self.doScrollPos(self.page.maxw,self.page.maxh) : self.doScrollTo(self.page.maxh);
+ ret = true;
+ break;
+ case 32:
+ if (self.opt.spacebarenabled) {
+ (shift) ? self.doScrollBy(self.view.h) : self.doScrollBy(-self.view.h);
+ ret = true;
+ }
+ break;
+ case 27: // ESC
+ if (self.zoomactive) {
+ self.doZoom();
+ ret = true;
+ }
+ break;
+ }
+ if (ret) return self.cancelEvent(e);
+ }
+ };
+
+ if (self.opt.enablekeyboard) self.bind(document,(cap.isopera&&!cap.isopera12)?"keypress":"keydown",self.onkeypress);
+
+ self.bind(window,'resize',self.resize);
+ self.bind(window,'orientationchange',self.resize);
+
+ self.bind(window,"load",self.resize);
+
+ if (cap.ischrome&&!self.ispage&&!self.haswrapper) { //chrome void scrollbar bug
+ var tmp=self.win.attr("style");
+ var ww = parseFloat(self.win.css("width"))+1;
+ self.win.css('width',ww);
+ self.synched("chromefix",function(){self.win.attr("style",tmp)});
+ }
+
+// Trying a cross-browser implementation - good luck!
+
+ self.onAttributeChange = function(e) {
+ self.lazyResize();
+ }
+
+ if (!self.ispage&&!self.haswrapper) {
+ // thanks to Filip http://stackoverflow.com/questions/1882224/
+ if ("WebKitMutationObserver" in window) {
+ self.observer = new WebKitMutationObserver(function(mutations) {
+ mutations.forEach(self.onAttributeChange);
+ });
+ self.observer.observe(self.win[0],{attributes:true,subtree:false});
+ } else {
+ self.bind(self.win,(cap.isie&&!cap.isie9)?"propertychange":"DOMAttrModified",self.onAttributeChange);
+ if (cap.isie9) self.win[0].attachEvent("onpropertychange",self.onAttributeChange); //IE9 DOMAttrModified bug
+ }
+ }
+
+//
+
+ if (!self.ispage&&self.opt.boxzoom) self.bind(window,"resize",self.resizeZoom);
+ if (self.istextarea) self.bind(self.win,"mouseup",self.resize);
+
+ self.resize();
+
+ }
+
+ if (this.doc[0].nodeName == 'IFRAME') {
+ function oniframeload(e) {
+ self.iframexd = false;
+ try {
+ var doc = 'contentDocument' in this ? this.contentDocument : this.contentWindow.document;
+ var a = doc.domain;
+ } catch(e){self.iframexd = true;doc=false};
+
+ if (self.iframexd) {
+ if ("console" in window) console.log('NiceScroll error: policy restriced iframe');
+ return true; //cross-domain - I can't manage this
+ }
+
+ self.forcescreen = true;
+
+ if (self.isiframe) {
+ self.iframe = {
+ "doc":$(doc),
+ "html":self.doc.contents().find('html')[0],
+ "body":self.doc.contents().find('body')[0]
+ };
+ self.getContentSize = function(){
+ return {
+ w:Math.max(self.iframe.html.scrollWidth,self.iframe.body.scrollWidth),
+ h:Math.max(self.iframe.html.scrollHeight,self.iframe.body.scrollHeight)
+ }
+ }
+ self.docscroll = $(self.iframe.body);//$(this.contentWindow);
+ }
+
+ if (!cap.isios&&self.opt.iframeautoresize&&!self.isiframe) {
+ self.win.scrollTop(0); // reset position
+ self.doc.height(""); //reset height to fix browser bug
+ var hh=Math.max(doc.getElementsByTagName('html')[0].scrollHeight,doc.body.scrollHeight);
+ self.doc.height(hh);
+ }
+ self.resize();
+
+ if (cap.isie7) self.css($(self.iframe.html),{'overflow-y':'hidden'});
+ //self.css($(doc.body),{'overflow-y':'hidden'});
+ self.css($(self.iframe.body),{'overflow-y':'hidden'});
+
+ if ('contentWindow' in this) {
+ self.bind(this.contentWindow,"scroll",self.onscroll); //IE8 & minor
+ } else {
+ self.bind(doc,"scroll",self.onscroll);
+ }
+
+ if (self.opt.enablemousewheel) {
+ self.bind(doc,"mousewheel",self.onmousewheel);
+ }
+
+ if (self.opt.enablekeyboard) self.bind(doc,(cap.isopera)?"keypress":"keydown",self.onkeypress);
+
+ if (cap.cantouch||self.opt.touchbehavior) {
+ self.bind(doc,"mousedown",self.onmousedown);
+ self.bind(doc,"mousemove",function(e){self.onmousemove(e,true)});
+ if (cap.cursorgrabvalue) self.css($(doc.body),{'cursor':cap.cursorgrabvalue});
+ }
+
+ self.bind(doc,"mouseup",self.onmouseup);
+
+ if (self.zoom) {
+ if (self.opt.dblclickzoom) self.bind(doc,'dblclick',self.doZoom);
+ if (self.ongesturezoom) self.bind(doc,"gestureend",self.ongesturezoom);
+ }
+ };
+
+ if (this.doc[0].readyState&&this.doc[0].readyState=="complete"){
+ setTimeout(function(){oniframeload.call(self.doc[0],false)},500);
+ }
+ self.bind(this.doc,"load",oniframeload);
+
+ }
+
+ };
+
+ this.showCursor = function(py,px) {
+ if (self.cursortimeout) {
+ clearTimeout(self.cursortimeout);
+ self.cursortimeout = 0;
+ }
+ if (!self.rail) return;
+ if (self.autohidedom) {
+ self.autohidedom.stop().css({opacity:self.opt.cursoropacitymax});
+ self.cursoractive = true;
+ }
+
+ if ((typeof py != "undefined")&&(py!==false)) {
+ self.scroll.y = Math.round(py * 1/self.scrollratio.y);
+ }
+ if (typeof px != "undefined") {
+ self.scroll.x = Math.round(px * 1/self.scrollratio.x);
+ }
+
+ self.cursor.css({height:self.cursorheight,top:self.scroll.y});
+ if (self.cursorh) {
+ (!self.rail.align&&self.rail.visibility) ? self.cursorh.css({width:self.cursorwidth,left:self.scroll.x+self.rail.width}) : self.cursorh.css({width:self.cursorwidth,left:self.scroll.x});
+ self.cursoractive = true;
+ }
+
+ if (self.zoom) self.zoom.stop().css({opacity:self.opt.cursoropacitymax});
+ };
+
+ this.hideCursor = function(tm) {
+ if (self.cursortimeout) return;
+ if (!self.rail) return;
+ if (!self.autohidedom) return;
+ self.cursortimeout = setTimeout(function() {
+ if (!self.rail.active||!self.showonmouseevent) {
+ self.autohidedom.stop().animate({opacity:self.opt.cursoropacitymin});
+ if (self.zoom) self.zoom.stop().animate({opacity:self.opt.cursoropacitymin});
+ self.cursoractive = false;
+ }
+ self.cursortimeout = 0;
+ },tm||400);
+ };
+
+ this.noticeCursor = function(tm,py,px) {
+ self.showCursor(py,px);
+ if (!self.rail.active) self.hideCursor(tm);
+ };
+
+ this.getContentSize =
+ (self.ispage) ?
+ function(){
+ return {
+ w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),
+ h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)
+ }
+ }
+ : (self.haswrapper) ?
+ function(){
+ return {
+ w:self.doc.outerWidth()+parseInt(self.win.css('paddingLeft'))+parseInt(self.win.css('paddingRight')),
+ h:self.doc.outerHeight()+parseInt(self.win.css('paddingTop'))+parseInt(self.win.css('paddingBottom'))
+ }
+ }
+ : function() {
+ return {
+ w:self.docscroll[0].scrollWidth,
+ h:self.docscroll[0].scrollHeight
+ }
+ };
+
+ this.onResize = function(e,page) {
+
+ if (!self.win) return false;
+
+ if (!self.haswrapper&&!self.ispage) {
+ if (self.win.css('display')=='none') {
+ if (self.visibility) self.hideRail().hideRailHr();
+ return false;
+ } else {
+ if (!self.hidden&&!self.visibility) self.showRail().showRailHr();
+ }
+ }
+
+ var premaxh = self.page.maxh;
+ var premaxw = self.page.maxw;
+
+ var preview = {h:self.view.h,w:self.view.w};
+
+ self.view = {
+ w:(self.ispage) ? self.win.width() : parseInt(self.win[0].clientWidth),
+ h:(self.ispage) ? self.win.height() : parseInt(self.win[0].clientHeight)
+ };
+
+ self.page = (page) ? page : self.getContentSize();
+
+ self.page.maxh = Math.max(0,self.page.h - self.view.h);
+ self.page.maxw = Math.max(0,self.page.w - self.view.w);
+
+ if ((self.page.maxh==premaxh)&&(self.page.maxw==premaxw)&&(self.view.w==preview.w)) {
+ // test position
+ if (!self.ispage) {
+ var pos = self.win.offset();
+ if (self.lastposition) {
+ var lst = self.lastposition;
+ if ((lst.top==pos.top)&&(lst.left==pos.left)) return self; //nothing to do
+ }
+ self.lastposition = pos;
+ } else {
+ return self; //nothing to do
+ }
+ }
+
+ if (self.page.maxh==0) {
+ self.hideRail();
+ self.scrollvaluemax = 0;
+ self.scroll.y = 0;
+ self.scrollratio.y = 0;
+ self.cursorheight = 0;
+ self.setScrollTop(0);
+ self.rail.scrollable = false;
+ } else {
+ self.rail.scrollable = true;
+ }
+
+ if (self.page.maxw==0) {
+ self.hideRailHr();
+ self.scrollvaluemaxw = 0;
+ self.scroll.x = 0;
+ self.scrollratio.x = 0;
+ self.cursorwidth = 0;
+ self.setScrollLeft(0);
+ self.railh.scrollable = false;
+ } else {
+ self.railh.scrollable = true;
+ }
+
+ self.locked = (self.page.maxh==0)&&(self.page.maxw==0);
+ if (self.locked) {
+ if (!self.ispage) self.updateScrollBar(self.view);
+ return false;
+ }
+
+ if (!self.hidden&&!self.visibility) {
+ self.showRail().showRailHr();
+ }
+ else if (!self.hidden&&!self.railh.visibility) self.showRailHr();
+
+ if (self.istextarea&&self.win.css('resize')&&self.win.css('resize')!='none') self.view.h-=20;
+ if (!self.ispage) self.updateScrollBar(self.view);
+
+ self.cursorheight = Math.min(self.view.h,Math.round(self.view.h * (self.view.h / self.page.h)));
+ self.cursorheight = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorheight);
+
+ self.cursorwidth = Math.min(self.view.w,Math.round(self.view.w * (self.view.w / self.page.w)));
+ self.cursorwidth = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorwidth);
+
+ self.scrollvaluemax = self.view.h-self.cursorheight-self.cursor.hborder;
+
+ if (self.railh) {
+ self.railh.width = (self.page.maxh>0) ? (self.view.w-self.rail.width) : self.view.w;
+ self.scrollvaluemaxw = self.railh.width-self.cursorwidth-self.cursorh.wborder;
+ }
+
+ self.scrollratio = {
+ x:(self.page.maxw/self.scrollvaluemaxw),
+ y:(self.page.maxh/self.scrollvaluemax)
+ };
+
+ var sy = self.getScrollTop();
+ if (sy>self.page.maxh) {
+ self.doScrollTop(self.page.maxh);
+ } else {
+ self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));
+ self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x));
+ if (self.cursoractive) self.noticeCursor();
+ }
+
+ if (self.scroll.y&&(self.getScrollTop()==0)) self.doScrollTo(Math.floor(self.scroll.y*self.scrollratio.y));
+
+ return self;
+ };
+
+ this.resize = function(){self.delayed('resize',self.onResize,30);return self;} // event debounce
+
+ this.lazyResize = function() {
+ self.delayed('resize',self.resize,250);
+ }
+
+ this._bind = function(el,name,fn,bubble) { // primitive bind
+ self.events.push({e:el,n:name,f:fn,b:bubble,q:false});
+ if (el.addEventListener) {
+ el.addEventListener(name,fn,bubble||false);
+ }
+ else if (el.attachEvent) {
+ el.attachEvent("on"+name,fn);
+ }
+ else {
+ el["on"+name] = fn;
+ }
+ };
+
+ this.jqbind = function(dom,name,fn) { // use jquery bind for non-native events (mouseenter/mouseleave)
+ self.events.push({e:dom,n:name,f:fn,q:true});
+ $(dom).bind(name,fn);
+ }
+
+ this.bind = function(dom,name,fn,bubble) { // touch-oriented & fixing jquery bind
+ var el = ("jquery" in dom) ? dom[0] : dom;
+ if (el.addEventListener) {
+ if (cap.cantouch && /mouseup|mousedown|mousemove/.test(name)) { // touch device support
+ var tt=(name=='mousedown')?'touchstart':(name=='mouseup')?'touchend':'touchmove';
+ self._bind(el,tt,function(e){
+ if (e.touches) {
+ if (e.touches.length<2) {var ev=(e.touches.length)?e.touches[0]:e;ev.original=e;fn.call(this,ev);}
+ }
+ else if (e.changedTouches) {var ev=e.changedTouches[0];ev.original=e;fn.call(this,ev);} //blackberry
+ },bubble||false);
+ }
+ self._bind(el,name,fn,bubble||false);
+ if (name=='mousewheel') self._bind(el,"DOMMouseScroll",fn,bubble||false);
+ if (cap.cantouch && name=="mouseup") self._bind(el,"touchcancel",fn,bubble||false);
+ }
+ else {
+ self._bind(el,name,function(e) {
+ e = e||window.event||false;
+ if (e) {
+ if (e.srcElement) e.target=e.srcElement;
+ }
+ return ((fn.call(el,e)===false)||bubble===false) ? self.cancelEvent(e) : true;
+ });
+ }
+ };
+
+ this._unbind = function(el,name,fn,bub) { // primitive unbind
+ if (el.removeEventListener) {
+ el.removeEventListener(name,fn,bub);
+ }
+ else if (el.detachEvent) {
+ el.detachEvent('on'+name,fn);
+ } else {
+ el['on'+name] = false;
+ }
+ };
+
+ this.unbindAll = function() {
+ for(var a=0;a0) return dd;
+ dom = (dom.parentNode) ? dom.parentNode : false;
+ }
+ return false;
+ };
+
+ function execScrollWheel(e,hr) {
+ var px = 0;
+ var py = 0;
+ var rt = 1;
+ if ("wheelDeltaY" in e) {
+ rt = self.opt.mousescrollstep/(16*3);
+ px = Math.floor(e.wheelDeltaX*rt);
+ py = Math.floor(e.wheelDeltaY*rt);
+ if (hr&&(px==0)&&py) { // classic vertical-only mousewheel + browser with x/y support
+ px = py;
+ py = 0;
+ }
+ } else {
+ var delta = e.detail ? e.detail * -1 : e.wheelDelta / 40;
+ if (delta) {
+ (hr) ? px = Math.floor(delta*self.opt.mousescrollstep) : py = Math.floor(delta*self.opt.mousescrollstep);
+ }
+ }
+ if (px) {
+ if (self.scrollmom) {self.scrollmom.stop()}
+ self.lastdeltax+=px;
+ self.synched("mousewheelx",function(){var dt=self.lastdeltax;self.lastdeltax=0;if(!self.rail.drag){self.doScrollLeftBy(dt)}});
+ }
+ if (py) {
+ if (self.scrollmom) {self.scrollmom.stop()}
+ self.lastdeltay+=py;
+ self.synched("mousewheely",function(){var dt=self.lastdeltay;self.lastdeltay=0;if(!self.rail.drag){self.doScrollBy(dt)}});
+ }
+ };
+
+ this.onmousewheel = function(e) {
+ if (self.locked) return true;
+ if (!self.rail.scrollable) {
+ if (self.railh&&self.railh.scrollable) {
+ return self.onmousewheelhr(e);
+ } else {
+ return true;
+ }
+ }
+ if (self.opt.preservenativescrolling&&self.checkarea) {
+ self.checkarea = false;
+ self.nativescrollingarea = self.isScrollable(e);
+ }
+ if (self.nativescrollingarea) return true; // this isn't my business
+ if (self.locked) return self.cancelEvent(e);
+ if (self.rail.drag) return self.cancelEvent(e);
+
+ execScrollWheel(e,false);
+
+ return self.cancelEvent(e);
+ };
+
+ this.onmousewheelhr = function(e) {
+ if (self.locked||!self.railh.scrollable) return true;
+ if (self.opt.preservenativescrolling&&self.checkarea) {
+ self.checkarea = false;
+ self.nativescrollingarea = self.isScrollable(e);
+ }
+ if (self.nativescrollingarea) return true; // this isn't my business
+ if (self.locked) return self.cancelEvent(e);
+ if (self.rail.drag) return self.cancelEvent(e);
+
+ execScrollWheel(e,true);
+
+ return self.cancelEvent(e);
+ };
+
+ this.stop = function() {
+ self.cancelScroll();
+ if (self.scrollmon) self.scrollmon.stop();
+ self.cursorfreezed = false;
+ self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));
+ self.noticeCursor();
+ return self;
+ };
+
+ this.getTransitionSpeed = function(dif) {
+ var sp = Math.round(self.opt.scrollspeed*10);
+ var ex = Math.min(sp,Math.round((dif / 20) * self.opt.scrollspeed));
+ return (ex>20) ? ex : 0;
+ }
+
+ if (!self.opt.smoothscroll) {
+ this.doScrollLeft = function(x,spd) { //direct
+ var y = self.getScrollTop();
+ self.doScrollPos(x,y,spd);
+ }
+ this.doScrollTop = function(y,spd) { //direct
+ var x = self.getScrollLeft();
+ self.doScrollPos(x,y,spd);
+ }
+ this.doScrollPos = function(x,y,spd) { //direct
+ var nx = (x>self.page.maxw) ? self.page.maxw : x;
+ if (nx<0) nx=0;
+ var ny = (y>self.page.maxh) ? self.page.maxh : y;
+ if (ny<0) ny=0;
+ self.synched('scroll',function(){
+ self.setScrollTop(ny);
+ self.setScrollLeft(nx);
+ });
+ }
+ this.cancelScroll = function() {}; // direct
+ }
+ else if (self.ishwscroll&&cap.hastransition&&self.opt.usetransition) {
+ this.prepareTransition = function(dif,istime) {
+ var ex = (istime) ? ((dif>20)?dif:0) : self.getTransitionSpeed(dif);
+ var trans = (ex) ? cap.prefixstyle+'transform '+ex+'ms ease-out' : '';
+ if (!self.lasttransitionstyle||self.lasttransitionstyle!=trans) {
+ self.lasttransitionstyle = trans;
+ self.doc.css(cap.transitionstyle,trans);
+ }
+ return ex;
+ };
+
+ this.doScrollLeft = function(x,spd) { //trans
+ var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();
+ self.doScrollPos(x,y,spd);
+ }
+
+ this.doScrollTop = function(y,spd) { //trans
+ var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();
+ self.doScrollPos(x,y,spd);
+ }
+
+ this.doScrollPos = function(x,y,spd) { //trans
+
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+
+ if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll(); //inverted movement detection
+
+ if (self.opt.bouncescroll==false) {
+ if (y<0) y=0;
+ else if (y>self.page.maxh) y=self.page.maxh;
+ if (x<0) x=0;
+ else if (x>self.page.maxw) x=self.page.maxw;
+ }
+
+ if (x==self.newscrollx&&y==self.newscrolly) return false;
+
+ self.newscrolly = y;
+ self.newscrollx = x;
+
+ self.newscrollspeed = spd||false;
+
+ if (self.timer) return false;
+
+ self.timer = setTimeout(function(){
+
+ var top = self.getScrollTop();
+ var lft = self.getScrollLeft();
+
+ var dst = {};
+ dst.x = x-lft;
+ dst.y = y-top;
+ dst.px = lft;
+ dst.py = top;
+
+ var dd = Math.round(Math.sqrt(Math.pow(dst.x,2)+Math.pow(dst.y,2)));
+
+ var df = (self.newscrollspeed) ? self.newscrollspeed : dd;
+ var ms = self.prepareTransition(df);
+
+ if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);
+
+ if (ms>0) {
+
+ if (!self.scrollrunning&&self.onscrollstart) {
+ var info = {"type":"scrollstart","current":{"x":lft,"y":top},"request":{"x":x,"y":y},"end":{"x":self.newscrollx,"y":self.newscrolly},"speed":ms};
+ self.onscrollstart.call(self,info);
+ }
+
+ if (cap.transitionend) {
+ if (!self.scrollendtrapped) {
+ self.scrollendtrapped = true;
+ self.bind(self.doc,cap.transitionend,self.onScrollEnd,false); //I have got to do something usefull!!
+ }
+ } else {
+ if (self.scrollendtrapped) clearTimeout(self.scrollendtrapped);
+ self.scrollendtrapped = setTimeout(self.onScrollEnd,ms); // simulate transitionend event
+ }
+
+ var py = top;
+ var px = lft;
+ self.timerscroll = {
+ bz: new BezierClass(py,self.newscrolly,ms,0,0,0.58,1),
+ bh: new BezierClass(px,self.newscrollx,ms,0,0,0.58,1)
+ };
+ if (!self.cursorfreezed) self.timerscroll.tm=setInterval(function(){self.showCursor(self.getScrollTop(),self.getScrollLeft())},60);
+
+ }
+
+ self.synched("doScroll-set",function(){
+ self.timer = 0;
+ if (self.scrollendtrapped) self.scrollrunning = true;
+ self.setScrollTop(self.newscrolly);
+ self.setScrollLeft(self.newscrollx);
+ if (!self.scrollendtrapped) self.onScrollEnd();
+ });
+
+
+ },50);
+
+ };
+
+ this.cancelScroll = function() {
+ if (!self.scrollendtrapped) return true;
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+ self.scrollrunning = false;
+ if (!cap.transitionend) clearTimeout(cap.transitionend);
+ self.scrollendtrapped = false;
+ self._unbind(self.doc,cap.transitionend,self.onScrollEnd);
+ self.prepareTransition(0);
+ self.setScrollTop(py); // fire event onscroll
+ if (self.railh) self.setScrollLeft(px);
+ if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);
+ self.timerscroll = false;
+
+ self.cursorfreezed = false;
+
+ //self.noticeCursor(false,py,px);
+ self.showCursor(py,px);
+ return self;
+ };
+ this.onScrollEnd = function() {
+ if (self.scrollendtrapped) self._unbind(self.doc,cap.transitionend,self.onScrollEnd);
+ self.scrollendtrapped = false;
+ self.prepareTransition(0);
+ if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);
+ self.timerscroll = false;
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+ self.setScrollTop(py); // fire event onscroll
+ if (self.railh) self.setScrollLeft(px); // fire event onscroll left
+
+ self.noticeCursor(false,py,px);
+
+ self.cursorfreezed = false;
+
+ if (py<0) py=0
+ else if (py>self.page.maxh) py=self.page.maxh;
+ if (px<0) px=0
+ else if (px>self.page.maxw) px=self.page.maxw;
+ if((py!=self.newscrolly)||(px!=self.newscrollx)) return self.doScrollPos(px,py,self.opt.snapbackspeed);
+
+ if (self.onscrollend&&self.scrollrunning) {
+ var info = {"type":"scrollend","current":{"x":px,"y":py},"end":{"x":self.newscrollx,"y":self.newscrolly}};
+ self.onscrollend.call(self,info);
+ }
+ self.scrollrunning = false;
+
+ };
+
+ } else {
+
+ this.doScrollLeft = function(x) { //no-trans
+ var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();
+ self.doScrollPos(x,y);
+ }
+
+ this.doScrollTop = function(y) { //no-trans
+ var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();
+ self.doScrollPos(x,y);
+ }
+
+ this.doScrollPos = function(x,y) { //no-trans
+ var y = ((typeof y == "undefined")||(y===false)) ? self.getScrollTop(true) : y;
+
+ if ((self.timer)&&(self.newscrolly==y)&&(self.newscrollx==x)) return true;
+
+ if (self.timer) clearAnimationFrame(self.timer);
+ self.timer = 0;
+
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+
+ if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll(); //inverted movement detection
+
+ self.newscrolly = y;
+ self.newscrollx = x;
+
+ if (!self.bouncescroll||!self.rail.visibility) {
+ if (self.newscrolly<0) {
+ self.newscrolly = 0;
+ }
+ else if (self.newscrolly>self.page.maxh) {
+ self.newscrolly = self.page.maxh;
+ }
+ }
+ if (!self.bouncescroll||!self.railh.visibility) {
+ if (self.newscrollx<0) {
+ self.newscrollx = 0;
+ }
+ else if (self.newscrollx>self.page.maxw) {
+ self.newscrollx = self.page.maxw;
+ }
+ }
+
+ self.dst = {};
+ self.dst.x = x-px;
+ self.dst.y = y-py;
+ self.dst.px = px;
+ self.dst.py = py;
+
+ var dst = Math.round(Math.sqrt(Math.pow(self.dst.x,2)+Math.pow(self.dst.y,2)));
+
+ self.dst.ax = self.dst.x / dst;
+ self.dst.ay = self.dst.y / dst;
+
+ var pa = 0;
+ var pe = dst;
+
+ if (self.dst.x==0) {
+ pa = py;
+ pe = y;
+ self.dst.ay = 1;
+ self.dst.py = 0;
+ } else if (self.dst.y==0) {
+ pa = px;
+ pe = x;
+ self.dst.ax = 1;
+ self.dst.px = 0;
+ }
+
+ var ms = self.getTransitionSpeed(dst);
+ if (ms>0) {
+ self.bzscroll = (self.bzscroll) ? self.bzscroll.update(pe,ms) : new BezierClass(pa,pe,ms,0,1,0,1);
+ } else {
+ self.bzscroll = false;
+ }
+
+ if (self.timer) return;
+
+ if ((py==self.page.maxh&&y>=self.page.maxh)||(px==self.page.maxw&&x>=self.page.maxw)) self.checkContentSize();
+
+ var sync = 1;
+
+ function scrolling() {
+ if (self.cancelAnimationFrame) return true;
+
+ self.scrollrunning = true;
+
+ sync = 1-sync;
+ if (sync) return (self.timer = setAnimationFrame(scrolling)||1);
+
+ var done = 0;
+
+ var sc = sy = self.getScrollTop();
+ if (self.dst.ay) {
+ sc = (self.bzscroll) ? self.dst.py + (self.bzscroll.getNow()*self.dst.ay) : self.newscrolly;
+ var dr=sc-sy;
+ if ((dr<0&&sc0&&sc>self.newscrolly)) sc = self.newscrolly;
+ self.setScrollTop(sc);
+ if (sc == self.newscrolly) done=1;
+ } else {
+ done=1;
+ }
+
+ var scx = sx = self.getScrollLeft();
+ if (self.dst.ax) {
+ scx = (self.bzscroll) ? self.dst.px + (self.bzscroll.getNow()*self.dst.ax) : self.newscrollx;
+ var dr=scx-sx;
+ if ((dr<0&&scx0&&scx>self.newscrollx)) scx = self.newscrollx;
+ self.setScrollLeft(scx);
+ if (scx == self.newscrollx) done+=1;
+ } else {
+ done+=1;
+ }
+
+ if (done==2) {
+ self.timer = 0;
+ self.cursorfreezed = false;
+ self.bzscroll = false;
+ self.scrollrunning = false;
+ if (sc<0) sc=0;
+ else if (sc>self.page.maxh) sc=self.page.maxh;
+ if (scx<0) scx=0;
+ else if (scx>self.page.maxw) scx=self.page.maxw;
+ if ((scx!=self.newscrollx)||(sc!=self.newscrolly)) self.doScrollPos(scx,sc);
+ else {
+ if (self.onscrollend) {
+ var info = {"type":"scrollend","current":{"x":sx,"y":sy},"end":{"x":self.newscrollx,"y":self.newscrolly}};
+ self.onscrollend.call(self,info);
+ }
+ }
+ } else {
+ self.timer = setAnimationFrame(scrolling)||1;
+ }
+ };
+ self.cancelAnimationFrame=false;
+ self.timer = 1;
+
+ if (self.onscrollstart&&!self.scrollrunning) {
+ var info = {"type":"scrollstart","current":{"x":px,"y":py},"request":{"x":x,"y":y},"end":{"x":self.newscrollx,"y":self.newscrolly},"speed":ms};
+ self.onscrollstart.call(self,info);
+ }
+
+ scrolling();
+
+ if ((py==self.page.maxh&&y>=py)||(px==self.page.maxw&&x>=px)) self.checkContentSize();
+
+ self.noticeCursor();
+ };
+
+ this.cancelScroll = function() {
+ if (self.timer) clearAnimationFrame(self.timer);
+ self.timer = 0;
+ self.bzscroll = false;
+ self.scrollrunning = false;
+ return self;
+ };
+
+ }
+
+ this.doScrollBy = function(stp,relative) {
+ var ny = 0;
+ if (relative) {
+ ny = Math.floor((self.scroll.y-stp)*self.scrollratio.y)
+ } else {
+ var sy = (self.timer) ? self.newscrolly : self.getScrollTop(true);
+ ny = sy-stp;
+ }
+ if (self.bouncescroll) {
+ var haf = Math.round(self.view.h/2);
+ if (ny<-haf) ny=-haf
+ else if (ny>(self.page.maxh+haf)) ny = (self.page.maxh+haf);
+ }
+ self.cursorfreezed = false;
+
+ py = self.getScrollTop(true);
+ if (ny<0&&py<=0) return self.noticeCursor();
+ else if (ny>self.page.maxh&&py>=self.page.maxh) {
+ self.checkContentSize();
+ return self.noticeCursor();
+ }
+
+ self.doScrollTop(ny);
+ };
+
+ this.doScrollLeftBy = function(stp,relative) {
+ var nx = 0;
+ if (relative) {
+ nx = Math.floor((self.scroll.x-stp)*self.scrollratio.x)
+ } else {
+ var sx = (self.timer) ? self.newscrollx : self.getScrollLeft(true);
+ nx = sx-stp;
+ }
+ if (self.bouncescroll) {
+ var haf = Math.round(self.view.w/2);
+ if (nx<-haf) nx=-haf
+ else if (nx>(self.page.maxw+haf)) nx = (self.page.maxw+haf);
+ }
+ self.cursorfreezed = false;
+
+ px = self.getScrollLeft(true);
+ if (nx<0&&px<=0) return self.noticeCursor();
+ else if (nx>self.page.maxw&&px>=self.page.maxw) return self.noticeCursor();
+
+ self.doScrollLeft(nx);
+ };
+
+ this.doScrollTo = function(pos,relative) {
+ var ny = (relative) ? Math.round(pos*self.scrollratio.y) : pos;
+ if (ny<0) ny=0
+ else if (ny>self.page.maxh) ny = self.page.maxh;
+ self.cursorfreezed = false;
+ self.doScrollTop(pos);
+ };
+
+ this.checkContentSize = function() {
+ var pg = self.getContentSize();
+ if ((pg.h!=self.page.h)||(pg.w!=self.page.w)) self.resize(false,pg);
+ };
+
+ self.onscroll = function(e) {
+ if (self.rail.drag) return;
+ if (!self.cursorfreezed) {
+ self.synched('scroll',function(){
+ self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));
+ if (self.railh) self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x));
+ self.noticeCursor();
+ });
+ }
+ };
+ self.bind(self.docscroll,"scroll",self.onscroll);
+
+ this.doZoomIn = function(e) {
+ if (self.zoomactive) return;
+ self.zoomactive = true;
+
+ self.zoomrestore = {
+ style:{}
+ };
+ var lst = ['position','top','left','zIndex','backgroundColor','marginTop','marginBottom','marginLeft','marginRight'];
+ var win = self.win[0].style;
+ for(var a in lst) {
+ var pp = lst[a];
+ self.zoomrestore.style[pp] = (typeof win[pp]!='undefined') ? win[pp] : '';
+ }
+
+ self.zoomrestore.style.width = self.win.css('width');
+ self.zoomrestore.style.height = self.win.css('height');
+
+ self.zoomrestore.padding = {
+ w:self.win.outerWidth()-self.win.width(),
+ h:self.win.outerHeight()-self.win.height()
+ };
+
+ if (cap.isios4) {
+ self.zoomrestore.scrollTop = $(window).scrollTop();
+ $(window).scrollTop(0);
+ }
+
+ self.win.css({
+ "position":(cap.isios4)?"absolute":"fixed",
+ "top":0,
+ "left":0,
+ "z-index":self.opt.zindex+100,
+ "margin":"0px"
+ });
+ var bkg = self.win.css("backgroundColor");
+ if (bkg==""||/transparent|rgba\(0, 0, 0, 0\)|rgba\(0,0,0,0\)/.test(bkg)) self.win.css("backgroundColor","#fff");
+ self.rail.css({"z-index":self.opt.zindex+110});
+ self.zoom.css({"z-index":self.opt.zindex+112});
+ self.zoom.css('backgroundPosition','0px -18px');
+ self.resizeZoom();
+
+ if (self.onzoomin) self.onzoomin.call(self);
+
+ return self.cancelEvent(e);
+ };
+
+ this.doZoomOut = function(e) {
+ if (!self.zoomactive) return;
+ self.zoomactive = false;
+
+ self.win.css("margin","");
+ self.win.css(self.zoomrestore.style);
+
+ if (cap.isios4) {
+ $(window).scrollTop(self.zoomrestore.scrollTop);
+ }
+
+ self.rail.css({"z-index":(self.ispage)?self.opt.zindex:self.opt.zindex+2});
+ self.zoom.css({"z-index":self.opt.zindex});
+ self.zoomrestore = false;
+ self.zoom.css('backgroundPosition','0px 0px');
+ self.onResize();
+
+ if (self.onzoomout) self.onzoomout.call(self);
+
+ return self.cancelEvent(e);
+ };
+
+ this.doZoom = function(e) {
+ return (self.zoomactive) ? self.doZoomOut(e) : self.doZoomIn(e);
+ };
+
+ this.resizeZoom = function() {
+ if (!self.zoomactive) return;
+
+ var py = self.getScrollTop(); //preserve scrolling position
+ self.win.css({
+ width:$(window).width()-self.zoomrestore.padding.w+"px",
+ height:$(window).height()-self.zoomrestore.padding.h+"px"
+ });
+ self.onResize();
+
+ console.log(py);
+
+ self.setScrollTop(Math.min(self.page.maxh,py));
+ };
+
+ this.init();
+
+ $.nicescroll.push(this);
+
+ };
+
+// Inspired by the work of Kin Blas
+// http://webpro.host.adobe.com/people/jblas/momentum/includes/jquery.momentum.0.7.js
+
+
+ var ScrollMomentumClass2D = function(nc) {
+ var self = this;
+ this.nc = nc;
+
+ this.lastx = 0;
+ this.lasty = 0;
+ this.speedx = 0;
+ this.speedy = 0;
+ this.lasttime = 0;
+ this.steptime = 0;
+ this.snapx = false;
+ this.snapy = false;
+ this.demulx = 0;
+ this.demuly = 0;
+
+ this.lastscrollx = -1;
+ this.lastscrolly = -1;
+
+ this.chkx = 0;
+ this.chky = 0;
+
+ this.timer = 0;
+
+ this.time = function() {
+ return +new Date();//beautifull hack
+ };
+
+ this.reset = function(px,py) {
+ self.stop();
+ var now = self.time();
+ self.steptime = 0;
+ self.lasttime = now;
+ self.speedx = 0;
+ self.speedy = 0;
+ self.lastx = px;
+ self.lasty = py;
+ self.lastscrollx = -1;
+ self.lastscrolly = -1;
+ };
+
+ this.update = function(px,py) {
+ var now = self.time();
+ self.steptime = now - self.lasttime;
+ self.lasttime = now;
+ var dy = py - self.lasty;
+ var dx = px - self.lastx;
+ var sy = self.nc.getScrollTop();
+ var sx = self.nc.getScrollLeft();
+ var newy = sy + dy;
+ var newx = sx + dx;
+ self.snapx = (newx<0)||(newx>self.nc.page.maxw);
+ self.snapy = (newy<0)||(newy>self.nc.page.maxh);
+ self.speedx = dx;
+ self.speedy = dy;
+ self.lastx = px;
+ self.lasty = py;
+ };
+
+ this.stop = function() {
+ self.nc.unsynched("domomentum2d");
+ if (self.timer) clearTimeout(self.timer);
+ self.timer = 0;
+ self.lastscrollx = -1;
+ self.lastscrolly = -1;
+ };
+
+ this.doSnapy = function(nx,ny) {
+ var snap = false;
+
+ if (ny<0) {
+ ny=0;
+ snap=true;
+ }
+ else if (ny>self.nc.page.maxh) {
+ ny=self.nc.page.maxh;
+ snap=true;
+ }
+
+ if (nx<0) {
+ nx=0;
+ snap=true;
+ }
+ else if (nx>self.nc.page.maxw) {
+ nx=self.nc.page.maxw;
+ snap=true;
+ }
+
+ if (snap) self.nc.doScrollPos(nx,ny,self.nc.opt.snapbackspeed);
+ };
+
+ this.doMomentum = function(gp) {
+ var t = self.time();
+ var l = (gp) ? t+gp : self.lasttime;
+
+ var sl = self.nc.getScrollLeft();
+ var st = self.nc.getScrollTop();
+
+ var pageh = self.nc.page.maxh;
+ var pagew = self.nc.page.maxw;
+
+ self.speedx = (pagew>0) ? Math.min(60,self.speedx) : 0;
+ self.speedy = (pageh>0) ? Math.min(60,self.speedy) : 0;
+
+ var chk = l && (t - l) <= 50;
+
+ if ((st<0)||(st>pageh)||(sl<0)||(sl>pagew)) chk = false;
+
+ var sy = (self.speedy && chk) ? self.speedy : false;
+ var sx = (self.speedx && chk) ? self.speedx : false;
+
+ if (sy||sx) {
+ var tm = Math.max(16,self.steptime); //timeout granularity
+
+ if (tm>50) { // do smooth
+ var xm = tm/50;
+ self.speedx*=xm;
+ self.speedy*=xm;
+ tm = 50;
+ }
+
+ self.demulxy = 0;
+
+ self.lastscrollx = self.nc.getScrollLeft();
+ self.chkx = self.lastscrollx;
+ self.lastscrolly = self.nc.getScrollTop();
+ self.chky = self.lastscrolly;
+
+ var nx = self.lastscrollx;
+ var ny = self.lastscrolly;
+
+ var onscroll = function(){
+ var df = ((self.time()-t)>600) ? 0.04 : 0.02;
+
+ if (self.speedx) {
+ nx = Math.floor(self.lastscrollx - (self.speedx*(1-self.demulxy)));
+ self.lastscrollx = nx;
+ if ((nx<0)||(nx>pagew)) df=0.10;
+ }
+
+ if (self.speedy) {
+ ny = Math.floor(self.lastscrolly - (self.speedy*(1-self.demulxy)));
+ self.lastscrolly = ny;
+ if ((ny<0)||(ny>pageh)) df=0.10;
+ }
+
+ self.demulxy = Math.min(1,self.demulxy+df);
+
+ self.nc.synched("domomentum2d",function(){
+
+ if (self.speedx) {
+ var scx = self.nc.getScrollLeft();
+ if (scx!=self.chkx) self.stop();
+ self.chkx=nx;
+ self.nc.setScrollLeft(nx);
+ }
+
+ if (self.speedy) {
+ var scy = self.nc.getScrollTop();
+ if (scy!=self.chky) self.stop();
+ self.chky=ny;
+ self.nc.setScrollTop(ny);
+ }
+
+ if(!self.timer) {
+ self.nc.hideCursor();
+ self.doSnapy(nx,ny);
+ }
+
+ });
+
+ if (self.demulxy<1) {
+ self.timer = setTimeout(onscroll,tm);
+ } else {
+ self.stop();
+ self.nc.hideCursor();
+ self.doSnapy(nx,ny);
+ }
+ };
+
+ onscroll();
+
+ } else {
+ self.doSnapy(self.nc.getScrollLeft(),self.nc.getScrollTop());
+ }
+
+ }
+
+ };
+
+
+// override jQuery scrollTop
+
+ var _scrollTop = jQuery.fn.scrollTop; // preserve original function
+
+ $.cssHooks["pageYOffset"] = {
+ get: function(elem,computed,extra) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(elem);
+ },
+ set: function(elem,value) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call(elem,value);
+ return this;
+ }
+ };
+
+/*
+ $.fx.step["scrollTop"] = function(fx){
+ $.cssHooks["scrollTop"].set( fx.elem, fx.now + fx.unit );
+ };
+*/
+
+ jQuery.fn.scrollTop = function(value) {
+ if (typeof value == "undefined") {
+ var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(this);
+ } else {
+ return this.each(function() {
+ var nice = $.data(this,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call($(this),value);
+ });
+ }
+ }
+
+// override jQuery scrollLeft
+
+ var _scrollLeft = jQuery.fn.scrollLeft; // preserve original function
+
+ $.cssHooks.pageXOffset = {
+ get: function(elem,computed,extra) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(elem);
+ },
+ set: function(elem,value) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call(elem,value);
+ return this;
+ }
+ };
+
+/*
+ $.fx.step["scrollLeft"] = function(fx){
+ $.cssHooks["scrollLeft"].set( fx.elem, fx.now + fx.unit );
+ };
+*/
+
+ jQuery.fn.scrollLeft = function(value) {
+ if (typeof value == "undefined") {
+ var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(this);
+ } else {
+ return this.each(function() {
+ var nice = $.data(this,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call($(this),value);
+ });
+ }
+ }
+
+ var NiceScrollArray = function(doms) {
+ var self = this;
+ this.length = 0;
+ this.name = "nicescrollarray";
+
+ this.each = function(fn) {
+ for(var a=0;a ').attr( 'id', 'pageslide' )
+ .css( 'display', 'none' )
+ .appendTo( $body );
+ }
+
+ /*
+ * Private methods
+ */
+ function _load( url, useIframe ) {
+ // Are we loading an element from the page or a URL?
+ if ( url.indexOf("#") === 0 ) {
+ // Load a page element
+ $(url).clone(true).appendTo( $pageslide.empty() ).show();
+ } else {
+ // Load a URL. Into an iframe?
+ if( useIframe ) {
+ var iframe = $("").attr({
+ id: "page_iframe",
+ src: url,
+ frameborder: 0,
+ hspace: 0
+ })
+ .css({
+ width: "100%",
+ height: "100%"
+ });
+
+ $viewPage.find('.content').html( iframe );
+ $viewPage.clone(true).appendTo( $pageslide.empty() ).show();
+ $viewPage.find('.content').empty();
+ } else {
+ $viewPage.find('.content').load(url, function(){
+ $viewPage.clone(true).appendTo( $pageslide.empty() ).show();
+ });
+ }
+
+ $pageslide.data( 'localEl', false );
+
+ }
+ }
+
+ // Function that controls opening of the pageslide
+ function _start( direction, speed ) {
+ var slideWidth = $pageslide.outerWidth( true ),
+ bodyAnimateIn = {},
+ slideAnimateIn = {};
+
+ // If the slide is open or opening, just ignore the call
+ if( $pageslide.is(':visible') || _sliding ) return;
+ _sliding = true;
+
+ switch( direction ) {
+ case 'left':
+ $pageslide.css({ left: 'auto', right: '-' + slideWidth + 'px' });
+ bodyAnimateIn['width'] = '-=' + slideWidth;
+ slideAnimateIn['right'] = '+=' + slideWidth;
+ break;
+ default:
+ if($sidebarState && !$('#items').length) {
+ $pageslide.css({ left: '-' + (slideWidth-241) + 'px', right: 'auto' });
+ }else{
+ $pageslide.css({ left: '-' + (slideWidth-61) + 'px', right: 'auto' });
+ };
+ bodyAnimateIn['margin-left'] = '+=' + slideWidth;
+ if($(window).width() < 1440 && slideWidth > 963 ) {
+ bodyAnimateIn['width'] = $body.width();
+ }
+ slideAnimateIn['left'] = '+=' + slideWidth;
+ break;
+ }
+
+ // Animate the slide, and attach this slide's settings to the element
+ $body.animate(bodyAnimateIn, speed);
+ $pageslide.show()
+ .animate(slideAnimateIn, speed, function() {
+ _sliding = false;
+ $pageslide.children('.nano').nanoScroller({ scrollTop: 0, iOSNativeScrolling: true });
+ });
+ }
+
+ /*
+ * Declaration
+ */
+ $.fn.pageslide = function(options) {
+ var $elements = this;
+
+ // On click
+ $elements.on(clickEvent, function(e) {
+ var $self = $(this),
+ settings = $.extend({ href: $self.attr('href') }, options);
+
+ // Prevent the default behavior and stop propagation
+ e.preventDefault();
+ e.stopPropagation();
+
+ if ( $pageslide.is(':visible') && $self[0] == _lastCaller ) {
+ // If we clicked the same element twice, toggle closed
+ // $.pageslide.close();
+ } else {
+ // Open
+ $.pageslide( settings );
+
+ if($('#items').length) {
+ $('.item-menu > a, .navbar-inner').removeClass("active");
+ $(this).parents('.navbar-inner').addClass('active').end().addClass('active');
+ if(!$.support.touch) {
+ if($('.item-menu > a').hasClass('active')) {
+ $('.item-menu').css({
+ 'display': 'none',
+ });
+ $(this).parents('.item-menu').css({
+ 'display': 'inline-block',
+ });
+ }
+ }
+ } else if($('.tags-groups').length) {
+ $(this).parents('li').addClass("active").siblings().removeClass("active").parent('ul').siblings().children('li').removeClass("active");
+ } else {
+ $(this).parents("tr").addClass("active").siblings().removeClass("active");;
+ }
+ $pageslide.focusFirstField(); // focus first form
+ setTimeout(setScroll, 300);
+ // Record the last element to trigger pageslide
+ _lastCaller = $self[0];
+ }
+ });
+ };
+
+ /*
+ * Default settings
+ */
+ $.fn.pageslide.defaults = {
+ speed: 300, // Accepts standard jQuery effects speeds (i.e. fast, normal or milliseconds)
+ direction: 'right', // Accepts 'left' or 'right'
+ modal: false, // If set to true, you must explicitly close pageslide using $.pageslide.close();
+ iframe: false, // By default, linked pages are loaded into an iframe. Set this to false if you don't want an iframe.
+ href: null, // Override the source of the content. Optional in most cases, but required when opening pageslide programmatically.
+ W: 264
+ };
+
+ /*
+ * Public methods
+ */
+
+ // Open the pageslide
+ $.pageslide = function( options ) {
+ // Extend the settings with those the user has provided
+ var settings = $.extend({}, $.fn.pageslide.defaults, options);
+
+ // Are we trying to open in different direction?
+ if( ($pageslide.is(':visible') && $pageslide.data( 'W' ) != settings.W) || ($pageslide.is(':visible') && $pageslide.data( 'direction' ) != settings.direction) ) {
+ $.pageslide.close(function(){
+ $pageslide.css({'width': settings.W});
+ _load( settings.href, settings.iframe );
+ _start( settings.direction, settings.speed );
+ });
+ } else {
+ _load( settings.href, settings.iframe );
+ if( $pageslide.is(':hidden') ) {
+ $pageslide.css({'width': settings.W});
+ _start( settings.direction, settings.speed );
+ }
+ }
+
+ $pageslide.data( settings );
+
+
+
+ if($('#add-tags').length) {
+ $('.set_new').addClass('active in').siblings().removeClass('active in');
+ $('#pageslide .selete_defat .search-query').attr('id','filter-default-tag')
+ $('#filter-default-tag').fastLiveFilter('.add-defalt-tags-list', '.filter-item', '.tag');
+ $('.add-defalt-tags-list .filter-item').removeClass('mark');
+ }
+ }
+
+ // Close the pageslide
+ $.pageslide.close = function( callback ) {
+ var $pageslide = $('#pageslide'),
+ slideWidth = $pageslide.outerWidth( true ),
+ speed = $pageslide.data( 'speed' ),
+ bodyAnimateIn = {},
+ slideAnimateIn = {}
+
+ // If the slide isn't open, just ignore the call
+ if( $pageslide.is(':hidden') || _sliding ) return;
+ _sliding = true;
+
+ switch( $pageslide.data( 'direction' ) ) {
+ case 'left':
+ bodyAnimateIn['width'] = '+=' + slideWidth;
+ slideAnimateIn['right'] = '-=' + slideWidth;
+ break;
+ default:
+ bodyAnimateIn['margin-left'] = '-=' + slideWidth;
+ slideAnimateIn['left'] = '-=' + slideWidth;
+ if($pageslide.find('.preview').length) {
+ $pageslide.find('.preview').cycle('destroy');
+ $pageslide.find('.preview img').removeAttr('style');
+ }
+ break;
+ }
+
+ if($('#items').length) {
+ $(".navbar-inner").removeClass("active");
+ $('.item-menu > a, .navbar-inner').removeClass("active");
+ if(!$.support.touch) {
+ $('.item-menu').css({
+ 'display': 'none',
+ });
+ }
+ } else if($('.tags-groups').length) {
+ $('.tags-groups').children('li').removeClass("active");
+ } else {
+ $("tr").removeClass("active");
+ };
+
+ $pageslide.animate(slideAnimateIn, speed);
+ $body.animate(bodyAnimateIn, speed, function() {
+ $pageslide.hide();
+ _sliding = false;
+ if( typeof callback != 'undefined' ) callback();
+ $body.css({'width': 'auto'})
+ });
+ }
+
+ /* Events */
+
+ // Don't let clicks to the pageslide close the window
+ $pageslide.click(function(e) {
+ e.stopPropagation();
+ });
+
+ // Close the pageslide if the document is clicked or the users presses the ESC key, unless the pageslide is modal
+ $(document).bind('click keyup', function(e) {
+ // If this is a keyup event, let's see if it's an ESC key
+ if( e.type == "keyup" && e.keyCode != 27) return;
+
+ // Make sure it's visible, and we're not modal
+ if( $pageslide.is( ':visible' ) && !$pageslide.data( 'modal' ) ) {
+ $.pageslide.close();
+ }
+ });
+ function setScroll(){
+ $pageslide.children('.nano').nanoScroller({ scrollTop: 0, iOSNativeScrolling: true }); // set nano scroll
+ };
+
+})(jQuery);
\ No newline at end of file
diff --git a/app/assets/javascripts/lib/jquery.pageslide_old.js b/app/assets/javascripts/lib/jquery.pageslide_old.js
new file mode 100644
index 000000000..1cd2fd84e
--- /dev/null
+++ b/app/assets/javascripts/lib/jquery.pageslide_old.js
@@ -0,0 +1,347 @@
+/*
+ * jQuery pageSlide
+ * Version 2.0
+ * http://srobbin.com/jquery-pageslide/
+ *
+ * jQuery Javascript plugin which slides a webpage over to reveal an additional interaction pane.
+ *
+ * Copyright (c) 2011 Scott Robbin (srobbin.com)
+ * Dual licensed under the MIT and GPL licenses.
+*/
+
+(function($){
+ // Convenience vars for accessing elements
+ var $body = $('#main-wrap'),
+ $pageslide = $('#pageslide'),
+ $viewPage = $('#view-page');
+
+ var _sliding = false, // Mutex to assist closing only once
+ _lastCaller; // Used to keep track of last element to trigger pageslide
+
+ // If the pageslide element doesn't exist, create it
+ if( $pageslide.length == 0 ) {
+ $pageslide = $('
').attr( 'id', 'pageslide' )
+ .css( 'display', 'none' )
+ .appendTo( $('#main-wrap') );
+ }
+
+ /*
+ * Private methods
+ */
+ function _load( url, useIframe ) {
+ // Are we loading an element from the page or a URL?
+
+ if ( url.indexOf("#") === 0 ) {
+ // Load a page element
+ $(url).clone(true).appendTo( $pageslide.empty() ).show();
+ if($('#items').length) {
+ $pageslide.css({'width': '324px'});
+ } else {
+ $pageslide.css({'width': '264px'});
+ }
+ } else {
+ // Load a URL. Into an iframe?
+ if( useIframe ) {
+ var iframe = $("").attr({
+ src: url,
+ frameborder: 0,
+ hspace: 0
+ })
+ .css({
+ width: "100%",
+ height: "100%"
+ });
+
+ $pageslide.html( iframe );
+ } else {
+ $viewPage.find('.content').load(url, function(){
+ $viewPage.clone(true).appendTo( $pageslide.empty() ).show();
+ });
+ $(window).width() > 1600 ? $pageslide.css({'width': '1024px'}) : $pageslide.css({'width': '953px'});
+ // $pageslide.load( url );
+ }
+
+ $pageslide.data( 'localEl', false );
+
+ }
+ }
+
+ // Function that controls opening of the pageslide
+ function _start( direction, speed ) {
+ var slideWidth,
+ bodyAnimateIn = {},
+ slideAnimateIn = {};
+ // If the slide is open or opening, just ignore the call
+ if( $pageslide.is(':visible') || _sliding ) return;
+ _sliding = true;
+
+ switch( direction ) {
+ case 'left':
+ if($(window).width() > 1600) {
+ $pageslide.css({'width': '1024px'});
+ slideWidth = $pageslide.outerWidth( true );
+ bodyAnimateIn['width'] = '-=' + slideWidth;
+ } else {
+ $pageslide.css({'width': '953px'});
+ slideWidth = $pageslide.outerWidth( true );
+ }
+
+ $pageslide.css({ left: 'auto', right: '-' + slideWidth + 'px' });
+ slideAnimateIn['right'] = '+=' + slideWidth;
+
+
+
+ // bodyAnimateIn['margin-left'] = '-=' + slideWidth;
+
+ // for Orbit ---> Fixed page does not move to the left
+ if($('#items').length) {
+ // bodyAnimateIn['padding-left'] = '+=' + slideWidth;
+ }
+ //
+
+ break;
+ default:
+ // Original
+ // $pageslide.css({ left: '-' + slideWidth + 'px', right: 'auto' });
+ // bodyAnimateIn['margin-left'] = '+=' + slideWidth;
+
+ // for Orbit
+ // if($('#items').length) {
+ // $pageslide.css({'width': '324px'});
+ // slideWidth = $pageslide.outerWidth( true );
+ // } else {
+ // $pageslide.css({'width': '264px'});
+ // }
+ slideWidth = $pageslide.outerWidth( true );
+ if($sidebarState && !$('#items').length) {
+ $pageslide.css({ left: '-' + (slideWidth-241) + 'px', right: 'auto' });
+ }else{
+ $pageslide.css({ left: '-' + (slideWidth-61) + 'px', right: 'auto' });
+ };
+
+
+ bodyAnimateIn['margin-left'] = '+=' + slideWidth;
+ // bodyAnimateIn['width'] = '-=' + slideWidth;
+ //
+
+ slideAnimateIn['left'] = '+=' + slideWidth;
+ break;
+ }
+
+ // Animate the slide, and attach this slide's settings to the element
+ console.log("d")
+ $body.animate(bodyAnimateIn, speed);
+ $pageslide.show()
+ .animate(slideAnimateIn, speed, function() {
+ _sliding = false;
+ });
+ }
+
+ /*
+ * Declaration
+ */
+ $.fn.pageslide = function(options) {
+ var $elements = this,
+ $ua = navigator.userAgent,
+ event = ($ua.match(/iPad/i)||$ua.match(/iPhone/i)||$ua.match(/iPod/i)||$ua.match(/Android/)) ? "touchstart" : "click";
+ // On click
+ $elements.on(event, function(e) {
+ var $self = $(this),
+ settings = $.extend({ href: $self.attr('href') }, options);
+
+ // Prevent the default behavior and stop propagation
+ e.preventDefault();
+ e.stopPropagation();
+
+ if ( $pageslide.is(':visible') && $self[0] == _lastCaller ) {
+ // If we clicked the same element twice, toggle closed
+ $.pageslide.close();
+ } else {
+ // Open
+ $.pageslide( settings );
+
+ // for Orbit
+
+ if($('#items').length) {
+ $('.item-menu > a, .navbar-inner').removeClass("active");
+ $(this).parents('.navbar-inner').addClass('active').end().addClass('active');
+ if(!$.support.touch) {
+ if($('.item-menu > a').hasClass('active')) {
+ $('.item-menu').css({
+ 'display': 'none',
+ });
+ $(this).parents('.item-menu').css({
+ 'display': 'inline-block',
+ });
+ }
+ }
+ if($(this).hasClass('view-page')) {
+ pageID = $(this).data('pageId');
+ }
+ } else if($('.tags-groups').length) {
+ $(this).parents('li').addClass("active").siblings().removeClass("active").parent('ul').siblings().children('li').removeClass("active");
+ } else {
+ $(this).parents("tr").addClass("active").siblings().removeClass("active");;
+ }
+ $pageslide.focusFirstField(); // focus first form
+
+ setTimeout(setScroll, 300);
+ //
+
+ // Record the last element to trigger pageslide
+ _lastCaller = $self[0];
+ }
+ });
+ };
+
+ /*
+ * Default settings
+ */
+ $.fn.pageslide.defaults = {
+ speed: 300, // Accepts standard jQuery effects speeds (i.e. fast, normal or milliseconds)
+ direction: 'right', // Accepts 'left' or 'right'
+ modal: false, // If set to true, you must explicitly close pageslide using $.pageslide.close();
+ iframe: false, // By default, linked pages are loaded into an iframe. Set this to false if you don't want an iframe.
+ href: null // Override the source of the content. Optional in most cases, but required when opening pageslide programmatically.
+ };
+
+ /*
+ * Public methods
+ */
+
+ // Open the pageslide
+ $.pageslide = function( options ) {
+ // Extend the settings with those the user has provided
+ var settings = $.extend({}, $.fn.pageslide.defaults, options);
+
+ // Are we trying to open in different direction?
+ // if( $pageslide.is(':visible') && $pageslide.data( 'direction' ) != settings.direction) {
+ if( $pageslide.is(':visible')) {
+ $.pageslide.close(function(){
+ _load( settings.href, settings.iframe );
+ _start( settings.direction, settings.speed );
+ });
+ } else {
+ _load( settings.href, settings.iframe );
+ if( $pageslide.is(':hidden') ) {
+ _start( settings.direction, settings.speed );
+ }
+ }
+ $pageslide.data( settings );
+
+
+ // for Orbit
+ if($('#add-tags').length) {
+ $('.set_new').addClass('active in').siblings().removeClass('active in');
+ $('#pageslide .selete_defat .search-query').attr('id','filter-default-tag')
+ $('#filter-default-tag').fastLiveFilter('.add-defalt-tags-list', '.filter-item', '.tag');
+ $('.add-defalt-tags-list .filter-item').removeClass('mark');
+ }
+ //
+ }
+
+ // Close the pageslide
+ $.pageslide.close = function( callback ) {
+ var $pageslide = $('#pageslide'),
+ slideWidth,
+ speed = $pageslide.data( 'speed' ),
+ bodyAnimateIn = {},
+ slideAnimateIn = {}
+
+ // If the slide isn't open, just ignore the call
+ if( $pageslide.is(':hidden') || _sliding ) return;
+ _sliding = true;
+
+ switch( $pageslide.data( 'direction' ) ) {
+ case 'left':
+ if($(window).width() > 1600) {
+ $pageslide.css({'width': '1024px'});
+ } else {
+ $pageslide.css({'width': '953px'});
+ }
+ slideWidth = $pageslide.outerWidth( true );
+ // bodyAnimateIn['margin-left'] = '+=' + slideWidth;
+ if($(window).width() > 1600) {
+ bodyAnimateIn['width'] = '+=' + slideWidth;
+ }
+
+ // for Orbit ---> Fixed page does not move to the left
+ if($('#items').length) {
+ bodyAnimateIn['padding-left'] = '-=' + slideWidth;
+ }
+ //
+
+ slideAnimateIn['right'] = '-=' + slideWidth;
+ break;
+ default:
+ // Original
+ // bodyAnimateIn['margin-left'] = '-=' + slideWidth;
+ // bodyAnimateIn['width'] = '+=' + slideWidth;
+
+ // for Orbit
+ // if($('#items').length) {
+ // $pageslide.css({'width': '324px'});
+ // slideWidth = $pageslide.outerWidth( true );
+ // } else {
+ // $pageslide.css({'width': '264px'});
+ // }
+ slideWidth = $pageslide.outerWidth( true );
+ bodyAnimateIn['margin-left'] = '-=' + slideWidth;
+ // bodyAnimateIn['width'] = '+=' + slideWidth;
+ if($pageslide.find('.preview').length) {
+ $pageslide.find('.preview').cycle('destroy');
+ $pageslide.find('.preview img').removeAttr('style');
+ }
+ //
+
+ slideAnimateIn['left'] = '-=' + slideWidth;
+ break;
+ }
+
+ // for Orbit
+ if($('#items').length) {
+ $(".navbar-inner").removeClass("active");
+ $('.item-menu > a, .navbar-inner').removeClass("active");
+ if(!$.support.touch) {
+ $('.item-menu').css({
+ 'display': 'none',
+ });
+ }
+ } else if($('.tags-groups').length) {
+ $('.tags-groups').children('li').removeClass("active");
+ } else {
+ $("tr").removeClass("active");
+ };
+ //
+
+ $pageslide.animate(slideAnimateIn, speed);
+ $body.animate(bodyAnimateIn, speed, function() {
+ $pageslide.hide();
+ _sliding = false;
+ if( typeof callback != 'undefined' ) callback();
+ $body.css({'width': 'auto'});
+ });
+ }
+
+ /* Events */
+
+ // Don't let clicks to the pageslide close the window
+ $pageslide.click(function(e) {
+ e.stopPropagation();
+ });
+
+ // Close the pageslide if the document is clicked or the users presses the ESC key, unless the pageslide is modal
+ $(document).bind('click keyup', function(e) {
+ // If this is a keyup event, let's see if it's an ESC key
+ if( e.type == "keyup" && e.keyCode != 27) return;
+
+ // Make sure it's visible, and we're not modal
+ if( $pageslide.is( ':visible' ) && !$pageslide.data( 'modal' ) ) {
+ $.pageslide.close();
+ }
+ });
+ function setScroll(){
+ $pageslide.children('.nano').nanoScroller({ scrollTop: 0, iOSNativeScrolling: true }); // set nano scroll
+ };
+
+})(jQuery);
\ No newline at end of file
diff --git a/app/assets/javascripts/lib/jquery.ui.touch-punch.min.js b/app/assets/javascripts/lib/jquery.ui.touch-punch.min.js
new file mode 100644
index 000000000..33d6f97e5
--- /dev/null
+++ b/app/assets/javascripts/lib/jquery.ui.touch-punch.min.js
@@ -0,0 +1,11 @@
+/*
+ * jQuery UI Touch Punch 0.2.2
+ *
+ * Copyright 2011, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return;}var c=b.ui.mouse.prototype,e=c._mouseInit,a;function d(g,h){if(g.originalEvent.touches.length>1){return;}g.preventDefault();var i=g.originalEvent.changedTouches[0],f=document.createEvent("MouseEvents");f.initMouseEvent(h,true,true,window,1,i.screenX,i.screenY,i.clientX,i.clientY,false,false,false,false,0,null);g.target.dispatchEvent(f);}c._touchStart=function(g){var f=this;if(a||!f._mouseCapture(g.originalEvent.changedTouches[0])){return;}a=true;f._touchMoved=false;d(g,"mouseover");d(g,"mousemove");d(g,"mousedown");};c._touchMove=function(f){if(!a){return;}this._touchMoved=true;d(f,"mousemove");};c._touchEnd=function(f){if(!a){return;}d(f,"mouseup");d(f,"mouseout");if(!this._touchMoved){d(f,"click");}a=false;};c._mouseInit=function(){var f=this;f.element.bind("touchstart",b.proxy(f,"_touchStart")).bind("touchmove",b.proxy(f,"_touchMove")).bind("touchend",b.proxy(f,"_touchEnd"));e.call(f);};})(jQuery);
\ No newline at end of file
diff --git a/app/assets/javascripts/lib/list-view.js b/app/assets/javascripts/lib/list-view.js
new file mode 100644
index 000000000..06fcd49ed
--- /dev/null
+++ b/app/assets/javascripts/lib/list-view.js
@@ -0,0 +1,24 @@
+function loadViewPage(url) {
+ var $listView = $('#list-view');
+
+ $listView.empty().removeClass('in active');
+ $listView.load(url, function(response, status, xhr) {
+ $(this).addClass('in active');
+ })
+}
+
+$(function() {
+ $viewType = window.localStorage.getItem('viewType') || '#member-list';
+ $viewSwitchNo = window.localStorage.getItem('viewSwitchNo') || 0;
+ loadViewPage('member-list.html ' + $viewType);
+ $('.view-switch').children('.btn').eq($viewSwitchNo).addClass('active');
+ $('.view-switch').delegate(".btn", clickEvent, function(e){
+ var url = $(this).attr('href'),
+ ID = url.split("#"),
+ ID = '#' + ID[ID.length-1];
+ window.localStorage.setItem('viewType', ID);
+ window.localStorage.setItem('viewSwitchNo', $(this).index());
+ loadViewPage(url);
+ e.preventDefault();
+ });
+})
\ No newline at end of file
diff --git a/app/assets/javascripts/lib/module-nav-scroll.js b/app/assets/javascripts/lib/module-nav-scroll.js
new file mode 100644
index 000000000..26ebeabe8
--- /dev/null
+++ b/app/assets/javascripts/lib/module-nav-scroll.js
@@ -0,0 +1,60 @@
+// Search Clear
+!function ($) {
+ $.fn.searchClear = function (param){
+ _defaultSettings = {
+ inputName: ':input',
+ inputIcon: 'inputIcon',
+ clearBtnIcon: 'clearBtnIcon',
+ };
+ _set = $.extend(_defaultSettings, param);
+ $this = this;
+ $input = this.find(_set.inputName);
+ $tmp = ' ';
+ $input.wrap('
');
+ $this.find('.sc-field').prepend($tmp);
+ $searchClear = $this.find(".search-clear");
+ function run(e) {
+ $searchClear.hide();
+ if($input.val().length > 0) {
+ $searchClear.show();
+ }else {
+ $searchClear.hide();
+ }
+ $input.on("blur keyup", function(){
+ if($(this).val().length > 0) {
+ $searchClear.show();
+ }else {
+ $searchClear.hide();
+ }
+ });
+ $searchClear.on({
+ click: function(){
+ $(this).hide();
+ $input.val("")
+ },
+ });
+ }
+
+ // Checking IE10
+ // if Windows 8 and IE is ture. remove search clear buttom and fix text input padding-right
+ if(/Windows NT 6.2/g.test(navigator.userAgent)){
+ if(/MSIE/g.test(navigator.userAgent)){
+ $searchClear.remove();
+ $input.css({
+ 'padding-right': '5px',
+ });
+ }else{run()}
+ }else{run()}
+ }
+}(window.jQuery);
+
+
+
+var $moduleWidth = 0,
+ $moduleNav = $('.module-nav');
+
+var navMenu = new iScroll(document.getElementsByClassName('nav-scroll')[0], {
+ snap: true,
+ momentum: false,
+ hScrollbar: false,
+ });
\ No newline at end of file
diff --git a/app/assets/javascripts/lib/search.tags.js b/app/assets/javascripts/lib/search.tags.js
new file mode 100644
index 000000000..649da3f90
--- /dev/null
+++ b/app/assets/javascripts/lib/search.tags.js
@@ -0,0 +1,3 @@
+$(function() {
+ $('#filter-input').fastLiveFilter('#tags-list', '.tags');
+});
\ No newline at end of file
diff --git a/app/assets/javascripts/lib/tags.js b/app/assets/javascripts/lib/tags.js
new file mode 100644
index 000000000..bf5f58e7f
--- /dev/null
+++ b/app/assets/javascripts/lib/tags.js
@@ -0,0 +1,118 @@
+function checkTagsQuantity() {
+ var $tagLead = $('.tag-lead'),
+ $tagsGroups = $('.tags-groups');
+
+ $tagsGroups.each(function(i) {
+ var $children = $(this).children().length;
+ $tagLead.eq(i).children('.badge').text($children);
+ })
+}
+
+function checkedLength() {
+ var $card = $('.card'),
+ $moduleTags,
+ $defaultTags,
+ $toDefault;
+ $card.on('click', function() {
+ if($('.default-tags').length) {
+ $moduleTags = $('.module-tags input[type="checkbox"]:checked');
+ $defaultTags = $('.default-tags input[type="checkbox"]:checked');
+
+ if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) {
+ $('#mergerTags').removeClass('hide');
+ } else {
+ $('#mergerTags').addClass('hide');
+ };
+
+ if ($moduleTags.length > 0 || $defaultTags.length > 0) {
+ $('#deselect').removeClass('hide');
+ $('#deleteTags').removeClass('hide');
+ $('#deselect').on('click', deselect);
+ } else {
+ $('#deselect').addClass('hide');
+ $('#deleteTags').addClass('hide');
+ $('#deselect').off('click', deselect);
+ };
+
+ if ($moduleTags.length > 0 && $defaultTags.length == 0) {
+ $('#addDefault').removeClass('hide');
+ } else {
+ $('#addDefault').addClass('hide');
+ };
+ } else {
+ $moduleTags = $('.module-tags input[type="checkbox"]:checked');
+
+ if ($moduleTags.length > 0) {
+ $('#deselect').removeClass('hide');
+ $('#deleteTags').removeClass('hide');
+ $('#deselect').on('click', deselect);
+ } else {
+ $('#deselect').addClass('hide');
+ $('#deleteTags').addClass('hide');
+ $('#deselect').off('click', deselect);
+ };
+ };
+ })
+ $('#mergerTags').on('click', function() {
+ if($moduleTags || $defaultTags) {
+ if($moduleTags.length > 1 || $moduleTags.length+$defaultTags.length > 1) {
+ mergerTags()
+ }
+ }
+ });
+
+ function deselect() {
+ $('.tags input[type="checkbox"]').attr('checked', false);
+ $('.card').removeClass('active');
+ $('.bottomnav button').not('.open-slide').addClass('hide');
+ }
+}
+
+
+function addTagsTab() {
+ $('#add-tags .nav a').click(function (e) {
+ e.preventDefault();
+ $(this).tab('show');
+ })
+}
+
+
+function mergerTags() {
+ var $moduleTags = $('.module-tags input[type="checkbox"]:checked'),
+ $defaultTags = $('.default-tags input[type="checkbox"]:checked');
+
+ $defaultTags.each(function(i) {
+ $defaultTags.eq(i).parents('.filter-item').clone().appendTo('#tags-merger .tags-groups');
+ $('#tags-merger .tags-groups .filter-item').addClass('def');
+ });
+ $moduleTags.each(function(i) {
+ $moduleTags.eq(i).parents('.filter-item').clone().appendTo('#tags-merger .tags-groups');
+ });
+
+ $('#tags-merger').modal('show', changeTagName());
+ function changeTagName() {
+ var $tagsMerger = $('#tags-merger'),
+ $newTagsName = $('.new-tags-name'),
+ $filterItem = $tagsMerger.find('.filter-item');
+ $filterItem.find('.card, .amount').remove();
+ $filterItem.find('a').removeAttr('class');
+ $filterItem.find('a').removeAttr('href');
+ $filterItem.on('click', function() {
+ $(this).find('.tag').each(function(i) {
+ $newTagsName.eq(i).val($(this).text())
+ });
+ });
+ }
+}
+$(function() {
+ if($('.default-tags').length) {
+ checkTagsQuantity();
+ checkedLength();
+ $('#tags-merger').on('hidden', function () {
+ $(this).find('.filter-item').remove();
+ });
+ } else {
+ checkedLength();
+ };
+ addTagsTab();
+});
\ No newline at end of file
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.bg.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.bg.js
new file mode 100644
index 000000000..0282103a4
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.bg.js
@@ -0,0 +1,14 @@
+/**
+ * Bulgarian translation for bootstrap-datetimepicker
+ * Apostol Apostolov
+ */
+;(function($){
+ $.fn.datetimepicker.dates['bg'] = {
+ days: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота", "Неделя"],
+ daysShort: ["Нед", "Пон", "Вто", "Сря", "Чет", "Пет", "Съб", "Нед"],
+ daysMin: ["Н", "П", "В", "С", "Ч", "П", "С", "Н"],
+ months: ["Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"],
+ monthsShort: ["Ян", "Фев", "Мар", "Апр", "Май", "Юни", "Юли", "Авг", "Сеп", "Окт", "Ное", "Дек"],
+ today: "днес"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.cs.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.cs.js
new file mode 100644
index 000000000..b8f151f9b
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.cs.js
@@ -0,0 +1,14 @@
+/**
+ * Czech translation for bootstrap-datetimepicker
+ * Matěj Koubík
+ */
+;(function($){
+ $.fn.datetimepicker.dates['cs'] = {
+ days: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle"],
+ daysShort: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So", "Ne"],
+ daysMin: ["N", "P", "Ú", "St", "Č", "P", "So", "N"],
+ months: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"],
+ monthsShort: ["Led", "Úno", "Bře", "Dub", "Kvě", "Čer", "Čnc", "Srp", "Zář", "Říj", "Lis", "Pro"],
+ today: "Dnes"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.da.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.da.js
new file mode 100644
index 000000000..db2a63d40
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.da.js
@@ -0,0 +1,14 @@
+/**
+ * Danish translation for bootstrap-datetimepicker
+ * Christian Pedersen
+ */
+;(function($){
+ $.fn.datetimepicker.dates['da'] = {
+ days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
+ daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
+ daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
+ months: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
+ today: "I Dag"
+ };
+}(jQuery));
\ No newline at end of file
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.de.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.de.js
new file mode 100644
index 000000000..d57876836
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.de.js
@@ -0,0 +1,14 @@
+/**
+ * German translation for bootstrap-datetimepicker
+ * Sam Zurcher
+ */
+;(function($){
+ $.fn.datetimepicker.dates['de'] = {
+ days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"],
+ daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam", "Son"],
+ daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"],
+ months: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
+ monthsShort: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
+ today: "Heute"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.es.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.es.js
new file mode 100644
index 000000000..1114f5a5c
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.es.js
@@ -0,0 +1,14 @@
+/**
+ * Spanish translation for bootstrap-datetimepicker
+ * Bruno Bonamin
+ */
+;(function($){
+ $.fn.datetimepicker.dates['es'] = {
+ days: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"],
+ daysShort: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"],
+ daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa", "Do"],
+ months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
+ monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"],
+ today: "Hoy"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.fi.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.fi.js
new file mode 100644
index 000000000..a902f05cd
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.fi.js
@@ -0,0 +1,14 @@
+/**
+ * Finnish translation for bootstrap-datetimepicker
+ * Jaakko Salonen
+ */
+;(function($){
+ $.fn.datetimepicker.dates['fi'] = {
+ days: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"],
+ daysShort: ["sun", "maa", "tii", "kes", "tor", "per", "lau", "sun"],
+ daysMin: ["su", "ma", "ti", "ke", "to", "pe", "la", "su"],
+ months: ["tammikuu", "helmikuu", "maaliskuu", "huhtikuu", "toukokuu", "kesäkuu", "heinäkuu", "elokuu", "syyskuu", "lokakuu", "marraskuu", "joulukuu"],
+ monthsShort: ["tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mar", "jou"],
+ today: "tänään"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.fr.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.fr.js
new file mode 100644
index 000000000..c5ce09027
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.fr.js
@@ -0,0 +1,14 @@
+/**
+ * French translation for bootstrap-datetimepicker
+ * Nico Mollet
+ */
+;(function($){
+ $.fn.datetimepicker.dates['fr'] = {
+ days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"],
+ daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"],
+ daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"],
+ months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
+ monthsShort: ["Jan", "Fev", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Dec"],
+ today: "Aujourd'hui"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.hr.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.hr.js
new file mode 100644
index 000000000..c72cbb580
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.hr.js
@@ -0,0 +1,13 @@
+/**
+ * Croatian localisation
+ */
+;(function($){
+ $.fn.datetimepicker.dates['hr'] = {
+ days: ["Nedjelja", "Ponedjelja", "Utorak", "Srijeda", "Četrtak", "Petak", "Subota", "Nedjelja"],
+ daysShort: ["Ned", "Pon", "Uto", "Srr", "Čet", "Pet", "Sub", "Ned"],
+ daysMin: ["Ne", "Po", "Ut", "Sr", "Če", "Pe", "Su", "Ne"],
+ months: ["Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"],
+ monthsShort: ["Sije", "Velj", "Ožu", "Tra", "Svi", "Lip", "Jul", "Kol", "Ruj", "Lis", "Stu", "Pro"],
+ today: "Danas"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.id.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.id.js
new file mode 100644
index 000000000..10397b2b5
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.id.js
@@ -0,0 +1,13 @@
+/**
+ * Bahasa translation for bootstrap-datetimepicker
+ * Azwar Akbar
+ */
+;(function($){
+ $.fn.datetimepicker.dates['id'] = {
+ days: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"],
+ daysShort: ["Mgu", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab", "Mgu"],
+ daysMin: ["Mg", "Sn", "Sl", "Ra", "Ka", "Ju", "Sa", "Mg"],
+ months: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"]
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.is.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.is.js
new file mode 100644
index 000000000..27ed846d8
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.is.js
@@ -0,0 +1,14 @@
+/**
+ * Icelandic translation for bootstrap-datetimepicker
+ * Hinrik Örn Sigurðsson
+ */
+;(function($){
+ $.fn.datetimepicker.dates['is'] = {
+ days: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur", "Sunnudagur"],
+ daysShort: ["Sun", "Mán", "Þri", "Mið", "Fim", "Fös", "Lau", "Sun"],
+ daysMin: ["Su", "Má", "Þr", "Mi", "Fi", "Fö", "La", "Su"],
+ months: ["Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"],
+ today: "Í Dag"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.it.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.it.js
new file mode 100644
index 000000000..4a20fd6dd
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.it.js
@@ -0,0 +1,14 @@
+/**
+ * Italian translation for bootstrap-datetimepicker
+ * Enrico Rubboli
+ */
+;(function($){
+ $.fn.datetimepicker.dates['it'] = {
+ days: ["Domenica", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"],
+ daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"],
+ daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"],
+ months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
+ monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"],
+ today: "Oggi"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.ja.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.ja.js
new file mode 100644
index 000000000..2040a7ebc
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.ja.js
@@ -0,0 +1,13 @@
+/**
+ * Japanese translation for bootstrap-datetimepicker
+ * Norio Suzuki
+ */
+;(function($){
+ $.fn.datetimepicker.dates['ja'] = {
+ days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜", "日曜"],
+ daysShort: ["日", "月", "火", "水", "木", "金", "土", "日"],
+ daysMin: ["日", "月", "火", "水", "木", "金", "土", "日"],
+ months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"],
+ monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.kr.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.kr.js
new file mode 100644
index 000000000..23c112e1c
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.kr.js
@@ -0,0 +1,13 @@
+/**
+ * Korean translation for bootstrap-datetimepicker
+ * Gu Youn
+ */
+;(function($){
+ $.fn.datetimepicker.dates['kr'] = {
+ days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"],
+ daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"],
+ daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"],
+ months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
+ monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.lt.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.lt.js
new file mode 100644
index 000000000..761b89d76
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.lt.js
@@ -0,0 +1,16 @@
+/**
+ * Lithuanian translation for bootstrap-datetimepicker
+ * Šarūnas Gliebus
+ */
+
+;(function($){
+ $.fn.datetimepicker.dates['lt'] = {
+ days: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis", "Sekmadienis"],
+ daysShort: ["S", "Pr", "A", "T", "K", "Pn", "Š", "S"],
+ daysMin: ["Sk", "Pr", "An", "Tr", "Ke", "Pn", "Št", "Sk"],
+ months: ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"],
+ monthsShort: ["Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rugp", "Rugs", "Spa", "Lap", "Gru"],
+ today: "Šiandien",
+ weekStart: 1
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.lv.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.lv.js
new file mode 100644
index 000000000..86b127655
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.lv.js
@@ -0,0 +1,16 @@
+/**
+ * Latvian translation for bootstrap-datetimepicker
+ * Artis Avotins
+ */
+
+;(function($){
+ $.fn.datetimepicker.dates['lv'] = {
+ days: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena", "Svētdiena"],
+ daysShort: ["Sv", "P", "O", "T", "C", "Pk", "S", "Sv"],
+ daysMin: ["Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "St", "Sv"],
+ months: ["Janvāris", "Februāris", "Marts", "Aprīlis", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jūn", "Jūl", "Aug", "Sep", "Okt", "Nov", "Dec."],
+ today: "Šodien",
+ weekStart: 1
+ };
+}(jQuery));
\ No newline at end of file
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.ms.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.ms.js
new file mode 100644
index 000000000..b1f689faf
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.ms.js
@@ -0,0 +1,14 @@
+/**
+ * Malay translation for bootstrap-datetimepicker
+ * Ateman Faiz
+ */
+;(function($){
+ $.fn.datetimepicker.dates['ms'] = {
+ days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"],
+ daysShort: ["Aha", "Isn", "Sel", "Rab", "Kha", "Jum", "Sab", "Aha"],
+ daysMin: ["Ah", "Is", "Se", "Ra", "Kh", "Ju", "Sa", "Ah"],
+ months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ogo", "Sep", "Okt", "Nov", "Dis"],
+ today: "Hari Ini"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.nb.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.nb.js
new file mode 100644
index 000000000..74e8ddde2
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.nb.js
@@ -0,0 +1,14 @@
+/**
+ * Norwegian (bokmål) translation for bootstrap-datetimepicker
+ * Fredrik Sundmyhr
+ */
+;(function($){
+ $.fn.datetimepicker.dates['nb'] = {
+ days: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"],
+ daysShort: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"],
+ daysMin: ["Sø", "Ma", "Ti", "On", "To", "Fr", "Lø", "Sø"],
+ months: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"],
+ today: "I Dag"
+ };
+}(jQuery));
\ No newline at end of file
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.nl.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.nl.js
new file mode 100644
index 000000000..64c752785
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.nl.js
@@ -0,0 +1,14 @@
+/**
+ * Dutch translation for bootstrap-datetimepicker
+ * Reinier Goltstein
+ */
+;(function($){
+ $.fn.datetimepicker.dates['nl'] = {
+ days: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"],
+ daysShort: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
+ daysMin: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"],
+ months: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
+ monthsShort: ["Jan", "Feb", "Mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
+ today: "Vandaag"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.pl.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.pl.js
new file mode 100644
index 000000000..8307f51d0
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.pl.js
@@ -0,0 +1,15 @@
+/**
+ * Polish translation for bootstrap-datetimepicker
+ * Robert
+ */
+;(function($){
+ $.fn.datetimepicker.dates['pl'] = {
+ days: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"],
+ daysShort: ["Nie", "Pn", "Wt", "Śr", "Czw", "Pt", "So", "Nie"],
+ daysMin: ["N", "Pn", "Wt", "Śr", "Cz", "Pt", "So", "N"],
+ months: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
+ monthsShort: ["Sty", "Lu", "Mar", "Kw", "Maj", "Cze", "Lip", "Sie", "Wrz", "Pa", "Lis", "Gru"],
+ today: "Dzisiaj",
+ weekStart: 1
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.pt-BR.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.pt-BR.js
new file mode 100644
index 000000000..056b13812
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.pt-BR.js
@@ -0,0 +1,14 @@
+/**
+ * Brazilian translation for bootstrap-datetimepicker
+ * Cauan Cabral
+ */
+;(function($){
+ $.fn.datetimepicker.dates['pt-BR'] = {
+ days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
+ daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
+ daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
+ months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
+ monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"],
+ today: "Hoje"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.pt.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.pt.js
new file mode 100644
index 000000000..223c24dd9
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.pt.js
@@ -0,0 +1,14 @@
+/**
+ * Portuguese translation for bootstrap-datetimepicker
+ * Original code: Cauan Cabral
+ * Tiago Melo
+ */
+;(function($){
+ $.fn.datetimepicker.dates['pt'] = {
+ days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo"],
+ daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb", "Dom"],
+ daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa", "Do"],
+ months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
+ monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"]
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.ro.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.ro.js
new file mode 100644
index 000000000..d2103a3fa
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.ro.js
@@ -0,0 +1,15 @@
+/**
+ * Romanian translation for bootstrap-datetimepicker
+ * Cristian Vasile
+ */
+;(function($){
+ $.fn.datetimepicker.dates['ro'] = {
+ days: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"],
+ daysShort: ["Dum", "Lun", "Mar", "Mie", "Joi", "Vin", "Sâm", "Dum"],
+ daysMin: ["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ", "Du"],
+ months: ["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"],
+ monthsShort: ["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ today: "Astăzi",
+ weekStart: 1
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.ru.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.ru.js
new file mode 100644
index 000000000..464397aef
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.ru.js
@@ -0,0 +1,14 @@
+/**
+ * Russian translation for bootstrap-datetimepicker
+ * Victor Taranenko
+ */
+;(function($){
+ $.fn.datetimepicker.dates['ru'] = {
+ days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"],
+ daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб", "Вск"],
+ daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"],
+ months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
+ monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
+ today: "Сегодня"
+ };
+}(jQuery));
\ No newline at end of file
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.sk.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.sk.js
new file mode 100644
index 000000000..d9e24908c
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.sk.js
@@ -0,0 +1,14 @@
+/**
+ * Slovak translation for bootstrap-datetimepicker
+ * Marek Lichtner
+ */
+;(function($){
+ $.fn.datetimepicker.dates["sk"] = {
+ days: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota", "Nedeľa"],
+ daysShort: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So", "Ne"],
+ daysMin: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So", "Ne"],
+ months: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"],
+ today: "Dnes"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.sl.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.sl.js
new file mode 100644
index 000000000..1fac6cd94
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.sl.js
@@ -0,0 +1,14 @@
+/**
+ * Slovene translation for bootstrap-datetimepicker
+ * Gregor Rudolf
+ */
+;(function($){
+ $.fn.datetimepicker.dates['sl'] = {
+ days: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota", "Nedelja"],
+ daysShort: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob", "Ned"],
+ daysMin: ["Ne", "Po", "To", "Sr", "Če", "Pe", "So", "Ne"],
+ months: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
+ today: "Danes"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.sr-latin.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.sr-latin.js
new file mode 100644
index 000000000..fe05fdbe5
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.sr-latin.js
@@ -0,0 +1,14 @@
+/**
+ * Serbian latin translation for bootstrap-datetimepicker
+ * Bojan Milosavlević
+ */
+;(function($){
+ $.fn.datetimepicker.dates['sr-latin'] = {
+ days: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota", "Nedelja"],
+ daysShort: ["Ned", "Pon", "Uto", "Sre", "Čet", "Pet", "Sub", "Ned"],
+ daysMin: ["N", "Po", "U", "Sr", "Č", "Pe", "Su", "N"],
+ months: ["Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Avg", "Sep", "Okt", "Nov", "Dec"],
+ today: "Danas"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.sr.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.sr.js
new file mode 100644
index 000000000..2c6fc2ecc
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.sr.js
@@ -0,0 +1,14 @@
+/**
+ * Serbian cyrillic translation for bootstrap-datetimepicker
+ * Bojan Milosavlević
+ */
+;(function($){
+ $.fn.datetimepicker.dates['sr'] = {
+ days: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота", "Недеља"],
+ daysShort: ["Нед", "Пон", "Уто", "Сре", "Чет", "Пет", "Суб", "Нед"],
+ daysMin: ["Н", "По", "У", "Ср", "Ч", "Пе", "Су", "Н"],
+ months: ["Јануар", "Фебруар", "Март", "Април", "Мај", "Јун", "Јул", "Август", "Септембар", "Октобар", "Новембар", "Децембар"],
+ monthsShort: ["Јан", "Феб", "Мар", "Апр", "Мај", "Јун", "Јул", "Авг", "Сеп", "Окт", "Нов", "Дец"],
+ today: "Данас"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.sv.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.sv.js
new file mode 100644
index 000000000..bb19b5068
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.sv.js
@@ -0,0 +1,14 @@
+/**
+ * Swedish translation for bootstrap-datetimepicker
+ * Patrik Ragnarsson
+ */
+;(function($){
+ $.fn.datetimepicker.dates['sv'] = {
+ days: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"],
+ daysShort: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"],
+ daysMin: ["Sö", "Må", "Ti", "On", "To", "Fr", "Lö", "Sö"],
+ months: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
+ monthsShort: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"],
+ today: "I Dag"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.th.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.th.js
new file mode 100644
index 000000000..a06835587
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.th.js
@@ -0,0 +1,14 @@
+/**
+ * Thai translation for bootstrap-datetimepicker
+ * Suchau Jiraprapot
+ */
+;(function($){
+ $.fn.datetimepicker.dates['th'] = {
+ days: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"],
+ daysShort: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
+ daysMin: ["อา", "จ", "อ", "พ", "พฤ", "ศ", "ส", "อา"],
+ months: ["มกราคม", "กุมภาพันธ์", "มีนาคม", "เมษายน", "พฤษภาคม", "มิถุนายน", "กรกฎาคม", "สิงหาคม", "กันยายน", "ตุลาคม", "พฤศจิกายน", "ธันวาคม"],
+ monthsShort: ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."],
+ today: "วันนี้"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.tr.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.tr.js
new file mode 100644
index 000000000..01f7dc1cb
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.tr.js
@@ -0,0 +1,15 @@
+/**
+ * Turkish translation for bootstrap-datetimepicker
+ * Serkan Algur
+ */
+;(function($){
+ $.fn.datetimepicker.dates['tr'] = {
+ days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar"],
+ daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts", "Pz"],
+ daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct", "Pz"],
+ months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
+ monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"],
+ today: "Bugün"
+ };
+}(jQuery));
+
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.zh-CN.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.zh-CN.js
new file mode 100644
index 000000000..42629c022
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.zh-CN.js
@@ -0,0 +1,14 @@
+/**
+ * Simplified Chinese translation for bootstrap-datetimepicker
+ * Yuan Cheung
+ */
+;(function($){
+ $.fn.datetimepicker.dates['zh-CN'] = {
+ days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
+ daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
+ daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
+ months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+ monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+ today: "今日"
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/locales/bootstrap-datetimepicker.zh-TW.js b/app/assets/javascripts/locales/bootstrap-datetimepicker.zh-TW.js
new file mode 100644
index 000000000..2dab261fa
--- /dev/null
+++ b/app/assets/javascripts/locales/bootstrap-datetimepicker.zh-TW.js
@@ -0,0 +1,13 @@
+/**
+ * Traditional Chinese translation for bootstrap-datetimepicker
+ * Rung-Sheng Jang
+ */
+;(function($){
+ $.fn.datetimepicker.dates['zh-TW'] = {
+ days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
+ daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
+ daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
+ months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
+ monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
+ };
+}(jQuery));
diff --git a/app/assets/javascripts/orbit_js_1.0.1-front-end.js b/app/assets/javascripts/orbit_js_1.0.1-front-end.js
new file mode 100644
index 000000000..d437b0633
--- /dev/null
+++ b/app/assets/javascripts/orbit_js_1.0.1-front-end.js
@@ -0,0 +1,81 @@
+// Focus first element
+!function ($) {
+ $.fn.focusFirstField = function(){
+ $this = this;
+ $this.find(":text:visible:enabled").filter(function(){
+ return $(this).parents(":hidden").size() == 0;
+ }).slice(0,1).focus();
+ return this;
+ }
+}(window.jQuery);
+
+
+// Search Clear
+!function ($) {
+ $.fn.searchClear = function (param){
+ _defaultSettings = {
+ inputName: ':input',
+ inputIcon: 'inputIcon',
+ clearBtnIcon: 'clearBtnIcon',
+ };
+ _set = $.extend(_defaultSettings, param);
+ $this = this;
+ $input = this.find(_set.inputName);
+ $tmp = ' ';
+ $input.wrap('
');
+ $this.find('.sc-field').prepend($tmp);
+ $searchClear = $this.find(".search-clear");
+ function run(e) {
+ $searchClear.hide();
+ if($input.val().length > 0) {
+ $searchClear.show();
+ }else {
+ $searchClear.hide();
+ }
+ $input.on("blur keyup", function(){
+ if($(this).val().length > 0) {
+ $searchClear.show();
+ }else {
+ $searchClear.hide();
+ }
+ });
+ $searchClear.on({
+ click: function(){
+ $(this).hide();
+ $input.val("")
+ },
+ });
+ }
+
+ // Checking IE10
+ // if Windows 8 and IE is ture. remove search clear buttom and fix text input padding-right
+ if(/Windows NT 6.2/g.test(navigator.userAgent)){
+ if(/MSIE/g.test(navigator.userAgent)){
+ $searchClear.remove();
+ $input.css({
+ 'padding-right': '5px',
+ });
+ }else{run()}
+ }else{run()}
+ }
+}(window.jQuery);
+
+// Document Ready
+$(function() {
+ $('body').prepend("
");
+ $("#orbit_bar_temp").load('/load_orbit_bar',function(){
+ $('body').prepend($(this).html());
+ $(this).remove();
+ $('#search').searchClear({
+ inputName: '.search-query',
+ inputIcon: 'icon-search',
+ clearBtnIcon: 'icons-cross-3',
+ });
+ $('#login').on('shown', function () {
+ $(document.body).addClass('modalBlur');
+ $('#login').focusFirstField();
+ }).on("hide", function() {
+ $(document.body).removeClass('modalBlur');
+ });
+ });
+});
diff --git a/app/assets/javascripts/other/jquery.nicescroll.js b/app/assets/javascripts/other/jquery.nicescroll.js
new file mode 100644
index 000000000..cf74ea70d
--- /dev/null
+++ b/app/assets/javascripts/other/jquery.nicescroll.js
@@ -0,0 +1,2855 @@
+/* jquery.nicescroll
+-- version 3.1.4
+-- copyright 2011-12 InuYaksa*2012
+-- licensed under the MIT
+--
+-- http://areaaperta.com/nicescroll
+-- https://github.com/inuyaksa/jquery.nicescroll
+--
+*/
+
+(function(jQuery){
+
+ // globals
+ var domfocus = false;
+ var mousefocus = false;
+ var zoomactive = false;
+ var tabindexcounter = 5000;
+ var ascrailcounter = 2000;
+
+ var $ = jQuery; // sandbox
+
+ // http://stackoverflow.com/questions/2161159/get-script-path
+ function getScriptPath() {
+ var scripts=document.getElementsByTagName('script');
+ var path=scripts[scripts.length-1].src.split('?')[0];
+ return (path.split('/').length>0) ? path.split('/').slice(0,-1).join('/')+'/' : '';
+ }
+ var scriptpath = getScriptPath();
+
+ // derived by http://blog.joelambert.co.uk/2011/06/01/a-better-settimeoutsetinterval/
+ var setAnimationFrame = (function(){
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ false;
+ })();
+ var clearAnimationFrame = (function(){
+ return window.cancelRequestAnimationFrame ||
+ window.webkitCancelRequestAnimationFrame ||
+ window.mozCancelRequestAnimationFrame ||
+ window.oCancelRequestAnimationFrame ||
+ window.msCancelRequestAnimationFrame ||
+ false;
+ })();
+
+ var browserdetected = false;
+
+ var getBrowserDetection = function() {
+
+ if (browserdetected) return browserdetected;
+
+ var domtest = document.createElement('DIV');
+
+ var d = {};
+
+ d.haspointerlock = "pointerLockElement" in document || "mozPointerLockElement" in document || "webkitPointerLockElement" in document;
+
+ d.isopera = ("opera" in window);
+ d.isopera12 = (d.isopera&&("getUserMedia" in navigator));
+
+ d.isie = (("all" in document) && ("attachEvent" in domtest) && !d.isopera);
+ d.isieold = (d.isie && !("msInterpolationMode" in domtest.style)); // IE6 and older
+ d.isie7 = d.isie&&!d.isieold&&(!("documentMode" in document)||(document.documentMode==7));
+ d.isie8 = d.isie&&("documentMode" in document)&&(document.documentMode==8);
+ d.isie9 = d.isie&&("performance" in window)&&(document.documentMode>=9);
+ d.isie10 = d.isie&&("performance" in window)&&(document.documentMode>=10);
+
+ d.isie9mobile = /iemobile.9/i.test(navigator.userAgent); //wp 7.1 mango
+ if (d.isie9mobile) d.isie9 = false;
+ d.isie7mobile = (!d.isie9mobile&&d.isie7) && /iemobile/i.test(navigator.userAgent); //wp 7.0
+
+ d.ismozilla = ("MozAppearance" in domtest.style);
+
+ d.iswebkit = ("WebkitAppearance" in domtest.style);
+
+ d.ischrome = ("chrome" in window);
+ d.ischrome22 = (d.ischrome&&d.haspointerlock);
+
+ d.cantouch = ("ontouchstart" in document.documentElement)||("ontouchstart" in window); // detection for Chrome Touch Emulation
+ d.hasmstouch = (window.navigator.msPointerEnabled||false); // IE10+ pointer events
+
+ d.ismac = /^mac$/i.test(navigator.platform);
+
+ d.isios = (d.cantouch && /iphone|ipad|ipod/i.test(navigator.platform));
+ d.isios4 = ((d.isios)&&!("seal" in Object));
+
+ d.isandroid = (/android/i.test(navigator.userAgent));
+
+ d.trstyle = false;
+ d.hastransform = false;
+ d.hastranslate3d = false;
+ d.transitionstyle = false;
+ d.hastransition = false;
+ d.transitionend = false;
+
+ var check = ['transform','msTransform','webkitTransform','MozTransform','OTransform'];
+ for(var a=0;anw&&!dd.tt) {
+ self.delaylist[name] = {
+ last:nw+tm,
+ tt:setTimeout(function(){self.delaylist[name].tt=0;fn.call();},tm)
+ }
+ }
+ else if (!dd||!dd.tt) {
+ self.delaylist[name] = {
+ last:nw,
+ tt:0
+ }
+ setTimeout(function(){fn.call();},0);
+ }
+ };
+
+ this.synched = function(name,fn) {
+
+ function requestSync() {
+ if (self.onsync) return;
+ setAnimationFrame(function(){
+ self.onsync = false;
+ for(name in self.synclist){
+ var fn = self.synclist[name];
+ if (fn) fn.call(self);
+ self.synclist[name] = false;
+ }
+ });
+ self.onsync = true;
+ };
+
+ self.synclist[name] = fn;
+ requestSync();
+ return name;
+ };
+
+ this.unsynched = function(name) {
+ if (self.synclist[name]) self.synclist[name] = false;
+ }
+
+ this.css = function(el,pars) { // save & set
+ for(var n in pars) {
+ self.saved.css.push([el,n,el.css(n)]);
+ el.css(n,pars[n]);
+ }
+ };
+
+ this.scrollTop = function(val) {
+ return (typeof val == "undefined") ? self.getScrollTop() : self.setScrollTop(val);
+ };
+
+ this.scrollLeft = function(val) {
+ return (typeof val == "undefined") ? self.getScrollLeft() : self.setScrollLeft(val);
+ };
+
+// derived by by Dan Pupius www.pupius.net
+ BezierClass = function(st,ed,spd,p1,p2,p3,p4) {
+ this.st = st;
+ this.ed = ed;
+ this.spd = spd;
+
+ this.p1 = p1||0;
+ this.p2 = p2||1;
+ this.p3 = p3||0;
+ this.p4 = p4||1;
+
+ this.ts = (new Date()).getTime();
+ this.df = this.ed-this.st;
+ };
+ BezierClass.prototype = {
+ B2:function(t){ return 3*t*t*(1-t) },
+ B3:function(t){ return 3*t*(1-t)*(1-t) },
+ B4:function(t){ return (1-t)*(1-t)*(1-t) },
+ getNow:function(){
+ var nw = (new Date()).getTime();
+ var pc = 1-((nw-this.ts)/this.spd);
+ var bz = this.B2(pc) + this.B3(pc) + this.B4(pc);
+ return (pc<0) ? this.ed : this.st+Math.round(this.df*bz);
+ },
+ update:function(ed,spd){
+ this.st = this.getNow();
+ this.ed = ed;
+ this.spd = spd;
+ this.ts = (new Date()).getTime();
+ this.df = this.ed-this.st;
+ return this;
+ }
+ };
+
+ if (this.ishwscroll) {
+ // hw accelerated scroll
+ this.doc.translate = {x:0,y:0,tx:"0px",ty:"0px"};
+
+ //this one can help to enable hw accel on ios6 http://indiegamr.com/ios6-html-hardware-acceleration-changes-and-how-to-fix-them/
+ if (cap.hastranslate3d&&cap.isios) this.doc.css("-webkit-backface-visibility","hidden"); // prevent flickering http://stackoverflow.com/questions/3461441/
+
+ //derived from http://stackoverflow.com/questions/11236090/
+ function getMatrixValues() {
+ var tr = self.doc.css(cap.trstyle);
+ if (tr&&(tr.substr(0,6)=="matrix")) {
+ return tr.replace(/^.*\((.*)\)$/g, "$1").replace(/px/g,'').split(/, +/);
+ }
+ return false;
+ }
+
+ this.getScrollTop = function(last) {
+ if (!last) {
+ var mtx = getMatrixValues();
+ if (mtx) return (mtx.length==16) ? -mtx[13] : -mtx[5]; //matrix3d 16 on IE10
+ if (self.timerscroll&&self.timerscroll.bz) return self.timerscroll.bz.getNow();
+ }
+ return self.doc.translate.y;
+ };
+
+ this.getScrollLeft = function(last) {
+ if (!last) {
+ var mtx = getMatrixValues();
+ if (mtx) return (mtx.length==16) ? -mtx[12] : -mtx[4]; //matrix3d 16 on IE10
+ if (self.timerscroll&&self.timerscroll.bh) return self.timerscroll.bh.getNow();
+ }
+ return self.doc.translate.x;
+ };
+
+ if (document.createEvent) {
+ this.notifyScrollEvent = function(el) {
+ var e = document.createEvent("UIEvents");
+ e.initUIEvent("scroll", false, true, window, 1);
+ el.dispatchEvent(e);
+ };
+ }
+ else if (document.fireEvent) {
+ this.notifyScrollEvent = function(el) {
+ var e = document.createEventObject();
+ el.fireEvent("onscroll");
+ e.cancelBubble = true;
+ };
+ }
+ else {
+ this.notifyScrollEvent = function(el,add) {}; //NOPE
+ }
+
+ if (cap.hastranslate3d&&self.opt.enabletranslate3d) {
+ this.setScrollTop = function(val,silent) {
+ self.doc.translate.y = val;
+ self.doc.translate.ty = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate3d("+self.doc.translate.tx+","+self.doc.translate.ty+",0px)");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ this.setScrollLeft = function(val,silent) {
+ self.doc.translate.x = val;
+ self.doc.translate.tx = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate3d("+self.doc.translate.tx+","+self.doc.translate.ty+",0px)");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ } else {
+ this.setScrollTop = function(val,silent) {
+ self.doc.translate.y = val;
+ self.doc.translate.ty = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate("+self.doc.translate.tx+","+self.doc.translate.ty+")");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ this.setScrollLeft = function(val,silent) {
+ self.doc.translate.x = val;
+ self.doc.translate.tx = (val*-1)+"px";
+ self.doc.css(cap.trstyle,"translate("+self.doc.translate.tx+","+self.doc.translate.ty+")");
+ if (!silent) self.notifyScrollEvent(self.win[0]);
+ };
+ }
+ } else {
+ // native scroll
+ this.getScrollTop = function() {
+ return self.docscroll.scrollTop();
+ };
+ this.setScrollTop = function(val) {
+ return self.docscroll.scrollTop(val);
+ };
+ this.getScrollLeft = function() {
+ return self.docscroll.scrollLeft();
+ };
+ this.setScrollLeft = function(val) {
+ return self.docscroll.scrollLeft(val);
+ };
+ }
+
+ this.getTarget = function(e) {
+ if (!e) return false;
+ if (e.target) return e.target;
+ if (e.srcElement) return e.srcElement;
+ return false;
+ };
+
+ this.hasParent = function(e,id) {
+ if (!e) return false;
+ var el = e.target||e.srcElement||e||false;
+ while (el && el.id != id) {
+ el = el.parentNode||false;
+ }
+ return (el!==false);
+ };
+
+//inspired by http://forum.jquery.com/topic/width-includes-border-width-when-set-to-thin-medium-thick-in-ie
+ var _convertBorderWidth = {"thin":1,"medium":3,"thick":5};
+ function getWidthToPixel(dom,prop,chkheight) {
+ var wd = dom.css(prop);
+ var px = parseFloat(wd);
+ if (isNaN(px)) {
+ px = _convertBorderWidth[wd]||0;
+ var brd = (px==3) ? ((chkheight)?(self.win.outerHeight() - self.win.innerHeight()):(self.win.outerWidth() - self.win.innerWidth())) : 1; //DON'T TRUST CSS
+ if (self.isie8&&px) px+=1;
+ return (brd) ? px : 0;
+ }
+ return px;
+ };
+
+ this.getOffset = function() {
+ if (self.isfixed) return {top:parseFloat(self.win.css('top')),left:parseFloat(self.win.css('left'))};
+ if (!self.viewport) return self.win.offset();
+ var ww = self.win.offset();
+ var vp = self.viewport.offset();
+ return {top:ww.top-vp.top+self.viewport.scrollTop(),left:ww.left-vp.left+self.viewport.scrollLeft()};
+ };
+
+ this.updateScrollBar = function(len) {
+ if (self.ishwscroll) {
+ self.rail.css({height:self.win.innerHeight()});
+ if (self.railh) self.railh.css({width:self.win.innerWidth()});
+ } else {
+ var wpos = self.getOffset();
+ var pos = {top:wpos.top,left:wpos.left};
+ pos.top+= getWidthToPixel(self.win,'border-top-width',true);
+ var brd = (self.win.outerWidth() - self.win.innerWidth())/2;
+ pos.left+= (self.rail.align) ? self.win.outerWidth() - getWidthToPixel(self.win,'border-right-width') - self.rail.width : getWidthToPixel(self.win,'border-left-width');
+
+ var off = self.opt.railoffset;
+ if (off) {
+ if (off.top) pos.top+=off.top;
+ if (self.rail.align&&off.left) pos.left+=off.left;
+ }
+
+ if (!self.locked) self.rail.css({top:pos.top,left:pos.left,height:(len)?len.h:self.win.innerHeight()});
+
+ if (self.zoom) {
+ self.zoom.css({top:pos.top+1,left:(self.rail.align==1) ? pos.left-20 : pos.left+self.rail.width+4});
+ }
+
+ if (self.railh&&!self.locked) {
+ var pos = {top:wpos.top,left:wpos.left};
+ var y = (self.railh.align) ? pos.top + getWidthToPixel(self.win,'border-top-width',true) + self.win.innerHeight() - self.railh.height : pos.top + getWidthToPixel(self.win,'border-top-width',true);
+ var x = pos.left + getWidthToPixel(self.win,'border-left-width');
+ self.railh.css({top:y,left:x,width:self.railh.width});
+ }
+
+
+ }
+ };
+
+ this.doRailClick = function(e,dbl,hr) {
+
+ var fn,pg,cur,pos;
+
+ if (self.rail.drag&&self.rail.drag.pt!=1) return;
+ if (self.locked) return;
+ if (self.rail.drag) return;
+
+ self.cancelScroll();
+
+ self.cancelEvent(e);
+
+ if (dbl) {
+ fn = (hr) ? self.doScrollLeft : self.doScrollTop;
+ cur = (hr) ? ((e.pageX - self.railh.offset().left - (self.cursorwidth/2)) * self.scrollratio.x) : ((e.pageY - self.rail.offset().top - (self.cursorheight/2)) * self.scrollratio.y);
+ fn(cur);
+ } else {
+ fn = (hr) ? self.doScrollLeftBy : self.doScrollBy;
+ cur = (hr) ? self.scroll.x : self.scroll.y;
+ pos = (hr) ? e.pageX - self.railh.offset().left : e.pageY - self.rail.offset().top;
+ pg = (hr) ? self.view.w : self.view.h;
+ (cur>=pos) ? fn(pg) : fn(-pg);
+ }
+
+ }
+
+ self.hasanimationframe = (setAnimationFrame);
+ self.hascancelanimationframe = (clearAnimationFrame);
+
+ if (!self.hasanimationframe) {
+ setAnimationFrame=function(fn){return setTimeout(fn,16)}; // 1000/60)};
+ clearAnimationFrame=clearInterval;
+ }
+ else if (!self.hascancelanimationframe) clearAnimationFrame=function(){self.cancelAnimationFrame=true};
+
+ this.init = function() {
+
+ self.saved.css = [];
+
+ if (cap.isie7mobile) return true; // SORRY, DO NOT WORK!
+
+ if (cap.hasmstouch) self.css((self.ispage)?$("html"):self.win,{'-ms-touch-action':'none'});
+
+/*
+ self.ispage = true;
+ self.haswrapper = true;
+// self.win = $(window);
+ self.docscroll = $("body");
+// self.doc = $("body");
+*/
+
+ if (!self.ispage || (!cap.cantouch && !cap.isieold && !cap.isie9mobile)) {
+
+ var cont = self.docscroll;
+ if (self.ispage) cont = (self.haswrapper)?self.win:self.doc;
+
+ if (!cap.isie9mobile) self.css(cont,{'overflow-y':'hidden'});
+
+ if (self.ispage&&cap.isie7) {
+ if (self.doc[0].nodeName=='BODY') self.css($("html"),{'overflow-y':'hidden'}); //IE7 double scrollbar issue
+ else if (self.doc[0].nodeName=='HTML') self.css($("body"),{'overflow-y':'hidden'}); //IE7 double scrollbar issue
+ }
+
+ if (cap.isios&&!self.ispage&&!self.haswrapper) self.css($("body"),{"-webkit-overflow-scrolling":"touch"}); //force hw acceleration
+
+ var cursor = $(document.createElement('div'));
+ cursor.css({
+ position:"relative",top:0,"float":"right",width:self.opt.cursorwidth,height:"0px",
+ 'background-color':self.opt.cursorcolor,
+ border:self.opt.cursorborder,
+ 'background-clip':'padding-box',
+ '-webkit-border-radius':self.opt.cursorborderradius,
+ '-moz-border-radius':self.opt.cursorborderradius,
+ 'border-radius':self.opt.cursorborderradius
+ });
+
+ cursor.hborder = parseFloat(cursor.outerHeight() - cursor.innerHeight());
+ self.cursor = cursor;
+
+ var rail = $(document.createElement('div'));
+ rail.attr('id',self.id);
+
+ var v,a,kp = ["left","right"]; //"top","bottom"
+ for(var n in kp) {
+ a=kp[n];
+ v = self.opt.railpadding[a];
+ (v) ? rail.css("padding-"+a,v+"px") : self.opt.railpadding[a] = 0;
+ }
+
+ rail.append(cursor);
+
+ rail.width = Math.max(parseFloat(self.opt.cursorwidth),cursor.outerWidth()) + self.opt.railpadding['left'] + self.opt.railpadding['right'];
+ rail.css({width:rail.width+"px",'zIndex':(self.ispage)?self.opt.zindex:self.opt.zindex+2,"background":self.opt.background});
+
+ rail.visibility = true;
+ rail.scrollable = true;
+
+ rail.align = (self.opt.railalign=="left") ? 0 : 1;
+
+ self.rail = rail;
+
+ self.rail.drag = false;
+
+ var zoom = false;
+ if (self.opt.boxzoom&&!self.ispage&&!cap.isieold) {
+ zoom = document.createElement('div');
+ self.bind(zoom,"click",self.doZoom);
+ self.zoom = $(zoom);
+ self.zoom.css({"cursor":"pointer",'z-index':self.opt.zindex,'backgroundImage':'url('+scriptpath+'zoomico.png)','height':18,'width':18,'backgroundPosition':'0px 0px'});
+ if (self.opt.dblclickzoom) self.bind(self.win,"dblclick",self.doZoom);
+ if (cap.cantouch&&self.opt.gesturezoom) {
+ self.ongesturezoom = function(e) {
+ if (e.scale>1.5) self.doZoomIn(e);
+ if (e.scale<0.8) self.doZoomOut(e);
+ return self.cancelEvent(e);
+ };
+ self.bind(self.win,"gestureend",self.ongesturezoom);
+ }
+ }
+
+// init HORIZ
+
+ self.railh = false;
+
+ if (self.opt.horizrailenabled) {
+
+ self.css(cont,{'overflow-x':'hidden'});
+
+ var cursor = $(document.createElement('div'));
+ cursor.css({
+ position:"relative",top:0,height:self.opt.cursorwidth,width:"0px",
+ 'background-color':self.opt.cursorcolor,
+ border:self.opt.cursorborder,
+ 'background-clip':'padding-box',
+ '-webkit-border-radius':self.opt.cursorborderradius,
+ '-moz-border-radius':self.opt.cursorborderradius,
+ 'border-radius':self.opt.cursorborderradius
+ });
+
+ cursor.wborder = parseFloat(cursor.outerWidth() - cursor.innerWidth());
+ self.cursorh = cursor;
+
+ var railh = $(document.createElement('div'));
+ railh.attr('id',self.id+'-hr');
+ railh.height = 1+Math.max(parseFloat(self.opt.cursorwidth),cursor.outerHeight());
+ railh.css({height:railh.height+"px",'zIndex':(self.ispage)?self.opt.zindex:self.opt.zindex+2,"background":self.opt.background});
+
+ railh.append(cursor);
+
+ railh.visibility = true;
+ railh.scrollable = true;
+
+ railh.align = (self.opt.railvalign=="top") ? 0 : 1;
+
+ self.railh = railh;
+
+ self.railh.drag = false;
+
+ }
+
+//
+
+ if (self.ispage) {
+ rail.css({position:"fixed",top:"0px",height:"100%"});
+ (rail.align) ? rail.css({right:"0px"}) : rail.css({left:"0px"});
+ self.body.append(rail);
+ if (self.railh) {
+ railh.css({position:"fixed",left:"0px",width:"100%"});
+ (railh.align) ? railh.css({bottom:"0px"}) : railh.css({top:"0px"});
+ self.body.append(railh);
+ }
+ } else {
+ if (self.ishwscroll) {
+ if (self.win.css('position')=='static') self.css(self.win,{'position':'relative'});
+ var bd = (self.win[0].nodeName == 'HTML') ? self.body : self.win;
+ if (self.zoom) {
+ self.zoom.css({position:"absolute",top:1,right:0,"margin-right":rail.width+4});
+ bd.append(self.zoom);
+ }
+ rail.css({position:"absolute",top:0});
+ (rail.align) ? rail.css({right:0}) : rail.css({left:0});
+ bd.append(rail);
+ if (railh) {
+ railh.css({position:"absolute",left:0,bottom:0});
+ (railh.align) ? railh.css({bottom:0}) : railh.css({top:0});
+ bd.append(railh);
+ }
+ } else {
+ self.isfixed = (self.win.css("position")=="fixed");
+ var rlpos = (self.isfixed) ? "fixed" : "absolute";
+
+ if (!self.isfixed) self.viewport = self.getViewport(self.win[0]);
+ if (self.viewport) self.body = self.viewport;
+
+ rail.css({position:rlpos});
+ if (self.zoom) self.zoom.css({position:rlpos});
+ self.updateScrollBar();
+ self.body.append(rail);
+ if (self.zoom) self.body.append(self.zoom);
+ if (self.railh) {
+ railh.css({position:rlpos});
+ self.body.append(railh);
+ }
+ }
+
+ if (cap.isios) self.css(self.win,{'-webkit-tap-highlight-color':'rgba(0,0,0,0)','-webkit-touch-callout':'none'}); // prevent grey layer on click
+
+ if (cap.isie&&self.opt.disableoutline) self.win.attr("hideFocus","true"); // IE, prevent dotted rectangle on focused div
+ if (cap.iswebkit&&self.opt.disableoutline) self.win.css({"outline":"none"});
+
+ }
+
+ if (self.opt.autohidemode===false) {
+ self.autohidedom = false;
+ self.rail.css({opacity:self.opt.cursoropacitymax});
+ if (self.railh) self.railh.css({opacity:self.opt.cursoropacitymax});
+ }
+ else if (self.opt.autohidemode===true) {
+ self.autohidedom = $().add(self.rail);
+ if (self.railh) self.autohidedom=self.autohidedom.add(self.railh);
+ }
+ else if (self.opt.autohidemode=="scroll") {
+ self.autohidedom = $().add(self.rail);
+ if (self.railh) self.autohidedom=self.autohidedom.add(self.railh);
+ }
+ else if (self.opt.autohidemode=="cursor") {
+ self.autohidedom = $().add(self.cursor);
+ if (self.railh) self.autohidedom=self.autohidedom.add(self.railh.cursor);
+ }
+ else if (self.opt.autohidemode=="hidden") {
+ self.autohidedom = false;
+ self.hide();
+ self.locked = false;
+ }
+
+ if (cap.isie9mobile) {
+
+ self.scrollmom = new ScrollMomentumClass2D(self);
+
+ /*
+ var trace = function(msg) {
+ var db = $("#debug");
+ if (isNaN(msg)&&(typeof msg != "string")) {
+ var x = [];
+ for(var a in msg) {
+ x.push(a+":"+msg[a]);
+ }
+ msg ="{"+x.join(",")+"}";
+ }
+ if (db.children().length>0) {
+ db.children().eq(0).before(""+msg+"
");
+ } else {
+ db.append(""+msg+"
");
+ }
+ }
+ window.onerror = function(msg,url,ln) {
+ trace("ERR: "+msg+" at "+ln);
+ }
+*/
+
+ self.onmangotouch = function(e) {
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+
+ if ((py == self.scrollmom.lastscrolly)&&(px == self.scrollmom.lastscrollx)) return true;
+// $("#debug").html('DRAG:'+py);
+
+ var dfy = py-self.mangotouch.sy;
+ var dfx = px-self.mangotouch.sx;
+ var df = Math.round(Math.sqrt(Math.pow(dfx,2)+Math.pow(dfy,2)));
+ if (df==0) return;
+
+ var dry = (dfy<0)?-1:1;
+ var drx = (dfx<0)?-1:1;
+
+ var tm = +new Date();
+ if (self.mangotouch.lazy) clearTimeout(self.mangotouch.lazy);
+
+ if (((tm-self.mangotouch.tm)>80)||(self.mangotouch.dry!=dry)||(self.mangotouch.drx!=drx)) {
+// trace('RESET+'+(tm-self.mangotouch.tm));
+ self.scrollmom.stop();
+ self.scrollmom.reset(px,py);
+ self.mangotouch.sy = py;
+ self.mangotouch.ly = py;
+ self.mangotouch.sx = px;
+ self.mangotouch.lx = px;
+ self.mangotouch.dry = dry;
+ self.mangotouch.drx = drx;
+ self.mangotouch.tm = tm;
+ } else {
+
+ self.scrollmom.stop();
+ self.scrollmom.update(self.mangotouch.sx-dfx,self.mangotouch.sy-dfy);
+ var gap = tm - self.mangotouch.tm;
+ self.mangotouch.tm = tm;
+
+// trace('MOVE:'+df+" - "+gap);
+
+ var ds = Math.max(Math.abs(self.mangotouch.ly-py),Math.abs(self.mangotouch.lx-px));
+ self.mangotouch.ly = py;
+ self.mangotouch.lx = px;
+
+ if (ds>2) {
+ self.mangotouch.lazy = setTimeout(function(){
+// trace('END:'+ds+'+'+gap);
+ self.mangotouch.lazy = false;
+ self.mangotouch.dry = 0;
+ self.mangotouch.drx = 0;
+ self.mangotouch.tm = 0;
+ self.scrollmom.doMomentum(30);
+ },100);
+ }
+ }
+ }
+
+ var top = self.getScrollTop();
+ var lef = self.getScrollLeft();
+ self.mangotouch = {sy:top,ly:top,dry:0,sx:lef,lx:lef,drx:0,lazy:false,tm:0};
+
+ self.bind(self.docscroll,"scroll",self.onmangotouch);
+
+ } else {
+
+ if (cap.cantouch||self.istouchcapable||self.opt.touchbehavior||cap.hasmstouch) {
+
+ self.scrollmom = new ScrollMomentumClass2D(self);
+
+ self.ontouchstart = function(e) {
+ if (e.pointerType&&e.pointerType!=2) return false;
+
+ if (!self.locked) {
+
+ if (cap.hasmstouch) {
+ var tg = (e.target) ? e.target : false;
+ while (tg) {
+ var nc = $(tg).getNiceScroll();
+ if ((nc.length>0)&&(nc[0].me == self.me)) break;
+ if (nc.length>0) return false;
+ if ((tg.nodeName=='DIV')&&(tg.id==self.id)) break;
+ tg = (tg.parentNode) ? tg.parentNode : false;
+ }
+ }
+
+ self.cancelScroll();
+
+ var tg = self.getTarget(e);
+
+ if (tg) {
+ var skp = (/INPUT/i.test(tg.nodeName))&&(/range/i.test(tg.type));
+ if (skp) return self.stopPropagation(e);
+ }
+
+ if (!("clientX" in e) && ("changedTouches" in e)) {
+ e.clientX = e.changedTouches[0].clientX;
+ e.clientY = e.changedTouches[0].clientY;
+ }
+
+ if (self.forcescreen) {
+ var le = e;
+ var e = {"original":(e.original)?e.original:e};
+ e.clientX = le.screenX;
+ e.clientY = le.screenY;
+ }
+
+ self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,st:self.getScrollTop(),sl:self.getScrollLeft(),pt:2};
+
+ if (self.opt.touchbehavior&&self.isiframe&&cap.isie) {
+ var wp = self.win.position();
+ self.rail.drag.x+=wp.left;
+ self.rail.drag.y+=wp.top;
+ }
+
+ self.hasmoving = false;
+ self.lastmouseup = false;
+ self.scrollmom.reset(e.clientX,e.clientY);
+ if (!cap.cantouch&&!this.istouchcapable&&!cap.hasmstouch) {
+
+ var ip = (tg)?/INPUT|SELECT|TEXTAREA/i.test(tg.nodeName):false;
+ if (!ip) {
+ if (!self.ispage&&cap.hasmousecapture) tg.setCapture();
+ return self.cancelEvent(e);
+ }
+ if (/SUBMIT|CANCEL|BUTTON/i.test($(tg).attr('type'))) {
+ pc = {"tg":tg,"click":false};
+ self.preventclick = pc;
+ }
+
+ }
+ }
+
+ };
+
+ self.ontouchend = function(e) {
+ if (e.pointerType&&e.pointerType!=2) return false;
+ if (self.rail.drag&&(self.rail.drag.pt==2)) {
+ self.scrollmom.doMomentum();
+ self.rail.drag = false;
+ if (self.hasmoving) {
+ self.hasmoving = false;
+ self.lastmouseup = true;
+ self.hideCursor();
+ if (cap.hasmousecapture) document.releaseCapture();
+ if (!cap.cantouch) return self.cancelEvent(e);
+ }
+ }
+
+ };
+
+ var moveneedoffset = (self.opt.touchbehavior&&self.isiframe&&!cap.hasmousecapture);
+
+ self.ontouchmove = function(e,byiframe) {
+
+ if (e.pointerType&&e.pointerType!=2) return false;
+
+ if (self.rail.drag&&(self.rail.drag.pt==2)) {
+ if (cap.cantouch&&(typeof e.original == "undefined")) return true; // prevent ios "ghost" events by clickable elements
+
+ self.hasmoving = true;
+
+ if (self.preventclick&&!self.preventclick.click) {
+ self.preventclick.click = self.preventclick.tg.onclick||false;
+ self.preventclick.tg.onclick = self.onpreventclick;
+ }
+
+ var ev = $.extend({"original":e},e);
+ e = ev;
+
+ if (("changedTouches" in e)) {
+ e.clientX = e.changedTouches[0].clientX;
+ e.clientY = e.changedTouches[0].clientY;
+ }
+
+ if (self.forcescreen) {
+ var le = e;
+ var e = {"original":(e.original)?e.original:e};
+ e.clientX = le.screenX;
+ e.clientY = le.screenY;
+ }
+
+ var ofx = ofy = 0;
+
+ if (moveneedoffset&&!byiframe) {
+ var wp = self.win.position();
+ ofx=-wp.left;
+ ofy=-wp.top;
+ }
+
+ var fy = e.clientY + ofy;
+ var my = (fy-self.rail.drag.y);
+
+ var ny = self.rail.drag.st-my;
+
+ if (self.ishwscroll&&self.opt.bouncescroll) {
+ if (ny<0) {
+ ny = Math.round(ny/2);
+// fy = 0;
+ }
+ else if (ny>self.page.maxh) {
+ ny = self.page.maxh+Math.round((ny-self.page.maxh)/2);
+// fy = 0;
+ }
+ } else {
+ if (ny<0) {ny=0;fy=0}
+ if (ny>self.page.maxh) {ny=self.page.maxh;fy=0}
+ }
+
+ var fx = e.clientX + ofx;
+
+ if (self.railh&&self.railh.scrollable) {
+
+ var mx = (fx-self.rail.drag.x);
+
+ var nx = self.rail.drag.sl-mx;
+
+ if (self.ishwscroll&&self.opt.bouncescroll) {
+ if (nx<0) {
+ nx = Math.round(nx/2);
+// fx = 0;
+ }
+ else if (nx>self.page.maxw) {
+ nx = self.page.maxw+Math.round((nx-self.page.maxw)/2);
+// fx = 0;
+ }
+ } else {
+ if (nx<0) {nx=0;fx=0}
+ if (nx>self.page.maxw) {nx=self.page.maxw;fx=0}
+ }
+
+ }
+
+ self.synched("touchmove",function(){
+ if (self.rail.drag&&(self.rail.drag.pt==2)) {
+ if (self.prepareTransition) self.prepareTransition(0);
+ if (self.rail.scrollable) self.setScrollTop(ny);
+ self.scrollmom.update(fx,fy);
+ if (self.railh&&self.railh.scrollable) {
+ self.setScrollLeft(nx);
+ self.showCursor(ny,nx);
+ } else {
+ self.showCursor(ny);
+ }
+ if (cap.isie10) document.selection.clear();
+ }
+ });
+
+ if (!cap.ischrome&&!self.istouchcapable) return self.cancelEvent(e); //chrome touch emulation doesn't like!
+ }
+
+ };
+
+ }
+
+ if (cap.cantouch||self.opt.touchbehavior) {
+
+ self.onpreventclick = function(e) {
+ if (self.preventclick) {
+ self.preventclick.tg.onclick = self.preventclick.click;
+ self.preventclick = false;
+ return self.cancelEvent(e);
+ }
+ }
+
+ self.onmousedown = self.ontouchstart;
+
+ self.onmouseup = self.ontouchend;
+
+ self.onclick = (cap.isios) ? false : function(e) {
+ if (self.lastmouseup) {
+ self.lastmouseup = false;
+ return self.cancelEvent(e);
+ } else {
+ return true;
+ }
+ };
+
+ self.onmousemove = self.ontouchmove;
+
+ if (cap.cursorgrabvalue) {
+ self.css((self.ispage)?self.doc:self.win,{'cursor':cap.cursorgrabvalue});
+ self.css(self.rail,{'cursor':cap.cursorgrabvalue});
+ }
+
+ } else {
+
+ self.onmousedown = function(e,hronly) {
+ if (self.rail.drag&&self.rail.drag.pt!=1) return;
+ if (self.locked) return self.cancelEvent(e);
+ self.cancelScroll();
+ self.rail.drag = {x:e.clientX,y:e.clientY,sx:self.scroll.x,sy:self.scroll.y,pt:1,hr:(!!hronly)};
+ var tg = self.getTarget(e);
+ if (!self.ispage&&cap.hasmousecapture) tg.setCapture();
+ if (self.isiframe&&!cap.hasmousecapture) {
+ self.saved["csspointerevents"] = self.doc.css("pointer-events");
+ self.css(self.doc,{"pointer-events":"none"});
+ }
+ return self.cancelEvent(e);
+ };
+ self.onmouseup = function(e) {
+ if (self.rail.drag) {
+ if (cap.hasmousecapture) document.releaseCapture();
+ if (self.isiframe&&!cap.hasmousecapture) self.doc.css("pointer-events",self.saved["csspointerevents"]);
+ if(self.rail.drag.pt!=1)return;
+ self.rail.drag = false;
+ //if (!self.rail.active) self.hideCursor();
+ return self.cancelEvent(e);
+ }
+ };
+ self.onmousemove = function(e) {
+
+ if (self.rail.drag) {
+ if(self.rail.drag.pt!=1)return;
+
+ if (cap.ischrome&&e.which==0) return self.onmouseup(e);
+
+ self.cursorfreezed = true;
+
+ if (self.rail.drag.hr) {
+ self.scroll.x = self.rail.drag.sx + (e.clientX-self.rail.drag.x);
+ if (self.scroll.x<0) self.scroll.x=0;
+ var mw = self.scrollvaluemaxw;
+ if (self.scroll.x>mw) self.scroll.x=mw;
+ } else {
+ self.scroll.y = self.rail.drag.sy + (e.clientY-self.rail.drag.y);
+ if (self.scroll.y<0) self.scroll.y=0;
+ var my = self.scrollvaluemax;
+ if (self.scroll.y>my) self.scroll.y=my;
+ }
+
+ self.synched('mousemove',function(){
+ if (self.rail.drag&&(self.rail.drag.pt==1)) {
+ self.showCursor();
+ if (self.rail.drag.hr) self.doScrollLeft(Math.round(self.scroll.x*self.scrollratio.x));
+ else self.doScrollTop(Math.round(self.scroll.y*self.scrollratio.y));
+ }
+ });
+ return self.cancelEvent(e);
+ } else {
+ self.checkarea = true;
+ }
+
+ };
+ }
+
+ if (cap.cantouch||self.opt.touchbehavior) {
+ self.bind(self.win,"mousedown",self.onmousedown);
+ }
+
+ if (cap.hasmstouch) {
+ self.css(self.rail,{'-ms-touch-action':'none'});
+ self.css(self.cursor,{'-ms-touch-action':'none'});
+
+ self.bind(self.win,"MSPointerDown",self.ontouchstart);
+ self.bind(document,"MSPointerUp",self.ontouchend);
+ self.bind(document,"MSPointerMove",self.ontouchmove);
+ self.bind(self.cursor,"MSGestureHold",function(e){e.preventDefault();});
+ self.bind(self.cursor,"contextmenu",function(e){e.preventDefault();});
+ }
+
+ if (this.istouchcapable) { //device with screen touch enabled
+ self.bind(self.win,"touchstart",self.ontouchstart);
+ self.bind(document,"touchend",self.ontouchend);
+ self.bind(document,"touchcancel",self.ontouchend);
+ self.bind(document,"touchmove",self.ontouchmove);
+ }
+
+ self.bind(self.cursor,"mousedown",self.onmousedown);
+ self.bind(self.cursor,"mouseup",self.onmouseup);
+
+ if (self.railh) {
+ self.bind(self.cursorh,"mousedown",function(e){self.onmousedown(e,true)});
+ self.bind(self.cursorh,"mouseup",function(e){
+ if (self.rail.drag&&self.rail.drag.pt==2) return;
+ self.rail.drag = false;
+ self.hasmoving = false;
+ self.hideCursor();
+ if (cap.hasmousecapture) document.releaseCapture();
+ return self.cancelEvent(e);
+ });
+ }
+
+ self.bind(document,"mouseup",self.onmouseup);
+ if (cap.hasmousecapture) self.bind(self.win,"mouseup",self.onmouseup);
+
+ self.bind(document,"mousemove",self.onmousemove);
+ if (self.onclick) self.bind(document,"click",self.onclick);
+
+ if (!cap.cantouch&&!self.opt.touchbehavior) {
+
+ self.jqbind(self.rail,"mouseenter",function() {
+ if (self.canshowonmouseevent) self.showCursor();
+ self.rail.active = true;
+ });
+ self.jqbind(self.rail,"mouseleave",function() {
+ self.rail.active = false;
+ if (!self.rail.drag) self.hideCursor();
+ });
+
+ if (self.opt.sensitiverail) {
+ self.bind(self.rail,"click",function(e){self.doRailClick(e,false,false)});
+ self.bind(self.rail,"dblclick",function(e){self.doRailClick(e,true,false)});
+ self.bind(self.cursor,"click",function(e){self.cancelEvent(e)});
+ self.bind(self.cursor,"dblclick",function(e){self.cancelEvent(e)});
+ }
+
+ if (self.railh) {
+ self.jqbind(self.railh,"mouseenter",function() {
+ if (self.canshowonmouseevent) self.showCursor();
+ self.rail.active = true;
+ });
+ self.jqbind(self.railh,"mouseleave",function() {
+ self.rail.active = false;
+ if (!self.rail.drag) self.hideCursor();
+ });
+
+ if (self.opt.sensitiverail) {
+ self.bind(self.railh, "click", function(e){self.doRailClick(e,false,true)});
+ self.bind(self.railh, "dblclick", function(e){self.doRailClick(e, true, true) });
+ self.bind(self.cursorh, "click", function (e) { self.cancelEvent(e) });
+ self.bind(self.cursorh, "dblclick", function (e) { self.cancelEvent(e) });
+ }
+
+ }
+
+ if (self.zoom) {
+ self.jqbind(self.zoom,"mouseenter",function() {
+ if (self.canshowonmouseevent) self.showCursor();
+ self.rail.active = true;
+ });
+ self.jqbind(self.zoom,"mouseleave",function() {
+ self.rail.active = false;
+ if (!self.rail.drag) self.hideCursor();
+ });
+ }
+
+ }
+
+ if (self.opt.enablemousewheel) {
+ if (!self.isiframe) self.bind((cap.isie&&self.ispage) ? document : self.docscroll,"mousewheel",self.onmousewheel);
+ self.bind(self.rail,"mousewheel",self.onmousewheel);
+ if (self.railh) self.bind(self.railh,"mousewheel",self.onmousewheelhr);
+ }
+
+ if (!self.ispage&&!cap.cantouch&&!(/HTML|BODY/.test(self.win[0].nodeName))) {
+ if (!self.win.attr("tabindex")) self.win.attr({"tabindex":tabindexcounter++});
+
+ self.jqbind(self.win,"focus",function(e) {
+ domfocus = (self.getTarget(e)).id||true;
+ self.hasfocus = true;
+ if (self.canshowonmouseevent) self.noticeCursor();
+ });
+ self.jqbind(self.win,"blur",function(e) {
+ domfocus = false;
+ self.hasfocus = false;
+ });
+
+ self.jqbind(self.win,"mouseenter",function(e) {
+ mousefocus = (self.getTarget(e)).id||true;
+ self.hasmousefocus = true;
+ if (self.canshowonmouseevent) self.noticeCursor();
+ });
+ self.jqbind(self.win,"mouseleave",function() {
+ mousefocus = false;
+ self.hasmousefocus = false;
+ });
+
+ };
+
+ } // !ie9mobile
+
+ //Thanks to http://www.quirksmode.org !!
+ self.onkeypress = function(e) {
+ if (self.locked&&self.page.maxh==0) return true;
+
+ e = (e) ? e : window.e;
+ var tg = self.getTarget(e);
+ if (tg&&/INPUT|TEXTAREA|SELECT|OPTION/.test(tg.nodeName)) {
+ var tp = tg.getAttribute('type')||tg.type||false;
+ if ((!tp)||!(/submit|button|cancel/i.tp)) return true;
+ }
+
+ if (self.hasfocus||(self.hasmousefocus&&!domfocus)||(self.ispage&&!domfocus&&!mousefocus)) {
+ var key = e.keyCode;
+
+ if (self.locked&&key!=27) return self.cancelEvent(e);
+
+ var ctrl = e.ctrlKey||false;
+ var shift = e.shiftKey || false;
+
+ var ret = false;
+ switch (key) {
+ case 38:
+ case 63233: //safari
+ self.doScrollBy(24*3);
+ ret = true;
+ break;
+ case 40:
+ case 63235: //safari
+ self.doScrollBy(-24*3);
+ ret = true;
+ break;
+ case 37:
+ case 63232: //safari
+ if (self.railh) {
+ (ctrl) ? self.doScrollLeft(0) : self.doScrollLeftBy(24*3);
+ ret = true;
+ }
+ break;
+ case 39:
+ case 63234: //safari
+ if (self.railh) {
+ (ctrl) ? self.doScrollLeft(self.page.maxw) : self.doScrollLeftBy(-24*3);
+ ret = true;
+ }
+ break;
+ case 33:
+ case 63276: // safari
+ self.doScrollBy(self.view.h);
+ ret = true;
+ break;
+ case 34:
+ case 63277: // safari
+ self.doScrollBy(-self.view.h);
+ ret = true;
+ break;
+ case 36:
+ case 63273: // safari
+ (self.railh&&ctrl) ? self.doScrollPos(0,0) : self.doScrollTo(0);
+ ret = true;
+ break;
+ case 35:
+ case 63275: // safari
+ (self.railh&&ctrl) ? self.doScrollPos(self.page.maxw,self.page.maxh) : self.doScrollTo(self.page.maxh);
+ ret = true;
+ break;
+ case 32:
+ if (self.opt.spacebarenabled) {
+ (shift) ? self.doScrollBy(self.view.h) : self.doScrollBy(-self.view.h);
+ ret = true;
+ }
+ break;
+ case 27: // ESC
+ if (self.zoomactive) {
+ self.doZoom();
+ ret = true;
+ }
+ break;
+ }
+ if (ret) return self.cancelEvent(e);
+ }
+ };
+
+ if (self.opt.enablekeyboard) self.bind(document,(cap.isopera&&!cap.isopera12)?"keypress":"keydown",self.onkeypress);
+
+ self.bind(window,'resize',self.resize);
+ self.bind(window,'orientationchange',self.resize);
+
+ self.bind(window,"load",self.resize);
+
+ if (cap.ischrome&&!self.ispage&&!self.haswrapper) { //chrome void scrollbar bug
+ var tmp=self.win.attr("style");
+ var ww = parseFloat(self.win.css("width"))+1;
+ self.win.css('width',ww);
+ self.synched("chromefix",function(){self.win.attr("style",tmp)});
+ }
+
+// Trying a cross-browser implementation - good luck!
+
+ self.onAttributeChange = function(e) {
+ self.lazyResize();
+ }
+
+ if (!self.ispage&&!self.haswrapper) {
+ // thanks to Filip http://stackoverflow.com/questions/1882224/
+ if ("WebKitMutationObserver" in window) {
+ self.observer = new WebKitMutationObserver(function(mutations) {
+ mutations.forEach(self.onAttributeChange);
+ });
+ self.observer.observe(self.win[0],{attributes:true,subtree:false});
+ } else {
+ self.bind(self.win,(cap.isie&&!cap.isie9)?"propertychange":"DOMAttrModified",self.onAttributeChange);
+ if (cap.isie9) self.win[0].attachEvent("onpropertychange",self.onAttributeChange); //IE9 DOMAttrModified bug
+ }
+ }
+
+//
+
+ if (!self.ispage&&self.opt.boxzoom) self.bind(window,"resize",self.resizeZoom);
+ if (self.istextarea) self.bind(self.win,"mouseup",self.resize);
+
+ self.resize();
+
+ }
+
+ if (this.doc[0].nodeName == 'IFRAME') {
+ function oniframeload(e) {
+ self.iframexd = false;
+ try {
+ var doc = 'contentDocument' in this ? this.contentDocument : this.contentWindow.document;
+ var a = doc.domain;
+ } catch(e){self.iframexd = true;doc=false};
+
+ if (self.iframexd) {
+ if ("console" in window) console.log('NiceScroll error: policy restriced iframe');
+ return true; //cross-domain - I can't manage this
+ }
+
+ self.forcescreen = true;
+
+ if (self.isiframe) {
+ self.iframe = {
+ "doc":$(doc),
+ "html":self.doc.contents().find('html')[0],
+ "body":self.doc.contents().find('body')[0]
+ };
+ self.getContentSize = function(){
+ return {
+ w:Math.max(self.iframe.html.scrollWidth,self.iframe.body.scrollWidth),
+ h:Math.max(self.iframe.html.scrollHeight,self.iframe.body.scrollHeight)
+ }
+ }
+ self.docscroll = $(self.iframe.body);//$(this.contentWindow);
+ }
+
+ if (!cap.isios&&self.opt.iframeautoresize&&!self.isiframe) {
+ self.win.scrollTop(0); // reset position
+ self.doc.height(""); //reset height to fix browser bug
+ var hh=Math.max(doc.getElementsByTagName('html')[0].scrollHeight,doc.body.scrollHeight);
+ self.doc.height(hh);
+ }
+ self.resize();
+
+ if (cap.isie7) self.css($(self.iframe.html),{'overflow-y':'hidden'});
+ //self.css($(doc.body),{'overflow-y':'hidden'});
+ self.css($(self.iframe.body),{'overflow-y':'hidden'});
+
+ if ('contentWindow' in this) {
+ self.bind(this.contentWindow,"scroll",self.onscroll); //IE8 & minor
+ } else {
+ self.bind(doc,"scroll",self.onscroll);
+ }
+
+ if (self.opt.enablemousewheel) {
+ self.bind(doc,"mousewheel",self.onmousewheel);
+ }
+
+ if (self.opt.enablekeyboard) self.bind(doc,(cap.isopera)?"keypress":"keydown",self.onkeypress);
+
+ if (cap.cantouch||self.opt.touchbehavior) {
+ self.bind(doc,"mousedown",self.onmousedown);
+ self.bind(doc,"mousemove",function(e){self.onmousemove(e,true)});
+ if (cap.cursorgrabvalue) self.css($(doc.body),{'cursor':cap.cursorgrabvalue});
+ }
+
+ self.bind(doc,"mouseup",self.onmouseup);
+
+ if (self.zoom) {
+ if (self.opt.dblclickzoom) self.bind(doc,'dblclick',self.doZoom);
+ if (self.ongesturezoom) self.bind(doc,"gestureend",self.ongesturezoom);
+ }
+ };
+
+ if (this.doc[0].readyState&&this.doc[0].readyState=="complete"){
+ setTimeout(function(){oniframeload.call(self.doc[0],false)},500);
+ }
+ self.bind(this.doc,"load",oniframeload);
+
+ }
+
+ };
+
+ this.showCursor = function(py,px) {
+ if (self.cursortimeout) {
+ clearTimeout(self.cursortimeout);
+ self.cursortimeout = 0;
+ }
+ if (!self.rail) return;
+ if (self.autohidedom) {
+ self.autohidedom.stop().css({opacity:self.opt.cursoropacitymax});
+ self.cursoractive = true;
+ }
+
+ if ((typeof py != "undefined")&&(py!==false)) {
+ self.scroll.y = Math.round(py * 1/self.scrollratio.y);
+ }
+ if (typeof px != "undefined") {
+ self.scroll.x = Math.round(px * 1/self.scrollratio.x);
+ }
+
+ self.cursor.css({height:self.cursorheight,top:self.scroll.y});
+ if (self.cursorh) {
+ (!self.rail.align&&self.rail.visibility) ? self.cursorh.css({width:self.cursorwidth,left:self.scroll.x+self.rail.width}) : self.cursorh.css({width:self.cursorwidth,left:self.scroll.x});
+ self.cursoractive = true;
+ }
+
+ if (self.zoom) self.zoom.stop().css({opacity:self.opt.cursoropacitymax});
+ };
+
+ this.hideCursor = function(tm) {
+ if (self.cursortimeout) return;
+ if (!self.rail) return;
+ if (!self.autohidedom) return;
+ self.cursortimeout = setTimeout(function() {
+ if (!self.rail.active||!self.showonmouseevent) {
+ self.autohidedom.stop().animate({opacity:self.opt.cursoropacitymin});
+ if (self.zoom) self.zoom.stop().animate({opacity:self.opt.cursoropacitymin});
+ self.cursoractive = false;
+ }
+ self.cursortimeout = 0;
+ },tm||400);
+ };
+
+ this.noticeCursor = function(tm,py,px) {
+ self.showCursor(py,px);
+ if (!self.rail.active) self.hideCursor(tm);
+ };
+
+ this.getContentSize =
+ (self.ispage) ?
+ function(){
+ return {
+ w:Math.max(document.body.scrollWidth,document.documentElement.scrollWidth),
+ h:Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)
+ }
+ }
+ : (self.haswrapper) ?
+ function(){
+ return {
+ w:self.doc.outerWidth()+parseInt(self.win.css('paddingLeft'))+parseInt(self.win.css('paddingRight')),
+ h:self.doc.outerHeight()+parseInt(self.win.css('paddingTop'))+parseInt(self.win.css('paddingBottom'))
+ }
+ }
+ : function() {
+ return {
+ w:self.docscroll[0].scrollWidth,
+ h:self.docscroll[0].scrollHeight
+ }
+ };
+
+ this.onResize = function(e,page) {
+
+ if (!self.win) return false;
+
+ if (!self.haswrapper&&!self.ispage) {
+ if (self.win.css('display')=='none') {
+ if (self.visibility) self.hideRail().hideRailHr();
+ return false;
+ } else {
+ if (!self.hidden&&!self.visibility) self.showRail().showRailHr();
+ }
+ }
+
+ var premaxh = self.page.maxh;
+ var premaxw = self.page.maxw;
+
+ var preview = {h:self.view.h,w:self.view.w};
+
+ self.view = {
+ w:(self.ispage) ? self.win.width() : parseInt(self.win[0].clientWidth),
+ h:(self.ispage) ? self.win.height() : parseInt(self.win[0].clientHeight)
+ };
+
+ self.page = (page) ? page : self.getContentSize();
+
+ self.page.maxh = Math.max(0,self.page.h - self.view.h);
+ self.page.maxw = Math.max(0,self.page.w - self.view.w);
+
+ if ((self.page.maxh==premaxh)&&(self.page.maxw==premaxw)&&(self.view.w==preview.w)) {
+ // test position
+ if (!self.ispage) {
+ var pos = self.win.offset();
+ if (self.lastposition) {
+ var lst = self.lastposition;
+ if ((lst.top==pos.top)&&(lst.left==pos.left)) return self; //nothing to do
+ }
+ self.lastposition = pos;
+ } else {
+ return self; //nothing to do
+ }
+ }
+
+ if (self.page.maxh==0) {
+ self.hideRail();
+ self.scrollvaluemax = 0;
+ self.scroll.y = 0;
+ self.scrollratio.y = 0;
+ self.cursorheight = 0;
+ self.setScrollTop(0);
+ self.rail.scrollable = false;
+ } else {
+ self.rail.scrollable = true;
+ }
+
+ if (self.page.maxw==0) {
+ self.hideRailHr();
+ self.scrollvaluemaxw = 0;
+ self.scroll.x = 0;
+ self.scrollratio.x = 0;
+ self.cursorwidth = 0;
+ self.setScrollLeft(0);
+ self.railh.scrollable = false;
+ } else {
+ self.railh.scrollable = true;
+ }
+
+ self.locked = (self.page.maxh==0)&&(self.page.maxw==0);
+ if (self.locked) {
+ if (!self.ispage) self.updateScrollBar(self.view);
+ return false;
+ }
+
+ if (!self.hidden&&!self.visibility) {
+ self.showRail().showRailHr();
+ }
+ else if (!self.hidden&&!self.railh.visibility) self.showRailHr();
+
+ if (self.istextarea&&self.win.css('resize')&&self.win.css('resize')!='none') self.view.h-=20;
+ if (!self.ispage) self.updateScrollBar(self.view);
+
+ self.cursorheight = Math.min(self.view.h,Math.round(self.view.h * (self.view.h / self.page.h)));
+ self.cursorheight = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorheight);
+
+ self.cursorwidth = Math.min(self.view.w,Math.round(self.view.w * (self.view.w / self.page.w)));
+ self.cursorwidth = (self.opt.cursorfixedheight) ? self.opt.cursorfixedheight : Math.max(self.opt.cursorminheight,self.cursorwidth);
+
+ self.scrollvaluemax = self.view.h-self.cursorheight-self.cursor.hborder;
+
+ if (self.railh) {
+ self.railh.width = (self.page.maxh>0) ? (self.view.w-self.rail.width) : self.view.w;
+ self.scrollvaluemaxw = self.railh.width-self.cursorwidth-self.cursorh.wborder;
+ }
+
+ self.scrollratio = {
+ x:(self.page.maxw/self.scrollvaluemaxw),
+ y:(self.page.maxh/self.scrollvaluemax)
+ };
+
+ var sy = self.getScrollTop();
+ if (sy>self.page.maxh) {
+ self.doScrollTop(self.page.maxh);
+ } else {
+ self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));
+ self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x));
+ if (self.cursoractive) self.noticeCursor();
+ }
+
+ if (self.scroll.y&&(self.getScrollTop()==0)) self.doScrollTo(Math.floor(self.scroll.y*self.scrollratio.y));
+
+ return self;
+ };
+
+ this.resize = function(){self.delayed('resize',self.onResize,30);return self;} // event debounce
+
+ this.lazyResize = function() {
+ self.delayed('resize',self.resize,250);
+ }
+
+ this._bind = function(el,name,fn,bubble) { // primitive bind
+ self.events.push({e:el,n:name,f:fn,b:bubble,q:false});
+ if (el.addEventListener) {
+ el.addEventListener(name,fn,bubble||false);
+ }
+ else if (el.attachEvent) {
+ el.attachEvent("on"+name,fn);
+ }
+ else {
+ el["on"+name] = fn;
+ }
+ };
+
+ this.jqbind = function(dom,name,fn) { // use jquery bind for non-native events (mouseenter/mouseleave)
+ self.events.push({e:dom,n:name,f:fn,q:true});
+ $(dom).bind(name,fn);
+ }
+
+ this.bind = function(dom,name,fn,bubble) { // touch-oriented & fixing jquery bind
+ var el = ("jquery" in dom) ? dom[0] : dom;
+ if (el.addEventListener) {
+ if (cap.cantouch && /mouseup|mousedown|mousemove/.test(name)) { // touch device support
+ var tt=(name=='mousedown')?'touchstart':(name=='mouseup')?'touchend':'touchmove';
+ self._bind(el,tt,function(e){
+ if (e.touches) {
+ if (e.touches.length<2) {var ev=(e.touches.length)?e.touches[0]:e;ev.original=e;fn.call(this,ev);}
+ }
+ else if (e.changedTouches) {var ev=e.changedTouches[0];ev.original=e;fn.call(this,ev);} //blackberry
+ },bubble||false);
+ }
+ self._bind(el,name,fn,bubble||false);
+ if (name=='mousewheel') self._bind(el,"DOMMouseScroll",fn,bubble||false);
+ if (cap.cantouch && name=="mouseup") self._bind(el,"touchcancel",fn,bubble||false);
+ }
+ else {
+ self._bind(el,name,function(e) {
+ e = e||window.event||false;
+ if (e) {
+ if (e.srcElement) e.target=e.srcElement;
+ }
+ return ((fn.call(el,e)===false)||bubble===false) ? self.cancelEvent(e) : true;
+ });
+ }
+ };
+
+ this._unbind = function(el,name,fn,bub) { // primitive unbind
+ if (el.removeEventListener) {
+ el.removeEventListener(name,fn,bub);
+ }
+ else if (el.detachEvent) {
+ el.detachEvent('on'+name,fn);
+ } else {
+ el['on'+name] = false;
+ }
+ };
+
+ this.unbindAll = function() {
+ for(var a=0;a0) return dd;
+ dom = (dom.parentNode) ? dom.parentNode : false;
+ }
+ return false;
+ };
+
+ function execScrollWheel(e,hr) {
+ var px = 0;
+ var py = 0;
+ var rt = 1;
+ if ("wheelDeltaY" in e) {
+ rt = self.opt.mousescrollstep/(16*3);
+ px = Math.floor(e.wheelDeltaX*rt);
+ py = Math.floor(e.wheelDeltaY*rt);
+ if (hr&&(px==0)&&py) { // classic vertical-only mousewheel + browser with x/y support
+ px = py;
+ py = 0;
+ }
+ } else {
+ var delta = e.detail ? e.detail * -1 : e.wheelDelta / 40;
+ if (delta) {
+ (hr) ? px = Math.floor(delta*self.opt.mousescrollstep) : py = Math.floor(delta*self.opt.mousescrollstep);
+ }
+ }
+ if (px) {
+ if (self.scrollmom) {self.scrollmom.stop()}
+ self.lastdeltax+=px;
+ self.synched("mousewheelx",function(){var dt=self.lastdeltax;self.lastdeltax=0;if(!self.rail.drag){self.doScrollLeftBy(dt)}});
+ }
+ if (py) {
+ if (self.scrollmom) {self.scrollmom.stop()}
+ self.lastdeltay+=py;
+ self.synched("mousewheely",function(){var dt=self.lastdeltay;self.lastdeltay=0;if(!self.rail.drag){self.doScrollBy(dt)}});
+ }
+ };
+
+ this.onmousewheel = function(e) {
+ if (self.locked) return true;
+ if (!self.rail.scrollable) {
+ if (self.railh&&self.railh.scrollable) {
+ return self.onmousewheelhr(e);
+ } else {
+ return true;
+ }
+ }
+ if (self.opt.preservenativescrolling&&self.checkarea) {
+ self.checkarea = false;
+ self.nativescrollingarea = self.isScrollable(e);
+ }
+ if (self.nativescrollingarea) return true; // this isn't my business
+ if (self.locked) return self.cancelEvent(e);
+ if (self.rail.drag) return self.cancelEvent(e);
+
+ execScrollWheel(e,false);
+
+ return self.cancelEvent(e);
+ };
+
+ this.onmousewheelhr = function(e) {
+ if (self.locked||!self.railh.scrollable) return true;
+ if (self.opt.preservenativescrolling&&self.checkarea) {
+ self.checkarea = false;
+ self.nativescrollingarea = self.isScrollable(e);
+ }
+ if (self.nativescrollingarea) return true; // this isn't my business
+ if (self.locked) return self.cancelEvent(e);
+ if (self.rail.drag) return self.cancelEvent(e);
+
+ execScrollWheel(e,true);
+
+ return self.cancelEvent(e);
+ };
+
+ this.stop = function() {
+ self.cancelScroll();
+ if (self.scrollmon) self.scrollmon.stop();
+ self.cursorfreezed = false;
+ self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));
+ self.noticeCursor();
+ return self;
+ };
+
+ this.getTransitionSpeed = function(dif) {
+ var sp = Math.round(self.opt.scrollspeed*10);
+ var ex = Math.min(sp,Math.round((dif / 20) * self.opt.scrollspeed));
+ return (ex>20) ? ex : 0;
+ }
+
+ if (!self.opt.smoothscroll) {
+ this.doScrollLeft = function(x,spd) { //direct
+ var y = self.getScrollTop();
+ self.doScrollPos(x,y,spd);
+ }
+ this.doScrollTop = function(y,spd) { //direct
+ var x = self.getScrollLeft();
+ self.doScrollPos(x,y,spd);
+ }
+ this.doScrollPos = function(x,y,spd) { //direct
+ var nx = (x>self.page.maxw) ? self.page.maxw : x;
+ if (nx<0) nx=0;
+ var ny = (y>self.page.maxh) ? self.page.maxh : y;
+ if (ny<0) ny=0;
+ self.synched('scroll',function(){
+ self.setScrollTop(ny);
+ self.setScrollLeft(nx);
+ });
+ }
+ this.cancelScroll = function() {}; // direct
+ }
+ else if (self.ishwscroll&&cap.hastransition&&self.opt.usetransition) {
+ this.prepareTransition = function(dif,istime) {
+ var ex = (istime) ? ((dif>20)?dif:0) : self.getTransitionSpeed(dif);
+ var trans = (ex) ? cap.prefixstyle+'transform '+ex+'ms ease-out' : '';
+ if (!self.lasttransitionstyle||self.lasttransitionstyle!=trans) {
+ self.lasttransitionstyle = trans;
+ self.doc.css(cap.transitionstyle,trans);
+ }
+ return ex;
+ };
+
+ this.doScrollLeft = function(x,spd) { //trans
+ var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();
+ self.doScrollPos(x,y,spd);
+ }
+
+ this.doScrollTop = function(y,spd) { //trans
+ var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();
+ self.doScrollPos(x,y,spd);
+ }
+
+ this.doScrollPos = function(x,y,spd) { //trans
+
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+
+ if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll(); //inverted movement detection
+
+ if (self.opt.bouncescroll==false) {
+ if (y<0) y=0;
+ else if (y>self.page.maxh) y=self.page.maxh;
+ if (x<0) x=0;
+ else if (x>self.page.maxw) x=self.page.maxw;
+ }
+
+ if (x==self.newscrollx&&y==self.newscrolly) return false;
+
+ self.newscrolly = y;
+ self.newscrollx = x;
+
+ self.newscrollspeed = spd||false;
+
+ if (self.timer) return false;
+
+ self.timer = setTimeout(function(){
+
+ var top = self.getScrollTop();
+ var lft = self.getScrollLeft();
+
+ var dst = {};
+ dst.x = x-lft;
+ dst.y = y-top;
+ dst.px = lft;
+ dst.py = top;
+
+ var dd = Math.round(Math.sqrt(Math.pow(dst.x,2)+Math.pow(dst.y,2)));
+
+ var df = (self.newscrollspeed) ? self.newscrollspeed : dd;
+ var ms = self.prepareTransition(df);
+
+ if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);
+
+ if (ms>0) {
+
+ if (!self.scrollrunning&&self.onscrollstart) {
+ var info = {"type":"scrollstart","current":{"x":lft,"y":top},"request":{"x":x,"y":y},"end":{"x":self.newscrollx,"y":self.newscrolly},"speed":ms};
+ self.onscrollstart.call(self,info);
+ }
+
+ if (cap.transitionend) {
+ if (!self.scrollendtrapped) {
+ self.scrollendtrapped = true;
+ self.bind(self.doc,cap.transitionend,self.onScrollEnd,false); //I have got to do something usefull!!
+ }
+ } else {
+ if (self.scrollendtrapped) clearTimeout(self.scrollendtrapped);
+ self.scrollendtrapped = setTimeout(self.onScrollEnd,ms); // simulate transitionend event
+ }
+
+ var py = top;
+ var px = lft;
+ self.timerscroll = {
+ bz: new BezierClass(py,self.newscrolly,ms,0,0,0.58,1),
+ bh: new BezierClass(px,self.newscrollx,ms,0,0,0.58,1)
+ };
+ if (!self.cursorfreezed) self.timerscroll.tm=setInterval(function(){self.showCursor(self.getScrollTop(),self.getScrollLeft())},60);
+
+ }
+
+ self.synched("doScroll-set",function(){
+ self.timer = 0;
+ if (self.scrollendtrapped) self.scrollrunning = true;
+ self.setScrollTop(self.newscrolly);
+ self.setScrollLeft(self.newscrollx);
+ if (!self.scrollendtrapped) self.onScrollEnd();
+ });
+
+
+ },50);
+
+ };
+
+ this.cancelScroll = function() {
+ if (!self.scrollendtrapped) return true;
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+ self.scrollrunning = false;
+ if (!cap.transitionend) clearTimeout(cap.transitionend);
+ self.scrollendtrapped = false;
+ self._unbind(self.doc,cap.transitionend,self.onScrollEnd);
+ self.prepareTransition(0);
+ self.setScrollTop(py); // fire event onscroll
+ if (self.railh) self.setScrollLeft(px);
+ if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);
+ self.timerscroll = false;
+
+ self.cursorfreezed = false;
+
+ //self.noticeCursor(false,py,px);
+ self.showCursor(py,px);
+ return self;
+ };
+ this.onScrollEnd = function() {
+ if (self.scrollendtrapped) self._unbind(self.doc,cap.transitionend,self.onScrollEnd);
+ self.scrollendtrapped = false;
+ self.prepareTransition(0);
+ if (self.timerscroll&&self.timerscroll.tm) clearInterval(self.timerscroll.tm);
+ self.timerscroll = false;
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+ self.setScrollTop(py); // fire event onscroll
+ if (self.railh) self.setScrollLeft(px); // fire event onscroll left
+
+ self.noticeCursor(false,py,px);
+
+ self.cursorfreezed = false;
+
+ if (py<0) py=0
+ else if (py>self.page.maxh) py=self.page.maxh;
+ if (px<0) px=0
+ else if (px>self.page.maxw) px=self.page.maxw;
+ if((py!=self.newscrolly)||(px!=self.newscrollx)) return self.doScrollPos(px,py,self.opt.snapbackspeed);
+
+ if (self.onscrollend&&self.scrollrunning) {
+ var info = {"type":"scrollend","current":{"x":px,"y":py},"end":{"x":self.newscrollx,"y":self.newscrolly}};
+ self.onscrollend.call(self,info);
+ }
+ self.scrollrunning = false;
+
+ };
+
+ } else {
+
+ this.doScrollLeft = function(x) { //no-trans
+ var y = (self.scrollrunning) ? self.newscrolly : self.getScrollTop();
+ self.doScrollPos(x,y);
+ }
+
+ this.doScrollTop = function(y) { //no-trans
+ var x = (self.scrollrunning) ? self.newscrollx : self.getScrollLeft();
+ self.doScrollPos(x,y);
+ }
+
+ this.doScrollPos = function(x,y) { //no-trans
+ var y = ((typeof y == "undefined")||(y===false)) ? self.getScrollTop(true) : y;
+
+ if ((self.timer)&&(self.newscrolly==y)&&(self.newscrollx==x)) return true;
+
+ if (self.timer) clearAnimationFrame(self.timer);
+ self.timer = 0;
+
+ var py = self.getScrollTop();
+ var px = self.getScrollLeft();
+
+ if (((self.newscrolly-py)*(y-py)<0)||((self.newscrollx-px)*(x-px)<0)) self.cancelScroll(); //inverted movement detection
+
+ self.newscrolly = y;
+ self.newscrollx = x;
+
+ if (!self.bouncescroll||!self.rail.visibility) {
+ if (self.newscrolly<0) {
+ self.newscrolly = 0;
+ }
+ else if (self.newscrolly>self.page.maxh) {
+ self.newscrolly = self.page.maxh;
+ }
+ }
+ if (!self.bouncescroll||!self.railh.visibility) {
+ if (self.newscrollx<0) {
+ self.newscrollx = 0;
+ }
+ else if (self.newscrollx>self.page.maxw) {
+ self.newscrollx = self.page.maxw;
+ }
+ }
+
+ self.dst = {};
+ self.dst.x = x-px;
+ self.dst.y = y-py;
+ self.dst.px = px;
+ self.dst.py = py;
+
+ var dst = Math.round(Math.sqrt(Math.pow(self.dst.x,2)+Math.pow(self.dst.y,2)));
+
+ self.dst.ax = self.dst.x / dst;
+ self.dst.ay = self.dst.y / dst;
+
+ var pa = 0;
+ var pe = dst;
+
+ if (self.dst.x==0) {
+ pa = py;
+ pe = y;
+ self.dst.ay = 1;
+ self.dst.py = 0;
+ } else if (self.dst.y==0) {
+ pa = px;
+ pe = x;
+ self.dst.ax = 1;
+ self.dst.px = 0;
+ }
+
+ var ms = self.getTransitionSpeed(dst);
+ if (ms>0) {
+ self.bzscroll = (self.bzscroll) ? self.bzscroll.update(pe,ms) : new BezierClass(pa,pe,ms,0,1,0,1);
+ } else {
+ self.bzscroll = false;
+ }
+
+ if (self.timer) return;
+
+ if ((py==self.page.maxh&&y>=self.page.maxh)||(px==self.page.maxw&&x>=self.page.maxw)) self.checkContentSize();
+
+ var sync = 1;
+
+ function scrolling() {
+ if (self.cancelAnimationFrame) return true;
+
+ self.scrollrunning = true;
+
+ sync = 1-sync;
+ if (sync) return (self.timer = setAnimationFrame(scrolling)||1);
+
+ var done = 0;
+
+ var sc = sy = self.getScrollTop();
+ if (self.dst.ay) {
+ sc = (self.bzscroll) ? self.dst.py + (self.bzscroll.getNow()*self.dst.ay) : self.newscrolly;
+ var dr=sc-sy;
+ if ((dr<0&&sc0&&sc>self.newscrolly)) sc = self.newscrolly;
+ self.setScrollTop(sc);
+ if (sc == self.newscrolly) done=1;
+ } else {
+ done=1;
+ }
+
+ var scx = sx = self.getScrollLeft();
+ if (self.dst.ax) {
+ scx = (self.bzscroll) ? self.dst.px + (self.bzscroll.getNow()*self.dst.ax) : self.newscrollx;
+ var dr=scx-sx;
+ if ((dr<0&&scx0&&scx>self.newscrollx)) scx = self.newscrollx;
+ self.setScrollLeft(scx);
+ if (scx == self.newscrollx) done+=1;
+ } else {
+ done+=1;
+ }
+
+ if (done==2) {
+ self.timer = 0;
+ self.cursorfreezed = false;
+ self.bzscroll = false;
+ self.scrollrunning = false;
+ if (sc<0) sc=0;
+ else if (sc>self.page.maxh) sc=self.page.maxh;
+ if (scx<0) scx=0;
+ else if (scx>self.page.maxw) scx=self.page.maxw;
+ if ((scx!=self.newscrollx)||(sc!=self.newscrolly)) self.doScrollPos(scx,sc);
+ else {
+ if (self.onscrollend) {
+ var info = {"type":"scrollend","current":{"x":sx,"y":sy},"end":{"x":self.newscrollx,"y":self.newscrolly}};
+ self.onscrollend.call(self,info);
+ }
+ }
+ } else {
+ self.timer = setAnimationFrame(scrolling)||1;
+ }
+ };
+ self.cancelAnimationFrame=false;
+ self.timer = 1;
+
+ if (self.onscrollstart&&!self.scrollrunning) {
+ var info = {"type":"scrollstart","current":{"x":px,"y":py},"request":{"x":x,"y":y},"end":{"x":self.newscrollx,"y":self.newscrolly},"speed":ms};
+ self.onscrollstart.call(self,info);
+ }
+
+ scrolling();
+
+ if ((py==self.page.maxh&&y>=py)||(px==self.page.maxw&&x>=px)) self.checkContentSize();
+
+ self.noticeCursor();
+ };
+
+ this.cancelScroll = function() {
+ if (self.timer) clearAnimationFrame(self.timer);
+ self.timer = 0;
+ self.bzscroll = false;
+ self.scrollrunning = false;
+ return self;
+ };
+
+ }
+
+ this.doScrollBy = function(stp,relative) {
+ var ny = 0;
+ if (relative) {
+ ny = Math.floor((self.scroll.y-stp)*self.scrollratio.y)
+ } else {
+ var sy = (self.timer) ? self.newscrolly : self.getScrollTop(true);
+ ny = sy-stp;
+ }
+ if (self.bouncescroll) {
+ var haf = Math.round(self.view.h/2);
+ if (ny<-haf) ny=-haf
+ else if (ny>(self.page.maxh+haf)) ny = (self.page.maxh+haf);
+ }
+ self.cursorfreezed = false;
+
+ py = self.getScrollTop(true);
+ if (ny<0&&py<=0) return self.noticeCursor();
+ else if (ny>self.page.maxh&&py>=self.page.maxh) {
+ self.checkContentSize();
+ return self.noticeCursor();
+ }
+
+ self.doScrollTop(ny);
+ };
+
+ this.doScrollLeftBy = function(stp,relative) {
+ var nx = 0;
+ if (relative) {
+ nx = Math.floor((self.scroll.x-stp)*self.scrollratio.x)
+ } else {
+ var sx = (self.timer) ? self.newscrollx : self.getScrollLeft(true);
+ nx = sx-stp;
+ }
+ if (self.bouncescroll) {
+ var haf = Math.round(self.view.w/2);
+ if (nx<-haf) nx=-haf
+ else if (nx>(self.page.maxw+haf)) nx = (self.page.maxw+haf);
+ }
+ self.cursorfreezed = false;
+
+ px = self.getScrollLeft(true);
+ if (nx<0&&px<=0) return self.noticeCursor();
+ else if (nx>self.page.maxw&&px>=self.page.maxw) return self.noticeCursor();
+
+ self.doScrollLeft(nx);
+ };
+
+ this.doScrollTo = function(pos,relative) {
+ var ny = (relative) ? Math.round(pos*self.scrollratio.y) : pos;
+ if (ny<0) ny=0
+ else if (ny>self.page.maxh) ny = self.page.maxh;
+ self.cursorfreezed = false;
+ self.doScrollTop(pos);
+ };
+
+ this.checkContentSize = function() {
+ var pg = self.getContentSize();
+ if ((pg.h!=self.page.h)||(pg.w!=self.page.w)) self.resize(false,pg);
+ };
+
+ self.onscroll = function(e) {
+ if (self.rail.drag) return;
+ if (!self.cursorfreezed) {
+ self.synched('scroll',function(){
+ self.scroll.y = Math.round(self.getScrollTop() * (1/self.scrollratio.y));
+ if (self.railh) self.scroll.x = Math.round(self.getScrollLeft() * (1/self.scrollratio.x));
+ self.noticeCursor();
+ });
+ }
+ };
+ self.bind(self.docscroll,"scroll",self.onscroll);
+
+ this.doZoomIn = function(e) {
+ if (self.zoomactive) return;
+ self.zoomactive = true;
+
+ self.zoomrestore = {
+ style:{}
+ };
+ var lst = ['position','top','left','zIndex','backgroundColor','marginTop','marginBottom','marginLeft','marginRight'];
+ var win = self.win[0].style;
+ for(var a in lst) {
+ var pp = lst[a];
+ self.zoomrestore.style[pp] = (typeof win[pp]!='undefined') ? win[pp] : '';
+ }
+
+ self.zoomrestore.style.width = self.win.css('width');
+ self.zoomrestore.style.height = self.win.css('height');
+
+ self.zoomrestore.padding = {
+ w:self.win.outerWidth()-self.win.width(),
+ h:self.win.outerHeight()-self.win.height()
+ };
+
+ if (cap.isios4) {
+ self.zoomrestore.scrollTop = $(window).scrollTop();
+ $(window).scrollTop(0);
+ }
+
+ self.win.css({
+ "position":(cap.isios4)?"absolute":"fixed",
+ "top":0,
+ "left":0,
+ "z-index":self.opt.zindex+100,
+ "margin":"0px"
+ });
+ var bkg = self.win.css("backgroundColor");
+ if (bkg==""||/transparent|rgba\(0, 0, 0, 0\)|rgba\(0,0,0,0\)/.test(bkg)) self.win.css("backgroundColor","#fff");
+ self.rail.css({"z-index":self.opt.zindex+110});
+ self.zoom.css({"z-index":self.opt.zindex+112});
+ self.zoom.css('backgroundPosition','0px -18px');
+ self.resizeZoom();
+
+ if (self.onzoomin) self.onzoomin.call(self);
+
+ return self.cancelEvent(e);
+ };
+
+ this.doZoomOut = function(e) {
+ if (!self.zoomactive) return;
+ self.zoomactive = false;
+
+ self.win.css("margin","");
+ self.win.css(self.zoomrestore.style);
+
+ if (cap.isios4) {
+ $(window).scrollTop(self.zoomrestore.scrollTop);
+ }
+
+ self.rail.css({"z-index":(self.ispage)?self.opt.zindex:self.opt.zindex+2});
+ self.zoom.css({"z-index":self.opt.zindex});
+ self.zoomrestore = false;
+ self.zoom.css('backgroundPosition','0px 0px');
+ self.onResize();
+
+ if (self.onzoomout) self.onzoomout.call(self);
+
+ return self.cancelEvent(e);
+ };
+
+ this.doZoom = function(e) {
+ return (self.zoomactive) ? self.doZoomOut(e) : self.doZoomIn(e);
+ };
+
+ this.resizeZoom = function() {
+ if (!self.zoomactive) return;
+
+ var py = self.getScrollTop(); //preserve scrolling position
+ self.win.css({
+ width:$(window).width()-self.zoomrestore.padding.w+"px",
+ height:$(window).height()-self.zoomrestore.padding.h+"px"
+ });
+ self.onResize();
+
+ console.log(py);
+
+ self.setScrollTop(Math.min(self.page.maxh,py));
+ };
+
+ this.init();
+
+ $.nicescroll.push(this);
+
+ };
+
+// Inspired by the work of Kin Blas
+// http://webpro.host.adobe.com/people/jblas/momentum/includes/jquery.momentum.0.7.js
+
+
+ var ScrollMomentumClass2D = function(nc) {
+ var self = this;
+ this.nc = nc;
+
+ this.lastx = 0;
+ this.lasty = 0;
+ this.speedx = 0;
+ this.speedy = 0;
+ this.lasttime = 0;
+ this.steptime = 0;
+ this.snapx = false;
+ this.snapy = false;
+ this.demulx = 0;
+ this.demuly = 0;
+
+ this.lastscrollx = -1;
+ this.lastscrolly = -1;
+
+ this.chkx = 0;
+ this.chky = 0;
+
+ this.timer = 0;
+
+ this.time = function() {
+ return +new Date();//beautifull hack
+ };
+
+ this.reset = function(px,py) {
+ self.stop();
+ var now = self.time();
+ self.steptime = 0;
+ self.lasttime = now;
+ self.speedx = 0;
+ self.speedy = 0;
+ self.lastx = px;
+ self.lasty = py;
+ self.lastscrollx = -1;
+ self.lastscrolly = -1;
+ };
+
+ this.update = function(px,py) {
+ var now = self.time();
+ self.steptime = now - self.lasttime;
+ self.lasttime = now;
+ var dy = py - self.lasty;
+ var dx = px - self.lastx;
+ var sy = self.nc.getScrollTop();
+ var sx = self.nc.getScrollLeft();
+ var newy = sy + dy;
+ var newx = sx + dx;
+ self.snapx = (newx<0)||(newx>self.nc.page.maxw);
+ self.snapy = (newy<0)||(newy>self.nc.page.maxh);
+ self.speedx = dx;
+ self.speedy = dy;
+ self.lastx = px;
+ self.lasty = py;
+ };
+
+ this.stop = function() {
+ self.nc.unsynched("domomentum2d");
+ if (self.timer) clearTimeout(self.timer);
+ self.timer = 0;
+ self.lastscrollx = -1;
+ self.lastscrolly = -1;
+ };
+
+ this.doSnapy = function(nx,ny) {
+ var snap = false;
+
+ if (ny<0) {
+ ny=0;
+ snap=true;
+ }
+ else if (ny>self.nc.page.maxh) {
+ ny=self.nc.page.maxh;
+ snap=true;
+ }
+
+ if (nx<0) {
+ nx=0;
+ snap=true;
+ }
+ else if (nx>self.nc.page.maxw) {
+ nx=self.nc.page.maxw;
+ snap=true;
+ }
+
+ if (snap) self.nc.doScrollPos(nx,ny,self.nc.opt.snapbackspeed);
+ };
+
+ this.doMomentum = function(gp) {
+ var t = self.time();
+ var l = (gp) ? t+gp : self.lasttime;
+
+ var sl = self.nc.getScrollLeft();
+ var st = self.nc.getScrollTop();
+
+ var pageh = self.nc.page.maxh;
+ var pagew = self.nc.page.maxw;
+
+ self.speedx = (pagew>0) ? Math.min(60,self.speedx) : 0;
+ self.speedy = (pageh>0) ? Math.min(60,self.speedy) : 0;
+
+ var chk = l && (t - l) <= 50;
+
+ if ((st<0)||(st>pageh)||(sl<0)||(sl>pagew)) chk = false;
+
+ var sy = (self.speedy && chk) ? self.speedy : false;
+ var sx = (self.speedx && chk) ? self.speedx : false;
+
+ if (sy||sx) {
+ var tm = Math.max(16,self.steptime); //timeout granularity
+
+ if (tm>50) { // do smooth
+ var xm = tm/50;
+ self.speedx*=xm;
+ self.speedy*=xm;
+ tm = 50;
+ }
+
+ self.demulxy = 0;
+
+ self.lastscrollx = self.nc.getScrollLeft();
+ self.chkx = self.lastscrollx;
+ self.lastscrolly = self.nc.getScrollTop();
+ self.chky = self.lastscrolly;
+
+ var nx = self.lastscrollx;
+ var ny = self.lastscrolly;
+
+ var onscroll = function(){
+ var df = ((self.time()-t)>600) ? 0.04 : 0.02;
+
+ if (self.speedx) {
+ nx = Math.floor(self.lastscrollx - (self.speedx*(1-self.demulxy)));
+ self.lastscrollx = nx;
+ if ((nx<0)||(nx>pagew)) df=0.10;
+ }
+
+ if (self.speedy) {
+ ny = Math.floor(self.lastscrolly - (self.speedy*(1-self.demulxy)));
+ self.lastscrolly = ny;
+ if ((ny<0)||(ny>pageh)) df=0.10;
+ }
+
+ self.demulxy = Math.min(1,self.demulxy+df);
+
+ self.nc.synched("domomentum2d",function(){
+
+ if (self.speedx) {
+ var scx = self.nc.getScrollLeft();
+ if (scx!=self.chkx) self.stop();
+ self.chkx=nx;
+ self.nc.setScrollLeft(nx);
+ }
+
+ if (self.speedy) {
+ var scy = self.nc.getScrollTop();
+ if (scy!=self.chky) self.stop();
+ self.chky=ny;
+ self.nc.setScrollTop(ny);
+ }
+
+ if(!self.timer) {
+ self.nc.hideCursor();
+ self.doSnapy(nx,ny);
+ }
+
+ });
+
+ if (self.demulxy<1) {
+ self.timer = setTimeout(onscroll,tm);
+ } else {
+ self.stop();
+ self.nc.hideCursor();
+ self.doSnapy(nx,ny);
+ }
+ };
+
+ onscroll();
+
+ } else {
+ self.doSnapy(self.nc.getScrollLeft(),self.nc.getScrollTop());
+ }
+
+ }
+
+ };
+
+
+// override jQuery scrollTop
+
+ var _scrollTop = jQuery.fn.scrollTop; // preserve original function
+
+ $.cssHooks["pageYOffset"] = {
+ get: function(elem,computed,extra) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(elem);
+ },
+ set: function(elem,value) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call(elem,value);
+ return this;
+ }
+ };
+
+/*
+ $.fx.step["scrollTop"] = function(fx){
+ $.cssHooks["scrollTop"].set( fx.elem, fx.now + fx.unit );
+ };
+*/
+
+ jQuery.fn.scrollTop = function(value) {
+ if (typeof value == "undefined") {
+ var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollTop() : _scrollTop.call(this);
+ } else {
+ return this.each(function() {
+ var nice = $.data(this,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollTop(parseInt(value)) : _scrollTop.call($(this),value);
+ });
+ }
+ }
+
+// override jQuery scrollLeft
+
+ var _scrollLeft = jQuery.fn.scrollLeft; // preserve original function
+
+ $.cssHooks.pageXOffset = {
+ get: function(elem,computed,extra) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(elem);
+ },
+ set: function(elem,value) {
+ var nice = $.data(elem,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call(elem,value);
+ return this;
+ }
+ };
+
+/*
+ $.fx.step["scrollLeft"] = function(fx){
+ $.cssHooks["scrollLeft"].set( fx.elem, fx.now + fx.unit );
+ };
+*/
+
+ jQuery.fn.scrollLeft = function(value) {
+ if (typeof value == "undefined") {
+ var nice = (this[0]) ? $.data(this[0],'__nicescroll')||false : false;
+ return (nice&&nice.ishwscroll) ? nice.getScrollLeft() : _scrollLeft.call(this);
+ } else {
+ return this.each(function() {
+ var nice = $.data(this,'__nicescroll')||false;
+ (nice&&nice.ishwscroll) ? nice.setScrollLeft(parseInt(value)) : _scrollLeft.call($(this),value);
+ });
+ }
+ }
+
+ var NiceScrollArray = function(doms) {
+ var self = this;
+ this.length = 0;
+ this.name = "nicescrollarray";
+
+ this.each = function(fn) {
+ for(var a=0;a>> 0;
+ for (var i = 0; i < len; i++) {
+ if (i in this) {
+ block.call(thisObject, this[i], i, this);
+ }
+ }
+ };
+}
+if (!Array.prototype.map) {
+ Array.prototype.map = function(fun /*, thisp*/) {
+ var len = this.length >>> 0;
+ var res = new Array(len);
+ var thisp = arguments[1];
+
+ for (var i = 0; i < len; i++) {
+ if (i in this) {
+ res[i] = fun.call(thisp, this[i], i, this);
+ }
+ }
+ return res;
+ };
+}
+if (!Array.prototype.filter) {
+ Array.prototype.filter = function (block /*, thisp */) {
+ var values = [];
+ var thisp = arguments[1];
+ for (var i = 0; i < this.length; i++) {
+ if (block.call(thisp, this[i])) {
+ values.push(this[i]);
+ }
+ }
+ return values;
+ };
+}
+if (!Array.prototype.reduce) {
+ Array.prototype.reduce = function(fun /*, initial*/) {
+ var len = this.length >>> 0;
+ var i = 0;
+
+ // no value to return if no initial value and an empty array
+ if (len === 0 && arguments.length === 1) throw new TypeError();
+
+ if (arguments.length >= 2) {
+ var rv = arguments[1];
+ } else {
+ do {
+ if (i in this) {
+ rv = this[i++];
+ break;
+ }
+ // if array contains no values, no initial value to return
+ if (++i >= len) throw new TypeError();
+ } while (true);
+ }
+ for (; i < len; i++) {
+ if (i in this) {
+ rv = fun.call(null, rv, this[i], i, this);
+ }
+ }
+ return rv;
+ };
+}
+if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function (value /*, fromIndex */ ) {
+ var length = this.length;
+ var i = arguments[1] || 0;
+
+ if (!length) return -1;
+ if (i >= length) return -1;
+ if (i < 0) i += length;
+
+ for (; i < length; i++) {
+ if (!Object.prototype.hasOwnProperty.call(this, i)) { continue }
+ if (value === this[i]) return i;
+ }
+ return -1;
+ };
+}
+
+//
+// Object
+//
+if (!Object.keys) {
+ Object.keys = function (object) {
+ var keys = [];
+ for (var name in object) {
+ if (Object.prototype.hasOwnProperty.call(object, name)) {
+ keys.push(name);
+ }
+ }
+ return keys;
+ };
+}
+
+//
+// String
+//
+if (!String.prototype.trim) {
+ String.prototype.trim = function () {
+ return String(this).replace(/^\s\s*/, '').replace(/\s\s*$/, '');
+ };
+}
+var less, tree, charset;
+
+if (typeof environment === "object" && ({}).toString.call(environment) === "[object Environment]") {
+ // Rhino
+ // Details on how to detect Rhino: https://github.com/ringo/ringojs/issues/88
+ if (typeof(window) === 'undefined') { less = {} }
+ else { less = window.less = {} }
+ tree = less.tree = {};
+ less.mode = 'rhino';
+} else if (typeof(window) === 'undefined') {
+ // Node.js
+ less = exports,
+ tree = require('./tree');
+ less.mode = 'node';
+} else {
+ // Browser
+ if (typeof(window.less) === 'undefined') { window.less = {} }
+ less = window.less,
+ tree = window.less.tree = {};
+ less.mode = 'browser';
+}
+//
+// less.js - parser
+//
+// A relatively straight-forward predictive parser.
+// There is no tokenization/lexing stage, the input is parsed
+// in one sweep.
+//
+// To make the parser fast enough to run in the browser, several
+// optimization had to be made:
+//
+// - Matching and slicing on a huge input is often cause of slowdowns.
+// The solution is to chunkify the input into smaller strings.
+// The chunks are stored in the `chunks` var,
+// `j` holds the current chunk index, and `current` holds
+// the index of the current chunk in relation to `input`.
+// This gives us an almost 4x speed-up.
+//
+// - In many cases, we don't need to match individual tokens;
+// for example, if a value doesn't hold any variables, operations
+// or dynamic references, the parser can effectively 'skip' it,
+// treating it as a literal.
+// An example would be '1px solid #000' - which evaluates to itself,
+// we don't need to know what the individual components are.
+// The drawback, of course is that you don't get the benefits of
+// syntax-checking on the CSS. This gives us a 50% speed-up in the parser,
+// and a smaller speed-up in the code-gen.
+//
+//
+// Token matching is done with the `$` function, which either takes
+// a terminal string or regexp, or a non-terminal function to call.
+// It also takes care of moving all the indices forwards.
+//
+//
+less.Parser = function Parser(env) {
+ var input, // LeSS input string
+ i, // current index in `input`
+ j, // current chunk
+ temp, // temporarily holds a chunk's state, for backtracking
+ memo, // temporarily holds `i`, when backtracking
+ furthest, // furthest index the parser has gone to
+ chunks, // chunkified input
+ current, // index of current chunk, in `input`
+ parser;
+
+ var that = this;
+
+ // Top parser on an import tree must be sure there is one "env"
+ // which will then be passed arround by reference.
+ var env = env || { };
+ // env.contents and files must be passed arround with top env
+ if (!env.contents) { env.contents = {}; }
+ env.rootpath = env.rootpath || ''; // env.rootpath must be initialized to '' if not provided
+ if (!env.files) { env.files = {}; }
+
+ // This function is called after all files
+ // have been imported through `@import`.
+ var finish = function () {};
+
+ var imports = this.imports = {
+ paths: env.paths || [], // Search paths, when importing
+ queue: [], // Files which haven't been imported yet
+ files: env.files, // Holds the imported parse trees
+ contents: env.contents, // Holds the imported file contents
+ mime: env.mime, // MIME type of .less files
+ error: null, // Error in parsing/evaluating an import
+ push: function (path, callback) {
+ var that = this;
+ this.queue.push(path);
+
+ //
+ // Import a file asynchronously
+ //
+ less.Parser.importer(path, this.paths, function (e, root, fullPath) {
+ that.queue.splice(that.queue.indexOf(path), 1); // Remove the path from the queue
+
+ var imported = fullPath in that.files;
+
+ that.files[fullPath] = root; // Store the root
+
+ if (e && !that.error) { that.error = e }
+
+ callback(e, root, imported);
+
+ if (that.queue.length === 0) { finish(that.error) } // Call `finish` if we're done importing
+ }, env);
+ }
+ };
+
+ function save() { temp = chunks[j], memo = i, current = i }
+ function restore() { chunks[j] = temp, i = memo, current = i }
+
+ function sync() {
+ if (i > current) {
+ chunks[j] = chunks[j].slice(i - current);
+ current = i;
+ }
+ }
+ function isWhitespace(c) {
+ // Could change to \s?
+ var code = c.charCodeAt(0);
+ return code === 32 || code === 10 || code === 9;
+ }
+ //
+ // Parse from a token, regexp or string, and move forward if match
+ //
+ function $(tok) {
+ var match, args, length, index, k;
+
+ //
+ // Non-terminal
+ //
+ if (tok instanceof Function) {
+ return tok.call(parser.parsers);
+ //
+ // Terminal
+ //
+ // Either match a single character in the input,
+ // or match a regexp in the current chunk (chunk[j]).
+ //
+ } else if (typeof(tok) === 'string') {
+ match = input.charAt(i) === tok ? tok : null;
+ length = 1;
+ sync ();
+ } else {
+ sync ();
+
+ if (match = tok.exec(chunks[j])) {
+ length = match[0].length;
+ } else {
+ return null;
+ }
+ }
+
+ // The match is confirmed, add the match length to `i`,
+ // and consume any extra white-space characters (' ' || '\n')
+ // which come after that. The reason for this is that LeSS's
+ // grammar is mostly white-space insensitive.
+ //
+ if (match) {
+ skipWhitespace(length);
+
+ if(typeof(match) === 'string') {
+ return match;
+ } else {
+ return match.length === 1 ? match[0] : match;
+ }
+ }
+ }
+
+ function skipWhitespace(length) {
+ var oldi = i, oldj = j,
+ endIndex = i + chunks[j].length,
+ mem = i += length;
+
+ while (i < endIndex) {
+ if (! isWhitespace(input.charAt(i))) { break }
+ i++;
+ }
+ chunks[j] = chunks[j].slice(length + (i - mem));
+ current = i;
+
+ if (chunks[j].length === 0 && j < chunks.length - 1) { j++ }
+
+ return oldi !== i || oldj !== j;
+ }
+
+ function expect(arg, msg) {
+ var result = $(arg);
+ if (! result) {
+ error(msg || (typeof(arg) === 'string' ? "expected '" + arg + "' got '" + input.charAt(i) + "'"
+ : "unexpected token"));
+ } else {
+ return result;
+ }
+ }
+
+ function error(msg, type) {
+ var e = new Error(msg);
+ e.index = i;
+ e.type = type || 'Syntax';
+ throw e;
+ }
+
+ // Same as $(), but don't change the state of the parser,
+ // just return the match.
+ function peek(tok) {
+ if (typeof(tok) === 'string') {
+ return input.charAt(i) === tok;
+ } else {
+ if (tok.test(chunks[j])) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ function getInput(e, env) {
+ if (e.filename && env.filename && (e.filename !== env.filename)) {
+ return parser.imports.contents[e.filename];
+ } else {
+ return input;
+ }
+ }
+
+ function getLocation(index, input) {
+ for (var n = index, column = -1;
+ n >= 0 && input.charAt(n) !== '\n';
+ n--) { column++ }
+
+ return { line: typeof(index) === 'number' ? (input.slice(0, index).match(/\n/g) || "").length : null,
+ column: column };
+ }
+
+ function getFileName(e) {
+ if(less.mode === 'browser' || less.mode === 'rhino')
+ return e.filename;
+ else
+ return require('path').resolve(e.filename);
+ }
+
+ function getDebugInfo(index, inputStream, e) {
+ return {
+ lineNumber: getLocation(index, inputStream).line + 1,
+ fileName: getFileName(e)
+ };
+ }
+
+ function LessError(e, env) {
+ var input = getInput(e, env),
+ loc = getLocation(e.index, input),
+ line = loc.line,
+ col = loc.column,
+ lines = input.split('\n');
+
+ this.type = e.type || 'Syntax';
+ this.message = e.message;
+ this.filename = e.filename || env.filename;
+ this.index = e.index;
+ this.line = typeof(line) === 'number' ? line + 1 : null;
+ this.callLine = e.call && (getLocation(e.call, input).line + 1);
+ this.callExtract = lines[getLocation(e.call, input).line];
+ this.stack = e.stack;
+ this.column = col;
+ this.extract = [
+ lines[line - 1],
+ lines[line],
+ lines[line + 1]
+ ];
+ }
+
+ this.env = env = env || {};
+
+ // The optimization level dictates the thoroughness of the parser,
+ // the lower the number, the less nodes it will create in the tree.
+ // This could matter for debugging, or if you want to access
+ // the individual nodes in the tree.
+ this.optimization = ('optimization' in this.env) ? this.env.optimization : 1;
+
+ this.env.filename = this.env.filename || null;
+
+ //
+ // The Parser
+ //
+ return parser = {
+
+ imports: imports,
+ //
+ // Parse an input string into an abstract syntax tree,
+ // call `callback` when done.
+ //
+ parse: function (str, callback) {
+ var root, start, end, zone, line, lines, buff = [], c, error = null;
+
+ i = j = current = furthest = 0;
+ input = str.replace(/\r\n/g, '\n');
+
+ // Remove potential UTF Byte Order Mark
+ input = input.replace(/^\uFEFF/, '');
+
+ // Split the input into chunks.
+ chunks = (function (chunks) {
+ var j = 0,
+ skip = /(?:@\{[\w-]+\}|[^"'`\{\}\/\(\)\\])+/g,
+ comment = /\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,
+ string = /"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'|`((?:[^`]|\\.)*)`/g,
+ level = 0,
+ match,
+ chunk = chunks[0],
+ inParam;
+
+ for (var i = 0, c, cc; i < input.length;) {
+ skip.lastIndex = i;
+ if (match = skip.exec(input)) {
+ if (match.index === i) {
+ i += match[0].length;
+ chunk.push(match[0]);
+ }
+ }
+ c = input.charAt(i);
+ comment.lastIndex = string.lastIndex = i;
+
+ if (match = string.exec(input)) {
+ if (match.index === i) {
+ i += match[0].length;
+ chunk.push(match[0]);
+ continue;
+ }
+ }
+
+ if (!inParam && c === '/') {
+ cc = input.charAt(i + 1);
+ if (cc === '/' || cc === '*') {
+ if (match = comment.exec(input)) {
+ if (match.index === i) {
+ i += match[0].length;
+ chunk.push(match[0]);
+ continue;
+ }
+ }
+ }
+ }
+
+ switch (c) {
+ case '{': if (! inParam) { level ++; chunk.push(c); break }
+ case '}': if (! inParam) { level --; chunk.push(c); chunks[++j] = chunk = []; break }
+ case '(': if (! inParam) { inParam = true; chunk.push(c); break }
+ case ')': if ( inParam) { inParam = false; chunk.push(c); break }
+ default: chunk.push(c);
+ }
+
+ i++;
+ }
+ if (level != 0) {
+ error = new(LessError)({
+ index: i-1,
+ type: 'Parse',
+ message: (level > 0) ? "missing closing `}`" : "missing opening `{`",
+ filename: env.filename
+ }, env);
+ }
+
+ return chunks.map(function (c) { return c.join('') });;
+ })([[]]);
+
+ if (error) {
+ return callback(error, env);
+ }
+
+ // Start with the primary rule.
+ // The whole syntax tree is held under a Ruleset node,
+ // with the `root` property set to true, so no `{}` are
+ // output. The callback is called when the input is parsed.
+ try {
+ root = new(tree.Ruleset)([], $(this.parsers.primary));
+ root.root = true;
+ } catch (e) {
+ return callback(new(LessError)(e, env));
+ }
+
+ root.toCSS = (function (evaluate) {
+ var line, lines, column;
+
+ return function (options, variables) {
+ var frames = [], importError;
+
+ options = options || {};
+ //
+ // Allows setting variables with a hash, so:
+ //
+ // `{ color: new(tree.Color)('#f01') }` will become:
+ //
+ // new(tree.Rule)('@color',
+ // new(tree.Value)([
+ // new(tree.Expression)([
+ // new(tree.Color)('#f01')
+ // ])
+ // ])
+ // )
+ //
+ if (typeof(variables) === 'object' && !Array.isArray(variables)) {
+ variables = Object.keys(variables).map(function (k) {
+ var value = variables[k];
+
+ if (! (value instanceof tree.Value)) {
+ if (! (value instanceof tree.Expression)) {
+ value = new(tree.Expression)([value]);
+ }
+ value = new(tree.Value)([value]);
+ }
+ return new(tree.Rule)('@' + k, value, false, 0);
+ });
+ frames = [new(tree.Ruleset)(null, variables)];
+ }
+
+ try {
+ var css = evaluate.call(this, { frames: frames })
+ .toCSS([], { compress: options.compress || false, dumpLineNumbers: env.dumpLineNumbers });
+ } catch (e) {
+ throw new(LessError)(e, env);
+ }
+
+ if ((importError = parser.imports.error)) { // Check if there was an error during importing
+ if (importError instanceof LessError) throw importError;
+ else throw new(LessError)(importError, env);
+ }
+
+ if (options.yuicompress && less.mode === 'node') {
+ return require('ycssmin').cssmin(css);
+ } else if (options.compress) {
+ return css.replace(/(\s)+/g, "$1");
+ } else {
+ return css;
+ }
+ };
+ })(root.eval);
+
+ // If `i` is smaller than the `input.length - 1`,
+ // it means the parser wasn't able to parse the whole
+ // string, so we've got a parsing error.
+ //
+ // We try to extract a \n delimited string,
+ // showing the line where the parse error occured.
+ // We split it up into two parts (the part which parsed,
+ // and the part which didn't), so we can color them differently.
+ if (i < input.length - 1) {
+ i = furthest;
+ lines = input.split('\n');
+ line = (input.slice(0, i).match(/\n/g) || "").length + 1;
+
+ for (var n = i, column = -1; n >= 0 && input.charAt(n) !== '\n'; n--) { column++ }
+
+ error = {
+ type: "Parse",
+ message: "Syntax Error on line " + line,
+ index: i,
+ filename: env.filename,
+ line: line,
+ column: column,
+ extract: [
+ lines[line - 2],
+ lines[line - 1],
+ lines[line]
+ ]
+ };
+ }
+
+ if (this.imports.queue.length > 0) {
+ finish = function (e) {
+ e = error || e;
+ if (e) callback(e);
+ else callback(null, root);
+ };
+ } else {
+ callback(error, root);
+ }
+ },
+
+ //
+ // Here in, the parsing rules/functions
+ //
+ // The basic structure of the syntax tree generated is as follows:
+ //
+ // Ruleset -> Rule -> Value -> Expression -> Entity
+ //
+ // Here's some LESS code:
+ //
+ // .class {
+ // color: #fff;
+ // border: 1px solid #000;
+ // width: @w + 4px;
+ // > .child {...}
+ // }
+ //
+ // And here's what the parse tree might look like:
+ //
+ // Ruleset (Selector '.class', [
+ // Rule ("color", Value ([Expression [Color #fff]]))
+ // Rule ("border", Value ([Expression [Dimension 1px][Keyword "solid"][Color #000]]))
+ // Rule ("width", Value ([Expression [Operation "+" [Variable "@w"][Dimension 4px]]]))
+ // Ruleset (Selector [Element '>', '.child'], [...])
+ // ])
+ //
+ // In general, most rules will try to parse a token with the `$()` function, and if the return
+ // value is truly, will return a new node, of the relevant type. Sometimes, we need to check
+ // first, before parsing, that's when we use `peek()`.
+ //
+ parsers: {
+ //
+ // The `primary` rule is the *entry* and *exit* point of the parser.
+ // The rules here can appear at any level of the parse tree.
+ //
+ // The recursive nature of the grammar is an interplay between the `block`
+ // rule, which represents `{ ... }`, the `ruleset` rule, and this `primary` rule,
+ // as represented by this simplified grammar:
+ //
+ // primary → (ruleset | rule)+
+ // ruleset → selector+ block
+ // block → '{' primary '}'
+ //
+ // Only at one point is the primary rule not called from the
+ // block rule: at the root level.
+ //
+ primary: function () {
+ var node, root = [];
+
+ while ((node = $(this.mixin.definition) || $(this.rule) || $(this.ruleset) ||
+ $(this.mixin.call) || $(this.comment) || $(this.directive))
+ || $(/^[\s\n]+/) || $(/^;+/)) {
+ node && root.push(node);
+ }
+ return root;
+ },
+
+ // We create a Comment node for CSS comments `/* */`,
+ // but keep the LeSS comments `//` silent, by just skipping
+ // over them.
+ comment: function () {
+ var comment;
+
+ if (input.charAt(i) !== '/') return;
+
+ if (input.charAt(i + 1) === '/') {
+ return new(tree.Comment)($(/^\/\/.*/), true);
+ } else if (comment = $(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/)) {
+ return new(tree.Comment)(comment);
+ }
+ },
+
+ //
+ // Entities are tokens which can be found inside an Expression
+ //
+ entities: {
+ //
+ // A string, which supports escaping " and '
+ //
+ // "milky way" 'he\'s the one!'
+ //
+ quoted: function () {
+ var str, j = i, e;
+
+ if (input.charAt(j) === '~') { j++, e = true } // Escaped strings
+ if (input.charAt(j) !== '"' && input.charAt(j) !== "'") return;
+
+ e && $('~');
+
+ if (str = $(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/)) {
+ return new(tree.Quoted)(str[0], str[1] || str[2], e);
+ }
+ },
+
+ //
+ // A catch-all word, such as:
+ //
+ // black border-collapse
+ //
+ keyword: function () {
+ var k;
+
+ if (k = $(/^[_A-Za-z-][_A-Za-z0-9-]*/)) {
+ if (tree.colors.hasOwnProperty(k)) {
+ // detect named color
+ return new(tree.Color)(tree.colors[k].slice(1));
+ } else {
+ return new(tree.Keyword)(k);
+ }
+ }
+ },
+
+ //
+ // A function call
+ //
+ // rgb(255, 0, 255)
+ //
+ // We also try to catch IE's `alpha()`, but let the `alpha` parser
+ // deal with the details.
+ //
+ // The arguments are parsed with the `entities.arguments` parser.
+ //
+ call: function () {
+ var name, nameLC, args, alpha_ret, index = i;
+
+ if (! (name = /^([\w-]+|%|progid:[\w\.]+)\(/.exec(chunks[j]))) return;
+
+ name = name[1];
+ nameLC = name.toLowerCase();
+
+ if (nameLC === 'url') { return null }
+ else { i += name.length }
+
+ if (nameLC === 'alpha') {
+ alpha_ret = $(this.alpha);
+ if(typeof alpha_ret !== 'undefined') {
+ return alpha_ret;
+ }
+ }
+
+ $('('); // Parse the '(' and consume whitespace.
+
+ args = $(this.entities.arguments);
+
+ if (! $(')')) return;
+
+ if (name) { return new(tree.Call)(name, args, index, env.filename) }
+ },
+ arguments: function () {
+ var args = [], arg;
+
+ while (arg = $(this.entities.assignment) || $(this.expression)) {
+ args.push(arg);
+ if (! $(',')) { break }
+ }
+ return args;
+ },
+ literal: function () {
+ return $(this.entities.ratio) ||
+ $(this.entities.dimension) ||
+ $(this.entities.color) ||
+ $(this.entities.quoted) ||
+ $(this.entities.unicodeDescriptor);
+ },
+
+ // Assignments are argument entities for calls.
+ // They are present in ie filter properties as shown below.
+ //
+ // filter: progid:DXImageTransform.Microsoft.Alpha( *opacity=50* )
+ //
+
+ assignment: function () {
+ var key, value;
+ if ((key = $(/^\w+(?=\s?=)/i)) && $('=') && (value = $(this.entity))) {
+ return new(tree.Assignment)(key, value);
+ }
+ },
+
+ //
+ // Parse url() tokens
+ //
+ // We use a specific rule for urls, because they don't really behave like
+ // standard function calls. The difference is that the argument doesn't have
+ // to be enclosed within a string, so it can't be parsed as an Expression.
+ //
+ url: function () {
+ var value;
+
+ if (input.charAt(i) !== 'u' || !$(/^url\(/)) return;
+ value = $(this.entities.quoted) || $(this.entities.variable) ||
+ $(/^(?:(?:\\[\(\)'"])|[^\(\)'"])+/) || "";
+
+ expect(')');
+
+ return new(tree.URL)((value.value != null || value instanceof tree.Variable)
+ ? value : new(tree.Anonymous)(value), env.rootpath);
+ },
+
+ //
+ // A Variable entity, such as `@fink`, in
+ //
+ // width: @fink + 2px
+ //
+ // We use a different parser for variable definitions,
+ // see `parsers.variable`.
+ //
+ variable: function () {
+ var name, index = i;
+
+ if (input.charAt(i) === '@' && (name = $(/^@@?[\w-]+/))) {
+ return new(tree.Variable)(name, index, env.filename);
+ }
+ },
+
+ // A variable entity useing the protective {} e.g. @{var}
+ variableCurly: function () {
+ var name, curly, index = i;
+
+ if (input.charAt(i) === '@' && (curly = $(/^@\{([\w-]+)\}/))) {
+ return new(tree.Variable)("@" + curly[1], index, env.filename);
+ }
+ },
+
+ //
+ // A Hexadecimal color
+ //
+ // #4F3C2F
+ //
+ // `rgb` and `hsl` colors are parsed through the `entities.call` parser.
+ //
+ color: function () {
+ var rgb;
+
+ if (input.charAt(i) === '#' && (rgb = $(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})/))) {
+ return new(tree.Color)(rgb[1]);
+ }
+ },
+
+ //
+ // A Dimension, that is, a number and a unit
+ //
+ // 0.5em 95%
+ //
+ dimension: function () {
+ var value, c = input.charCodeAt(i);
+ //Is the first char of the dimension 0-9, '.', '+' or '-'
+ if ((c > 57 || c < 43) || c === 47 || c == 44) return;
+
+ if (value = $(/^([+-]?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn|dpi|dpcm|dppx|rem|vw|vh|vmin|vm|ch)?/)) {
+ return new(tree.Dimension)(value[1], value[2]);
+ }
+ },
+
+ //
+ // A Ratio
+ //
+ // 16/9
+ //
+ ratio: function () {
+ var value, c = input.charCodeAt(i);
+ if (c > 57 || c < 48) return;
+
+ if (value = $(/^(\d+\/\d+)/)) {
+ return new(tree.Ratio)(value[1]);
+ }
+ },
+
+ //
+ // A unicode descriptor, as is used in unicode-range
+ //
+ // U+0?? or U+00A1-00A9
+ //
+ unicodeDescriptor: function () {
+ var ud;
+
+ if (ud = $(/^U\+[0-9a-fA-F?]+(\-[0-9a-fA-F?]+)?/)) {
+ return new(tree.UnicodeDescriptor)(ud[0]);
+ }
+ },
+
+ //
+ // JavaScript code to be evaluated
+ //
+ // `window.location.href`
+ //
+ javascript: function () {
+ var str, j = i, e;
+
+ if (input.charAt(j) === '~') { j++, e = true } // Escaped strings
+ if (input.charAt(j) !== '`') { return }
+
+ e && $('~');
+
+ if (str = $(/^`([^`]*)`/)) {
+ return new(tree.JavaScript)(str[1], i, e);
+ }
+ }
+ },
+
+ //
+ // The variable part of a variable definition. Used in the `rule` parser
+ //
+ // @fink:
+ //
+ variable: function () {
+ var name;
+
+ if (input.charAt(i) === '@' && (name = $(/^(@[\w-]+)\s*:/))) { return name[1] }
+ },
+
+ //
+ // A font size/line-height shorthand
+ //
+ // small/12px
+ //
+ // We need to peek first, or we'll match on keywords and dimensions
+ //
+ shorthand: function () {
+ var a, b;
+
+ if (! peek(/^[@\w.%-]+\/[@\w.-]+/)) return;
+
+ save();
+
+ if ((a = $(this.entity)) && $('/') && (b = $(this.entity))) {
+ return new(tree.Shorthand)(a, b);
+ }
+
+ restore();
+ },
+
+ //
+ // Mixins
+ //
+ mixin: {
+ //
+ // A Mixin call, with an optional argument list
+ //
+ // #mixins > .square(#fff);
+ // .rounded(4px, black);
+ // .button;
+ //
+ // The `while` loop is there because mixins can be
+ // namespaced, but we only support the child and descendant
+ // selector for now.
+ //
+ call: function () {
+ var elements = [], e, c, argsSemiColon = [], argsComma = [], args, delim, arg, nameLoop, expressions, isSemiColonSeperated, expressionContainsNamed, index = i, s = input.charAt(i), name, value, important = false;
+
+ if (s !== '.' && s !== '#') { return }
+
+ save(); // stop us absorbing part of an invalid selector
+
+ while (e = $(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)) {
+ elements.push(new(tree.Element)(c, e, i));
+ c = $('>');
+ }
+ if ($('(')) {
+ expressions = [];
+ while (arg = $(this.expression)) {
+ nameLoop = null;
+ value = arg;
+
+ // Variable
+ if (arg.value.length == 1) {
+ var val = arg.value[0];
+ if (val instanceof tree.Variable) {
+ if ($(':')) {
+ if (expressions.length > 0) {
+ if (isSemiColonSeperated) {
+ error("Cannot mix ; and , as delimiter types");
+ }
+ expressionContainsNamed = true;
+ }
+ value = expect(this.expression);
+ nameLoop = (name = val.name);
+ }
+ }
+ }
+
+ expressions.push(value);
+
+ argsComma.push({ name: nameLoop, value: value });
+
+ if ($(',')) {
+ continue;
+ }
+
+ if ($(';') || isSemiColonSeperated) {
+
+ if (expressionContainsNamed) {
+ error("Cannot mix ; and , as delimiter types");
+ }
+
+ isSemiColonSeperated = true;
+
+ if (expressions.length > 1) {
+ value = new(tree.Value)(expressions);
+ }
+ argsSemiColon.push({ name: name, value: value });
+
+ name = null;
+ expressions = [];
+ expressionContainsNamed = false;
+ }
+ }
+
+ expect(')');
+ }
+
+ args = isSemiColonSeperated ? argsSemiColon : argsComma;
+
+ if ($(this.important)) {
+ important = true;
+ }
+
+ if (elements.length > 0 && ($(';') || peek('}'))) {
+ return new(tree.mixin.Call)(elements, args, index, env.filename, important);
+ }
+
+ restore();
+ },
+
+ //
+ // A Mixin definition, with a list of parameters
+ //
+ // .rounded (@radius: 2px, @color) {
+ // ...
+ // }
+ //
+ // Until we have a finer grained state-machine, we have to
+ // do a look-ahead, to make sure we don't have a mixin call.
+ // See the `rule` function for more information.
+ //
+ // We start by matching `.rounded (`, and then proceed on to
+ // the argument list, which has optional default values.
+ // We store the parameters in `params`, with a `value` key,
+ // if there is a value, such as in the case of `@radius`.
+ //
+ // Once we've got our params list, and a closing `)`, we parse
+ // the `{...}` block.
+ //
+ definition: function () {
+ var name, params = [], match, ruleset, param, value, cond, variadic = false;
+ if ((input.charAt(i) !== '.' && input.charAt(i) !== '#') ||
+ peek(/^[^{]*\}/)) return;
+
+ save();
+
+ if (match = $(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/)) {
+ name = match[1];
+
+ do {
+ $(this.comment);
+ if (input.charAt(i) === '.' && $(/^\.{3}/)) {
+ variadic = true;
+ params.push({ variadic: true });
+ break;
+ } else if (param = $(this.entities.variable) || $(this.entities.literal)
+ || $(this.entities.keyword)) {
+ // Variable
+ if (param instanceof tree.Variable) {
+ if ($(':')) {
+ value = expect(this.expression, 'expected expression');
+ params.push({ name: param.name, value: value });
+ } else if ($(/^\.{3}/)) {
+ params.push({ name: param.name, variadic: true });
+ variadic = true;
+ break;
+ } else {
+ params.push({ name: param.name });
+ }
+ } else {
+ params.push({ value: param });
+ }
+ } else {
+ break;
+ }
+ } while ($(',') || $(';'))
+
+ // .mixincall("@{a}");
+ // looks a bit like a mixin definition.. so we have to be nice and restore
+ if (!$(')')) {
+ furthest = i;
+ restore();
+ }
+
+ $(this.comment);
+
+ if ($(/^when/)) { // Guard
+ cond = expect(this.conditions, 'expected condition');
+ }
+
+ ruleset = $(this.block);
+
+ if (ruleset) {
+ return new(tree.mixin.Definition)(name, params, ruleset, cond, variadic);
+ } else {
+ restore();
+ }
+ }
+ }
+ },
+
+ //
+ // Entities are the smallest recognized token,
+ // and can be found inside a rule's value.
+ //
+ entity: function () {
+ return $(this.entities.literal) || $(this.entities.variable) || $(this.entities.url) ||
+ $(this.entities.call) || $(this.entities.keyword) ||$(this.entities.javascript) ||
+ $(this.comment);
+ },
+
+ //
+ // A Rule terminator. Note that we use `peek()` to check for '}',
+ // because the `block` rule will be expecting it, but we still need to make sure
+ // it's there, if ';' was ommitted.
+ //
+ end: function () {
+ return $(';') || peek('}');
+ },
+
+ //
+ // IE's alpha function
+ //
+ // alpha(opacity=88)
+ //
+ alpha: function () {
+ var value;
+
+ if (! $(/^\(opacity=/i)) return;
+ if (value = $(/^\d+/) || $(this.entities.variable)) {
+ expect(')');
+ return new(tree.Alpha)(value);
+ }
+ },
+
+ //
+ // A Selector Element
+ //
+ // div
+ // + h1
+ // #socks
+ // input[type="text"]
+ //
+ // Elements are the building blocks for Selectors,
+ // they are made out of a `Combinator` (see combinator rule),
+ // and an element name, such as a tag a class, or `*`.
+ //
+ element: function () {
+ var e, t, c, v;
+
+ c = $(this.combinator);
+
+ e = $(/^(?:\d+\.\d+|\d+)%/) || $(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/) ||
+ $('*') || $('&') || $(this.attribute) || $(/^\([^()@]+\)/) || $(/^[\.#](?=@)/) || $(this.entities.variableCurly);
+
+ if (! e) {
+ if ($('(')) {
+ if ((v = ($(this.entities.variableCurly) ||
+ $(this.entities.variable) ||
+ $(this.selector))) &&
+ $(')')) {
+ e = new(tree.Paren)(v);
+ }
+ }
+ }
+
+ if (e) { return new(tree.Element)(c, e, i) }
+ },
+
+ //
+ // Combinators combine elements together, in a Selector.
+ //
+ // Because our parser isn't white-space sensitive, special care
+ // has to be taken, when parsing the descendant combinator, ` `,
+ // as it's an empty space. We have to check the previous character
+ // in the input, to see if it's a ` ` character. More info on how
+ // we deal with this in *combinator.js*.
+ //
+ combinator: function () {
+ var match, c = input.charAt(i);
+
+ if (c === '>' || c === '+' || c === '~' || c === '|') {
+ i++;
+ while (input.charAt(i).match(/\s/)) { i++ }
+ return new(tree.Combinator)(c);
+ } else if (input.charAt(i - 1).match(/\s/)) {
+ return new(tree.Combinator)(" ");
+ } else {
+ return new(tree.Combinator)(null);
+ }
+ },
+
+ //
+ // A CSS Selector
+ //
+ // .class > div + h1
+ // li a:hover
+ //
+ // Selectors are made out of one or more Elements, see above.
+ //
+ selector: function () {
+ var sel, e, elements = [], c, match;
+
+ // depreciated, will be removed soon
+ if ($('(')) {
+ sel = $(this.entity);
+ if (!$(')')) { return null; }
+ return new(tree.Selector)([new(tree.Element)('', sel, i)]);
+ }
+
+ while (e = $(this.element)) {
+ c = input.charAt(i);
+ elements.push(e)
+ if (c === '{' || c === '}' || c === ';' || c === ',' || c === ')') { break }
+ }
+
+ if (elements.length > 0) { return new(tree.Selector)(elements) }
+ },
+ attribute: function () {
+ var attr = '', key, val, op;
+
+ if (! $('[')) return;
+
+ if (key = $(/^(?:[_A-Za-z0-9-]|\\.)+/) || $(this.entities.quoted)) {
+ if ((op = $(/^[|~*$^]?=/)) &&
+ (val = $(this.entities.quoted) || $(/^[\w-]+/))) {
+ attr = [key, op, val.toCSS ? val.toCSS() : val].join('');
+ } else { attr = key }
+ }
+
+ if (! $(']')) return;
+
+ if (attr) { return "[" + attr + "]" }
+ },
+
+ //
+ // The `block` rule is used by `ruleset` and `mixin.definition`.
+ // It's a wrapper around the `primary` rule, with added `{}`.
+ //
+ block: function () {
+ var content;
+ if ($('{') && (content = $(this.primary)) && $('}')) {
+ return content;
+ }
+ },
+
+ //
+ // div, .class, body > p {...}
+ //
+ ruleset: function () {
+ var selectors = [], s, rules, match, debugInfo;
+
+ save();
+
+ if (env.dumpLineNumbers)
+ debugInfo = getDebugInfo(i, input, env);
+
+ while (s = $(this.selector)) {
+ selectors.push(s);
+ $(this.comment);
+ if (! $(',')) { break }
+ $(this.comment);
+ }
+
+ if (selectors.length > 0 && (rules = $(this.block))) {
+ var ruleset = new(tree.Ruleset)(selectors, rules, env.strictImports);
+ if (env.dumpLineNumbers)
+ ruleset.debugInfo = debugInfo;
+ return ruleset;
+ } else {
+ // Backtrack
+ furthest = i;
+ restore();
+ }
+ },
+ rule: function () {
+ var name, value, c = input.charAt(i), important, match;
+ save();
+
+ if (c === '.' || c === '#' || c === '&') { return }
+
+ if (name = $(this.variable) || $(this.property)) {
+ if ((name.charAt(0) != '@') && (match = /^([^@+\/'"*`(;{}-]*);/.exec(chunks[j]))) {
+ i += match[0].length - 1;
+ value = new(tree.Anonymous)(match[1]);
+ } else if (name === "font") {
+ value = $(this.font);
+ } else {
+ value = $(this.value);
+ }
+ important = $(this.important);
+
+ if (value && $(this.end)) {
+ return new(tree.Rule)(name, value, important, memo);
+ } else {
+ furthest = i;
+ restore();
+ }
+ }
+ },
+
+ //
+ // An @import directive
+ //
+ // @import "lib";
+ //
+ // Depending on our environemnt, importing is done differently:
+ // In the browser, it's an XHR request, in Node, it would be a
+ // file-system operation. The function used for importing is
+ // stored in `import`, which we pass to the Import constructor.
+ //
+ "import": function () {
+ var path, features, index = i;
+
+ save();
+
+ var dir = $(/^@import(?:-(once))?\s+/);
+
+ if (dir && (path = $(this.entities.quoted) || $(this.entities.url))) {
+ features = $(this.mediaFeatures);
+ if ($(';')) {
+ return new(tree.Import)(path, imports, features, (dir[1] === 'once'), index, env.rootpath);
+ }
+ }
+
+ restore();
+ },
+
+ mediaFeature: function () {
+ var e, p, nodes = [];
+
+ do {
+ if (e = $(this.entities.keyword)) {
+ nodes.push(e);
+ } else if ($('(')) {
+ p = $(this.property);
+ e = $(this.entity);
+ if ($(')')) {
+ if (p && e) {
+ nodes.push(new(tree.Paren)(new(tree.Rule)(p, e, null, i, true)));
+ } else if (e) {
+ nodes.push(new(tree.Paren)(e));
+ } else {
+ return null;
+ }
+ } else { return null }
+ }
+ } while (e);
+
+ if (nodes.length > 0) {
+ return new(tree.Expression)(nodes);
+ }
+ },
+
+ mediaFeatures: function () {
+ var e, features = [];
+
+ do {
+ if (e = $(this.mediaFeature)) {
+ features.push(e);
+ if (! $(',')) { break }
+ } else if (e = $(this.entities.variable)) {
+ features.push(e);
+ if (! $(',')) { break }
+ }
+ } while (e);
+
+ return features.length > 0 ? features : null;
+ },
+
+ media: function () {
+ var features, rules, media, debugInfo;
+
+ if (env.dumpLineNumbers)
+ debugInfo = getDebugInfo(i, input, env);
+
+ if ($(/^@media/)) {
+ features = $(this.mediaFeatures);
+
+ if (rules = $(this.block)) {
+ media = new(tree.Media)(rules, features);
+ if(env.dumpLineNumbers)
+ media.debugInfo = debugInfo;
+ return media;
+ }
+ }
+ },
+
+ //
+ // A CSS Directive
+ //
+ // @charset "utf-8";
+ //
+ directive: function () {
+ var name, value, rules, identifier, e, nodes, nonVendorSpecificName,
+ hasBlock, hasIdentifier, hasExpression;
+
+ if (input.charAt(i) !== '@') return;
+
+ if (value = $(this['import']) || $(this.media)) {
+ return value;
+ }
+
+ save();
+
+ name = $(/^@[a-z-]+/);
+
+ if (!name) return;
+
+ nonVendorSpecificName = name;
+ if (name.charAt(1) == '-' && name.indexOf('-', 2) > 0) {
+ nonVendorSpecificName = "@" + name.slice(name.indexOf('-', 2) + 1);
+ }
+
+ switch(nonVendorSpecificName) {
+ case "@font-face":
+ hasBlock = true;
+ break;
+ case "@viewport":
+ case "@top-left":
+ case "@top-left-corner":
+ case "@top-center":
+ case "@top-right":
+ case "@top-right-corner":
+ case "@bottom-left":
+ case "@bottom-left-corner":
+ case "@bottom-center":
+ case "@bottom-right":
+ case "@bottom-right-corner":
+ case "@left-top":
+ case "@left-middle":
+ case "@left-bottom":
+ case "@right-top":
+ case "@right-middle":
+ case "@right-bottom":
+ hasBlock = true;
+ break;
+ case "@page":
+ case "@document":
+ case "@supports":
+ case "@keyframes":
+ hasBlock = true;
+ hasIdentifier = true;
+ break;
+ case "@namespace":
+ hasExpression = true;
+ break;
+ }
+
+ if (hasIdentifier) {
+ name += " " + ($(/^[^{]+/) || '').trim();
+ }
+
+ if (hasBlock)
+ {
+ if (rules = $(this.block)) {
+ return new(tree.Directive)(name, rules);
+ }
+ } else {
+ if ((value = hasExpression ? $(this.expression) : $(this.entity)) && $(';')) {
+ var directive = new(tree.Directive)(name, value);
+ if (env.dumpLineNumbers) {
+ directive.debugInfo = getDebugInfo(i, input, env);
+ }
+ return directive;
+ }
+ }
+
+ restore();
+ },
+ font: function () {
+ var value = [], expression = [], weight, shorthand, font, e;
+
+ while (e = $(this.shorthand) || $(this.entity)) {
+ expression.push(e);
+ }
+ value.push(new(tree.Expression)(expression));
+
+ if ($(',')) {
+ while (e = $(this.expression)) {
+ value.push(e);
+ if (! $(',')) { break }
+ }
+ }
+ return new(tree.Value)(value);
+ },
+
+ //
+ // A Value is a comma-delimited list of Expressions
+ //
+ // font-family: Baskerville, Georgia, serif;
+ //
+ // In a Rule, a Value represents everything after the `:`,
+ // and before the `;`.
+ //
+ value: function () {
+ var e, expressions = [], important;
+
+ while (e = $(this.expression)) {
+ expressions.push(e);
+ if (! $(',')) { break }
+ }
+
+ if (expressions.length > 0) {
+ return new(tree.Value)(expressions);
+ }
+ },
+ important: function () {
+ if (input.charAt(i) === '!') {
+ return $(/^! *important/);
+ }
+ },
+ sub: function () {
+ var e;
+
+ if ($('(') && (e = $(this.expression)) && $(')')) {
+ return e;
+ }
+ },
+ multiplication: function () {
+ var m, a, op, operation;
+ if (m = $(this.operand)) {
+ while (!peek(/^\/[*\/]/) && (op = ($('/') || $('*'))) && (a = $(this.operand))) {
+ operation = new(tree.Operation)(op, [operation || m, a]);
+ }
+ return operation || m;
+ }
+ },
+ addition: function () {
+ var m, a, op, operation;
+ if (m = $(this.multiplication)) {
+ while ((op = $(/^[-+]\s+/) || (!isWhitespace(input.charAt(i - 1)) && ($('+') || $('-')))) &&
+ (a = $(this.multiplication))) {
+ operation = new(tree.Operation)(op, [operation || m, a]);
+ }
+ return operation || m;
+ }
+ },
+ conditions: function () {
+ var a, b, index = i, condition;
+
+ if (a = $(this.condition)) {
+ while ($(',') && (b = $(this.condition))) {
+ condition = new(tree.Condition)('or', condition || a, b, index);
+ }
+ return condition || a;
+ }
+ },
+ condition: function () {
+ var a, b, c, op, index = i, negate = false;
+
+ if ($(/^not/)) { negate = true }
+ expect('(');
+ if (a = $(this.addition) || $(this.entities.keyword) || $(this.entities.quoted)) {
+ if (op = $(/^(?:>=|=<|[<=>])/)) {
+ if (b = $(this.addition) || $(this.entities.keyword) || $(this.entities.quoted)) {
+ c = new(tree.Condition)(op, a, b, index, negate);
+ } else {
+ error('expected expression');
+ }
+ } else {
+ c = new(tree.Condition)('=', a, new(tree.Keyword)('true'), index, negate);
+ }
+ expect(')');
+ return $(/^and/) ? new(tree.Condition)('and', c, $(this.condition)) : c;
+ }
+ },
+
+ //
+ // An operand is anything that can be part of an operation,
+ // such as a Color, or a Variable
+ //
+ operand: function () {
+ var negate, p = input.charAt(i + 1);
+
+ if (input.charAt(i) === '-' && (p === '@' || p === '(')) { negate = $('-') }
+ var o = $(this.sub) || $(this.entities.dimension) ||
+ $(this.entities.color) || $(this.entities.variable) ||
+ $(this.entities.call);
+ return negate ? new(tree.Operation)('*', [new(tree.Dimension)(-1), o])
+ : o;
+ },
+
+ //
+ // Expressions either represent mathematical operations,
+ // or white-space delimited Entities.
+ //
+ // 1px solid black
+ // @var * 2
+ //
+ expression: function () {
+ var e, delim, entities = [], d;
+
+ while (e = $(this.addition) || $(this.entity)) {
+ entities.push(e);
+ }
+ if (entities.length > 0) {
+ return new(tree.Expression)(entities);
+ }
+ },
+ property: function () {
+ var name;
+
+ if (name = $(/^(\*?-?[_a-z0-9-]+)\s*:/)) {
+ return name[1];
+ }
+ }
+ }
+ };
+};
+
+if (less.mode === 'browser' || less.mode === 'rhino') {
+ //
+ // Used by `@import` directives
+ //
+ less.Parser.importer = function (path, paths, callback, env) {
+ if (!/^([a-z-]+:)?\//.test(path) && paths.length > 0) {
+ path = paths[0] + path;
+ }
+ // We pass `true` as 3rd argument, to force the reload of the import.
+ // This is so we can get the syntax tree as opposed to just the CSS output,
+ // as we need this to evaluate the current stylesheet.
+ loadStyleSheet({
+ href: path,
+ title: path,
+ type: env.mime,
+ contents: env.contents,
+ files: env.files,
+ rootpath: env.rootpath,
+ entryPath: env.entryPath,
+ relativeUrls: env.relativeUrls },
+ function (e, root, data, sheet, _, path) {
+ if (e && typeof(env.errback) === "function") {
+ env.errback.call(null, path, paths, callback, env);
+ } else {
+ callback.call(null, e, root, path);
+ }
+ }, true);
+ };
+}
+
+(function (tree) {
+
+tree.functions = {
+ rgb: function (r, g, b) {
+ return this.rgba(r, g, b, 1.0);
+ },
+ rgba: function (r, g, b, a) {
+ var rgb = [r, g, b].map(function (c) { return scaled(c, 256); });
+ a = number(a);
+ return new(tree.Color)(rgb, a);
+ },
+ hsl: function (h, s, l) {
+ return this.hsla(h, s, l, 1.0);
+ },
+ hsla: function (h, s, l, a) {
+ h = (number(h) % 360) / 360;
+ s = number(s); l = number(l); a = number(a);
+
+ var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;
+ var m1 = l * 2 - m2;
+
+ return this.rgba(hue(h + 1/3) * 255,
+ hue(h) * 255,
+ hue(h - 1/3) * 255,
+ a);
+
+ function hue(h) {
+ h = h < 0 ? h + 1 : (h > 1 ? h - 1 : h);
+ if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
+ else if (h * 2 < 1) return m2;
+ else if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;
+ else return m1;
+ }
+ },
+
+ hsv: function(h, s, v) {
+ return this.hsva(h, s, v, 1.0);
+ },
+
+ hsva: function(h, s, v, a) {
+ h = ((number(h) % 360) / 360) * 360;
+ s = number(s); v = number(v); a = number(a);
+
+ var i, f;
+ i = Math.floor((h / 60) % 6);
+ f = (h / 60) - i;
+
+ var vs = [v,
+ v * (1 - s),
+ v * (1 - f * s),
+ v * (1 - (1 - f) * s)];
+ var perm = [[0, 3, 1],
+ [2, 0, 1],
+ [1, 0, 3],
+ [1, 2, 0],
+ [3, 1, 0],
+ [0, 1, 2]];
+
+ return this.rgba(vs[perm[i][0]] * 255,
+ vs[perm[i][1]] * 255,
+ vs[perm[i][2]] * 255,
+ a);
+ },
+
+ hue: function (color) {
+ return new(tree.Dimension)(Math.round(color.toHSL().h));
+ },
+ saturation: function (color) {
+ return new(tree.Dimension)(Math.round(color.toHSL().s * 100), '%');
+ },
+ lightness: function (color) {
+ return new(tree.Dimension)(Math.round(color.toHSL().l * 100), '%');
+ },
+ red: function (color) {
+ return new(tree.Dimension)(color.rgb[0]);
+ },
+ green: function (color) {
+ return new(tree.Dimension)(color.rgb[1]);
+ },
+ blue: function (color) {
+ return new(tree.Dimension)(color.rgb[2]);
+ },
+ alpha: function (color) {
+ return new(tree.Dimension)(color.toHSL().a);
+ },
+ luma: function (color) {
+ return new(tree.Dimension)(Math.round((0.2126 * (color.rgb[0]/255) +
+ 0.7152 * (color.rgb[1]/255) +
+ 0.0722 * (color.rgb[2]/255)) *
+ color.alpha * 100), '%');
+ },
+ saturate: function (color, amount) {
+ var hsl = color.toHSL();
+
+ hsl.s += amount.value / 100;
+ hsl.s = clamp(hsl.s);
+ return hsla(hsl);
+ },
+ desaturate: function (color, amount) {
+ var hsl = color.toHSL();
+
+ hsl.s -= amount.value / 100;
+ hsl.s = clamp(hsl.s);
+ return hsla(hsl);
+ },
+ lighten: function (color, amount) {
+ var hsl = color.toHSL();
+
+ hsl.l += amount.value / 100;
+ hsl.l = clamp(hsl.l);
+ return hsla(hsl);
+ },
+ darken: function (color, amount) {
+ var hsl = color.toHSL();
+
+ hsl.l -= amount.value / 100;
+ hsl.l = clamp(hsl.l);
+ return hsla(hsl);
+ },
+ fadein: function (color, amount) {
+ var hsl = color.toHSL();
+
+ hsl.a += amount.value / 100;
+ hsl.a = clamp(hsl.a);
+ return hsla(hsl);
+ },
+ fadeout: function (color, amount) {
+ var hsl = color.toHSL();
+
+ hsl.a -= amount.value / 100;
+ hsl.a = clamp(hsl.a);
+ return hsla(hsl);
+ },
+ fade: function (color, amount) {
+ var hsl = color.toHSL();
+
+ hsl.a = amount.value / 100;
+ hsl.a = clamp(hsl.a);
+ return hsla(hsl);
+ },
+ spin: function (color, amount) {
+ var hsl = color.toHSL();
+ var hue = (hsl.h + amount.value) % 360;
+
+ hsl.h = hue < 0 ? 360 + hue : hue;
+
+ return hsla(hsl);
+ },
+ //
+ // Copyright (c) 2006-2009 Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein
+ // http://sass-lang.com
+ //
+ mix: function (color1, color2, weight) {
+ if (!weight) {
+ weight = new(tree.Dimension)(50);
+ }
+ var p = weight.value / 100.0;
+ var w = p * 2 - 1;
+ var a = color1.toHSL().a - color2.toHSL().a;
+
+ var w1 = (((w * a == -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
+ var w2 = 1 - w1;
+
+ var rgb = [color1.rgb[0] * w1 + color2.rgb[0] * w2,
+ color1.rgb[1] * w1 + color2.rgb[1] * w2,
+ color1.rgb[2] * w1 + color2.rgb[2] * w2];
+
+ var alpha = color1.alpha * p + color2.alpha * (1 - p);
+
+ return new(tree.Color)(rgb, alpha);
+ },
+ greyscale: function (color) {
+ return this.desaturate(color, new(tree.Dimension)(100));
+ },
+ contrast: function (color, dark, light, threshold) {
+ // filter: contrast(3.2);
+ // should be kept as is, so check for color
+ if (!color.rgb) {
+ return null;
+ }
+ if (typeof light === 'undefined') {
+ light = this.rgba(255, 255, 255, 1.0);
+ }
+ if (typeof dark === 'undefined') {
+ dark = this.rgba(0, 0, 0, 1.0);
+ }
+ if (typeof threshold === 'undefined') {
+ threshold = 0.43;
+ } else {
+ threshold = threshold.value;
+ }
+ if (((0.2126 * (color.rgb[0]/255) + 0.7152 * (color.rgb[1]/255) + 0.0722 * (color.rgb[2]/255)) * color.alpha) < threshold) {
+ return light;
+ } else {
+ return dark;
+ }
+ },
+ e: function (str) {
+ return new(tree.Anonymous)(str instanceof tree.JavaScript ? str.evaluated : str);
+ },
+ escape: function (str) {
+ return new(tree.Anonymous)(encodeURI(str.value).replace(/=/g, "%3D").replace(/:/g, "%3A").replace(/#/g, "%23").replace(/;/g, "%3B").replace(/\(/g, "%28").replace(/\)/g, "%29"));
+ },
+ '%': function (quoted /* arg, arg, ...*/) {
+ var args = Array.prototype.slice.call(arguments, 1),
+ str = quoted.value;
+
+ for (var i = 0; i < args.length; i++) {
+ str = str.replace(/%[sda]/i, function(token) {
+ var value = token.match(/s/i) ? args[i].value : args[i].toCSS();
+ return token.match(/[A-Z]$/) ? encodeURIComponent(value) : value;
+ });
+ }
+ str = str.replace(/%%/g, '%');
+ return new(tree.Quoted)('"' + str + '"', str);
+ },
+ unit: function (val, unit) {
+ return new(tree.Dimension)(val.value, unit ? unit.toCSS() : "");
+ },
+ round: function (n, f) {
+ var fraction = typeof(f) === "undefined" ? 0 : f.value;
+ return this._math(function(num) { return num.toFixed(fraction); }, n);
+ },
+ ceil: function (n) {
+ return this._math(Math.ceil, n);
+ },
+ floor: function (n) {
+ return this._math(Math.floor, n);
+ },
+ _math: function (fn, n) {
+ if (n instanceof tree.Dimension) {
+ return new(tree.Dimension)(fn(parseFloat(n.value)), n.unit);
+ } else if (typeof(n) === 'number') {
+ return fn(n);
+ } else {
+ throw { type: "Argument", message: "argument must be a number" };
+ }
+ },
+ argb: function (color) {
+ return new(tree.Anonymous)(color.toARGB());
+
+ },
+ percentage: function (n) {
+ return new(tree.Dimension)(n.value * 100, '%');
+ },
+ color: function (n) {
+ if (n instanceof tree.Quoted) {
+ return new(tree.Color)(n.value.slice(1));
+ } else {
+ throw { type: "Argument", message: "argument must be a string" };
+ }
+ },
+ iscolor: function (n) {
+ return this._isa(n, tree.Color);
+ },
+ isnumber: function (n) {
+ return this._isa(n, tree.Dimension);
+ },
+ isstring: function (n) {
+ return this._isa(n, tree.Quoted);
+ },
+ iskeyword: function (n) {
+ return this._isa(n, tree.Keyword);
+ },
+ isurl: function (n) {
+ return this._isa(n, tree.URL);
+ },
+ ispixel: function (n) {
+ return (n instanceof tree.Dimension) && n.unit === 'px' ? tree.True : tree.False;
+ },
+ ispercentage: function (n) {
+ return (n instanceof tree.Dimension) && n.unit === '%' ? tree.True : tree.False;
+ },
+ isem: function (n) {
+ return (n instanceof tree.Dimension) && n.unit === 'em' ? tree.True : tree.False;
+ },
+ _isa: function (n, Type) {
+ return (n instanceof Type) ? tree.True : tree.False;
+ },
+
+ /* Blending modes */
+
+ multiply: function(color1, color2) {
+ var r = color1.rgb[0] * color2.rgb[0] / 255;
+ var g = color1.rgb[1] * color2.rgb[1] / 255;
+ var b = color1.rgb[2] * color2.rgb[2] / 255;
+ return this.rgb(r, g, b);
+ },
+ screen: function(color1, color2) {
+ var r = 255 - (255 - color1.rgb[0]) * (255 - color2.rgb[0]) / 255;
+ var g = 255 - (255 - color1.rgb[1]) * (255 - color2.rgb[1]) / 255;
+ var b = 255 - (255 - color1.rgb[2]) * (255 - color2.rgb[2]) / 255;
+ return this.rgb(r, g, b);
+ },
+ overlay: function(color1, color2) {
+ var r = color1.rgb[0] < 128 ? 2 * color1.rgb[0] * color2.rgb[0] / 255 : 255 - 2 * (255 - color1.rgb[0]) * (255 - color2.rgb[0]) / 255;
+ var g = color1.rgb[1] < 128 ? 2 * color1.rgb[1] * color2.rgb[1] / 255 : 255 - 2 * (255 - color1.rgb[1]) * (255 - color2.rgb[1]) / 255;
+ var b = color1.rgb[2] < 128 ? 2 * color1.rgb[2] * color2.rgb[2] / 255 : 255 - 2 * (255 - color1.rgb[2]) * (255 - color2.rgb[2]) / 255;
+ return this.rgb(r, g, b);
+ },
+ softlight: function(color1, color2) {
+ var t = color2.rgb[0] * color1.rgb[0] / 255;
+ var r = t + color1.rgb[0] * (255 - (255 - color1.rgb[0]) * (255 - color2.rgb[0]) / 255 - t) / 255;
+ t = color2.rgb[1] * color1.rgb[1] / 255;
+ var g = t + color1.rgb[1] * (255 - (255 - color1.rgb[1]) * (255 - color2.rgb[1]) / 255 - t) / 255;
+ t = color2.rgb[2] * color1.rgb[2] / 255;
+ var b = t + color1.rgb[2] * (255 - (255 - color1.rgb[2]) * (255 - color2.rgb[2]) / 255 - t) / 255;
+ return this.rgb(r, g, b);
+ },
+ hardlight: function(color1, color2) {
+ var r = color2.rgb[0] < 128 ? 2 * color2.rgb[0] * color1.rgb[0] / 255 : 255 - 2 * (255 - color2.rgb[0]) * (255 - color1.rgb[0]) / 255;
+ var g = color2.rgb[1] < 128 ? 2 * color2.rgb[1] * color1.rgb[1] / 255 : 255 - 2 * (255 - color2.rgb[1]) * (255 - color1.rgb[1]) / 255;
+ var b = color2.rgb[2] < 128 ? 2 * color2.rgb[2] * color1.rgb[2] / 255 : 255 - 2 * (255 - color2.rgb[2]) * (255 - color1.rgb[2]) / 255;
+ return this.rgb(r, g, b);
+ },
+ difference: function(color1, color2) {
+ var r = Math.abs(color1.rgb[0] - color2.rgb[0]);
+ var g = Math.abs(color1.rgb[1] - color2.rgb[1]);
+ var b = Math.abs(color1.rgb[2] - color2.rgb[2]);
+ return this.rgb(r, g, b);
+ },
+ exclusion: function(color1, color2) {
+ var r = color1.rgb[0] + color2.rgb[0] * (255 - color1.rgb[0] - color1.rgb[0]) / 255;
+ var g = color1.rgb[1] + color2.rgb[1] * (255 - color1.rgb[1] - color1.rgb[1]) / 255;
+ var b = color1.rgb[2] + color2.rgb[2] * (255 - color1.rgb[2] - color1.rgb[2]) / 255;
+ return this.rgb(r, g, b);
+ },
+ average: function(color1, color2) {
+ var r = (color1.rgb[0] + color2.rgb[0]) / 2;
+ var g = (color1.rgb[1] + color2.rgb[1]) / 2;
+ var b = (color1.rgb[2] + color2.rgb[2]) / 2;
+ return this.rgb(r, g, b);
+ },
+ negation: function(color1, color2) {
+ var r = 255 - Math.abs(255 - color2.rgb[0] - color1.rgb[0]);
+ var g = 255 - Math.abs(255 - color2.rgb[1] - color1.rgb[1]);
+ var b = 255 - Math.abs(255 - color2.rgb[2] - color1.rgb[2]);
+ return this.rgb(r, g, b);
+ },
+ tint: function(color, amount) {
+ return this.mix(this.rgb(255,255,255), color, amount);
+ },
+ shade: function(color, amount) {
+ return this.mix(this.rgb(0, 0, 0), color, amount);
+ }
+};
+
+function hsla(color) {
+ return tree.functions.hsla(color.h, color.s, color.l, color.a);
+}
+
+function scaled(n, size) {
+ if (n instanceof tree.Dimension && n.unit == '%') {
+ return parseFloat(n.value * size / 100);
+ } else {
+ return number(n);
+ }
+}
+
+function number(n) {
+ if (n instanceof tree.Dimension) {
+ return parseFloat(n.unit == '%' ? n.value / 100 : n.value);
+ } else if (typeof(n) === 'number') {
+ return n;
+ } else {
+ throw {
+ error: "RuntimeError",
+ message: "color functions take numbers as parameters"
+ };
+ }
+}
+
+function clamp(val) {
+ return Math.min(1, Math.max(0, val));
+}
+
+})(require('./tree'));
+(function (tree) {
+ tree.colors = {
+ 'aliceblue':'#f0f8ff',
+ 'antiquewhite':'#faebd7',
+ 'aqua':'#00ffff',
+ 'aquamarine':'#7fffd4',
+ 'azure':'#f0ffff',
+ 'beige':'#f5f5dc',
+ 'bisque':'#ffe4c4',
+ 'black':'#000000',
+ 'blanchedalmond':'#ffebcd',
+ 'blue':'#0000ff',
+ 'blueviolet':'#8a2be2',
+ 'brown':'#a52a2a',
+ 'burlywood':'#deb887',
+ 'cadetblue':'#5f9ea0',
+ 'chartreuse':'#7fff00',
+ 'chocolate':'#d2691e',
+ 'coral':'#ff7f50',
+ 'cornflowerblue':'#6495ed',
+ 'cornsilk':'#fff8dc',
+ 'crimson':'#dc143c',
+ 'cyan':'#00ffff',
+ 'darkblue':'#00008b',
+ 'darkcyan':'#008b8b',
+ 'darkgoldenrod':'#b8860b',
+ 'darkgray':'#a9a9a9',
+ 'darkgrey':'#a9a9a9',
+ 'darkgreen':'#006400',
+ 'darkkhaki':'#bdb76b',
+ 'darkmagenta':'#8b008b',
+ 'darkolivegreen':'#556b2f',
+ 'darkorange':'#ff8c00',
+ 'darkorchid':'#9932cc',
+ 'darkred':'#8b0000',
+ 'darksalmon':'#e9967a',
+ 'darkseagreen':'#8fbc8f',
+ 'darkslateblue':'#483d8b',
+ 'darkslategray':'#2f4f4f',
+ 'darkslategrey':'#2f4f4f',
+ 'darkturquoise':'#00ced1',
+ 'darkviolet':'#9400d3',
+ 'deeppink':'#ff1493',
+ 'deepskyblue':'#00bfff',
+ 'dimgray':'#696969',
+ 'dimgrey':'#696969',
+ 'dodgerblue':'#1e90ff',
+ 'firebrick':'#b22222',
+ 'floralwhite':'#fffaf0',
+ 'forestgreen':'#228b22',
+ 'fuchsia':'#ff00ff',
+ 'gainsboro':'#dcdcdc',
+ 'ghostwhite':'#f8f8ff',
+ 'gold':'#ffd700',
+ 'goldenrod':'#daa520',
+ 'gray':'#808080',
+ 'grey':'#808080',
+ 'green':'#008000',
+ 'greenyellow':'#adff2f',
+ 'honeydew':'#f0fff0',
+ 'hotpink':'#ff69b4',
+ 'indianred':'#cd5c5c',
+ 'indigo':'#4b0082',
+ 'ivory':'#fffff0',
+ 'khaki':'#f0e68c',
+ 'lavender':'#e6e6fa',
+ 'lavenderblush':'#fff0f5',
+ 'lawngreen':'#7cfc00',
+ 'lemonchiffon':'#fffacd',
+ 'lightblue':'#add8e6',
+ 'lightcoral':'#f08080',
+ 'lightcyan':'#e0ffff',
+ 'lightgoldenrodyellow':'#fafad2',
+ 'lightgray':'#d3d3d3',
+ 'lightgrey':'#d3d3d3',
+ 'lightgreen':'#90ee90',
+ 'lightpink':'#ffb6c1',
+ 'lightsalmon':'#ffa07a',
+ 'lightseagreen':'#20b2aa',
+ 'lightskyblue':'#87cefa',
+ 'lightslategray':'#778899',
+ 'lightslategrey':'#778899',
+ 'lightsteelblue':'#b0c4de',
+ 'lightyellow':'#ffffe0',
+ 'lime':'#00ff00',
+ 'limegreen':'#32cd32',
+ 'linen':'#faf0e6',
+ 'magenta':'#ff00ff',
+ 'maroon':'#800000',
+ 'mediumaquamarine':'#66cdaa',
+ 'mediumblue':'#0000cd',
+ 'mediumorchid':'#ba55d3',
+ 'mediumpurple':'#9370d8',
+ 'mediumseagreen':'#3cb371',
+ 'mediumslateblue':'#7b68ee',
+ 'mediumspringgreen':'#00fa9a',
+ 'mediumturquoise':'#48d1cc',
+ 'mediumvioletred':'#c71585',
+ 'midnightblue':'#191970',
+ 'mintcream':'#f5fffa',
+ 'mistyrose':'#ffe4e1',
+ 'moccasin':'#ffe4b5',
+ 'navajowhite':'#ffdead',
+ 'navy':'#000080',
+ 'oldlace':'#fdf5e6',
+ 'olive':'#808000',
+ 'olivedrab':'#6b8e23',
+ 'orange':'#ffa500',
+ 'orangered':'#ff4500',
+ 'orchid':'#da70d6',
+ 'palegoldenrod':'#eee8aa',
+ 'palegreen':'#98fb98',
+ 'paleturquoise':'#afeeee',
+ 'palevioletred':'#d87093',
+ 'papayawhip':'#ffefd5',
+ 'peachpuff':'#ffdab9',
+ 'peru':'#cd853f',
+ 'pink':'#ffc0cb',
+ 'plum':'#dda0dd',
+ 'powderblue':'#b0e0e6',
+ 'purple':'#800080',
+ 'red':'#ff0000',
+ 'rosybrown':'#bc8f8f',
+ 'royalblue':'#4169e1',
+ 'saddlebrown':'#8b4513',
+ 'salmon':'#fa8072',
+ 'sandybrown':'#f4a460',
+ 'seagreen':'#2e8b57',
+ 'seashell':'#fff5ee',
+ 'sienna':'#a0522d',
+ 'silver':'#c0c0c0',
+ 'skyblue':'#87ceeb',
+ 'slateblue':'#6a5acd',
+ 'slategray':'#708090',
+ 'slategrey':'#708090',
+ 'snow':'#fffafa',
+ 'springgreen':'#00ff7f',
+ 'steelblue':'#4682b4',
+ 'tan':'#d2b48c',
+ 'teal':'#008080',
+ 'thistle':'#d8bfd8',
+ 'tomato':'#ff6347',
+ // 'transparent':'rgba(0,0,0,0)',
+ 'turquoise':'#40e0d0',
+ 'violet':'#ee82ee',
+ 'wheat':'#f5deb3',
+ 'white':'#ffffff',
+ 'whitesmoke':'#f5f5f5',
+ 'yellow':'#ffff00',
+ 'yellowgreen':'#9acd32'
+ };
+})(require('./tree'));
+(function (tree) {
+
+tree.Alpha = function (val) {
+ this.value = val;
+};
+tree.Alpha.prototype = {
+ toCSS: function () {
+ return "alpha(opacity=" +
+ (this.value.toCSS ? this.value.toCSS() : this.value) + ")";
+ },
+ eval: function (env) {
+ if (this.value.eval) { this.value = this.value.eval(env) }
+ return this;
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Anonymous = function (string) {
+ this.value = string.value || string;
+};
+tree.Anonymous.prototype = {
+ toCSS: function () {
+ return this.value;
+ },
+ eval: function () { return this },
+ compare: function (x) {
+ if (!x.toCSS) {
+ return -1;
+ }
+
+ var left = this.toCSS(),
+ right = x.toCSS();
+
+ if (left === right) {
+ return 0;
+ }
+
+ return left < right ? -1 : 1;
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Assignment = function (key, val) {
+ this.key = key;
+ this.value = val;
+};
+tree.Assignment.prototype = {
+ toCSS: function () {
+ return this.key + '=' + (this.value.toCSS ? this.value.toCSS() : this.value);
+ },
+ eval: function (env) {
+ if (this.value.eval) {
+ return new(tree.Assignment)(this.key, this.value.eval(env));
+ }
+ return this;
+ }
+};
+
+})(require('../tree'));(function (tree) {
+
+//
+// A function call node.
+//
+tree.Call = function (name, args, index, filename) {
+ this.name = name;
+ this.args = args;
+ this.index = index;
+ this.filename = filename;
+};
+tree.Call.prototype = {
+ //
+ // When evaluating a function call,
+ // we either find the function in `tree.functions` [1],
+ // in which case we call it, passing the evaluated arguments,
+ // if this returns null or we cannot find the function, we
+ // simply print it out as it appeared originally [2].
+ //
+ // The *functions.js* file contains the built-in functions.
+ //
+ // The reason why we evaluate the arguments, is in the case where
+ // we try to pass a variable to a function, like: `saturate(@color)`.
+ // The function should receive the value, not the variable.
+ //
+ eval: function (env) {
+ var args = this.args.map(function (a) { return a.eval(env) }),
+ result;
+
+ if (this.name in tree.functions) { // 1.
+ try {
+ result = tree.functions[this.name].apply(tree.functions, args);
+ if (result != null) {
+ return result;
+ }
+ } catch (e) {
+ throw { type: e.type || "Runtime",
+ message: "error evaluating function `" + this.name + "`" +
+ (e.message ? ': ' + e.message : ''),
+ index: this.index, filename: this.filename };
+ }
+ }
+
+ // 2.
+ return new(tree.Anonymous)(this.name +
+ "(" + args.map(function (a) { return a.toCSS(env) }).join(', ') + ")");
+ },
+
+ toCSS: function (env) {
+ return this.eval(env).toCSS();
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+//
+// RGB Colors - #ff0014, #eee
+//
+tree.Color = function (rgb, a) {
+ //
+ // The end goal here, is to parse the arguments
+ // into an integer triplet, such as `128, 255, 0`
+ //
+ // This facilitates operations and conversions.
+ //
+ if (Array.isArray(rgb)) {
+ this.rgb = rgb;
+ } else if (rgb.length == 6) {
+ this.rgb = rgb.match(/.{2}/g).map(function (c) {
+ return parseInt(c, 16);
+ });
+ } else {
+ this.rgb = rgb.split('').map(function (c) {
+ return parseInt(c + c, 16);
+ });
+ }
+ this.alpha = typeof(a) === 'number' ? a : 1;
+};
+tree.Color.prototype = {
+ eval: function () { return this },
+
+ //
+ // If we have some transparency, the only way to represent it
+ // is via `rgba`. Otherwise, we use the hex representation,
+ // which has better compatibility with older browsers.
+ // Values are capped between `0` and `255`, rounded and zero-padded.
+ //
+ toCSS: function () {
+ if (this.alpha < 1.0) {
+ return "rgba(" + this.rgb.map(function (c) {
+ return Math.round(c);
+ }).concat(this.alpha).join(', ') + ")";
+ } else {
+ return '#' + this.rgb.map(function (i) {
+ i = Math.round(i);
+ i = (i > 255 ? 255 : (i < 0 ? 0 : i)).toString(16);
+ return i.length === 1 ? '0' + i : i;
+ }).join('');
+ }
+ },
+
+ //
+ // Operations have to be done per-channel, if not,
+ // channels will spill onto each other. Once we have
+ // our result, in the form of an integer triplet,
+ // we create a new Color node to hold the result.
+ //
+ operate: function (op, other) {
+ var result = [];
+
+ if (! (other instanceof tree.Color)) {
+ other = other.toColor();
+ }
+
+ for (var c = 0; c < 3; c++) {
+ result[c] = tree.operate(op, this.rgb[c], other.rgb[c]);
+ }
+ return new(tree.Color)(result, this.alpha + other.alpha);
+ },
+
+ toHSL: function () {
+ var r = this.rgb[0] / 255,
+ g = this.rgb[1] / 255,
+ b = this.rgb[2] / 255,
+ a = this.alpha;
+
+ var max = Math.max(r, g, b), min = Math.min(r, g, b);
+ var h, s, l = (max + min) / 2, d = max - min;
+
+ if (max === min) {
+ h = s = 0;
+ } else {
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+
+ switch (max) {
+ case r: h = (g - b) / d + (g < b ? 6 : 0); break;
+ case g: h = (b - r) / d + 2; break;
+ case b: h = (r - g) / d + 4; break;
+ }
+ h /= 6;
+ }
+ return { h: h * 360, s: s, l: l, a: a };
+ },
+ toARGB: function () {
+ var argb = [Math.round(this.alpha * 255)].concat(this.rgb);
+ return '#' + argb.map(function (i) {
+ i = Math.round(i);
+ i = (i > 255 ? 255 : (i < 0 ? 0 : i)).toString(16);
+ return i.length === 1 ? '0' + i : i;
+ }).join('');
+ },
+ compare: function (x) {
+ if (!x.rgb) {
+ return -1;
+ }
+
+ return (x.rgb[0] === this.rgb[0] &&
+ x.rgb[1] === this.rgb[1] &&
+ x.rgb[2] === this.rgb[2] &&
+ x.alpha === this.alpha) ? 0 : -1;
+ }
+};
+
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Comment = function (value, silent) {
+ this.value = value;
+ this.silent = !!silent;
+};
+tree.Comment.prototype = {
+ toCSS: function (env) {
+ return env.compress ? '' : this.value;
+ },
+ eval: function () { return this }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Condition = function (op, l, r, i, negate) {
+ this.op = op.trim();
+ this.lvalue = l;
+ this.rvalue = r;
+ this.index = i;
+ this.negate = negate;
+};
+tree.Condition.prototype.eval = function (env) {
+ var a = this.lvalue.eval(env),
+ b = this.rvalue.eval(env);
+
+ var i = this.index, result;
+
+ var result = (function (op) {
+ switch (op) {
+ case 'and':
+ return a && b;
+ case 'or':
+ return a || b;
+ default:
+ if (a.compare) {
+ result = a.compare(b);
+ } else if (b.compare) {
+ result = b.compare(a);
+ } else {
+ throw { type: "Type",
+ message: "Unable to perform comparison",
+ index: i };
+ }
+ switch (result) {
+ case -1: return op === '<' || op === '=<';
+ case 0: return op === '=' || op === '>=' || op === '=<';
+ case 1: return op === '>' || op === '>=';
+ }
+ }
+ })(this.op);
+ return this.negate ? !result : result;
+};
+
+})(require('../tree'));
+(function (tree) {
+
+//
+// A number with a unit
+//
+tree.Dimension = function (value, unit) {
+ this.value = parseFloat(value);
+ this.unit = unit || null;
+};
+
+tree.Dimension.prototype = {
+ eval: function () { return this },
+ toColor: function () {
+ return new(tree.Color)([this.value, this.value, this.value]);
+ },
+ toCSS: function () {
+ var css = this.value + this.unit;
+ return css;
+ },
+
+ // In an operation between two Dimensions,
+ // we default to the first Dimension's unit,
+ // so `1px + 2em` will yield `3px`.
+ // In the future, we could implement some unit
+ // conversions such that `100cm + 10mm` would yield
+ // `101cm`.
+ operate: function (op, other) {
+ return new(tree.Dimension)
+ (tree.operate(op, this.value, other.value),
+ this.unit || other.unit);
+ },
+
+ compare: function (other) {
+ if (other instanceof tree.Dimension) {
+ if (other.value > this.value) {
+ return -1;
+ } else if (other.value < this.value) {
+ return 1;
+ } else {
+ if (other.unit && this.unit !== other.unit) {
+ return -1;
+ }
+ return 0;
+ }
+ } else {
+ return -1;
+ }
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Directive = function (name, value) {
+ this.name = name;
+
+ if (Array.isArray(value)) {
+ this.ruleset = new(tree.Ruleset)([], value);
+ this.ruleset.allowImports = true;
+ } else {
+ this.value = value;
+ }
+};
+tree.Directive.prototype = {
+ toCSS: function (ctx, env) {
+ if (this.ruleset) {
+ this.ruleset.root = true;
+ return this.name + (env.compress ? '{' : ' {\n ') +
+ this.ruleset.toCSS(ctx, env).trim().replace(/\n/g, '\n ') +
+ (env.compress ? '}': '\n}\n');
+ } else {
+ return this.name + ' ' + this.value.toCSS() + ';\n';
+ }
+ },
+ eval: function (env) {
+ var evaldDirective = this;
+ if (this.ruleset) {
+ env.frames.unshift(this);
+ evaldDirective = new(tree.Directive)(this.name);
+ evaldDirective.ruleset = this.ruleset.eval(env);
+ env.frames.shift();
+ }
+ return evaldDirective;
+ },
+ variable: function (name) { return tree.Ruleset.prototype.variable.call(this.ruleset, name) },
+ find: function () { return tree.Ruleset.prototype.find.apply(this.ruleset, arguments) },
+ rulesets: function () { return tree.Ruleset.prototype.rulesets.apply(this.ruleset) }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Element = function (combinator, value, index) {
+ this.combinator = combinator instanceof tree.Combinator ?
+ combinator : new(tree.Combinator)(combinator);
+
+ if (typeof(value) === 'string') {
+ this.value = value.trim();
+ } else if (value) {
+ this.value = value;
+ } else {
+ this.value = "";
+ }
+ this.index = index;
+};
+tree.Element.prototype.eval = function (env) {
+ return new(tree.Element)(this.combinator,
+ this.value.eval ? this.value.eval(env) : this.value,
+ this.index);
+};
+tree.Element.prototype.toCSS = function (env) {
+ var value = (this.value.toCSS ? this.value.toCSS(env) : this.value);
+ if (value == '' && this.combinator.value.charAt(0) == '&') {
+ return '';
+ } else {
+ return this.combinator.toCSS(env || {}) + value;
+ }
+};
+
+tree.Combinator = function (value) {
+ if (value === ' ') {
+ this.value = ' ';
+ } else {
+ this.value = value ? value.trim() : "";
+ }
+};
+tree.Combinator.prototype.toCSS = function (env) {
+ return {
+ '' : '',
+ ' ' : ' ',
+ ':' : ' :',
+ '+' : env.compress ? '+' : ' + ',
+ '~' : env.compress ? '~' : ' ~ ',
+ '>' : env.compress ? '>' : ' > ',
+ '|' : env.compress ? '|' : ' | '
+ }[this.value];
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Expression = function (value) { this.value = value };
+tree.Expression.prototype = {
+ eval: function (env) {
+ if (this.value.length > 1) {
+ return new(tree.Expression)(this.value.map(function (e) {
+ return e.eval(env);
+ }));
+ } else if (this.value.length === 1) {
+ return this.value[0].eval(env);
+ } else {
+ return this;
+ }
+ },
+ toCSS: function (env) {
+ return this.value.map(function (e) {
+ return e.toCSS ? e.toCSS(env) : '';
+ }).join(' ');
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+//
+// CSS @import node
+//
+// The general strategy here is that we don't want to wait
+// for the parsing to be completed, before we start importing
+// the file. That's because in the context of a browser,
+// most of the time will be spent waiting for the server to respond.
+//
+// On creation, we push the import path to our import queue, though
+// `import,push`, we also pass it a callback, which it'll call once
+// the file has been fetched, and parsed.
+//
+tree.Import = function (path, imports, features, once, index, rootpath) {
+ var that = this;
+
+ this.once = once;
+ this.index = index;
+ this._path = path;
+ this.features = features && new(tree.Value)(features);
+ this.rootpath = rootpath;
+
+ // The '.less' extension is optional
+ if (path instanceof tree.Quoted) {
+ this.path = /(\.[a-z]*$)|([\?;].*)$/.test(path.value) ? path.value : path.value + '.less';
+ } else {
+ this.path = path.value.value || path.value;
+ }
+
+ this.css = /css([\?;].*)?$/.test(this.path);
+
+ // Only pre-compile .less files
+ if (! this.css) {
+ imports.push(this.path, function (e, root, imported) {
+ if (e) { e.index = index }
+ if (imported && that.once) that.skip = imported;
+ that.root = root || new(tree.Ruleset)([], []);
+ });
+ }
+};
+
+//
+// The actual import node doesn't return anything, when converted to CSS.
+// The reason is that it's used at the evaluation stage, so that the rules
+// it imports can be treated like any other rules.
+//
+// In `eval`, we make sure all Import nodes get evaluated, recursively, so
+// we end up with a flat structure, which can easily be imported in the parent
+// ruleset.
+//
+tree.Import.prototype = {
+ toCSS: function (env) {
+ var features = this.features ? ' ' + this.features.toCSS(env) : '';
+
+ if (this.css) {
+ // Add the base path if the import is relative
+ if (typeof this._path.value === "string" && !/^(?:[a-z-]+:|\/)/.test(this._path.value)) {
+ this._path.value = this.rootpath + this._path.value;
+ }
+ return "@import " + this._path.toCSS() + features + ';\n';
+ } else {
+ return "";
+ }
+ },
+ eval: function (env) {
+ var ruleset, features = this.features && this.features.eval(env);
+
+ if (this.skip) return [];
+
+ if (this.css) {
+ return this;
+ } else {
+ ruleset = new(tree.Ruleset)([], this.root.rules.slice(0));
+
+ ruleset.evalImports(env);
+
+ return this.features ? new(tree.Media)(ruleset.rules, this.features.value) : ruleset.rules;
+ }
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.JavaScript = function (string, index, escaped) {
+ this.escaped = escaped;
+ this.expression = string;
+ this.index = index;
+};
+tree.JavaScript.prototype = {
+ eval: function (env) {
+ var result,
+ that = this,
+ context = {};
+
+ var expression = this.expression.replace(/@\{([\w-]+)\}/g, function (_, name) {
+ return tree.jsify(new(tree.Variable)('@' + name, that.index).eval(env));
+ });
+
+ try {
+ expression = new(Function)('return (' + expression + ')');
+ } catch (e) {
+ throw { message: "JavaScript evaluation error: `" + expression + "`" ,
+ index: this.index };
+ }
+
+ for (var k in env.frames[0].variables()) {
+ context[k.slice(1)] = {
+ value: env.frames[0].variables()[k].value,
+ toJS: function () {
+ return this.value.eval(env).toCSS();
+ }
+ };
+ }
+
+ try {
+ result = expression.call(context);
+ } catch (e) {
+ throw { message: "JavaScript evaluation error: '" + e.name + ': ' + e.message + "'" ,
+ index: this.index };
+ }
+ if (typeof(result) === 'string') {
+ return new(tree.Quoted)('"' + result + '"', result, this.escaped, this.index);
+ } else if (Array.isArray(result)) {
+ return new(tree.Anonymous)(result.join(', '));
+ } else {
+ return new(tree.Anonymous)(result);
+ }
+ }
+};
+
+})(require('../tree'));
+
+(function (tree) {
+
+tree.Keyword = function (value) { this.value = value };
+tree.Keyword.prototype = {
+ eval: function () { return this },
+ toCSS: function () { return this.value },
+ compare: function (other) {
+ if (other instanceof tree.Keyword) {
+ return other.value === this.value ? 0 : 1;
+ } else {
+ return -1;
+ }
+ }
+};
+
+tree.True = new(tree.Keyword)('true');
+tree.False = new(tree.Keyword)('false');
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Media = function (value, features) {
+ var selectors = this.emptySelectors();
+
+ this.features = new(tree.Value)(features);
+ this.ruleset = new(tree.Ruleset)(selectors, value);
+ this.ruleset.allowImports = true;
+};
+tree.Media.prototype = {
+ toCSS: function (ctx, env) {
+ var features = this.features.toCSS(env);
+
+ this.ruleset.root = (ctx.length === 0 || ctx[0].multiMedia);
+ return '@media ' + features + (env.compress ? '{' : ' {\n ') +
+ this.ruleset.toCSS(ctx, env).trim().replace(/\n/g, '\n ') +
+ (env.compress ? '}': '\n}\n');
+ },
+ eval: function (env) {
+ if (!env.mediaBlocks) {
+ env.mediaBlocks = [];
+ env.mediaPath = [];
+ }
+
+ var media = new(tree.Media)([], []);
+ if(this.debugInfo) {
+ this.ruleset.debugInfo = this.debugInfo;
+ media.debugInfo = this.debugInfo;
+ }
+ media.features = this.features.eval(env);
+
+ env.mediaPath.push(media);
+ env.mediaBlocks.push(media);
+
+ env.frames.unshift(this.ruleset);
+ media.ruleset = this.ruleset.eval(env);
+ env.frames.shift();
+
+ env.mediaPath.pop();
+
+ return env.mediaPath.length === 0 ? media.evalTop(env) :
+ media.evalNested(env)
+ },
+ variable: function (name) { return tree.Ruleset.prototype.variable.call(this.ruleset, name) },
+ find: function () { return tree.Ruleset.prototype.find.apply(this.ruleset, arguments) },
+ rulesets: function () { return tree.Ruleset.prototype.rulesets.apply(this.ruleset) },
+ emptySelectors: function() {
+ var el = new(tree.Element)('', '&', 0);
+ return [new(tree.Selector)([el])];
+ },
+
+ evalTop: function (env) {
+ var result = this;
+
+ // Render all dependent Media blocks.
+ if (env.mediaBlocks.length > 1) {
+ var selectors = this.emptySelectors();
+ result = new(tree.Ruleset)(selectors, env.mediaBlocks);
+ result.multiMedia = true;
+ }
+
+ delete env.mediaBlocks;
+ delete env.mediaPath;
+
+ return result;
+ },
+ evalNested: function (env) {
+ var i, value,
+ path = env.mediaPath.concat([this]);
+
+ // Extract the media-query conditions separated with `,` (OR).
+ for (i = 0; i < path.length; i++) {
+ value = path[i].features instanceof tree.Value ?
+ path[i].features.value : path[i].features;
+ path[i] = Array.isArray(value) ? value : [value];
+ }
+
+ // Trace all permutations to generate the resulting media-query.
+ //
+ // (a, b and c) with nested (d, e) ->
+ // a and d
+ // a and e
+ // b and c and d
+ // b and c and e
+ this.features = new(tree.Value)(this.permute(path).map(function (path) {
+ path = path.map(function (fragment) {
+ return fragment.toCSS ? fragment : new(tree.Anonymous)(fragment);
+ });
+
+ for(i = path.length - 1; i > 0; i--) {
+ path.splice(i, 0, new(tree.Anonymous)("and"));
+ }
+
+ return new(tree.Expression)(path);
+ }));
+
+ // Fake a tree-node that doesn't output anything.
+ return new(tree.Ruleset)([], []);
+ },
+ permute: function (arr) {
+ if (arr.length === 0) {
+ return [];
+ } else if (arr.length === 1) {
+ return arr[0];
+ } else {
+ var result = [];
+ var rest = this.permute(arr.slice(1));
+ for (var i = 0; i < rest.length; i++) {
+ for (var j = 0; j < arr[0].length; j++) {
+ result.push([arr[0][j]].concat(rest[i]));
+ }
+ }
+ return result;
+ }
+ },
+ bubbleSelectors: function (selectors) {
+ this.ruleset = new(tree.Ruleset)(selectors.slice(0), [this.ruleset]);
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.mixin = {};
+tree.mixin.Call = function (elements, args, index, filename, important) {
+ this.selector = new(tree.Selector)(elements);
+ this.arguments = args;
+ this.index = index;
+ this.filename = filename;
+ this.important = important;
+};
+tree.mixin.Call.prototype = {
+ eval: function (env) {
+ var mixins, mixin, args, rules = [], match = false, i, m, f, isRecursive, isOneFound;
+
+ args = this.arguments && this.arguments.map(function (a) {
+ return { name: a.name, value: a.value.eval(env) };
+ });
+
+ for (i = 0; i < env.frames.length; i++) {
+ if ((mixins = env.frames[i].find(this.selector)).length > 0) {
+ isOneFound = true;
+ for (m = 0; m < mixins.length; m++) {
+ mixin = mixins[m];
+ isRecursive = false;
+ for(f = 0; f < env.frames.length; f++) {
+ if ((!(mixin instanceof tree.mixin.Definition)) && mixin === (env.frames[f].originalRuleset || env.frames[f])) {
+ isRecursive = true;
+ break;
+ }
+ }
+ if (isRecursive) {
+ continue;
+ }
+ if (mixin.matchArgs(args, env)) {
+ if (!mixin.matchCondition || mixin.matchCondition(args, env)) {
+ try {
+ Array.prototype.push.apply(
+ rules, mixin.eval(env, args, this.important).rules);
+ } catch (e) {
+ throw { message: e.message, index: this.index, filename: this.filename, stack: e.stack };
+ }
+ }
+ match = true;
+ }
+ }
+ if (match) {
+ return rules;
+ }
+ }
+ }
+ if (isOneFound) {
+ throw { type: 'Runtime',
+ message: 'No matching definition was found for `' +
+ this.selector.toCSS().trim() + '(' +
+ (args ? args.map(function (a) {
+ var argValue = "";
+ if (a.name) {
+ argValue += a.name + ":";
+ }
+ if (a.value.toCSS) {
+ argValue += a.value.toCSS();
+ } else {
+ argValue += "???";
+ }
+ return argValue;
+ }).join(', ') : "") + ")`",
+ index: this.index, filename: this.filename };
+ } else {
+ throw { type: 'Name',
+ message: this.selector.toCSS().trim() + " is undefined",
+ index: this.index, filename: this.filename };
+ }
+ }
+};
+
+tree.mixin.Definition = function (name, params, rules, condition, variadic) {
+ this.name = name;
+ this.selectors = [new(tree.Selector)([new(tree.Element)(null, name)])];
+ this.params = params;
+ this.condition = condition;
+ this.variadic = variadic;
+ this.arity = params.length;
+ this.rules = rules;
+ this._lookups = {};
+ this.required = params.reduce(function (count, p) {
+ if (!p.name || (p.name && !p.value)) { return count + 1 }
+ else { return count }
+ }, 0);
+ this.parent = tree.Ruleset.prototype;
+ this.frames = [];
+};
+tree.mixin.Definition.prototype = {
+ toCSS: function () { return "" },
+ variable: function (name) { return this.parent.variable.call(this, name) },
+ variables: function () { return this.parent.variables.call(this) },
+ find: function () { return this.parent.find.apply(this, arguments) },
+ rulesets: function () { return this.parent.rulesets.apply(this) },
+
+ evalParams: function (env, mixinEnv, args, evaldArguments) {
+ var frame = new(tree.Ruleset)(null, []), varargs, arg, params = this.params.slice(0), i, j, val, name, isNamedFound, argIndex;
+
+ if (args) {
+ args = args.slice(0);
+
+ for(i = 0; i < args.length; i++) {
+ arg = args[i];
+ if (name = (arg && arg.name)) {
+ isNamedFound = false;
+ for(j = 0; j < params.length; j++) {
+ if (!evaldArguments[j] && name === params[j].name) {
+ evaldArguments[j] = arg.value.eval(env);
+ frame.rules.unshift(new(tree.Rule)(name, arg.value.eval(env)));
+ isNamedFound = true;
+ break;
+ }
+ }
+ if (isNamedFound) {
+ args.splice(i, 1);
+ i--;
+ continue;
+ } else {
+ throw { type: 'Runtime', message: "Named argument for " + this.name +
+ ' ' + args[i].name + ' not found' };
+ }
+ }
+ }
+ }
+ argIndex = 0;
+ for (i = 0; i < params.length; i++) {
+ if (evaldArguments[i]) continue;
+
+ arg = args && args[argIndex];
+
+ if (name = params[i].name) {
+ if (params[i].variadic && args) {
+ varargs = [];
+ for (j = argIndex; j < args.length; j++) {
+ varargs.push(args[j].value.eval(env));
+ }
+ frame.rules.unshift(new(tree.Rule)(name, new(tree.Expression)(varargs).eval(env)));
+ } else {
+ val = arg && arg.value;
+ if (val) {
+ val = val.eval(env);
+ } else if (params[i].value) {
+ val = params[i].value.eval(mixinEnv);
+ } else {
+ throw { type: 'Runtime', message: "wrong number of arguments for " + this.name +
+ ' (' + args.length + ' for ' + this.arity + ')' };
+ }
+
+ frame.rules.unshift(new(tree.Rule)(name, val));
+ evaldArguments[i] = val;
+ }
+ }
+
+ if (params[i].variadic && args) {
+ for (j = argIndex; j < args.length; j++) {
+ evaldArguments[j] = args[j].value.eval(env);
+ }
+ }
+ argIndex++;
+ }
+
+ return frame;
+ },
+ eval: function (env, args, important) {
+ var _arguments = [],
+ mixinFrames = this.frames.concat(env.frames),
+ frame = this.evalParams(env, {frames: mixinFrames}, args, _arguments),
+ context, rules, start, ruleset;
+
+ frame.rules.unshift(new(tree.Rule)('@arguments', new(tree.Expression)(_arguments).eval(env)));
+
+ rules = important ?
+ this.parent.makeImportant.apply(this).rules : this.rules.slice(0);
+
+ ruleset = new(tree.Ruleset)(null, rules).eval({
+ frames: [this, frame].concat(mixinFrames)
+ });
+ ruleset.originalRuleset = this;
+ return ruleset;
+ },
+ matchCondition: function (args, env) {
+ if (this.condition && !this.condition.eval({
+ frames: [this.evalParams(env, {frames: this.frames.concat(env.frames)}, args, [])].concat(env.frames)
+ })) { return false }
+ return true;
+ },
+ matchArgs: function (args, env) {
+ var argsLength = (args && args.length) || 0, len, frame;
+
+ if (! this.variadic) {
+ if (argsLength < this.required) { return false }
+ if (argsLength > this.params.length) { return false }
+ if ((this.required > 0) && (argsLength > this.params.length)) { return false }
+ }
+
+ len = Math.min(argsLength, this.arity);
+
+ for (var i = 0; i < len; i++) {
+ if (!this.params[i].name && !this.params[i].variadic) {
+ if (args[i].value.eval(env).toCSS() != this.params[i].value.eval(env).toCSS()) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Operation = function (op, operands) {
+ this.op = op.trim();
+ this.operands = operands;
+};
+tree.Operation.prototype.eval = function (env) {
+ var a = this.operands[0].eval(env),
+ b = this.operands[1].eval(env),
+ temp;
+
+ if (a instanceof tree.Dimension && b instanceof tree.Color) {
+ if (this.op === '*' || this.op === '+') {
+ temp = b, b = a, a = temp;
+ } else {
+ throw { name: "OperationError",
+ message: "Can't substract or divide a color from a number" };
+ }
+ }
+ if (!a.operate) {
+ throw { name: "OperationError",
+ message: "Operation on an invalid type" };
+ }
+
+ return a.operate(this.op, b);
+};
+
+tree.operate = function (op, a, b) {
+ switch (op) {
+ case '+': return a + b;
+ case '-': return a - b;
+ case '*': return a * b;
+ case '/': return a / b;
+ }
+};
+
+})(require('../tree'));
+
+(function (tree) {
+
+tree.Paren = function (node) {
+ this.value = node;
+};
+tree.Paren.prototype = {
+ toCSS: function (env) {
+ return '(' + this.value.toCSS(env) + ')';
+ },
+ eval: function (env) {
+ return new(tree.Paren)(this.value.eval(env));
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Quoted = function (str, content, escaped, i) {
+ this.escaped = escaped;
+ this.value = content || '';
+ this.quote = str.charAt(0);
+ this.index = i;
+};
+tree.Quoted.prototype = {
+ toCSS: function () {
+ if (this.escaped) {
+ return this.value;
+ } else {
+ return this.quote + this.value + this.quote;
+ }
+ },
+ eval: function (env) {
+ var that = this;
+ var value = this.value.replace(/`([^`]+)`/g, function (_, exp) {
+ return new(tree.JavaScript)(exp, that.index, true).eval(env).value;
+ }).replace(/@\{([\w-]+)\}/g, function (_, name) {
+ var v = new(tree.Variable)('@' + name, that.index).eval(env);
+ return (v instanceof tree.Quoted) ? v.value : v.toCSS();
+ });
+ return new(tree.Quoted)(this.quote + value + this.quote, value, this.escaped, this.index);
+ },
+ compare: function (x) {
+ if (!x.toCSS) {
+ return -1;
+ }
+
+ var left = this.toCSS(),
+ right = x.toCSS();
+
+ if (left === right) {
+ return 0;
+ }
+
+ return left < right ? -1 : 1;
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Ratio = function (value) {
+ this.value = value;
+};
+tree.Ratio.prototype = {
+ toCSS: function (env) {
+ return this.value;
+ },
+ eval: function () { return this }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Rule = function (name, value, important, index, inline) {
+ this.name = name;
+ this.value = (value instanceof tree.Value) ? value : new(tree.Value)([value]);
+ this.important = important ? ' ' + important.trim() : '';
+ this.index = index;
+ this.inline = inline || false;
+
+ if (name.charAt(0) === '@') {
+ this.variable = true;
+ } else { this.variable = false }
+};
+tree.Rule.prototype.toCSS = function (env) {
+ if (this.variable) { return "" }
+ else {
+ return this.name + (env.compress ? ':' : ': ') +
+ this.value.toCSS(env) +
+ this.important + (this.inline ? "" : ";");
+ }
+};
+
+tree.Rule.prototype.eval = function (context) {
+ return new(tree.Rule)(this.name,
+ this.value.eval(context),
+ this.important,
+ this.index, this.inline);
+};
+
+tree.Rule.prototype.makeImportant = function () {
+ return new(tree.Rule)(this.name,
+ this.value,
+ "!important",
+ this.index, this.inline);
+};
+
+tree.Shorthand = function (a, b) {
+ this.a = a;
+ this.b = b;
+};
+
+tree.Shorthand.prototype = {
+ toCSS: function (env) {
+ return this.a.toCSS(env) + "/" + this.b.toCSS(env);
+ },
+ eval: function () { return this }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Ruleset = function (selectors, rules, strictImports) {
+ this.selectors = selectors;
+ this.rules = rules;
+ this._lookups = {};
+ this.strictImports = strictImports;
+};
+tree.Ruleset.prototype = {
+ eval: function (env) {
+ var selectors = this.selectors && this.selectors.map(function (s) { return s.eval(env) });
+ var ruleset = new(tree.Ruleset)(selectors, this.rules.slice(0), this.strictImports);
+ var rules;
+
+ ruleset.originalRuleset = this;
+ ruleset.root = this.root;
+ ruleset.allowImports = this.allowImports;
+
+ if(this.debugInfo) {
+ ruleset.debugInfo = this.debugInfo;
+ }
+
+ // push the current ruleset to the frames stack
+ env.frames.unshift(ruleset);
+
+ // Evaluate imports
+ if (ruleset.root || ruleset.allowImports || !ruleset.strictImports) {
+ ruleset.evalImports(env);
+ }
+
+ // Store the frames around mixin definitions,
+ // so they can be evaluated like closures when the time comes.
+ for (var i = 0; i < ruleset.rules.length; i++) {
+ if (ruleset.rules[i] instanceof tree.mixin.Definition) {
+ ruleset.rules[i].frames = env.frames.slice(0);
+ }
+ }
+
+ var mediaBlockCount = (env.mediaBlocks && env.mediaBlocks.length) || 0;
+
+ // Evaluate mixin calls.
+ for (var i = 0; i < ruleset.rules.length; i++) {
+ if (ruleset.rules[i] instanceof tree.mixin.Call) {
+ rules = ruleset.rules[i].eval(env);
+ ruleset.rules.splice.apply(ruleset.rules, [i, 1].concat(rules));
+ i += rules.length-1;
+ ruleset.resetCache();
+ }
+ }
+
+ // Evaluate everything else
+ for (var i = 0, rule; i < ruleset.rules.length; i++) {
+ rule = ruleset.rules[i];
+
+ if (! (rule instanceof tree.mixin.Definition)) {
+ ruleset.rules[i] = rule.eval ? rule.eval(env) : rule;
+ }
+ }
+
+ // Pop the stack
+ env.frames.shift();
+
+ if (env.mediaBlocks) {
+ for(var i = mediaBlockCount; i < env.mediaBlocks.length; i++) {
+ env.mediaBlocks[i].bubbleSelectors(selectors);
+ }
+ }
+
+ return ruleset;
+ },
+ evalImports: function(env) {
+ var i, rules;
+ for (i = 0; i < this.rules.length; i++) {
+ if (this.rules[i] instanceof tree.Import) {
+ rules = this.rules[i].eval(env);
+ if (typeof rules.length === "number") {
+ this.rules.splice.apply(this.rules, [i, 1].concat(rules));
+ i+= rules.length-1;
+ } else {
+ this.rules.splice(i, 1, rules);
+ }
+ this.resetCache();
+ }
+ }
+ },
+ makeImportant: function() {
+ return new tree.Ruleset(this.selectors, this.rules.map(function (r) {
+ if (r.makeImportant) {
+ return r.makeImportant();
+ } else {
+ return r;
+ }
+ }), this.strictImports);
+ },
+ matchArgs: function (args) {
+ return !args || args.length === 0;
+ },
+ resetCache: function () {
+ this._rulesets = null;
+ this._variables = null;
+ this._lookups = {};
+ },
+ variables: function () {
+ if (this._variables) { return this._variables }
+ else {
+ return this._variables = this.rules.reduce(function (hash, r) {
+ if (r instanceof tree.Rule && r.variable === true) {
+ hash[r.name] = r;
+ }
+ return hash;
+ }, {});
+ }
+ },
+ variable: function (name) {
+ return this.variables()[name];
+ },
+ rulesets: function () {
+ if (this._rulesets) { return this._rulesets }
+ else {
+ return this._rulesets = this.rules.filter(function (r) {
+ return (r instanceof tree.Ruleset) || (r instanceof tree.mixin.Definition);
+ });
+ }
+ },
+ find: function (selector, self) {
+ self = self || this;
+ var rules = [], rule, match,
+ key = selector.toCSS();
+
+ if (key in this._lookups) { return this._lookups[key] }
+
+ this.rulesets().forEach(function (rule) {
+ if (rule !== self) {
+ for (var j = 0; j < rule.selectors.length; j++) {
+ if (match = selector.match(rule.selectors[j])) {
+ if (selector.elements.length > rule.selectors[j].elements.length) {
+ Array.prototype.push.apply(rules, rule.find(
+ new(tree.Selector)(selector.elements.slice(1)), self));
+ } else {
+ rules.push(rule);
+ }
+ break;
+ }
+ }
+ }
+ });
+ return this._lookups[key] = rules;
+ },
+ //
+ // Entry point for code generation
+ //
+ // `context` holds an array of arrays.
+ //
+ toCSS: function (context, env) {
+ var css = [], // The CSS output
+ rules = [], // node.Rule instances
+ _rules = [], //
+ rulesets = [], // node.Ruleset instances
+ paths = [], // Current selectors
+ selector, // The fully rendered selector
+ debugInfo, // Line number debugging
+ rule;
+
+ if (! this.root) {
+ this.joinSelectors(paths, context, this.selectors);
+ }
+
+ // Compile rules and rulesets
+ for (var i = 0; i < this.rules.length; i++) {
+ rule = this.rules[i];
+
+ if (rule.rules || (rule instanceof tree.Media)) {
+ rulesets.push(rule.toCSS(paths, env));
+ } else if (rule instanceof tree.Directive) {
+ var cssValue = rule.toCSS(paths, env);
+ // Output only the first @charset definition as such - convert the others
+ // to comments in case debug is enabled
+ if (rule.name === "@charset") {
+ // Only output the debug info together with subsequent @charset definitions
+ // a comment (or @media statement) before the actual @charset directive would
+ // be considered illegal css as it has to be on the first line
+ if (env.charset) {
+ if (rule.debugInfo) {
+ rulesets.push(tree.debugInfo(env, rule));
+ rulesets.push(new tree.Comment("/* "+cssValue.replace(/\n/g, "")+" */\n").toCSS(env));
+ }
+ continue;
+ }
+ env.charset = true;
+ }
+ rulesets.push(cssValue);
+ } else if (rule instanceof tree.Comment) {
+ if (!rule.silent) {
+ if (this.root) {
+ rulesets.push(rule.toCSS(env));
+ } else {
+ rules.push(rule.toCSS(env));
+ }
+ }
+ } else {
+ if (rule.toCSS && !rule.variable) {
+ rules.push(rule.toCSS(env));
+ } else if (rule.value && !rule.variable) {
+ rules.push(rule.value.toString());
+ }
+ }
+ }
+
+ rulesets = rulesets.join('');
+
+ // If this is the root node, we don't render
+ // a selector, or {}.
+ // Otherwise, only output if this ruleset has rules.
+ if (this.root) {
+ css.push(rules.join(env.compress ? '' : '\n'));
+ } else {
+ if (rules.length > 0) {
+ debugInfo = tree.debugInfo(env, this);
+ selector = paths.map(function (p) {
+ return p.map(function (s) {
+ return s.toCSS(env);
+ }).join('').trim();
+ }).join(env.compress ? ',' : ',\n');
+
+ // Remove duplicates
+ for (var i = rules.length - 1; i >= 0; i--) {
+ if (_rules.indexOf(rules[i]) === -1) {
+ _rules.unshift(rules[i]);
+ }
+ }
+ rules = _rules;
+
+ css.push(debugInfo + selector +
+ (env.compress ? '{' : ' {\n ') +
+ rules.join(env.compress ? '' : '\n ') +
+ (env.compress ? '}' : '\n}\n'));
+ }
+ }
+ css.push(rulesets);
+
+ return css.join('') + (env.compress ? '\n' : '');
+ },
+
+ joinSelectors: function (paths, context, selectors) {
+ for (var s = 0; s < selectors.length; s++) {
+ this.joinSelector(paths, context, selectors[s]);
+ }
+ },
+
+ joinSelector: function (paths, context, selector) {
+
+ var i, j, k,
+ hasParentSelector, newSelectors, el, sel, parentSel,
+ newSelectorPath, afterParentJoin, newJoinedSelector,
+ newJoinedSelectorEmpty, lastSelector, currentElements,
+ selectorsMultiplied;
+
+ for (i = 0; i < selector.elements.length; i++) {
+ el = selector.elements[i];
+ if (el.value === '&') {
+ hasParentSelector = true;
+ }
+ }
+
+ if (!hasParentSelector) {
+ if (context.length > 0) {
+ for(i = 0; i < context.length; i++) {
+ paths.push(context[i].concat(selector));
+ }
+ }
+ else {
+ paths.push([selector]);
+ }
+ return;
+ }
+
+ // The paths are [[Selector]]
+ // The first list is a list of comma seperated selectors
+ // The inner list is a list of inheritance seperated selectors
+ // e.g.
+ // .a, .b {
+ // .c {
+ // }
+ // }
+ // == [[.a] [.c]] [[.b] [.c]]
+ //
+
+ // the elements from the current selector so far
+ currentElements = [];
+ // the current list of new selectors to add to the path.
+ // We will build it up. We initiate it with one empty selector as we "multiply" the new selectors
+ // by the parents
+ newSelectors = [[]];
+
+ for (i = 0; i < selector.elements.length; i++) {
+ el = selector.elements[i];
+ // non parent reference elements just get added
+ if (el.value !== "&") {
+ currentElements.push(el);
+ } else {
+ // the new list of selectors to add
+ selectorsMultiplied = [];
+
+ // merge the current list of non parent selector elements
+ // on to the current list of selectors to add
+ if (currentElements.length > 0) {
+ this.mergeElementsOnToSelectors(currentElements, newSelectors);
+ }
+
+ // loop through our current selectors
+ for(j = 0; j < newSelectors.length; j++) {
+ sel = newSelectors[j];
+ // if we don't have any parent paths, the & might be in a mixin so that it can be used
+ // whether there are parents or not
+ if (context.length == 0) {
+ // the combinator used on el should now be applied to the next element instead so that
+ // it is not lost
+ if (sel.length > 0) {
+ sel[0].elements = sel[0].elements.slice(0);
+ sel[0].elements.push(new(tree.Element)(el.combinator, '', 0)); //new Element(el.Combinator, ""));
+ }
+ selectorsMultiplied.push(sel);
+ }
+ else {
+ // and the parent selectors
+ for(k = 0; k < context.length; k++) {
+ parentSel = context[k];
+ // We need to put the current selectors
+ // then join the last selector's elements on to the parents selectors
+
+ // our new selector path
+ newSelectorPath = [];
+ // selectors from the parent after the join
+ afterParentJoin = [];
+ newJoinedSelectorEmpty = true;
+
+ //construct the joined selector - if & is the first thing this will be empty,
+ // if not newJoinedSelector will be the last set of elements in the selector
+ if (sel.length > 0) {
+ newSelectorPath = sel.slice(0);
+ lastSelector = newSelectorPath.pop();
+ newJoinedSelector = new(tree.Selector)(lastSelector.elements.slice(0));
+ newJoinedSelectorEmpty = false;
+ }
+ else {
+ newJoinedSelector = new(tree.Selector)([]);
+ }
+
+ //put together the parent selectors after the join
+ if (parentSel.length > 1) {
+ afterParentJoin = afterParentJoin.concat(parentSel.slice(1));
+ }
+
+ if (parentSel.length > 0) {
+ newJoinedSelectorEmpty = false;
+
+ // join the elements so far with the first part of the parent
+ newJoinedSelector.elements.push(new(tree.Element)(el.combinator, parentSel[0].elements[0].value, 0));
+ newJoinedSelector.elements = newJoinedSelector.elements.concat(parentSel[0].elements.slice(1));
+ }
+
+ if (!newJoinedSelectorEmpty) {
+ // now add the joined selector
+ newSelectorPath.push(newJoinedSelector);
+ }
+
+ // and the rest of the parent
+ newSelectorPath = newSelectorPath.concat(afterParentJoin);
+
+ // add that to our new set of selectors
+ selectorsMultiplied.push(newSelectorPath);
+ }
+ }
+ }
+
+ // our new selectors has been multiplied, so reset the state
+ newSelectors = selectorsMultiplied;
+ currentElements = [];
+ }
+ }
+
+ // if we have any elements left over (e.g. .a& .b == .b)
+ // add them on to all the current selectors
+ if (currentElements.length > 0) {
+ this.mergeElementsOnToSelectors(currentElements, newSelectors);
+ }
+
+ for(i = 0; i < newSelectors.length; i++) {
+ paths.push(newSelectors[i]);
+ }
+ },
+
+ mergeElementsOnToSelectors: function(elements, selectors) {
+ var i, sel;
+
+ if (selectors.length == 0) {
+ selectors.push([ new(tree.Selector)(elements) ]);
+ return;
+ }
+
+ for(i = 0; i < selectors.length; i++) {
+ sel = selectors[i];
+
+ // if the previous thing in sel is a parent this needs to join on to it
+ if (sel.length > 0) {
+ sel[sel.length - 1] = new(tree.Selector)(sel[sel.length - 1].elements.concat(elements));
+ }
+ else {
+ sel.push(new(tree.Selector)(elements));
+ }
+ }
+ }
+};
+})(require('../tree'));
+(function (tree) {
+
+tree.Selector = function (elements) {
+ this.elements = elements;
+};
+tree.Selector.prototype.match = function (other) {
+ var elements = this.elements,
+ len = elements.length,
+ oelements, olen, max, i;
+
+ oelements = other.elements.slice(
+ (other.elements.length && other.elements[0].value === "&") ? 1 : 0);
+ olen = oelements.length;
+ max = Math.min(len, olen)
+
+ if (olen === 0 || len < olen) {
+ return false;
+ } else {
+ for (i = 0; i < max; i++) {
+ if (elements[i].value !== oelements[i].value) {
+ return false;
+ }
+ }
+ }
+ return true;
+};
+tree.Selector.prototype.eval = function (env) {
+ return new(tree.Selector)(this.elements.map(function (e) {
+ return e.eval(env);
+ }));
+};
+tree.Selector.prototype.toCSS = function (env) {
+ if (this._css) { return this._css }
+
+ if (this.elements[0].combinator.value === "") {
+ this._css = ' ';
+ } else {
+ this._css = '';
+ }
+
+ this._css += this.elements.map(function (e) {
+ if (typeof(e) === 'string') {
+ return ' ' + e.trim();
+ } else {
+ return e.toCSS(env);
+ }
+ }).join('');
+
+ return this._css;
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.UnicodeDescriptor = function (value) {
+ this.value = value;
+};
+tree.UnicodeDescriptor.prototype = {
+ toCSS: function (env) {
+ return this.value;
+ },
+ eval: function () { return this }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.URL = function (val, rootpath) {
+ this.value = val;
+ this.rootpath = rootpath;
+};
+tree.URL.prototype = {
+ toCSS: function () {
+ return "url(" + this.value.toCSS() + ")";
+ },
+ eval: function (ctx) {
+ var val = this.value.eval(ctx), rootpath;
+
+ // Add the base path if the URL is relative
+ if (typeof val.value === "string" && !/^(?:[a-z-]+:|\/)/.test(val.value)) {
+ rootpath = this.rootpath;
+ if (!val.quote) {
+ rootpath = rootpath.replace(/[\(\)'"\s]/g, function(match) { return "\\"+match; });
+ }
+ val.value = rootpath + val.value;
+ }
+
+ return new(tree.URL)(val, this.rootpath);
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Value = function (value) {
+ this.value = value;
+ this.is = 'value';
+};
+tree.Value.prototype = {
+ eval: function (env) {
+ if (this.value.length === 1) {
+ return this.value[0].eval(env);
+ } else {
+ return new(tree.Value)(this.value.map(function (v) {
+ return v.eval(env);
+ }));
+ }
+ },
+ toCSS: function (env) {
+ return this.value.map(function (e) {
+ return e.toCSS(env);
+ }).join(env.compress ? ',' : ', ');
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.Variable = function (name, index, file) { this.name = name, this.index = index, this.file = file };
+tree.Variable.prototype = {
+ eval: function (env) {
+ var variable, v, name = this.name;
+
+ if (name.indexOf('@@') == 0) {
+ name = '@' + new(tree.Variable)(name.slice(1)).eval(env).value;
+ }
+
+ if (this.evaluating) {
+ throw { type: 'Name',
+ message: "Recursive variable definition for " + name,
+ filename: this.file,
+ index: this.index };
+ }
+
+ this.evaluating = true;
+
+ if (variable = tree.find(env.frames, function (frame) {
+ if (v = frame.variable(name)) {
+ return v.value.eval(env);
+ }
+ })) {
+ this.evaluating = false;
+ return variable;
+ }
+ else {
+ throw { type: 'Name',
+ message: "variable " + name + " is undefined",
+ filename: this.file,
+ index: this.index };
+ }
+ }
+};
+
+})(require('../tree'));
+(function (tree) {
+
+tree.debugInfo = function(env, ctx) {
+ var result="";
+ if (env.dumpLineNumbers && !env.compress) {
+ switch(env.dumpLineNumbers) {
+ case 'comments':
+ result = tree.debugInfo.asComment(ctx);
+ break;
+ case 'mediaquery':
+ result = tree.debugInfo.asMediaQuery(ctx);
+ break;
+ case 'all':
+ result = tree.debugInfo.asComment(ctx)+tree.debugInfo.asMediaQuery(ctx);
+ break;
+ }
+ }
+ return result;
+};
+
+tree.debugInfo.asComment = function(ctx) {
+ return '/* line ' + ctx.debugInfo.lineNumber + ', ' + ctx.debugInfo.fileName + ' */\n';
+};
+
+tree.debugInfo.asMediaQuery = function(ctx) {
+ return '@media -sass-debug-info{filename{font-family:' +
+ ('file://' + ctx.debugInfo.fileName).replace(/[\/:.]/g, '\\$&') +
+ '}line{font-family:\\00003' + ctx.debugInfo.lineNumber + '}}\n';
+};
+
+tree.find = function (obj, fun) {
+ for (var i = 0, r; i < obj.length; i++) {
+ if (r = fun.call(obj, obj[i])) { return r }
+ }
+ return null;
+};
+tree.jsify = function (obj) {
+ if (Array.isArray(obj.value) && (obj.value.length > 1)) {
+ return '[' + obj.value.map(function (v) { return v.toCSS(false) }).join(', ') + ']';
+ } else {
+ return obj.toCSS(false);
+ }
+};
+
+})(require('./tree'));
+//
+// browser.js - client-side engine
+//
+
+var isFileProtocol = /^(file|chrome(-extension)?|resource|qrc|app):/.test(location.protocol);
+
+less.env = less.env || (location.hostname == '127.0.0.1' ||
+ location.hostname == '0.0.0.0' ||
+ location.hostname == 'localhost' ||
+ location.port.length > 0 ||
+ isFileProtocol ? 'development'
+ : 'production');
+
+// Load styles asynchronously (default: false)
+//
+// This is set to `false` by default, so that the body
+// doesn't start loading before the stylesheets are parsed.
+// Setting this to `true` can result in flickering.
+//
+less.async = less.async || false;
+less.fileAsync = less.fileAsync || false;
+
+// Interval between watch polls
+less.poll = less.poll || (isFileProtocol ? 1000 : 1500);
+
+//Setup user functions
+if (less.functions) {
+ for(var func in less.functions) {
+ less.tree.functions[func] = less.functions[func];
+ }
+}
+
+var dumpLineNumbers = /!dumpLineNumbers:(comments|mediaquery|all)/.exec(location.hash);
+if (dumpLineNumbers) {
+ less.dumpLineNumbers = dumpLineNumbers[1];
+}
+
+//
+// Watch mode
+//
+less.watch = function () {
+ if (!less.watchMode ){
+ less.env = 'development';
+ initRunningMode();
+ }
+ return this.watchMode = true
+};
+
+less.unwatch = function () {clearInterval(less.watchTimer); return this.watchMode = false; };
+
+function initRunningMode(){
+ if (less.env === 'development') {
+ less.optimization = 0;
+ less.watchTimer = setInterval(function () {
+ if (less.watchMode) {
+ loadStyleSheets(function (e, root, _, sheet, env) {
+ if (root) {
+ createCSS(root.toCSS(), sheet, env.lastModified);
+ }
+ });
+ }
+ }, less.poll);
+ } else {
+ less.optimization = 3;
+ }
+}
+
+if (/!watch/.test(location.hash)) {
+ less.watch();
+}
+
+var cache = null;
+
+if (less.env != 'development') {
+ try {
+ cache = (typeof(window.localStorage) === 'undefined') ? null : window.localStorage;
+ } catch (_) {}
+}
+
+//
+// Get all tags with the 'rel' attribute set to "stylesheet/less"
+//
+var links = document.getElementsByTagName('link');
+var typePattern = /^text\/(x-)?less$/;
+
+less.sheets = [];
+
+for (var i = 0; i < links.length; i++) {
+ if (links[i].rel === 'stylesheet/less' || (links[i].rel.match(/stylesheet/) &&
+ (links[i].type.match(typePattern)))) {
+ less.sheets.push(links[i]);
+ }
+}
+
+//
+// With this function, it's possible to alter variables and re-render
+// CSS without reloading less-files
+//
+var session_cache = '';
+less.modifyVars = function(record) {
+ var str = session_cache;
+ for (name in record) {
+ str += ((name.slice(0,1) === '@')? '' : '@') + name +': '+
+ ((record[name].slice(-1) === ';')? record[name] : record[name] +';');
+ }
+ new(less.Parser)().parse(str, function (e, root) {
+ createCSS(root.toCSS(), less.sheets[less.sheets.length - 1]);
+ });
+};
+
+less.refresh = function (reload) {
+ var startTime, endTime;
+ startTime = endTime = new(Date);
+
+ loadStyleSheets(function (e, root, _, sheet, env) {
+ if (env.local) {
+ log("loading " + sheet.href + " from cache.");
+ } else {
+ log("parsed " + sheet.href + " successfully.");
+ createCSS(root.toCSS(), sheet, env.lastModified);
+ }
+ log("css for " + sheet.href + " generated in " + (new(Date) - endTime) + 'ms');
+ (env.remaining === 0) && log("css generated in " + (new(Date) - startTime) + 'ms');
+ endTime = new(Date);
+ }, reload);
+
+ loadStyles();
+};
+less.refreshStyles = loadStyles;
+
+less.refresh(less.env === 'development');
+
+function loadStyles() {
+ var styles = document.getElementsByTagName('style');
+ for (var i = 0; i < styles.length; i++) {
+ if (styles[i].type.match(typePattern)) {
+ new(less.Parser)({
+ filename: document.location.href.replace(/#.*$/, ''),
+ dumpLineNumbers: less.dumpLineNumbers
+ }).parse(styles[i].innerHTML || '', function (e, tree) {
+ var css = tree.toCSS();
+ var style = styles[i];
+ style.type = 'text/css';
+ if (style.styleSheet) {
+ style.styleSheet.cssText = css;
+ } else {
+ style.innerHTML = css;
+ }
+ });
+ }
+ }
+}
+
+function loadStyleSheets(callback, reload) {
+ for (var i = 0; i < less.sheets.length; i++) {
+ loadStyleSheet(less.sheets[i], callback, reload, less.sheets.length - (i + 1));
+ }
+}
+
+function pathDiff(url, baseUrl) {
+ // diff between two paths to create a relative path
+
+ var urlParts = extractUrlParts(url),
+ baseUrlParts = extractUrlParts(baseUrl),
+ i, max, urlDirectories, baseUrlDirectories, diff = "";
+ if (urlParts.hostPart !== baseUrlParts.hostPart) {
+ return "";
+ }
+ max = Math.max(baseUrlParts.directories.length, urlParts.directories.length);
+ for(i = 0; i < max; i++) {
+ if (baseUrlParts.directories[i] !== urlParts.directories[i]) { break; }
+ }
+ baseUrlDirectories = baseUrlParts.directories.slice(i);
+ urlDirectories = urlParts.directories.slice(i);
+ for(i = 0; i < baseUrlDirectories.length-1; i++) {
+ diff += "../";
+ }
+ for(i = 0; i < urlDirectories.length-1; i++) {
+ diff += urlDirectories[i] + "/";
+ }
+ return diff;
+}
+
+function extractUrlParts(url, baseUrl) {
+ // urlParts[1] = protocol&hostname || /
+ // urlParts[2] = / if path relative to host base
+ // urlParts[3] = directories
+ // urlParts[4] = filename
+ // urlParts[5] = parameters
+
+ var urlPartsRegex = /^((?:[a-z-]+:)?\/\/(?:[^\/\?#]*\/)|([\/\\]))?((?:[^\/\\\?#]*[\/\\])*)([^\/\\\?#]*)([#\?].*)?$/,
+ urlParts = url.match(urlPartsRegex),
+ returner = {}, directories = [], i, baseUrlParts;
+
+ if (!urlParts) {
+ throw new Error("Could not parse sheet href - '"+url+"'");
+ }
+
+ // Stylesheets in IE don't always return the full path
+ if (!urlParts[1] || urlParts[2]) {
+ baseUrlParts = baseUrl.match(urlPartsRegex);
+ if (!baseUrlParts) {
+ throw new Error("Could not parse page url - '"+baseUrl+"'");
+ }
+ urlParts[1] = baseUrlParts[1];
+ if (!urlParts[2]) {
+ urlParts[3] = baseUrlParts[3] + urlParts[3];
+ }
+ }
+
+ if (urlParts[3]) {
+ directories = urlParts[3].replace("\\", "/").split("/");
+
+ for(i = 0; i < directories.length; i++) {
+ if (directories[i] === ".." && i > 0) {
+ directories.splice(i-1, 2);
+ i -= 2;
+ }
+ }
+ }
+
+ returner.hostPart = urlParts[1];
+ returner.directories = directories;
+ returner.path = urlParts[1] + directories.join("/");
+ returner.fileUrl = returner.path + (urlParts[4] || "");
+ returner.url = returner.fileUrl + (urlParts[5] || "");
+ return returner;
+}
+
+function loadStyleSheet(sheet, callback, reload, remaining) {
+ // sheet may be set to the stylesheet for the initial load or a collection of properties including
+ // some env variables for imports
+ var contents = sheet.contents || {};
+ var files = sheet.files || {};
+ var hrefParts = extractUrlParts(sheet.href, window.location.href);
+ var href = hrefParts.url;
+ var css = cache && cache.getItem(href);
+ var timestamp = cache && cache.getItem(href + ':timestamp');
+ var styles = { css: css, timestamp: timestamp };
+ var rootpath;
+
+ if (less.relativeUrls) {
+ if (less.rootpath) {
+ if (sheet.entryPath) {
+ rootpath = extractUrlParts(less.rootpath + pathDiff(hrefParts.path, sheet.entryPath)).path;
+ } else {
+ rootpath = less.rootpath;
+ }
+ } else {
+ rootpath = hrefParts.path;
+ }
+ } else {
+ if (less.rootpath) {
+ rootpath = less.rootpath;
+ } else {
+ if (sheet.entryPath) {
+ rootpath = sheet.entryPath;
+ } else {
+ rootpath = hrefParts.path;
+ }
+ }
+ }
+
+ xhr(href, sheet.type, function (data, lastModified) {
+ // Store data this session
+ session_cache += data.replace(/@import .+?;/ig, '');
+
+ if (!reload && styles && lastModified &&
+ (new(Date)(lastModified).valueOf() ===
+ new(Date)(styles.timestamp).valueOf())) {
+ // Use local copy
+ createCSS(styles.css, sheet);
+ callback(null, null, data, sheet, { local: true, remaining: remaining }, href);
+ } else {
+ // Use remote copy (re-parse)
+ try {
+ contents[href] = data; // Updating top importing parser content cache
+ new(less.Parser)({
+ optimization: less.optimization,
+ paths: [hrefParts.path],
+ entryPath: sheet.entryPath || hrefParts.path,
+ mime: sheet.type,
+ filename: href,
+ rootpath: rootpath,
+ relativeUrls: sheet.relativeUrls,
+ contents: contents, // Passing top importing parser content cache ref down.
+ files: files,
+ dumpLineNumbers: less.dumpLineNumbers
+ }).parse(data, function (e, root) {
+ if (e) { return error(e, href) }
+ try {
+ callback(e, root, data, sheet, { local: false, lastModified: lastModified, remaining: remaining }, href);
+ removeNode(document.getElementById('less-error-message:' + extractId(href)));
+ } catch (e) {
+ error(e, href);
+ }
+ });
+ } catch (e) {
+ error(e, href);
+ }
+ }
+ }, function (status, url) {
+ throw new(Error)("Couldn't load " + url + " (" + status + ")");
+ });
+}
+
+function extractId(href) {
+ return href.replace(/^[a-z]+:\/\/?[^\/]+/, '' ) // Remove protocol & domain
+ .replace(/^\//, '' ) // Remove root /
+ .replace(/\.[a-zA-Z]+$/, '' ) // Remove simple extension
+ .replace(/[^\.\w-]+/g, '-') // Replace illegal characters
+ .replace(/\./g, ':'); // Replace dots with colons(for valid id)
+}
+
+function createCSS(styles, sheet, lastModified) {
+ var css;
+
+ // Strip the query-string
+ var href = sheet.href || '';
+
+ // If there is no title set, use the filename, minus the extension
+ var id = 'less:' + (sheet.title || extractId(href));
+
+ // If the stylesheet doesn't exist, create a new node
+ if ((css = document.getElementById(id)) === null) {
+ css = document.createElement('style');
+ css.type = 'text/css';
+ if( sheet.media ){ css.media = sheet.media; }
+ css.id = id;
+ var nextEl = sheet && sheet.nextSibling || null;
+ (nextEl || document.getElementsByTagName('head')[0]).parentNode.insertBefore(css, nextEl);
+ }
+
+ if (css.styleSheet) { // IE
+ try {
+ css.styleSheet.cssText = styles;
+ } catch (e) {
+ throw new(Error)("Couldn't reassign styleSheet.cssText.");
+ }
+ } else {
+ (function (node) {
+ if (css.childNodes.length > 0) {
+ if (css.firstChild.nodeValue !== node.nodeValue) {
+ css.replaceChild(node, css.firstChild);
+ }
+ } else {
+ css.appendChild(node);
+ }
+ })(document.createTextNode(styles));
+ }
+
+ // Don't update the local store if the file wasn't modified
+ if (lastModified && cache) {
+ log('saving ' + href + ' to cache.');
+ try {
+ cache.setItem(href, styles);
+ cache.setItem(href + ':timestamp', lastModified);
+ } catch(e) {
+ //TODO - could do with adding more robust error handling
+ log('failed to save');
+ }
+ }
+}
+
+function xhr(url, type, callback, errback) {
+ var xhr = getXMLHttpRequest();
+ var async = isFileProtocol ? less.fileAsync : less.async;
+
+ if (typeof(xhr.overrideMimeType) === 'function') {
+ xhr.overrideMimeType('text/css');
+ }
+ xhr.open('GET', url, async);
+ xhr.setRequestHeader('Accept', type || 'text/x-less, text/css; q=0.9, */*; q=0.5');
+ xhr.send(null);
+
+ if (isFileProtocol && !less.fileAsync) {
+ if (xhr.status === 0 || (xhr.status >= 200 && xhr.status < 300)) {
+ callback(xhr.responseText);
+ } else {
+ errback(xhr.status, url);
+ }
+ } else if (async) {
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState == 4) {
+ handleResponse(xhr, callback, errback);
+ }
+ };
+ } else {
+ handleResponse(xhr, callback, errback);
+ }
+
+ function handleResponse(xhr, callback, errback) {
+ if (xhr.status >= 200 && xhr.status < 300) {
+ callback(xhr.responseText,
+ xhr.getResponseHeader("Last-Modified"));
+ } else if (typeof(errback) === 'function') {
+ errback(xhr.status, url);
+ }
+ }
+}
+
+function getXMLHttpRequest() {
+ if (window.XMLHttpRequest) {
+ return new(XMLHttpRequest);
+ } else {
+ try {
+ return new(ActiveXObject)("MSXML2.XMLHTTP.3.0");
+ } catch (e) {
+ log("browser doesn't support AJAX.");
+ return null;
+ }
+ }
+}
+
+function removeNode(node) {
+ return node && node.parentNode.removeChild(node);
+}
+
+function log(str) {
+ if (less.env == 'development' && typeof(console) !== "undefined") { console.log('less: ' + str) }
+}
+
+function error(e, href) {
+ var id = 'less-error-message:' + extractId(href);
+ var template = '{line} {content} ';
+ var elem = document.createElement('div'), timer, content, error = [];
+ var filename = e.filename || href;
+ var filenameNoPath = filename.match(/([^\/]+(\?.*)?)$/)[1];
+
+ elem.id = id;
+ elem.className = "less-error-message";
+
+ content = '' + (e.message || 'There is an error in your .less file') +
+ ' ' + 'in ' + filenameNoPath + " ";
+
+ var errorline = function (e, i, classname) {
+ if (e.extract[i]) {
+ error.push(template.replace(/\{line\}/, parseInt(e.line) + (i - 1))
+ .replace(/\{class\}/, classname)
+ .replace(/\{content\}/, e.extract[i]));
+ }
+ };
+
+ if (e.stack) {
+ content += ' ' + e.stack.split('\n').slice(1).join(' ');
+ } else if (e.extract) {
+ errorline(e, 0, '');
+ errorline(e, 1, 'line');
+ errorline(e, 2, '');
+ content += 'on line ' + e.line + ', column ' + (e.column + 1) + ':
' +
+ '';
+ }
+ elem.innerHTML = content;
+
+ // CSS for error messages
+ createCSS([
+ '.less-error-message ul, .less-error-message li {',
+ 'list-style-type: none;',
+ 'margin-right: 15px;',
+ 'padding: 4px 0;',
+ 'margin: 0;',
+ '}',
+ '.less-error-message label {',
+ 'font-size: 12px;',
+ 'margin-right: 15px;',
+ 'padding: 4px 0;',
+ 'color: #cc7777;',
+ '}',
+ '.less-error-message pre {',
+ 'color: #dd6666;',
+ 'padding: 4px 0;',
+ 'margin: 0;',
+ 'display: inline-block;',
+ '}',
+ '.less-error-message pre.line {',
+ 'color: #ff0000;',
+ '}',
+ '.less-error-message h3 {',
+ 'font-size: 20px;',
+ 'font-weight: bold;',
+ 'padding: 15px 0 5px 0;',
+ 'margin: 0;',
+ '}',
+ '.less-error-message a {',
+ 'color: #10a',
+ '}',
+ '.less-error-message .error {',
+ 'color: red;',
+ 'font-weight: bold;',
+ 'padding-bottom: 2px;',
+ 'border-bottom: 1px dashed red;',
+ '}'
+ ].join('\n'), { title: 'error-message' });
+
+ elem.style.cssText = [
+ "font-family: Arial, sans-serif",
+ "border: 1px solid #e00",
+ "background-color: #eee",
+ "border-radius: 5px",
+ "-webkit-border-radius: 5px",
+ "-moz-border-radius: 5px",
+ "color: #e00",
+ "padding: 15px",
+ "margin-bottom: 15px"
+ ].join(';');
+
+ if (less.env == 'development') {
+ timer = setInterval(function () {
+ if (document.body) {
+ if (document.getElementById(id)) {
+ document.body.replaceChild(elem, document.getElementById(id));
+ } else {
+ document.body.insertBefore(elem, document.body.firstChild);
+ }
+ clearInterval(timer);
+ }
+ }, 10);
+ }
+}
+// amd.js
+//
+// Define Less as an AMD module.
+if (typeof define === "function" && define.amd) {
+ define("less", [], function () { return less; } );
+}
+})(window);
diff --git a/app/assets/javascripts/other/modernizr.custom.65561.js b/app/assets/javascripts/other/modernizr.custom.65561.js
new file mode 100644
index 000000000..d3e43cdcd
--- /dev/null
+++ b/app/assets/javascripts/other/modernizr.custom.65561.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-flexboxlegacy-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-shiv-cssclasses-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
+ */
+;window.Modernizr=function(a,b,c){function B(a){j.cssText=a}function C(a,b){return B(n.join(a+";")+(b||""))}function D(a,b){return typeof a===b}function E(a,b){return!!~(""+a).indexOf(b)}function F(a,b){for(var d in a){var e=a[d];if(!E(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function G(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:D(f,"function")?f.bind(d||b):f}return!1}function H(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return D(b,"string")||D(b,"undefined")?F(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),G(e,b,c))}function I(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},y=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=D(e[d],"function"),D(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),z={}.hasOwnProperty,A;!D(z,"undefined")&&!D(z.call,"undefined")?A=function(a,b){return z.call(a,b)}:A=function(a,b){return b in a&&D(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=v.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(v.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(v.call(arguments)))};return e}),r.flexbox=function(){return H("flexWrap")},r.flexboxlegacy=function(){return H("boxDirection")},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!D(b.createElement("canvas").getContext("2d").fillText,"function")},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){return!!a.openDatabase},r.indexedDB=function(){return!!H("indexedDB",a)},r.hashchange=function(){return y("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},r.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},r.rgba=function(){return B("background-color:rgba(150,255,150,.5)"),E(j.backgroundColor,"rgba")},r.hsla=function(){return B("background-color:hsla(120,40%,100%,.5)"),E(j.backgroundColor,"rgba")||E(j.backgroundColor,"hsla")},r.multiplebgs=function(){return B("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},r.backgroundsize=function(){return H("backgroundSize")},r.borderimage=function(){return H("borderImage")},r.borderradius=function(){return H("borderRadius")},r.boxshadow=function(){return H("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){return C("opacity:.55"),/^0.55$/.test(j.opacity)},r.cssanimations=function(){return H("animationName")},r.csscolumns=function(){return H("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return B((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),E(j.backgroundImage,"gradient")},r.cssreflections=function(){return H("boxReflect")},r.csstransforms=function(){return!!H("transform")},r.csstransforms3d=function(){var a=!!H("perspective");return a&&"webkitPerspective"in g.style&&x("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},r.csstransitions=function(){return H("transition")},r.fontface=function(){var a;return x('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},r.generatedcontent=function(){var a;return x(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},r.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},r.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},r.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},r.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},r.webworkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache};for(var J in r)A(r,J)&&(w=J.toLowerCase(),e[w]=r[J](),u.push((e[w]?"":"no-")+w));return e.input||I(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)A(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},B(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.hasEvent=y,e.testProp=function(a){return F([a])},e.testAllProps=H,e.testStyles=x,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+u.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;ful {
+ list-style-type:none;
+ margin:0;
+}
+.bootstrap-datetimepicker-widget .timepicker-hour,
+.bootstrap-datetimepicker-widget .timepicker-minute,
+.bootstrap-datetimepicker-widget .timepicker-second {
+ font-weight:bold;
+ font-size:1.2em;
+}
+.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator {
+ width:4px;
+ padding:0;
+ margin:0;
+}
+.bootstrap-datetimepicker-widget .datepicker>div {
+ display:none;
+}
+.bootstrap-datetimepicker-widget .picker-switch {
+ text-align:center;
+}
+.bootstrap-datetimepicker-widget table {
+ width:100%;
+ margin:0;
+}
+.bootstrap-datetimepicker-widget td,
+.bootstrap-datetimepicker-widget th {
+ text-align:center;
+ width:20px;
+ height:20px;
+ -webkit-border-radius:4px;
+ -moz-border-radius:4px;
+ border-radius:4px;
+ vertical-align: middle;
+}
+.bootstrap-datetimepicker-widget td.day:hover,
+.bootstrap-datetimepicker-widget td.hour:hover,
+.bootstrap-datetimepicker-widget td.minute:hover,
+.bootstrap-datetimepicker-widget td.second:hover {
+ background:#eee;
+ cursor:pointer;
+}
+.bootstrap-datetimepicker-widget td.old,
+.bootstrap-datetimepicker-widget td.new {
+ color:#999;
+}
+.bootstrap-datetimepicker-widget td.active,
+.bootstrap-datetimepicker-widget td.active:hover {
+ color:#fff;
+ background-color:#006dcc;
+ background-image:-moz-linear-gradient(top,#08c,#04c);
+ background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));
+ background-image:-webkit-linear-gradient(top,#08c,#04c);
+ background-image:-o-linear-gradient(top,#08c,#04c);
+ background-image:linear-gradient(to bottom,#08c,#04c);
+ background-repeat:repeat-x;
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);
+ border-color:#04c #04c #002a80;
+ border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);
+ *background-color:#04c;
+ filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ color:#fff;
+ text-shadow:0 -1px 0 rgba(0,0,0,0.25);
+}
+.bootstrap-datetimepicker-widget td.active:hover,
+.bootstrap-datetimepicker-widget td.active:hover:hover,
+.bootstrap-datetimepicker-widget td.active:active,
+.bootstrap-datetimepicker-widget td.active:hover:active,
+.bootstrap-datetimepicker-widget td.active.active,
+.bootstrap-datetimepicker-widget td.active:hover.active,
+.bootstrap-datetimepicker-widget td.active.disabled,
+.bootstrap-datetimepicker-widget td.active:hover.disabled,
+.bootstrap-datetimepicker-widget td.active[disabled],
+.bootstrap-datetimepicker-widget td.active:hover[disabled] {
+ color:#fff;
+ background-color:#04c;
+ *background-color:#003bb3;
+}
+.bootstrap-datetimepicker-widget td.active:active,
+.bootstrap-datetimepicker-widget td.active:hover:active,
+.bootstrap-datetimepicker-widget td.active.active,
+.bootstrap-datetimepicker-widget td.active:hover.active {
+ background-color:#039 \9;
+}
+.bootstrap-datetimepicker-widget td span {
+ display:block;
+ width:100%;
+ height:54px;
+ line-height:54px;
+ float:left;
+ cursor:pointer;
+ -webkit-border-radius:4px;
+ -moz-border-radius:4px;
+ border-radius:4px;
+}
+.bootstrap-datetimepicker-widget .datepicker-months td span,
+.bootstrap-datetimepicker-widget .datepicker-years td span {
+ width: 50px;
+}
+.bootstrap-datetimepicker-widget td span:hover {
+ background:#eee;
+}
+.bootstrap-datetimepicker-widget td span.active {
+ color:#fff;
+ background-color:#006dcc;
+ background-image:-moz-linear-gradient(top,#08c,#04c);
+ background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));
+ background-image:-webkit-linear-gradient(top,#08c,#04c);
+ background-image:-o-linear-gradient(top,#08c,#04c);
+ background-image:linear-gradient(to bottom,#08c,#04c);
+ background-repeat:repeat-x;
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);
+ border-color:#04c #04c #002a80;
+ border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);
+ *background-color:#04c;
+ filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ color:#fff;
+ text-shadow:0 -1px 0 rgba(0,0,0,0.25);
+}
+.bootstrap-datetimepicker-widget td span.active:hover,
+.bootstrap-datetimepicker-widget td span.active:active,
+.bootstrap-datetimepicker-widget td span.active.active,
+.bootstrap-datetimepicker-widget td span.active.disabled,
+.bootstrap-datetimepicker-widget td span.active[disabled] {
+ color:#fff;
+ background-color:#04c;
+ *background-color:#003bb3;
+}
+.bootstrap-datetimepicker-widget td span.active:active,
+.bootstrap-datetimepicker-widget td span.active.active {
+ background-color:#039 \9;
+}
+.bootstrap-datetimepicker-widget td span.old {
+ color:#999;
+}
+.bootstrap-datetimepicker-widget th.switch {
+ width:145px;
+}
+.bootstrap-datetimepicker-widget th.next,
+.bootstrap-datetimepicker-widget th.prev {
+ font-size:21px;
+}
+.bootstrap-datetimepicker-widget thead tr:first-child th {
+ cursor:pointer;
+}
+.bootstrap-datetimepicker-widget thead tr:first-child th:hover {
+ background:#eee;
+}
+.input-append.date .add-on i,
+.input-prepend.date .add-on i {
+ cursor:pointer;
+}
diff --git a/app/assets/stylesheets/basic/bootstrap-responsive.css b/app/assets/stylesheets/basic/bootstrap-responsive.css
new file mode 100644
index 000000000..a3352d774
--- /dev/null
+++ b/app/assets/stylesheets/basic/bootstrap-responsive.css
@@ -0,0 +1,1092 @@
+/*!
+ * Bootstrap Responsive v2.2.2
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+@-ms-viewport {
+ width: device-width;
+}
+
+.clearfix {
+ *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+.hide-text {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.input-block-level {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.hidden {
+ display: none;
+ visibility: hidden;
+}
+
+.visible-phone {
+ display: none !important;
+}
+
+.visible-tablet {
+ display: none !important;
+}
+
+.hidden-desktop {
+ display: none !important;
+}
+
+.visible-desktop {
+ display: inherit !important;
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+ .hidden-desktop {
+ display: inherit !important;
+ }
+ .visible-desktop {
+ display: none !important ;
+ }
+ .visible-tablet {
+ display: inherit !important;
+ }
+ .hidden-tablet {
+ display: none !important;
+ }
+}
+
+@media (max-width: 767px) {
+ .hidden-desktop {
+ display: inherit !important;
+ }
+ .visible-desktop {
+ display: none !important;
+ }
+ .visible-phone {
+ display: inherit !important;
+ }
+ .hidden-phone {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .row {
+ margin-left: -30px;
+ *zoom: 1;
+ }
+ .row:before,
+ .row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row:after {
+ clear: both;
+ }
+ [class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 30px;
+ }
+ .container,
+ .navbar-static-top .container,
+ .navbar-fixed-top .container,
+ .navbar-fixed-bottom .container {
+ width: 1170px;
+ }
+ .span12 {
+ width: 1170px;
+ }
+ .span11 {
+ width: 1070px;
+ }
+ .span10 {
+ width: 970px;
+ }
+ .span9 {
+ width: 870px;
+ }
+ .span8 {
+ width: 770px;
+ }
+ .span7 {
+ width: 670px;
+ }
+ .span6 {
+ width: 570px;
+ }
+ .span5 {
+ width: 470px;
+ }
+ .span4 {
+ width: 370px;
+ }
+ .span3 {
+ width: 270px;
+ }
+ .span2 {
+ width: 170px;
+ }
+ .span1 {
+ width: 70px;
+ }
+ .offset12 {
+ margin-left: 1230px;
+ }
+ .offset11 {
+ margin-left: 1130px;
+ }
+ .offset10 {
+ margin-left: 1030px;
+ }
+ .offset9 {
+ margin-left: 930px;
+ }
+ .offset8 {
+ margin-left: 830px;
+ }
+ .offset7 {
+ margin-left: 730px;
+ }
+ .offset6 {
+ margin-left: 630px;
+ }
+ .offset5 {
+ margin-left: 530px;
+ }
+ .offset4 {
+ margin-left: 430px;
+ }
+ .offset3 {
+ margin-left: 330px;
+ }
+ .offset2 {
+ margin-left: 230px;
+ }
+ .offset1 {
+ margin-left: 130px;
+ }
+ .row-fluid {
+ width: 100%;
+ *zoom: 1;
+ }
+ .row-fluid:before,
+ .row-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row-fluid:after {
+ clear: both;
+ }
+ .row-fluid [class*="span"] {
+ display: block;
+ float: left;
+ width: 100%;
+ min-height: 30px;
+ margin-left: 2.564102564102564%;
+ *margin-left: 2.5109110747408616%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+ }
+ .row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 2.564102564102564%;
+ }
+ .row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680851063829%;
+ }
+ .row-fluid .span11 {
+ width: 91.45299145299145%;
+ *width: 91.39979996362975%;
+ }
+ .row-fluid .span10 {
+ width: 82.90598290598291%;
+ *width: 82.8527914166212%;
+ }
+ .row-fluid .span9 {
+ width: 74.35897435897436%;
+ *width: 74.30578286961266%;
+ }
+ .row-fluid .span8 {
+ width: 65.81196581196582%;
+ *width: 65.75877432260411%;
+ }
+ .row-fluid .span7 {
+ width: 57.26495726495726%;
+ *width: 57.21176577559556%;
+ }
+ .row-fluid .span6 {
+ width: 48.717948717948715%;
+ *width: 48.664757228587014%;
+ }
+ .row-fluid .span5 {
+ width: 40.17094017094017%;
+ *width: 40.11774868157847%;
+ }
+ .row-fluid .span4 {
+ width: 31.623931623931625%;
+ *width: 31.570740134569924%;
+ }
+ .row-fluid .span3 {
+ width: 23.076923076923077%;
+ *width: 23.023731587561375%;
+ }
+ .row-fluid .span2 {
+ width: 14.52991452991453%;
+ *width: 14.476723040552828%;
+ }
+ .row-fluid .span1 {
+ width: 5.982905982905983%;
+ *width: 5.929714493544281%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 105.12820512820512%;
+ *margin-left: 105.02182214948171%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 102.56410256410257%;
+ *margin-left: 102.45771958537915%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 96.58119658119658%;
+ *margin-left: 96.47481360247316%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 94.01709401709402%;
+ *margin-left: 93.91071103837061%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 88.03418803418803%;
+ *margin-left: 87.92780505546462%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 85.47008547008548%;
+ *margin-left: 85.36370249136206%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 79.48717948717949%;
+ *margin-left: 79.38079650845607%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 76.92307692307693%;
+ *margin-left: 76.81669394435352%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 70.94017094017094%;
+ *margin-left: 70.83378796144753%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 68.37606837606839%;
+ *margin-left: 68.26968539734497%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 62.393162393162385%;
+ *margin-left: 62.28677941443899%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 59.82905982905982%;
+ *margin-left: 59.72267685033642%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 53.84615384615384%;
+ *margin-left: 53.739770867430444%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 51.28205128205128%;
+ *margin-left: 51.175668303327875%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 45.299145299145295%;
+ *margin-left: 45.1927623204219%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.73504273504273%;
+ *margin-left: 42.62865975631933%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 36.75213675213675%;
+ *margin-left: 36.645753773413354%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 34.18803418803419%;
+ *margin-left: 34.081651209310785%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 28.205128205128204%;
+ *margin-left: 28.0987452264048%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.641025641025642%;
+ *margin-left: 25.53464266230224%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 19.65811965811966%;
+ *margin-left: 19.551736679396257%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 17.094017094017094%;
+ *margin-left: 16.98763411529369%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 11.11111111111111%;
+ *margin-left: 11.004728132387708%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.547008547008547%;
+ *margin-left: 8.440625568285142%;
+ }
+ input,
+ textarea,
+ .uneditable-input {
+ margin-left: 0;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 30px;
+ }
+ input.span12,
+ textarea.span12,
+ .uneditable-input.span12 {
+ width: 1156px;
+ }
+ input.span11,
+ textarea.span11,
+ .uneditable-input.span11 {
+ width: 1056px;
+ }
+ input.span10,
+ textarea.span10,
+ .uneditable-input.span10 {
+ width: 956px;
+ }
+ input.span9,
+ textarea.span9,
+ .uneditable-input.span9 {
+ width: 856px;
+ }
+ input.span8,
+ textarea.span8,
+ .uneditable-input.span8 {
+ width: 756px;
+ }
+ input.span7,
+ textarea.span7,
+ .uneditable-input.span7 {
+ width: 656px;
+ }
+ input.span6,
+ textarea.span6,
+ .uneditable-input.span6 {
+ width: 556px;
+ }
+ input.span5,
+ textarea.span5,
+ .uneditable-input.span5 {
+ width: 456px;
+ }
+ input.span4,
+ textarea.span4,
+ .uneditable-input.span4 {
+ width: 356px;
+ }
+ input.span3,
+ textarea.span3,
+ .uneditable-input.span3 {
+ width: 256px;
+ }
+ input.span2,
+ textarea.span2,
+ .uneditable-input.span2 {
+ width: 156px;
+ }
+ input.span1,
+ textarea.span1,
+ .uneditable-input.span1 {
+ width: 56px;
+ }
+ .thumbnails {
+ margin-left: -30px;
+ }
+ .thumbnails > li {
+ margin-left: 30px;
+ }
+ .row-fluid .thumbnails {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+ .row {
+ margin-left: -20px;
+ *zoom: 1;
+ }
+ .row:before,
+ .row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row:after {
+ clear: both;
+ }
+ [class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 20px;
+ }
+ .container,
+ .navbar-static-top .container,
+ .navbar-fixed-top .container,
+ .navbar-fixed-bottom .container {
+ width: 724px;
+ }
+ .span12 {
+ width: 724px;
+ }
+ .span11 {
+ width: 662px;
+ }
+ .span10 {
+ width: 600px;
+ }
+ .span9 {
+ width: 538px;
+ }
+ .span8 {
+ width: 476px;
+ }
+ .span7 {
+ width: 414px;
+ }
+ .span6 {
+ width: 352px;
+ }
+ .span5 {
+ width: 290px;
+ }
+ .span4 {
+ width: 228px;
+ }
+ .span3 {
+ width: 166px;
+ }
+ .span2 {
+ width: 104px;
+ }
+ .span1 {
+ width: 42px;
+ }
+ .offset12 {
+ margin-left: 764px;
+ }
+ .offset11 {
+ margin-left: 702px;
+ }
+ .offset10 {
+ margin-left: 640px;
+ }
+ .offset9 {
+ margin-left: 578px;
+ }
+ .offset8 {
+ margin-left: 516px;
+ }
+ .offset7 {
+ margin-left: 454px;
+ }
+ .offset6 {
+ margin-left: 392px;
+ }
+ .offset5 {
+ margin-left: 330px;
+ }
+ .offset4 {
+ margin-left: 268px;
+ }
+ .offset3 {
+ margin-left: 206px;
+ }
+ .offset2 {
+ margin-left: 144px;
+ }
+ .offset1 {
+ margin-left: 82px;
+ }
+ .row-fluid {
+ width: 100%;
+ *zoom: 1;
+ }
+ .row-fluid:before,
+ .row-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+ }
+ .row-fluid:after {
+ clear: both;
+ }
+ .row-fluid [class*="span"] {
+ display: block;
+ float: left;
+ width: 100%;
+ min-height: 30px;
+ margin-left: 2.7624309392265194%;
+ *margin-left: 2.709239449864817%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+ }
+ .row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 2.7624309392265194%;
+ }
+ .row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680851063829%;
+ }
+ .row-fluid .span11 {
+ width: 91.43646408839778%;
+ *width: 91.38327259903608%;
+ }
+ .row-fluid .span10 {
+ width: 82.87292817679558%;
+ *width: 82.81973668743387%;
+ }
+ .row-fluid .span9 {
+ width: 74.30939226519337%;
+ *width: 74.25620077583166%;
+ }
+ .row-fluid .span8 {
+ width: 65.74585635359117%;
+ *width: 65.69266486422946%;
+ }
+ .row-fluid .span7 {
+ width: 57.18232044198895%;
+ *width: 57.12912895262725%;
+ }
+ .row-fluid .span6 {
+ width: 48.61878453038674%;
+ *width: 48.56559304102504%;
+ }
+ .row-fluid .span5 {
+ width: 40.05524861878453%;
+ *width: 40.00205712942283%;
+ }
+ .row-fluid .span4 {
+ width: 31.491712707182323%;
+ *width: 31.43852121782062%;
+ }
+ .row-fluid .span3 {
+ width: 22.92817679558011%;
+ *width: 22.87498530621841%;
+ }
+ .row-fluid .span2 {
+ width: 14.3646408839779%;
+ *width: 14.311449394616199%;
+ }
+ .row-fluid .span1 {
+ width: 5.801104972375691%;
+ *width: 5.747913483013988%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 105.52486187845304%;
+ *margin-left: 105.41847889972962%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 102.76243093922652%;
+ *margin-left: 102.6560479605031%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 96.96132596685082%;
+ *margin-left: 96.8549429881274%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 94.1988950276243%;
+ *margin-left: 94.09251204890089%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 88.39779005524862%;
+ *margin-left: 88.2914070765252%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 85.6353591160221%;
+ *margin-left: 85.52897613729868%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 79.8342541436464%;
+ *margin-left: 79.72787116492299%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 77.07182320441989%;
+ *margin-left: 76.96544022569647%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 71.2707182320442%;
+ *margin-left: 71.16433525332079%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 68.50828729281768%;
+ *margin-left: 68.40190431409427%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 62.70718232044199%;
+ *margin-left: 62.600799341718584%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 59.94475138121547%;
+ *margin-left: 59.838368402492065%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 54.14364640883978%;
+ *margin-left: 54.037263430116376%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 51.38121546961326%;
+ *margin-left: 51.27483249088986%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 45.58011049723757%;
+ *margin-left: 45.47372751851417%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.81767955801105%;
+ *margin-left: 42.71129657928765%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 37.01657458563536%;
+ *margin-left: 36.91019160691196%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 34.25414364640884%;
+ *margin-left: 34.14776066768544%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 28.45303867403315%;
+ *margin-left: 28.346655695309746%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.69060773480663%;
+ *margin-left: 25.584224756083227%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 19.88950276243094%;
+ *margin-left: 19.783119783707537%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 17.12707182320442%;
+ *margin-left: 17.02068884448102%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 11.32596685082873%;
+ *margin-left: 11.219583872105325%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.56353591160221%;
+ *margin-left: 8.457152932878806%;
+ }
+ input,
+ textarea,
+ .uneditable-input {
+ margin-left: 0;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 20px;
+ }
+ input.span12,
+ textarea.span12,
+ .uneditable-input.span12 {
+ width: 710px;
+ }
+ input.span11,
+ textarea.span11,
+ .uneditable-input.span11 {
+ width: 648px;
+ }
+ input.span10,
+ textarea.span10,
+ .uneditable-input.span10 {
+ width: 586px;
+ }
+ input.span9,
+ textarea.span9,
+ .uneditable-input.span9 {
+ width: 524px;
+ }
+ input.span8,
+ textarea.span8,
+ .uneditable-input.span8 {
+ width: 462px;
+ }
+ input.span7,
+ textarea.span7,
+ .uneditable-input.span7 {
+ width: 400px;
+ }
+ input.span6,
+ textarea.span6,
+ .uneditable-input.span6 {
+ width: 338px;
+ }
+ input.span5,
+ textarea.span5,
+ .uneditable-input.span5 {
+ width: 276px;
+ }
+ input.span4,
+ textarea.span4,
+ .uneditable-input.span4 {
+ width: 214px;
+ }
+ input.span3,
+ textarea.span3,
+ .uneditable-input.span3 {
+ width: 152px;
+ }
+ input.span2,
+ textarea.span2,
+ .uneditable-input.span2 {
+ width: 90px;
+ }
+ input.span1,
+ textarea.span1,
+ .uneditable-input.span1 {
+ width: 28px;
+ }
+}
+
+@media (max-width: 767px) {
+ body {
+ padding-right: 20px;
+ padding-left: 20px;
+ }
+ .navbar-fixed-top,
+ .navbar-fixed-bottom,
+ .navbar-static-top {
+ margin-right: -20px;
+ margin-left: -20px;
+ }
+ .container-fluid {
+ padding: 0;
+ }
+ .dl-horizontal dt {
+ float: none;
+ width: auto;
+ clear: none;
+ text-align: left;
+ }
+ .dl-horizontal dd {
+ margin-left: 0;
+ }
+ .container {
+ width: auto;
+ }
+ .row-fluid {
+ width: 100%;
+ }
+ .row,
+ .thumbnails {
+ margin-left: 0;
+ }
+ .thumbnails > li {
+ float: none;
+ margin-left: 0;
+ }
+ [class*="span"],
+ .uneditable-input[class*="span"],
+ .row-fluid [class*="span"] {
+ display: block;
+ float: none;
+ width: 100%;
+ margin-left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .span12,
+ .row-fluid .span12 {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .row-fluid [class*="offset"]:first-child {
+ margin-left: 0;
+ }
+ .input-large,
+ .input-xlarge,
+ .input-xxlarge,
+ input[class*="span"],
+ select[class*="span"],
+ textarea[class*="span"],
+ .uneditable-input {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .input-prepend input,
+ .input-append input,
+ .input-prepend input[class*="span"],
+ .input-append input[class*="span"] {
+ display: inline-block;
+ width: auto;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 0;
+ }
+ .modal {
+ position: fixed;
+ top: 20px;
+ right: 20px;
+ left: 20px;
+ width: auto;
+ margin: 0;
+ }
+ .modal.fade {
+ top: -100px;
+ }
+ .modal.fade.in {
+ top: 20px;
+ }
+}
+
+@media (max-width: 480px) {
+ .nav-collapse {
+ -webkit-transform: translate3d(0, 0, 0);
+ }
+ .page-header h1 small {
+ display: block;
+ line-height: 20px;
+ }
+ input[type="checkbox"],
+ input[type="radio"] {
+ border: 1px solid #ccc;
+ }
+ .form-horizontal .control-label {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ text-align: left;
+ }
+ .form-horizontal .controls {
+ margin-left: 0;
+ }
+ .form-horizontal .control-list {
+ padding-top: 0;
+ }
+ .form-horizontal .form-actions {
+ padding-right: 10px;
+ padding-left: 10px;
+ }
+ .media .pull-left,
+ .media .pull-right {
+ display: block;
+ float: none;
+ margin-bottom: 10px;
+ }
+ .media-object {
+ margin-right: 0;
+ margin-left: 0;
+ }
+ .modal {
+ top: 10px;
+ right: 10px;
+ left: 10px;
+ }
+ .modal-header .close {
+ padding: 10px;
+ margin: -10px;
+ }
+ .carousel-caption {
+ position: static;
+ }
+}
+
+@media (max-width: 979px) {
+ body {
+ padding-top: 0;
+ }
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ position: static;
+ }
+ .navbar-fixed-top {
+ margin-bottom: 20px;
+ }
+ .navbar-fixed-bottom {
+ margin-top: 20px;
+ }
+ .navbar-fixed-top .navbar-inner,
+ .navbar-fixed-bottom .navbar-inner {
+ padding: 5px;
+ }
+ .navbar .container {
+ width: auto;
+ padding: 0;
+ }
+ .navbar .brand {
+ padding-right: 10px;
+ padding-left: 10px;
+ margin: 0 0 0 -5px;
+ }
+ .nav-collapse {
+ clear: both;
+ }
+ .nav-collapse .nav {
+ float: none;
+ margin: 0 0 10px;
+ }
+ .nav-collapse .nav > li {
+ float: none;
+ }
+ .nav-collapse .nav > li > a {
+ margin-bottom: 2px;
+ }
+ .nav-collapse .nav > .divider-vertical {
+ display: none;
+ }
+ .nav-collapse .nav .nav-header {
+ color: #777777;
+ text-shadow: none;
+ }
+ .nav-collapse .nav > li > a,
+ .nav-collapse .dropdown-menu a {
+ padding: 9px 15px;
+ font-weight: bold;
+ color: #777777;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ }
+ .nav-collapse .btn {
+ padding: 4px 10px 4px;
+ font-weight: normal;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ }
+ .nav-collapse .dropdown-menu li + li a {
+ margin-bottom: 2px;
+ }
+ .nav-collapse .nav > li > a:hover,
+ .nav-collapse .dropdown-menu a:hover {
+ background-color: #f2f2f2;
+ }
+ .navbar-inverse .nav-collapse .nav > li > a,
+ .navbar-inverse .nav-collapse .dropdown-menu a {
+ color: #999999;
+ }
+ .navbar-inverse .nav-collapse .nav > li > a:hover,
+ .navbar-inverse .nav-collapse .dropdown-menu a:hover {
+ background-color: #111111;
+ }
+ .nav-collapse.in .btn-group {
+ padding: 0;
+ margin-top: 5px;
+ }
+ .nav-collapse .dropdown-menu {
+ position: static;
+ top: auto;
+ left: auto;
+ display: none;
+ float: none;
+ max-width: none;
+ padding: 0;
+ margin: 0 15px;
+ background-color: transparent;
+ border: none;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ }
+ .nav-collapse .open > .dropdown-menu {
+ display: block;
+ }
+ .nav-collapse .dropdown-menu:before,
+ .nav-collapse .dropdown-menu:after {
+ display: none;
+ }
+ .nav-collapse .dropdown-menu .divider {
+ display: none;
+ }
+ .nav-collapse .nav > li > .dropdown-menu:before,
+ .nav-collapse .nav > li > .dropdown-menu:after {
+ display: none;
+ }
+ .nav-collapse .navbar-form,
+ .nav-collapse .navbar-search {
+ float: none;
+ padding: 10px 15px;
+ margin: 10px 0;
+ border-top: 1px solid #f2f2f2;
+ border-bottom: 1px solid #f2f2f2;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+ }
+ .navbar-inverse .nav-collapse .navbar-form,
+ .navbar-inverse .nav-collapse .navbar-search {
+ border-top-color: #111111;
+ border-bottom-color: #111111;
+ }
+ .navbar .nav-collapse .nav.pull-right {
+ float: none;
+ margin-left: 0;
+ }
+ .nav-collapse,
+ .nav-collapse.collapse {
+ height: 0;
+ overflow: hidden;
+ }
+ .navbar .btn-navbar {
+ display: block;
+ }
+ .navbar-static .navbar-inner {
+ padding-right: 10px;
+ padding-left: 10px;
+ }
+}
+
+@media (min-width: 980px) {
+ .nav-collapse.collapse {
+ height: auto !important;
+ overflow: visible !important;
+ }
+}
diff --git a/app/assets/stylesheets/basic/bootstrap.css.erb b/app/assets/stylesheets/basic/bootstrap.css.erb
new file mode 100644
index 000000000..c0a7706d0
--- /dev/null
+++ b/app/assets/stylesheets/basic/bootstrap.css.erb
@@ -0,0 +1,6057 @@
+/*!
+ * Bootstrap v2.2.2
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+ display: block;
+}
+
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+audio:not([controls]) {
+ display: none;
+}
+
+html {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+a:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+a:hover,
+a:active {
+ outline: 0;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+img {
+ width: auto\9;
+ height: auto;
+ max-width: 100%;
+ vertical-align: middle;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+#map_canvas img,
+.google-maps img {
+ max-width: none;
+}
+
+button,
+input,
+select,
+textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+
+button,
+input {
+ *overflow: visible;
+ line-height: normal;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button;
+}
+
+label,
+select,
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"],
+input[type="radio"],
+input[type="checkbox"] {
+ cursor: pointer;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+textarea {
+ overflow: auto;
+ vertical-align: top;
+}
+
+@media print {
+ * {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ .ir a:after,
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ @page {
+ margin: 0.5cm;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+}
+
+.clearfix {
+ *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+.hide-text {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.input-block-level {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 75%;
+ line-height: 20px;
+ color: #333333;
+ background-color: #ffffff;
+}
+
+a {
+ color: #0088cc;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #005580;
+ text-decoration: underline;
+}
+
+.img-rounded {
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.img-polaroid {
+ padding: 4px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.img-circle {
+ -webkit-border-radius: 500px;
+ -moz-border-radius: 500px;
+ border-radius: 500px;
+}
+
+.row {
+ margin-left: -20px;
+ *zoom: 1;
+}
+
+.row:before,
+.row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.row:after {
+ clear: both;
+}
+
+[class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 20px;
+}
+
+.container,
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+ width: 940px;
+}
+
+.span12 {
+ width: 940px;
+}
+
+.span11 {
+ width: 860px;
+}
+
+.span10 {
+ width: 780px;
+}
+
+.span9 {
+ width: 700px;
+}
+
+.span8 {
+ width: 620px;
+}
+
+.span7 {
+ width: 540px;
+}
+
+.span6 {
+ width: 460px;
+}
+
+.span5 {
+ width: 380px;
+}
+
+.span4 {
+ width: 300px;
+}
+
+.span3 {
+ width: 220px;
+}
+
+.span2 {
+ width: 140px;
+}
+
+.span1 {
+ width: 60px;
+}
+
+.offset12 {
+ margin-left: 980px;
+}
+
+.offset11 {
+ margin-left: 900px;
+}
+
+.offset10 {
+ margin-left: 820px;
+}
+
+.offset9 {
+ margin-left: 740px;
+}
+
+.offset8 {
+ margin-left: 660px;
+}
+
+.offset7 {
+ margin-left: 580px;
+}
+
+.offset6 {
+ margin-left: 500px;
+}
+
+.offset5 {
+ margin-left: 420px;
+}
+
+.offset4 {
+ margin-left: 340px;
+}
+
+.offset3 {
+ margin-left: 260px;
+}
+
+.offset2 {
+ margin-left: 180px;
+}
+
+.offset1 {
+ margin-left: 100px;
+}
+
+.row-fluid {
+ width: 100%;
+ *zoom: 1;
+}
+
+.row-fluid:before,
+.row-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.row-fluid:after {
+ clear: both;
+}
+
+.row-fluid [class*="span"] {
+ display: block;
+ float: left;
+ width: 100%;
+ min-height: 30px;
+ margin-left: 2.127659574468085%;
+ *margin-left: 2.074468085106383%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+}
+
+.row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 2.127659574468085%;
+}
+
+.row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680851063829%;
+}
+
+.row-fluid .span11 {
+ width: 91.48936170212765%;
+ *width: 91.43617021276594%;
+}
+
+.row-fluid .span10 {
+ width: 82.97872340425532%;
+ *width: 82.92553191489361%;
+}
+
+.row-fluid .span9 {
+ width: 74.46808510638297%;
+ *width: 74.41489361702126%;
+}
+
+.row-fluid .span8 {
+ width: 65.95744680851064%;
+ *width: 65.90425531914893%;
+}
+
+.row-fluid .span7 {
+ width: 57.44680851063829%;
+ *width: 57.39361702127659%;
+}
+
+.row-fluid .span6 {
+ width: 48.93617021276595%;
+ *width: 48.88297872340425%;
+}
+
+.row-fluid .span5 {
+ width: 40.42553191489362%;
+ *width: 40.37234042553192%;
+}
+
+.row-fluid .span4 {
+ width: 31.914893617021278%;
+ *width: 31.861702127659576%;
+}
+
+.row-fluid .span3 {
+ width: 23.404255319148934%;
+ *width: 23.351063829787233%;
+}
+
+.row-fluid .span2 {
+ width: 14.893617021276595%;
+ *width: 14.840425531914894%;
+}
+
+.row-fluid .span1 {
+ width: 6.382978723404255%;
+ *width: 6.329787234042553%;
+}
+
+.row-fluid .offset12 {
+ margin-left: 104.25531914893617%;
+ *margin-left: 104.14893617021275%;
+}
+
+.row-fluid .offset12:first-child {
+ margin-left: 102.12765957446808%;
+ *margin-left: 102.02127659574467%;
+}
+
+.row-fluid .offset11 {
+ margin-left: 95.74468085106382%;
+ *margin-left: 95.6382978723404%;
+}
+
+.row-fluid .offset11:first-child {
+ margin-left: 93.61702127659574%;
+ *margin-left: 93.51063829787232%;
+}
+
+.row-fluid .offset10 {
+ margin-left: 87.23404255319149%;
+ *margin-left: 87.12765957446807%;
+}
+
+.row-fluid .offset10:first-child {
+ margin-left: 85.1063829787234%;
+ *margin-left: 84.99999999999999%;
+}
+
+.row-fluid .offset9 {
+ margin-left: 78.72340425531914%;
+ *margin-left: 78.61702127659572%;
+}
+
+.row-fluid .offset9:first-child {
+ margin-left: 76.59574468085106%;
+ *margin-left: 76.48936170212764%;
+}
+
+.row-fluid .offset8 {
+ margin-left: 70.2127659574468%;
+ *margin-left: 70.10638297872339%;
+}
+
+.row-fluid .offset8:first-child {
+ margin-left: 68.08510638297872%;
+ *margin-left: 67.9787234042553%;
+}
+
+.row-fluid .offset7 {
+ margin-left: 61.70212765957446%;
+ *margin-left: 61.59574468085106%;
+}
+
+.row-fluid .offset7:first-child {
+ margin-left: 59.574468085106375%;
+ *margin-left: 59.46808510638297%;
+}
+
+.row-fluid .offset6 {
+ margin-left: 53.191489361702125%;
+ *margin-left: 53.085106382978715%;
+}
+
+.row-fluid .offset6:first-child {
+ margin-left: 51.063829787234035%;
+ *margin-left: 50.95744680851063%;
+}
+
+.row-fluid .offset5 {
+ margin-left: 44.68085106382979%;
+ *margin-left: 44.57446808510638%;
+}
+
+.row-fluid .offset5:first-child {
+ margin-left: 42.5531914893617%;
+ *margin-left: 42.4468085106383%;
+}
+
+.row-fluid .offset4 {
+ margin-left: 36.170212765957444%;
+ *margin-left: 36.06382978723405%;
+}
+
+.row-fluid .offset4:first-child {
+ margin-left: 34.04255319148936%;
+ *margin-left: 33.93617021276596%;
+}
+
+.row-fluid .offset3 {
+ margin-left: 27.659574468085104%;
+ *margin-left: 27.5531914893617%;
+}
+
+.row-fluid .offset3:first-child {
+ margin-left: 25.53191489361702%;
+ *margin-left: 25.425531914893618%;
+}
+
+.row-fluid .offset2 {
+ margin-left: 19.148936170212764%;
+ *margin-left: 19.04255319148936%;
+}
+
+.row-fluid .offset2:first-child {
+ margin-left: 17.02127659574468%;
+ *margin-left: 16.914893617021278%;
+}
+
+.row-fluid .offset1 {
+ margin-left: 10.638297872340425%;
+ *margin-left: 10.53191489361702%;
+}
+
+.row-fluid .offset1:first-child {
+ margin-left: 8.51063829787234%;
+ *margin-left: 8.404255319148938%;
+}
+
+[class*="span"].hide,
+.row-fluid [class*="span"].hide {
+ display: none;
+}
+
+[class*="span"].pull-right,
+.row-fluid [class*="span"].pull-right {
+ float: right;
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ *zoom: 1;
+}
+
+.container:before,
+.container:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.container:after {
+ clear: both;
+}
+
+.container-fluid {
+ padding-right: 20px;
+ padding-left: 20px;
+ *zoom: 1;
+}
+
+.container-fluid:before,
+.container-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.container-fluid:after {
+ clear: both;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 21px;
+ font-weight: 200;
+ line-height: 30px;
+}
+
+small {
+ font-size: 85%;
+}
+
+strong {
+ font-weight: bold;
+}
+
+em {
+ font-style: italic;
+}
+
+cite {
+ font-style: normal;
+}
+
+.muted {
+ color: #999999;
+}
+
+a.muted:hover,
+a.muted:focus {
+ color: #808080;
+}
+
+.text-warning {
+ color: #c09853;
+}
+
+a.text-warning:hover,
+a.text-warning:focus {
+ color: #a47e3c;
+}
+
+.text-error {
+ color: #b94a48;
+}
+
+a.text-error:hover,
+a.text-error:focus {
+ color: #953b39;
+}
+
+.text-info {
+ color: #3a87ad;
+}
+
+a.text-info:hover,
+a.text-info:focus {
+ color: #2d6987;
+}
+
+.text-success {
+ color: #468847;
+}
+
+a.text-success:hover,
+a.text-success:focus {
+ color: #356635;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin: 10px 0;
+ font-family: inherit;
+ font-weight: bold;
+ line-height: 20px;
+ color: inherit;
+ text-rendering: optimizelegibility;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+ font-weight: normal;
+ line-height: 1;
+ color: #999999;
+}
+
+h1,
+h2,
+h3 {
+ line-height: 40px;
+}
+
+h1 {
+ font-size: 38.5px;
+}
+
+h2 {
+ font-size: 31.5px;
+}
+
+h3 {
+ font-size: 24.5px;
+}
+
+h4 {
+ font-size: 17.5px;
+}
+
+h5 {
+ font-size: 14px;
+}
+
+h6 {
+ font-size: 11.9px;
+}
+
+h1 small {
+ font-size: 24.5px;
+}
+
+h2 small {
+ font-size: 17.5px;
+}
+
+h3 small {
+ font-size: 14px;
+}
+
+h4 small {
+ font-size: 14px;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 20px 0 30px;
+ border-bottom: 1px solid #eeeeee;
+}
+
+ul,
+ol {
+ padding: 0;
+ margin: 0 0 10px 25px;
+}
+
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin-bottom: 0;
+}
+
+li {
+ line-height: 20px;
+}
+
+ul.unstyled,
+ol.unstyled {
+ margin-left: 0;
+ list-style: none;
+}
+
+ul.inline,
+ol.inline {
+ margin-left: 0;
+ list-style: none;
+}
+
+ul.inline > li,
+ol.inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+dl {
+ margin-bottom: 20px;
+}
+
+dt,
+dd {
+ line-height: 20px;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin-left: 10px;
+}
+
+.dl-horizontal {
+ *zoom: 1;
+}
+
+.dl-horizontal:before,
+.dl-horizontal:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.dl-horizontal:after {
+ clear: both;
+}
+
+.dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.dl-horizontal dd {
+ margin-left: 180px;
+}
+
+hr {
+ margin: 20px 0;
+ border: 0;
+ border-top: 1px solid #eeeeee;
+ border-bottom: 1px solid #ffffff;
+}
+
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999999;
+}
+
+abbr.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+blockquote {
+ padding: 0 0 0 15px;
+ margin: 0 0 20px;
+ border-left: 5px solid #eeeeee;
+}
+
+blockquote p {
+ margin-bottom: 0;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 25px;
+}
+
+blockquote small {
+ display: block;
+ line-height: 20px;
+ color: #999999;
+}
+
+blockquote small:before {
+ content: '\2014 \00A0';
+}
+
+blockquote.pull-right {
+ float: right;
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #eeeeee;
+ border-left: 0;
+}
+
+blockquote.pull-right p,
+blockquote.pull-right small {
+ text-align: right;
+}
+
+blockquote.pull-right small:before {
+ content: '';
+}
+
+blockquote.pull-right small:after {
+ content: '\00A0 \2014';
+}
+
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+
+address {
+ display: block;
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 20px;
+}
+
+code,
+pre {
+ padding: 0 3px 2px;
+ font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
+ font-size: 12px;
+ color: #333333;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+code {
+ padding: 2px 4px;
+ color: #d14;
+ white-space: nowrap;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8;
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 20px;
+ word-break: break-all;
+ word-wrap: break-word;
+ white-space: pre;
+ white-space: pre-wrap;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+pre.prettyprint {
+ margin-bottom: 20px;
+}
+
+pre code {
+ padding: 0;
+ color: inherit;
+ white-space: pre;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border: 0;
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+form {
+ margin: 0 0 20px;
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: 40px;
+ color: #333333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+legend small {
+ font-size: 15px;
+ color: #999999;
+}
+
+label,
+input,
+button,
+select,
+textarea {
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 20px;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+label {
+ display: block;
+ margin-bottom: 5px;
+}
+
+select,
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+.uneditable-input {
+ display: inline-block;
+ height: 20px;
+ padding: 4px 6px;
+ margin-bottom: 10px;
+ font-size: 14px;
+ line-height: 20px;
+ color: #555555;
+ vertical-align: middle;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+input,
+textarea,
+.uneditable-input {
+ width: 206px;
+}
+
+textarea {
+ height: auto;
+}
+
+textarea,
+input[type="text"],
+input[type="password"],
+input[type="datetime"],
+input[type="datetime-local"],
+input[type="date"],
+input[type="month"],
+input[type="time"],
+input[type="week"],
+input[type="number"],
+input[type="email"],
+input[type="url"],
+input[type="search"],
+input[type="tel"],
+input[type="color"],
+.uneditable-input {
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+ transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+
+textarea:focus,
+input[type="text"]:focus,
+input[type="password"]:focus,
+input[type="datetime"]:focus,
+input[type="datetime-local"]:focus,
+input[type="date"]:focus,
+input[type="month"]:focus,
+input[type="time"]:focus,
+input[type="week"]:focus,
+input[type="number"]:focus,
+input[type="email"]:focus,
+input[type="url"]:focus,
+input[type="search"]:focus,
+input[type="tel"]:focus,
+input[type="color"]:focus,
+.uneditable-input:focus {
+ border-color: rgba(82, 168, 236, 0.8);
+ outline: 0;
+ outline: thin dotted \9;
+ /* IE6-9 */
+
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ *margin-top: 0;
+ line-height: normal;
+}
+
+input[type="file"],
+input[type="image"],
+input[type="submit"],
+input[type="reset"],
+input[type="button"],
+input[type="radio"],
+input[type="checkbox"] {
+ width: auto;
+}
+
+select,
+input[type="file"] {
+ height: 30px;
+ /* In IE7, the height of the select element cannot be changed by height, only font-size */
+
+ *margin-top: 4px;
+ /* For IE7, add top margin to align select with labels */
+
+ line-height: 30px;
+}
+
+select {
+ width: 220px;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+select:focus,
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.uneditable-input,
+.uneditable-textarea {
+ color: #999999;
+ cursor: not-allowed;
+ background-color: #fcfcfc;
+ border-color: #cccccc;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+}
+
+.uneditable-input {
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.uneditable-textarea {
+ width: auto;
+ height: auto;
+}
+
+input:-moz-placeholder,
+textarea:-moz-placeholder {
+ color: #999999;
+}
+
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+ color: #999999;
+}
+
+input::-webkit-input-placeholder,
+textarea::-webkit-input-placeholder {
+ color: #999999;
+}
+
+.radio,
+.checkbox {
+ min-height: 20px;
+ padding-left: 20px;
+}
+
+.radio input[type="radio"],
+.checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -20px;
+}
+
+.controls > .radio:first-child,
+.controls > .checkbox:first-child {
+ padding-top: 5px;
+}
+
+.radio.inline,
+.checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.radio.inline + .radio.inline,
+.checkbox.inline + .checkbox.inline {
+ margin-left: 10px;
+}
+
+.input-mini {
+ width: 60px;
+}
+
+.input-small {
+ width: 90px;
+}
+
+.input-medium {
+ width: 150px;
+}
+
+.input-large {
+ width: 210px;
+}
+
+.input-xlarge {
+ width: 270px;
+}
+
+.input-xxlarge {
+ width: 530px;
+}
+
+input[class*="span"],
+select[class*="span"],
+textarea[class*="span"],
+.uneditable-input[class*="span"],
+.row-fluid input[class*="span"],
+.row-fluid select[class*="span"],
+.row-fluid textarea[class*="span"],
+.row-fluid .uneditable-input[class*="span"] {
+ float: none;
+ margin-left: 0;
+}
+
+.input-append input[class*="span"],
+.input-append .uneditable-input[class*="span"],
+.input-prepend input[class*="span"],
+.input-prepend .uneditable-input[class*="span"],
+.row-fluid input[class*="span"],
+.row-fluid select[class*="span"],
+.row-fluid textarea[class*="span"],
+.row-fluid .uneditable-input[class*="span"],
+.row-fluid .input-prepend [class*="span"],
+.row-fluid .input-append [class*="span"] {
+ display: inline-block;
+}
+
+input,
+textarea,
+.uneditable-input {
+ margin-left: 0;
+}
+
+.controls-row [class*="span"] + [class*="span"] {
+ margin-left: 20px;
+}
+
+input.span12,
+textarea.span12,
+.uneditable-input.span12 {
+ width: 926px;
+}
+
+input.span11,
+textarea.span11,
+.uneditable-input.span11 {
+ width: 846px;
+}
+
+input.span10,
+textarea.span10,
+.uneditable-input.span10 {
+ width: 766px;
+}
+
+input.span9,
+textarea.span9,
+.uneditable-input.span9 {
+ width: 686px;
+}
+
+input.span8,
+textarea.span8,
+.uneditable-input.span8 {
+ width: 606px;
+}
+
+input.span7,
+textarea.span7,
+.uneditable-input.span7 {
+ width: 526px;
+}
+
+input.span6,
+textarea.span6,
+.uneditable-input.span6 {
+ width: 446px;
+}
+
+input.span5,
+textarea.span5,
+.uneditable-input.span5 {
+ width: 366px;
+}
+
+input.span4,
+textarea.span4,
+.uneditable-input.span4 {
+ width: 286px;
+}
+
+input.span3,
+textarea.span3,
+.uneditable-input.span3 {
+ width: 206px;
+}
+
+input.span2,
+textarea.span2,
+.uneditable-input.span2 {
+ width: 126px;
+}
+
+input.span1,
+textarea.span1,
+.uneditable-input.span1 {
+ width: 46px;
+}
+
+.controls-row {
+ *zoom: 1;
+}
+
+.controls-row:before,
+.controls-row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.controls-row:after {
+ clear: both;
+}
+
+.controls-row [class*="span"],
+.row-fluid .controls-row [class*="span"] {
+ float: left;
+}
+
+.controls-row .checkbox[class*="span"],
+.controls-row .radio[class*="span"] {
+ padding-top: 5px;
+}
+
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+ cursor: not-allowed;
+ background-color: #eeeeee;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"][readonly],
+input[type="checkbox"][readonly] {
+ background-color: transparent;
+}
+
+.control-group.warning .control-label,
+.control-group.warning .help-block,
+.control-group.warning .help-inline {
+ color: #c09853;
+}
+
+.control-group.warning .checkbox,
+.control-group.warning .radio,
+.control-group.warning input,
+.control-group.warning select,
+.control-group.warning textarea {
+ color: #c09853;
+}
+
+.control-group.warning input,
+.control-group.warning select,
+.control-group.warning textarea {
+ border-color: #c09853;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.warning input:focus,
+.control-group.warning select:focus,
+.control-group.warning textarea:focus {
+ border-color: #a47e3c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+}
+
+.control-group.warning .input-prepend .add-on,
+.control-group.warning .input-append .add-on {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #c09853;
+}
+
+.control-group.error .control-label,
+.control-group.error .help-block,
+.control-group.error .help-inline {
+ color: #b94a48;
+}
+
+.control-group.error .checkbox,
+.control-group.error .radio,
+.control-group.error input,
+.control-group.error select,
+.control-group.error textarea {
+ color: #b94a48;
+}
+
+.control-group.error input,
+.control-group.error select,
+.control-group.error textarea {
+ border-color: #b94a48;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.error input:focus,
+.control-group.error select:focus,
+.control-group.error textarea:focus {
+ border-color: #953b39;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+}
+
+.control-group.error .input-prepend .add-on,
+.control-group.error .input-append .add-on {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #b94a48;
+}
+
+.control-group.success .control-label,
+.control-group.success .help-block,
+.control-group.success .help-inline {
+ color: #468847;
+}
+
+.control-group.success .checkbox,
+.control-group.success .radio,
+.control-group.success input,
+.control-group.success select,
+.control-group.success textarea {
+ color: #468847;
+}
+
+.control-group.success input,
+.control-group.success select,
+.control-group.success textarea {
+ border-color: #468847;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.success input:focus,
+.control-group.success select:focus,
+.control-group.success textarea:focus {
+ border-color: #356635;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+}
+
+.control-group.success .input-prepend .add-on,
+.control-group.success .input-append .add-on {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #468847;
+}
+
+.control-group.info .control-label,
+.control-group.info .help-block,
+.control-group.info .help-inline {
+ color: #3a87ad;
+}
+
+.control-group.info .checkbox,
+.control-group.info .radio,
+.control-group.info input,
+.control-group.info select,
+.control-group.info textarea {
+ color: #3a87ad;
+}
+
+.control-group.info input,
+.control-group.info select,
+.control-group.info textarea {
+ border-color: #3a87ad;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.control-group.info input:focus,
+.control-group.info select:focus,
+.control-group.info textarea:focus {
+ border-color: #2d6987;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+}
+
+.control-group.info .input-prepend .add-on,
+.control-group.info .input-append .add-on {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #3a87ad;
+}
+
+input:focus:invalid,
+textarea:focus:invalid,
+select:focus:invalid {
+ color: #b94a48;
+ border-color: #ee5f5b;
+}
+
+input:focus:invalid:focus,
+textarea:focus:invalid:focus,
+select:focus:invalid:focus {
+ border-color: #e9322d;
+ -webkit-box-shadow: 0 0 6px #f8b9b7;
+ -moz-box-shadow: 0 0 6px #f8b9b7;
+ box-shadow: 0 0 6px #f8b9b7;
+}
+
+.form-actions {
+ padding: 19px 20px 20px;
+ margin-top: 20px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #e5e5e5;
+ *zoom: 1;
+}
+
+.form-actions:before,
+.form-actions:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.form-actions:after {
+ clear: both;
+}
+
+.help-block,
+.help-inline {
+ color: #595959;
+}
+
+.help-block {
+ display: block;
+ margin-bottom: 10px;
+}
+
+.help-inline {
+ display: inline-block;
+ *display: inline;
+ padding-left: 5px;
+ vertical-align: middle;
+ *zoom: 1;
+}
+
+.input-append,
+.input-prepend {
+ margin-bottom: 5px;
+ font-size: 0;
+ white-space: nowrap;
+}
+
+.input-append input,
+.input-prepend input,
+.input-append select,
+.input-prepend select,
+.input-append .uneditable-input,
+.input-prepend .uneditable-input,
+.input-append .dropdown-menu,
+.input-prepend .dropdown-menu {
+ font-size: 14px;
+}
+
+.input-append input,
+.input-prepend input,
+.input-append select,
+.input-prepend select,
+.input-append .uneditable-input,
+.input-prepend .uneditable-input {
+ position: relative;
+ margin-bottom: 0;
+ *margin-left: 0;
+ vertical-align: top;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.input-append input:focus,
+.input-prepend input:focus,
+.input-append select:focus,
+.input-prepend select:focus,
+.input-append .uneditable-input:focus,
+.input-prepend .uneditable-input:focus {
+ z-index: 2;
+}
+
+.input-append .add-on,
+.input-prepend .add-on {
+ display: inline-block;
+ width: auto;
+ height: 20px;
+ min-width: 16px;
+ padding: 4px 5px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 20px;
+ text-align: center;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #eeeeee;
+ border: 1px solid #ccc;
+}
+
+.input-append .add-on,
+.input-prepend .add-on,
+.input-append .btn,
+.input-prepend .btn,
+.input-append .btn-group > .dropdown-toggle,
+.input-prepend .btn-group > .dropdown-toggle {
+ vertical-align: top;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.input-append .active,
+.input-prepend .active {
+ background-color: #a9dba9;
+ border-color: #46a546;
+}
+
+.input-prepend .add-on,
+.input-prepend .btn {
+ margin-right: -1px;
+}
+
+.input-prepend .add-on:first-child,
+.input-prepend .btn:first-child {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.input-append input,
+.input-append select,
+.input-append .uneditable-input {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.input-append input + .btn-group .btn:last-child,
+.input-append select + .btn-group .btn:last-child,
+.input-append .uneditable-input + .btn-group .btn:last-child {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.input-append .add-on,
+.input-append .btn,
+.input-append .btn-group {
+ margin-left: -1px;
+}
+
+.input-append .add-on:last-child,
+.input-append .btn:last-child,
+.input-append .btn-group:last-child > .dropdown-toggle {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append input,
+.input-prepend.input-append select,
+.input-prepend.input-append .uneditable-input {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.input-prepend.input-append input + .btn-group .btn,
+.input-prepend.input-append select + .btn-group .btn,
+.input-prepend.input-append .uneditable-input + .btn-group .btn {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append .add-on:first-child,
+.input-prepend.input-append .btn:first-child {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.input-prepend.input-append .add-on:last-child,
+.input-prepend.input-append .btn:last-child {
+ margin-left: -1px;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.input-prepend.input-append .btn-group:first-child {
+ margin-left: 0;
+}
+
+input.search-query {
+ padding-right: 14px;
+ padding-right: 4px \9;
+ padding-left: 14px;
+ padding-left: 4px \9;
+ /* IE7-8 doesn't have border-radius, so don't indent the padding */
+
+ margin-bottom: 0;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+
+/* Allow for input prepend/append in search forms */
+
+.form-search .input-append .search-query,
+.form-search .input-prepend .search-query {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.form-search .input-append .search-query {
+ -webkit-border-radius: 14px 0 0 14px;
+ -moz-border-radius: 14px 0 0 14px;
+ border-radius: 14px 0 0 14px;
+}
+
+.form-search .input-append .btn {
+ -webkit-border-radius: 0 14px 14px 0;
+ -moz-border-radius: 0 14px 14px 0;
+ border-radius: 0 14px 14px 0;
+}
+
+.form-search .input-prepend .search-query {
+ -webkit-border-radius: 0 14px 14px 0;
+ -moz-border-radius: 0 14px 14px 0;
+ border-radius: 0 14px 14px 0;
+}
+
+.form-search .input-prepend .btn {
+ -webkit-border-radius: 14px 0 0 14px;
+ -moz-border-radius: 14px 0 0 14px;
+ border-radius: 14px 0 0 14px;
+}
+
+.form-search input,
+.form-inline input,
+.form-horizontal input,
+.form-search textarea,
+.form-inline textarea,
+.form-horizontal textarea,
+.form-search select,
+.form-inline select,
+.form-horizontal select,
+.form-search .help-inline,
+.form-inline .help-inline,
+.form-horizontal .help-inline,
+.form-search .uneditable-input,
+.form-inline .uneditable-input,
+.form-horizontal .uneditable-input,
+.form-search .input-prepend,
+.form-inline .input-prepend,
+.form-horizontal .input-prepend,
+.form-search .input-append,
+.form-inline .input-append,
+.form-horizontal .input-append {
+ display: inline-block;
+ *display: inline;
+ margin-bottom: 0;
+ vertical-align: middle;
+ *zoom: 1;
+}
+
+.form-search .hide,
+.form-inline .hide,
+.form-horizontal .hide {
+ display: none;
+}
+
+.form-search label,
+.form-inline label,
+.form-search .btn-group,
+.form-inline .btn-group {
+ display: inline-block;
+}
+
+.form-search .input-append,
+.form-inline .input-append,
+.form-search .input-prepend,
+.form-inline .input-prepend {
+ margin-bottom: 0;
+}
+
+.form-search .radio,
+.form-search .checkbox,
+.form-inline .radio,
+.form-inline .checkbox {
+ padding-left: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.form-search .radio input[type="radio"],
+.form-search .checkbox input[type="checkbox"],
+.form-inline .radio input[type="radio"],
+.form-inline .checkbox input[type="checkbox"] {
+ float: left;
+ margin-right: 3px;
+ margin-left: 0;
+}
+
+.control-group {
+ margin-bottom: 10px;
+}
+
+legend + .control-group {
+ margin-top: 20px;
+ -webkit-margin-top-collapse: separate;
+}
+
+.form-horizontal .control-group {
+ margin-bottom: 20px;
+ *zoom: 1;
+}
+
+.form-horizontal .control-group:before,
+.form-horizontal .control-group:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.form-horizontal .control-group:after {
+ clear: both;
+}
+
+.form-horizontal .control-label {
+ float: left;
+ width: 160px;
+ padding-top: 5px;
+ text-align: right;
+}
+
+.form-horizontal .controls {
+ *display: inline-block;
+ *padding-left: 20px;
+ margin-left: 180px;
+ *margin-left: 0;
+}
+
+.form-horizontal .controls:first-child {
+ *padding-left: 180px;
+}
+
+.form-horizontal .help-block {
+ margin-bottom: 0;
+}
+
+.form-horizontal input + .help-block,
+.form-horizontal select + .help-block,
+.form-horizontal textarea + .help-block,
+.form-horizontal .uneditable-input + .help-block,
+.form-horizontal .input-prepend + .help-block,
+.form-horizontal .input-append + .help-block {
+ margin-top: 10px;
+}
+
+.form-horizontal .form-actions {
+ padding-left: 180px;
+}
+
+table {
+ max-width: 100%;
+ background-color: transparent;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 20px;
+}
+
+.table th,
+.table td {
+ padding: 8px;
+ line-height: 20px;
+ text-align: left;
+ vertical-align: top;
+ border-top: 1px solid #dddddd;
+}
+
+.table th {
+ font-weight: bold;
+}
+
+.table thead th {
+ vertical-align: bottom;
+}
+
+.table caption + thead tr:first-child th,
+.table caption + thead tr:first-child td,
+.table colgroup + thead tr:first-child th,
+.table colgroup + thead tr:first-child td,
+.table thead:first-child tr:first-child th,
+.table thead:first-child tr:first-child td {
+ border-top: 0;
+}
+
+.table tbody + tbody {
+ border-top: 2px solid #dddddd;
+}
+
+.table .table {
+ background-color: #ffffff;
+}
+
+.table-condensed th,
+.table-condensed td {
+ padding: 4px 5px;
+}
+
+.table-bordered {
+ border: 1px solid #dddddd;
+ border-collapse: separate;
+ *border-collapse: collapse;
+ border-left: 0;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.table-bordered th,
+.table-bordered td {
+ border-left: 1px solid #dddddd;
+}
+
+.table-bordered caption + thead tr:first-child th,
+.table-bordered caption + tbody tr:first-child th,
+.table-bordered caption + tbody tr:first-child td,
+.table-bordered colgroup + thead tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child td,
+.table-bordered thead:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child td {
+ border-top: 0;
+}
+
+.table-bordered thead:first-child tr:first-child > th:first-child,
+.table-bordered tbody:first-child tr:first-child > td:first-child {
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.table-bordered thead:first-child tr:first-child > th:last-child,
+.table-bordered tbody:first-child tr:first-child > td:last-child {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+}
+
+.table-bordered thead:last-child tr:last-child > th:first-child,
+.table-bordered tbody:last-child tr:last-child > td:first-child,
+.table-bordered tfoot:last-child tr:last-child > td:first-child {
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+}
+
+.table-bordered thead:last-child tr:last-child > th:last-child,
+.table-bordered tbody:last-child tr:last-child > td:last-child,
+.table-bordered tfoot:last-child tr:last-child > td:last-child {
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+}
+
+.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomleft: 0;
+}
+
+.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomright: 0;
+}
+
+.table-bordered caption + thead tr:first-child th:first-child,
+.table-bordered caption + tbody tr:first-child td:first-child,
+.table-bordered colgroup + thead tr:first-child th:first-child,
+.table-bordered colgroup + tbody tr:first-child td:first-child {
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.table-bordered caption + thead tr:first-child th:last-child,
+.table-bordered caption + tbody tr:first-child td:last-child,
+.table-bordered colgroup + thead tr:first-child th:last-child,
+.table-bordered colgroup + tbody tr:first-child td:last-child {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+}
+
+.table-striped tbody > tr:nth-child(odd) > td,
+.table-striped tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9;
+}
+
+.table-hover tbody tr:hover td,
+.table-hover tbody tr:hover th {
+ background-color: #f5f5f5;
+}
+
+table td[class*="span"],
+table th[class*="span"],
+.row-fluid table td[class*="span"],
+.row-fluid table th[class*="span"] {
+ display: table-cell;
+ float: none;
+ margin-left: 0;
+}
+
+.table td.span1,
+.table th.span1 {
+ float: none;
+ width: 44px;
+ margin-left: 0;
+}
+
+.table td.span2,
+.table th.span2 {
+ float: none;
+ width: 124px;
+ margin-left: 0;
+}
+
+.table td.span3,
+.table th.span3 {
+ float: none;
+ width: 204px;
+ margin-left: 0;
+}
+
+.table td.span4,
+.table th.span4 {
+ float: none;
+ width: 284px;
+ margin-left: 0;
+}
+
+.table td.span5,
+.table th.span5 {
+ float: none;
+ width: 364px;
+ margin-left: 0;
+}
+
+.table td.span6,
+.table th.span6 {
+ float: none;
+ width: 444px;
+ margin-left: 0;
+}
+
+.table td.span7,
+.table th.span7 {
+ float: none;
+ width: 524px;
+ margin-left: 0;
+}
+
+.table td.span8,
+.table th.span8 {
+ float: none;
+ width: 604px;
+ margin-left: 0;
+}
+
+.table td.span9,
+.table th.span9 {
+ float: none;
+ width: 684px;
+ margin-left: 0;
+}
+
+.table td.span10,
+.table th.span10 {
+ float: none;
+ width: 764px;
+ margin-left: 0;
+}
+
+.table td.span11,
+.table th.span11 {
+ float: none;
+ width: 844px;
+ margin-left: 0;
+}
+
+.table td.span12,
+.table th.span12 {
+ float: none;
+ width: 924px;
+ margin-left: 0;
+}
+
+.table tbody tr.success td {
+ background-color: #dff0d8;
+}
+
+.table tbody tr.error td {
+ background-color: #f2dede;
+}
+
+.table tbody tr.warning td {
+ background-color: #fcf8e3;
+}
+
+.table tbody tr.info td {
+ background-color: #d9edf7;
+}
+
+.table-hover tbody tr.success:hover td {
+ background-color: #d0e9c6;
+}
+
+.table-hover tbody tr.error:hover td {
+ background-color: #ebcccc;
+}
+
+.table-hover tbody tr.warning:hover td {
+ background-color: #faf2cc;
+}
+
+.table-hover tbody tr.info:hover td {
+ background-color: #c4e3f3;
+}
+
+[class^="icon-"],
+[class*=" icon-"] {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ margin-top: 1px;
+ *margin-right: .3em;
+ line-height: 14px;
+ vertical-align: text-top;
+ background-image: url(<%= asset_path "glyphicons-halflings.png" %>);
+ background-position: 14px 14px;
+ background-repeat: no-repeat;
+}
+
+/* White icons with optional class, or on hover/active states of certain elements */
+
+.icon-white,
+.nav-pills > .active > a > [class^="icon-"],
+.nav-pills > .active > a > [class*=" icon-"],
+.nav-list > .active > a > [class^="icon-"],
+.nav-list > .active > a > [class*=" icon-"],
+.navbar-inverse .nav > .active > a > [class^="icon-"],
+.navbar-inverse .nav > .active > a > [class*=" icon-"],
+.dropdown-menu > li > a:hover > [class^="icon-"],
+.dropdown-menu > li > a:hover > [class*=" icon-"],
+.dropdown-menu > .active > a > [class^="icon-"],
+.dropdown-menu > .active > a > [class*=" icon-"],
+.dropdown-submenu:hover > a > [class^="icon-"],
+.dropdown-submenu:hover > a > [class*=" icon-"] {
+ background-image: url(<%= asset_path "glyphicons-halflings-white.png" %>);
+}
+
+.icon-glass {
+ background-position: 0 0;
+}
+
+.icon-music {
+ background-position: -24px 0;
+}
+
+.icon-search {
+ background-position: -48px 0;
+}
+
+.icon-envelope {
+ background-position: -72px 0;
+}
+
+.icon-heart {
+ background-position: -96px 0;
+}
+
+.icon-star {
+ background-position: -120px 0;
+}
+
+.icon-star-empty {
+ background-position: -144px 0;
+}
+
+.icon-user {
+ background-position: -168px 0;
+}
+
+.icon-film {
+ background-position: -192px 0;
+}
+
+.icon-th-large {
+ background-position: -216px 0;
+}
+
+.icon-th {
+ background-position: -240px 0;
+}
+
+.icon-th-list {
+ background-position: -264px 0;
+}
+
+.icon-ok {
+ background-position: -288px 0;
+}
+
+.icon-remove {
+ background-position: -312px 0;
+}
+
+.icon-zoom-in {
+ background-position: -336px 0;
+}
+
+.icon-zoom-out {
+ background-position: -360px 0;
+}
+
+.icon-off {
+ background-position: -384px 0;
+}
+
+.icon-signal {
+ background-position: -408px 0;
+}
+
+.icon-cog {
+ background-position: -432px 0;
+}
+
+.icon-trash {
+ background-position: -456px 0;
+}
+
+.icon-home {
+ background-position: 0 -24px;
+}
+
+.icon-file {
+ background-position: -24px -24px;
+}
+
+.icon-time {
+ background-position: -48px -24px;
+}
+
+.icon-road {
+ background-position: -72px -24px;
+}
+
+.icon-download-alt {
+ background-position: -96px -24px;
+}
+
+.icon-download {
+ background-position: -120px -24px;
+}
+
+.icon-upload {
+ background-position: -144px -24px;
+}
+
+.icon-inbox {
+ background-position: -168px -24px;
+}
+
+.icon-play-circle {
+ background-position: -192px -24px;
+}
+
+.icon-repeat {
+ background-position: -216px -24px;
+}
+
+.icon-refresh {
+ background-position: -240px -24px;
+}
+
+.icon-list-alt {
+ background-position: -264px -24px;
+}
+
+.icon-lock {
+ background-position: -287px -24px;
+}
+
+.icon-flag {
+ background-position: -312px -24px;
+}
+
+.icon-headphones {
+ background-position: -336px -24px;
+}
+
+.icon-volume-off {
+ background-position: -360px -24px;
+}
+
+.icon-volume-down {
+ background-position: -384px -24px;
+}
+
+.icon-volume-up {
+ background-position: -408px -24px;
+}
+
+.icon-qrcode {
+ background-position: -432px -24px;
+}
+
+.icon-barcode {
+ background-position: -456px -24px;
+}
+
+.icon-tag {
+ background-position: 0 -48px;
+}
+
+.icon-tags {
+ background-position: -25px -48px;
+}
+
+.icon-book {
+ background-position: -48px -48px;
+}
+
+.icon-bookmark {
+ background-position: -72px -48px;
+}
+
+.icon-print {
+ background-position: -96px -48px;
+}
+
+.icon-camera {
+ background-position: -120px -48px;
+}
+
+.icon-font {
+ background-position: -144px -48px;
+}
+
+.icon-bold {
+ background-position: -167px -48px;
+}
+
+.icon-italic {
+ background-position: -192px -48px;
+}
+
+.icon-text-height {
+ background-position: -216px -48px;
+}
+
+.icon-text-width {
+ background-position: -240px -48px;
+}
+
+.icon-align-left {
+ background-position: -264px -48px;
+}
+
+.icon-align-center {
+ background-position: -288px -48px;
+}
+
+.icon-align-right {
+ background-position: -312px -48px;
+}
+
+.icon-align-justify {
+ background-position: -336px -48px;
+}
+
+.icon-list {
+ background-position: -360px -48px;
+}
+
+.icon-indent-left {
+ background-position: -384px -48px;
+}
+
+.icon-indent-right {
+ background-position: -408px -48px;
+}
+
+.icon-facetime-video {
+ background-position: -432px -48px;
+}
+
+.icon-picture {
+ background-position: -456px -48px;
+}
+
+.icon-pencil {
+ background-position: 0 -72px;
+}
+
+.icon-map-marker {
+ background-position: -24px -72px;
+}
+
+.icon-adjust {
+ background-position: -48px -72px;
+}
+
+.icon-tint {
+ background-position: -72px -72px;
+}
+
+.icon-edit {
+ background-position: -96px -72px;
+}
+
+.icon-share {
+ background-position: -120px -72px;
+}
+
+.icon-check {
+ background-position: -144px -72px;
+}
+
+.icon-move {
+ background-position: -168px -72px;
+}
+
+.icon-step-backward {
+ background-position: -192px -72px;
+}
+
+.icon-fast-backward {
+ background-position: -216px -72px;
+}
+
+.icon-backward {
+ background-position: -240px -72px;
+}
+
+.icon-play {
+ background-position: -264px -72px;
+}
+
+.icon-pause {
+ background-position: -288px -72px;
+}
+
+.icon-stop {
+ background-position: -312px -72px;
+}
+
+.icon-forward {
+ background-position: -336px -72px;
+}
+
+.icon-fast-forward {
+ background-position: -360px -72px;
+}
+
+.icon-step-forward {
+ background-position: -384px -72px;
+}
+
+.icon-eject {
+ background-position: -408px -72px;
+}
+
+.icon-chevron-left {
+ background-position: -432px -72px;
+}
+
+.icon-chevron-right {
+ background-position: -456px -72px;
+}
+
+.icon-plus-sign {
+ background-position: 0 -96px;
+}
+
+.icon-minus-sign {
+ background-position: -24px -96px;
+}
+
+.icon-remove-sign {
+ background-position: -48px -96px;
+}
+
+.icon-ok-sign {
+ background-position: -72px -96px;
+}
+
+.icon-question-sign {
+ background-position: -96px -96px;
+}
+
+.icon-info-sign {
+ background-position: -120px -96px;
+}
+
+.icon-screenshot {
+ background-position: -144px -96px;
+}
+
+.icon-remove-circle {
+ background-position: -168px -96px;
+}
+
+.icon-ok-circle {
+ background-position: -192px -96px;
+}
+
+.icon-ban-circle {
+ background-position: -216px -96px;
+}
+
+.icon-arrow-left {
+ background-position: -240px -96px;
+}
+
+.icon-arrow-right {
+ background-position: -264px -96px;
+}
+
+.icon-arrow-up {
+ background-position: -289px -96px;
+}
+
+.icon-arrow-down {
+ background-position: -312px -96px;
+}
+
+.icon-share-alt {
+ background-position: -336px -96px;
+}
+
+.icon-resize-full {
+ background-position: -360px -96px;
+}
+
+.icon-resize-small {
+ background-position: -384px -96px;
+}
+
+.icon-plus {
+ background-position: -408px -96px;
+}
+
+.icon-minus {
+ background-position: -433px -96px;
+}
+
+.icon-asterisk {
+ background-position: -456px -96px;
+}
+
+.icon-exclamation-sign {
+ background-position: 0 -120px;
+}
+
+.icon-gift {
+ background-position: -24px -120px;
+}
+
+.icon-leaf {
+ background-position: -48px -120px;
+}
+
+.icon-fire {
+ background-position: -72px -120px;
+}
+
+.icon-eye-open {
+ background-position: -96px -120px;
+}
+
+.icon-eye-close {
+ background-position: -120px -120px;
+}
+
+.icon-warning-sign {
+ background-position: -144px -120px;
+}
+
+.icon-plane {
+ background-position: -168px -120px;
+}
+
+.icon-calendar {
+ background-position: -192px -120px;
+}
+
+.icon-random {
+ width: 16px;
+ background-position: -216px -120px;
+}
+
+.icon-comment {
+ background-position: -240px -120px;
+}
+
+.icon-magnet {
+ background-position: -264px -120px;
+}
+
+.icon-chevron-up {
+ background-position: -288px -120px;
+}
+
+.icon-chevron-down {
+ background-position: -313px -119px;
+}
+
+.icon-retweet {
+ background-position: -336px -120px;
+}
+
+.icon-shopping-cart {
+ background-position: -360px -120px;
+}
+
+.icon-folder-close {
+ background-position: -384px -120px;
+}
+
+.icon-folder-open {
+ width: 16px;
+ background-position: -408px -120px;
+}
+
+.icon-resize-vertical {
+ background-position: -432px -119px;
+}
+
+.icon-resize-horizontal {
+ background-position: -456px -118px;
+}
+
+.icon-hdd {
+ background-position: 0 -144px;
+}
+
+.icon-bullhorn {
+ background-position: -24px -144px;
+}
+
+.icon-bell {
+ background-position: -48px -144px;
+}
+
+.icon-certificate {
+ background-position: -72px -144px;
+}
+
+.icon-thumbs-up {
+ background-position: -96px -144px;
+}
+
+.icon-thumbs-down {
+ background-position: -120px -144px;
+}
+
+.icon-hand-right {
+ background-position: -144px -144px;
+}
+
+.icon-hand-left {
+ background-position: -168px -144px;
+}
+
+.icon-hand-up {
+ background-position: -192px -144px;
+}
+
+.icon-hand-down {
+ background-position: -216px -144px;
+}
+
+.icon-circle-arrow-right {
+ background-position: -240px -144px;
+}
+
+.icon-circle-arrow-left {
+ background-position: -264px -144px;
+}
+
+.icon-circle-arrow-up {
+ background-position: -288px -144px;
+}
+
+.icon-circle-arrow-down {
+ background-position: -312px -144px;
+}
+
+.icon-globe {
+ background-position: -336px -144px;
+}
+
+.icon-wrench {
+ background-position: -360px -144px;
+}
+
+.icon-tasks {
+ background-position: -384px -144px;
+}
+
+.icon-filter {
+ background-position: -408px -144px;
+}
+
+.icon-briefcase {
+ background-position: -432px -144px;
+}
+
+.icon-fullscreen {
+ background-position: -456px -144px;
+}
+
+.dropup,
+.dropdown {
+ position: relative;
+}
+
+.dropdown-toggle {
+ *margin-bottom: -3px;
+}
+
+.dropdown-toggle:active,
+.open .dropdown-toggle {
+ outline: 0;
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ vertical-align: top;
+ border-top: 4px solid #000000;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+ content: "";
+}
+
+.dropdown .caret {
+ margin-top: 8px;
+ margin-left: 2px;
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ list-style: none;
+ background-color: #ffffff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ *border-right-width: 2px;
+ *border-bottom-width: 2px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu .divider {
+ *width: 100%;
+ height: 1px;
+ margin: 9px 1px;
+ *margin: -5px 0 5px;
+ overflow: hidden;
+ background-color: #e5e5e5;
+ border-bottom: 1px solid #ffffff;
+}
+
+.dropdown-menu li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 20px;
+ color: #333333;
+ white-space: nowrap;
+}
+
+.dropdown-menu li > a:hover,
+.dropdown-menu li > a:focus,
+.dropdown-submenu:hover > a {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #0081c2;
+ background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+ background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.dropdown-menu .active > a,
+.dropdown-menu .active > a:hover {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #0081c2;
+ background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+ background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+ background-repeat: repeat-x;
+ outline: 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.dropdown-menu .disabled > a,
+.dropdown-menu .disabled > a:hover {
+ color: #999999;
+}
+
+.dropdown-menu .disabled > a:hover {
+ text-decoration: none;
+ cursor: default;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open {
+ *z-index: 1000;
+}
+
+.open > .dropdown-menu {
+ display: block;
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ border-top: 0;
+ border-bottom: 4px solid #000000;
+ content: "";
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+
+.dropdown-submenu {
+ position: relative;
+}
+
+.dropdown-submenu > .dropdown-menu {
+ top: 0;
+ left: 100%;
+ margin-top: -6px;
+ margin-left: -1px;
+ -webkit-border-radius: 0 6px 6px 6px;
+ -moz-border-radius: 0 6px 6px 6px;
+ border-radius: 0 6px 6px 6px;
+}
+
+.dropdown-submenu:hover > .dropdown-menu {
+ display: block;
+}
+
+.dropup .dropdown-submenu > .dropdown-menu {
+ top: auto;
+ bottom: 0;
+ margin-top: 0;
+ margin-bottom: -2px;
+ -webkit-border-radius: 5px 5px 5px 0;
+ -moz-border-radius: 5px 5px 5px 0;
+ border-radius: 5px 5px 5px 0;
+}
+
+.dropdown-submenu > a:after {
+ display: block;
+ float: right;
+ width: 0;
+ height: 0;
+ margin-top: 5px;
+ margin-right: -10px;
+ border-color: transparent;
+ border-left-color: #cccccc;
+ border-style: solid;
+ border-width: 5px 0 5px 5px;
+ content: " ";
+}
+
+.dropdown-submenu:hover > a:after {
+ border-left-color: #ffffff;
+}
+
+.dropdown-submenu.pull-left {
+ float: none;
+}
+
+.dropdown-submenu.pull-left > .dropdown-menu {
+ left: -100%;
+ margin-left: 10px;
+ -webkit-border-radius: 6px 0 6px 6px;
+ -moz-border-radius: 6px 0 6px 6px;
+ border-radius: 6px 0 6px 6px;
+}
+
+.dropdown .dropdown-menu .nav-header {
+ padding-right: 20px;
+ padding-left: 20px;
+}
+
+.typeahead {
+ z-index: 1051;
+ margin-top: 2px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+.well-large {
+ padding: 24px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.well-small {
+ padding: 9px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity 0.15s linear;
+ -moz-transition: opacity 0.15s linear;
+ -o-transition: opacity 0.15s linear;
+ transition: opacity 0.15s linear;
+}
+
+.fade.in {
+ opacity: 1;
+}
+
+.collapse {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height 0.35s ease;
+ -moz-transition: height 0.35s ease;
+ -o-transition: height 0.35s ease;
+ transition: height 0.35s ease;
+}
+
+.collapse.in {
+ height: auto;
+}
+
+.close {
+ float: right;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 20px;
+ color: #000000;
+ text-shadow: 0 1px 0 #ffffff;
+ opacity: 0.2;
+ filter: alpha(opacity=20);
+}
+
+.close:hover {
+ color: #000000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+}
+
+button.close {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+}
+
+.btn {
+ display: inline-block;
+ *display: inline;
+ padding: 4px 12px;
+ margin-bottom: 0;
+ *margin-left: .3em;
+ font-size: 14px;
+ line-height: 20px;
+ color: #333333;
+ text-align: center;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+ vertical-align: middle;
+ cursor: pointer;
+ background-color: #f5f5f5;
+ *background-color: #e6e6e6;
+ background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
+ background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
+ background-repeat: repeat-x;
+ border: 1px solid #bbbbbb;
+ *border: 0;
+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ border-bottom-color: #a2a2a2;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ *zoom: 1;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn:hover,
+.btn:active,
+.btn.active,
+.btn.disabled,
+.btn[disabled] {
+ color: #333333;
+ background-color: #e6e6e6;
+ *background-color: #d9d9d9;
+}
+
+.btn:active,
+.btn.active {
+ background-color: #cccccc \9;
+}
+
+.btn:first-child {
+ *margin-left: 0;
+}
+
+.btn:hover {
+ color: #333333;
+ text-decoration: none;
+ background-position: 0 -15px;
+ -webkit-transition: background-position 0.1s linear;
+ -moz-transition: background-position 0.1s linear;
+ -o-transition: background-position 0.1s linear;
+ transition: background-position 0.1s linear;
+}
+
+.btn:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.btn.active,
+.btn:active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn.disabled,
+.btn[disabled] {
+ cursor: default;
+ background-image: none;
+ opacity: 0.65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-large {
+ padding: 11px 19px;
+ font-size: 17.5px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.btn-large [class^="icon-"],
+.btn-large [class*=" icon-"] {
+ margin-top: 4px;
+}
+
+.btn-small {
+ padding: 2px 10px;
+ font-size: 11.9px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.btn-small [class^="icon-"],
+.btn-small [class*=" icon-"] {
+ margin-top: 0;
+}
+
+.btn-mini [class^="icon-"],
+.btn-mini [class*=" icon-"] {
+ margin-top: -1px;
+}
+
+.btn-mini {
+ padding: 0 6px;
+ font-size: 10.5px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+
+.btn-primary.active,
+.btn-warning.active,
+.btn-danger.active,
+.btn-success.active,
+.btn-info.active,
+.btn-inverse.active {
+ color: rgba(255, 255, 255, 0.75);
+}
+
+.btn {
+ border-color: #c5c5c5;
+ border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
+}
+
+.btn-primary {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #006dcc;
+ *background-color: #0044cc;
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+ background-image: linear-gradient(to bottom, #0088cc, #0044cc);
+ background-repeat: repeat-x;
+ border-color: #0044cc #0044cc #002a80;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-primary:hover,
+.btn-primary:active,
+.btn-primary.active,
+.btn-primary.disabled,
+.btn-primary[disabled] {
+ color: #ffffff;
+ background-color: #0044cc;
+ *background-color: #003bb3;
+}
+
+.btn-primary:active,
+.btn-primary.active {
+ background-color: #003399 \9;
+}
+
+.btn-warning {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #faa732;
+ *background-color: #f89406;
+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+ background-image: -o-linear-gradient(top, #fbb450, #f89406);
+ background-image: linear-gradient(to bottom, #fbb450, #f89406);
+ background-repeat: repeat-x;
+ border-color: #f89406 #f89406 #ad6704;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-warning:hover,
+.btn-warning:active,
+.btn-warning.active,
+.btn-warning.disabled,
+.btn-warning[disabled] {
+ color: #ffffff;
+ background-color: #f89406;
+ *background-color: #df8505;
+}
+
+.btn-warning:active,
+.btn-warning.active {
+ background-color: #c67605 \9;
+}
+
+.btn-danger {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #da4f49;
+ *background-color: #bd362f;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
+ background-repeat: repeat-x;
+ border-color: #bd362f #bd362f #802420;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-danger:hover,
+.btn-danger:active,
+.btn-danger.active,
+.btn-danger.disabled,
+.btn-danger[disabled] {
+ color: #ffffff;
+ background-color: #bd362f;
+ *background-color: #a9302a;
+}
+
+.btn-danger:active,
+.btn-danger.active {
+ background-color: #942a25 \9;
+}
+
+.btn-success {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #5bb75b;
+ *background-color: #51a351;
+ background-image: -moz-linear-gradient(top, #62c462, #51a351);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
+ background-image: -webkit-linear-gradient(top, #62c462, #51a351);
+ background-image: -o-linear-gradient(top, #62c462, #51a351);
+ background-image: linear-gradient(to bottom, #62c462, #51a351);
+ background-repeat: repeat-x;
+ border-color: #51a351 #51a351 #387038;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-success:hover,
+.btn-success:active,
+.btn-success.active,
+.btn-success.disabled,
+.btn-success[disabled] {
+ color: #ffffff;
+ background-color: #51a351;
+ *background-color: #499249;
+}
+
+.btn-success:active,
+.btn-success.active {
+ background-color: #408140 \9;
+}
+
+.btn-info {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #49afcd;
+ *background-color: #2f96b4;
+ background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
+ background-repeat: repeat-x;
+ border-color: #2f96b4 #2f96b4 #1f6377;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-info:hover,
+.btn-info:active,
+.btn-info.active,
+.btn-info.disabled,
+.btn-info[disabled] {
+ color: #ffffff;
+ background-color: #2f96b4;
+ *background-color: #2a85a0;
+}
+
+.btn-info:active,
+.btn-info.active {
+ background-color: #24748c \9;
+}
+
+.btn-inverse {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #363636;
+ *background-color: #222222;
+ background-image: -moz-linear-gradient(top, #444444, #222222);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
+ background-image: -webkit-linear-gradient(top, #444444, #222222);
+ background-image: -o-linear-gradient(top, #444444, #222222);
+ background-image: linear-gradient(to bottom, #444444, #222222);
+ background-repeat: repeat-x;
+ border-color: #222222 #222222 #000000;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.btn-inverse:hover,
+.btn-inverse:active,
+.btn-inverse.active,
+.btn-inverse.disabled,
+.btn-inverse[disabled] {
+ color: #ffffff;
+ background-color: #222222;
+ *background-color: #151515;
+}
+
+.btn-inverse:active,
+.btn-inverse.active {
+ background-color: #080808 \9;
+}
+
+button.btn,
+input[type="submit"].btn {
+ *padding-top: 3px;
+ *padding-bottom: 3px;
+}
+
+button.btn::-moz-focus-inner,
+input[type="submit"].btn::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+button.btn.btn-large,
+input[type="submit"].btn.btn-large {
+ *padding-top: 7px;
+ *padding-bottom: 7px;
+}
+
+button.btn.btn-small,
+input[type="submit"].btn.btn-small {
+ *padding-top: 3px;
+ *padding-bottom: 3px;
+}
+
+button.btn.btn-mini,
+input[type="submit"].btn.btn-mini {
+ *padding-top: 1px;
+ *padding-bottom: 1px;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link[disabled] {
+ background-color: transparent;
+ background-image: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-link {
+ color: #0088cc;
+ cursor: pointer;
+ border-color: transparent;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.btn-link:hover {
+ color: #005580;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.btn-link[disabled]:hover {
+ color: #333333;
+ text-decoration: none;
+}
+
+.btn-group {
+ position: relative;
+ display: inline-block;
+ *display: inline;
+ *margin-left: .3em;
+ font-size: 0;
+ white-space: nowrap;
+ vertical-align: middle;
+ *zoom: 1;
+}
+
+.btn-group:first-child {
+ *margin-left: 0;
+}
+
+.btn-group + .btn-group {
+ margin-left: 5px;
+}
+
+.btn-toolbar {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ font-size: 0;
+}
+
+.btn-toolbar > .btn + .btn,
+.btn-toolbar > .btn-group + .btn,
+.btn-toolbar > .btn + .btn-group {
+ margin-left: 5px;
+}
+
+.btn-group > .btn {
+ position: relative;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.btn-group > .btn + .btn {
+ margin-left: -1px;
+}
+
+.btn-group > .btn,
+.btn-group > .dropdown-menu,
+.btn-group > .popover {
+ font-size: 14px;
+}
+
+.btn-group > .btn-mini {
+ font-size: 10.5px;
+}
+
+.btn-group > .btn-small {
+ font-size: 11.9px;
+}
+
+.btn-group > .btn-large {
+ font-size: 17.5px;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.btn-group > .btn:last-child,
+.btn-group > .dropdown-toggle {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-bottomright: 4px;
+}
+
+.btn-group > .btn.large:first-child {
+ margin-left: 0;
+ -webkit-border-bottom-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+ -webkit-border-top-left-radius: 6px;
+ border-top-left-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ -moz-border-radius-topleft: 6px;
+}
+
+.btn-group > .btn.large:last-child,
+.btn-group > .large.dropdown-toggle {
+ -webkit-border-top-right-radius: 6px;
+ border-top-right-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ -moz-border-radius-topright: 6px;
+ -moz-border-radius-bottomright: 6px;
+}
+
+.btn-group > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group > .btn:active,
+.btn-group > .btn.active {
+ z-index: 2;
+}
+
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ *padding-top: 5px;
+ padding-right: 8px;
+ *padding-bottom: 5px;
+ padding-left: 8px;
+ -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn-group > .btn-mini + .dropdown-toggle {
+ *padding-top: 2px;
+ padding-right: 5px;
+ *padding-bottom: 2px;
+ padding-left: 5px;
+}
+
+.btn-group > .btn-small + .dropdown-toggle {
+ *padding-top: 5px;
+ *padding-bottom: 4px;
+}
+
+.btn-group > .btn-large + .dropdown-toggle {
+ *padding-top: 7px;
+ padding-right: 12px;
+ *padding-bottom: 7px;
+ padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+ background-image: none;
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.btn-group.open .btn.dropdown-toggle {
+ background-color: #e6e6e6;
+}
+
+.btn-group.open .btn-primary.dropdown-toggle {
+ background-color: #0044cc;
+}
+
+.btn-group.open .btn-warning.dropdown-toggle {
+ background-color: #f89406;
+}
+
+.btn-group.open .btn-danger.dropdown-toggle {
+ background-color: #bd362f;
+}
+
+.btn-group.open .btn-success.dropdown-toggle {
+ background-color: #51a351;
+}
+
+.btn-group.open .btn-info.dropdown-toggle {
+ background-color: #2f96b4;
+}
+
+.btn-group.open .btn-inverse.dropdown-toggle {
+ background-color: #222222;
+}
+
+.btn .caret {
+ margin-top: 8px;
+ margin-left: 0;
+}
+
+.btn-mini .caret,
+.btn-small .caret,
+.btn-large .caret {
+ margin-top: 6px;
+}
+
+.btn-large .caret {
+ border-top-width: 5px;
+ border-right-width: 5px;
+ border-left-width: 5px;
+}
+
+.dropup .btn-large .caret {
+ border-bottom-width: 5px;
+}
+
+.btn-primary .caret,
+.btn-warning .caret,
+.btn-danger .caret,
+.btn-info .caret,
+.btn-success .caret,
+.btn-inverse .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+.btn-group-vertical {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+
+ *zoom: 1;
+}
+
+.btn-group-vertical > .btn {
+ display: block;
+ float: none;
+ max-width: 100%;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn + .btn {
+ margin-top: -1px;
+ margin-left: 0;
+}
+
+.btn-group-vertical > .btn:first-child {
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.btn-group-vertical > .btn:last-child {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.btn-group-vertical > .btn-large:first-child {
+ -webkit-border-radius: 6px 6px 0 0;
+ -moz-border-radius: 6px 6px 0 0;
+ border-radius: 6px 6px 0 0;
+}
+
+.btn-group-vertical > .btn-large:last-child {
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+}
+
+.alert {
+ padding: 8px 35px 8px 14px;
+ margin-bottom: 20px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ background-color: #fcf8e3;
+ border: 1px solid #fbeed5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.alert,
+.alert h4 {
+ color: #c09853;
+}
+
+.alert h4 {
+ margin: 0;
+}
+
+.alert .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ line-height: 20px;
+}
+
+.alert-success {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.alert-success h4 {
+ color: #468847;
+}
+
+.alert-danger,
+.alert-error {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #eed3d7;
+}
+
+.alert-danger h4,
+.alert-error h4 {
+ color: #b94a48;
+}
+
+.alert-info {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.alert-info h4 {
+ color: #3a87ad;
+}
+
+.alert-block {
+ padding-top: 14px;
+ padding-bottom: 14px;
+}
+
+.alert-block > p,
+.alert-block > ul {
+ margin-bottom: 0;
+}
+
+.alert-block p + p {
+ margin-top: 5px;
+}
+
+.nav {
+ margin-bottom: 20px;
+ margin-left: 0;
+ list-style: none;
+}
+
+.nav > li > a {
+ display: block;
+}
+
+.nav > li > a:hover {
+ text-decoration: none;
+ background-color: #eeeeee;
+}
+
+.nav > li > a > img {
+ max-width: none;
+}
+
+.nav > .pull-right {
+ float: right;
+}
+
+.nav-header {
+ display: block;
+ padding: 3px 15px;
+ font-size: 11px;
+ font-weight: bold;
+ line-height: 20px;
+ color: #999999;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ text-transform: uppercase;
+}
+
+.nav li + .nav-header {
+ margin-top: 9px;
+}
+
+.nav-list {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-bottom: 0;
+}
+
+.nav-list > li > a,
+.nav-list .nav-header {
+ margin-right: -15px;
+ margin-left: -15px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+
+.nav-list > li > a {
+ padding: 3px 15px;
+}
+
+.nav-list > .active > a,
+.nav-list > .active > a:hover {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+ background-color: #0088cc;
+}
+
+.nav-list [class^="icon-"],
+.nav-list [class*=" icon-"] {
+ margin-right: 2px;
+}
+
+.nav-list .divider {
+ *width: 100%;
+ height: 1px;
+ margin: 9px 1px;
+ *margin: -5px 0 5px;
+ overflow: hidden;
+ background-color: #e5e5e5;
+ border-bottom: 1px solid #ffffff;
+}
+
+.nav-tabs,
+.nav-pills {
+ *zoom: 1;
+}
+
+.nav-tabs:before,
+.nav-pills:before,
+.nav-tabs:after,
+.nav-pills:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.nav-tabs:after,
+.nav-pills:after {
+ clear: both;
+}
+
+.nav-tabs > li,
+.nav-pills > li {
+ float: left;
+}
+
+.nav-tabs > li > a,
+.nav-pills > li > a {
+ padding-right: 12px;
+ padding-left: 12px;
+ margin-right: 2px;
+ line-height: 14px;
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+.nav-tabs > li {
+ margin-bottom: -1px;
+}
+
+.nav-tabs > li > a {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ line-height: 20px;
+ border: 1px solid transparent;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #eeeeee #eeeeee #dddddd;
+}
+
+.nav-tabs > .active > a,
+.nav-tabs > .active > a:hover {
+ color: #555555;
+ cursor: default;
+ background-color: #ffffff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+
+.nav-pills > li > a {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+.nav-pills > .active > a,
+.nav-pills > .active > a:hover {
+ color: #ffffff;
+ background-color: #0088cc;
+}
+
+.nav-stacked > li {
+ float: none;
+}
+
+.nav-stacked > li > a {
+ margin-right: 0;
+}
+
+.nav-tabs.nav-stacked {
+ border-bottom: 0;
+}
+
+.nav-tabs.nav-stacked > li > a {
+ border: 1px solid #ddd;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.nav-tabs.nav-stacked > li:first-child > a {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.nav-tabs.nav-stacked > li:last-child > a {
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-border-radius-bottomleft: 4px;
+}
+
+.nav-tabs.nav-stacked > li > a:hover {
+ z-index: 2;
+ border-color: #ddd;
+}
+
+.nav-pills.nav-stacked > li > a {
+ margin-bottom: 3px;
+}
+
+.nav-pills.nav-stacked > li:last-child > a {
+ margin-bottom: 1px;
+}
+
+.nav-tabs .dropdown-menu {
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+}
+
+.nav-pills .dropdown-menu {
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.nav .dropdown-toggle .caret {
+ margin-top: 6px;
+ border-top-color: #0088cc;
+ border-bottom-color: #0088cc;
+}
+
+.nav .dropdown-toggle:hover .caret {
+ border-top-color: #005580;
+ border-bottom-color: #005580;
+}
+
+/* move down carets for tabs */
+
+.nav-tabs .dropdown-toggle .caret {
+ margin-top: 8px;
+}
+
+.nav .active .dropdown-toggle .caret {
+ border-top-color: #fff;
+ border-bottom-color: #fff;
+}
+
+.nav-tabs .active .dropdown-toggle .caret {
+ border-top-color: #555555;
+ border-bottom-color: #555555;
+}
+
+.nav > .dropdown.active > a:hover {
+ cursor: pointer;
+}
+
+.nav-tabs .open .dropdown-toggle,
+.nav-pills .open .dropdown-toggle,
+.nav > li.dropdown.open.active > a:hover {
+ color: #ffffff;
+ background-color: #999999;
+ border-color: #999999;
+}
+
+.nav li.dropdown.open .caret,
+.nav li.dropdown.open.active .caret,
+.nav li.dropdown.open a:hover .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.tabs-stacked .open > a:hover {
+ border-color: #999999;
+}
+
+.tabbable {
+ *zoom: 1;
+}
+
+.tabbable:before,
+.tabbable:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.tabbable:after {
+ clear: both;
+}
+
+.tab-content {
+ overflow: auto;
+}
+
+.tabs-below > .nav-tabs,
+.tabs-right > .nav-tabs,
+.tabs-left > .nav-tabs {
+ border-bottom: 0;
+}
+
+.tab-content > .tab-pane,
+.pill-content > .pill-pane {
+ display: none;
+}
+
+.tab-content > .active,
+.pill-content > .active {
+ display: block;
+}
+
+.tabs-below > .nav-tabs {
+ border-top: 1px solid #ddd;
+}
+
+.tabs-below > .nav-tabs > li {
+ margin-top: -1px;
+ margin-bottom: 0;
+}
+
+.tabs-below > .nav-tabs > li > a {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.tabs-below > .nav-tabs > li > a:hover {
+ border-top-color: #ddd;
+ border-bottom-color: transparent;
+}
+
+.tabs-below > .nav-tabs > .active > a,
+.tabs-below > .nav-tabs > .active > a:hover {
+ border-color: transparent #ddd #ddd #ddd;
+}
+
+.tabs-left > .nav-tabs > li,
+.tabs-right > .nav-tabs > li {
+ float: none;
+}
+
+.tabs-left > .nav-tabs > li > a,
+.tabs-right > .nav-tabs > li > a {
+ min-width: 74px;
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+
+.tabs-left > .nav-tabs {
+ float: left;
+ margin-right: 19px;
+ border-right: 1px solid #ddd;
+}
+
+.tabs-left > .nav-tabs > li > a {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.tabs-left > .nav-tabs > li > a:hover {
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.tabs-left > .nav-tabs .active > a,
+.tabs-left > .nav-tabs .active > a:hover {
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+
+.tabs-right > .nav-tabs {
+ float: right;
+ margin-left: 19px;
+ border-left: 1px solid #ddd;
+}
+
+.tabs-right > .nav-tabs > li > a {
+ margin-left: -1px;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.tabs-right > .nav-tabs > li > a:hover {
+ border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.tabs-right > .nav-tabs .active > a,
+.tabs-right > .nav-tabs .active > a:hover {
+ border-color: #ddd #ddd #ddd transparent;
+ *border-left-color: #ffffff;
+}
+
+.nav > .disabled > a {
+ color: #999999;
+}
+
+.nav > .disabled > a:hover {
+ text-decoration: none;
+ cursor: default;
+ background-color: transparent;
+}
+
+.navbar {
+ *position: relative;
+ *z-index: 2;
+ margin-bottom: 20px;
+ overflow: visible;
+}
+
+.navbar-inner {
+ min-height: 40px;
+ padding-right: 20px;
+ padding-left: 20px;
+ background-color: #fafafa;
+ background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
+ background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
+ background-repeat: repeat-x;
+ border: 1px solid #d4d4d4;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
+ *zoom: 1;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+}
+
+.navbar-inner:before,
+.navbar-inner:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.navbar-inner:after {
+ clear: both;
+}
+
+.navbar .container {
+ width: auto;
+}
+
+.nav-collapse.collapse {
+ height: auto;
+ overflow: visible;
+}
+
+.navbar .brand {
+ display: block;
+ float: left;
+ padding: 10px 20px 10px;
+ margin-left: -20px;
+ font-size: 20px;
+ font-weight: 200;
+ color: #777777;
+ text-shadow: 0 1px 0 #ffffff;
+}
+
+.navbar .brand:hover {
+ text-decoration: none;
+}
+
+.navbar-text {
+ margin-bottom: 0;
+ line-height: 40px;
+ color: #777777;
+}
+
+.navbar-link {
+ color: #777777;
+}
+
+.navbar-link:hover {
+ color: #333333;
+}
+
+.navbar .divider-vertical {
+ height: 40px;
+ margin: 0 9px;
+ border-right: 1px solid #ffffff;
+ border-left: 1px solid #f2f2f2;
+}
+
+.navbar .btn,
+.navbar .btn-group {
+ margin-top: 5px;
+}
+
+.navbar .btn-group .btn,
+.navbar .input-prepend .btn,
+.navbar .input-append .btn {
+ margin-top: 0;
+}
+
+.navbar-form {
+ margin-bottom: 0;
+ *zoom: 1;
+}
+
+.navbar-form:before,
+.navbar-form:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.navbar-form:after {
+ clear: both;
+}
+
+.navbar-form input,
+.navbar-form select,
+.navbar-form .radio,
+.navbar-form .checkbox {
+ margin-top: 5px;
+}
+
+.navbar-form input,
+.navbar-form select,
+.navbar-form .btn {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.navbar-form input[type="image"],
+.navbar-form input[type="checkbox"],
+.navbar-form input[type="radio"] {
+ margin-top: 3px;
+}
+
+.navbar-form .input-append,
+.navbar-form .input-prepend {
+ margin-top: 5px;
+ white-space: nowrap;
+}
+
+.navbar-form .input-append input,
+.navbar-form .input-prepend input {
+ margin-top: 0;
+}
+
+.navbar-search {
+ position: relative;
+ float: left;
+ margin-top: 5px;
+ margin-bottom: 0;
+}
+
+.navbar-search .search-query {
+ padding: 4px 14px;
+ margin-bottom: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 1;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+
+.navbar-static-top {
+ position: static;
+ margin-bottom: 0;
+}
+
+.navbar-static-top .navbar-inner {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+ margin-bottom: 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-static-top .navbar-inner {
+ border-width: 0 0 1px;
+}
+
+.navbar-fixed-bottom .navbar-inner {
+ border-width: 1px 0 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-fixed-bottom .navbar-inner {
+ padding-right: 0;
+ padding-left: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+ width: 940px;
+}
+
+.navbar-fixed-top {
+ top: 0;
+}
+
+.navbar-fixed-top .navbar-inner,
+.navbar-static-top .navbar-inner {
+ -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+}
+
+.navbar-fixed-bottom .navbar-inner {
+ -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.navbar .nav {
+ position: relative;
+ left: 0;
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+}
+
+.navbar .nav.pull-right {
+ float: right;
+ margin-right: 0;
+}
+
+.navbar .nav > li {
+ float: left;
+}
+
+.navbar .nav > li > a {
+ float: none;
+ padding: 10px 15px 10px;
+ color: #777777;
+ text-decoration: none;
+ text-shadow: 0 1px 0 #ffffff;
+}
+
+.navbar .nav .dropdown-toggle .caret {
+ margin-top: 8px;
+}
+
+.navbar .nav > li > a:focus,
+.navbar .nav > li > a:hover {
+ color: #333333;
+ text-decoration: none;
+ background-color: transparent;
+}
+
+.navbar .nav > .active > a,
+.navbar .nav > .active > a:hover,
+.navbar .nav > .active > a:focus {
+ color: #555555;
+ text-decoration: none;
+ background-color: #e5e5e5;
+ -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+ -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+}
+
+.navbar .btn-navbar {
+ display: none;
+ float: right;
+ padding: 7px 10px;
+ margin-right: 5px;
+ margin-left: 5px;
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #ededed;
+ *background-color: #e5e5e5;
+ background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
+ background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
+ background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
+ background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
+ background-repeat: repeat-x;
+ border-color: #e5e5e5 #e5e5e5 #bfbfbf;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+}
+
+.navbar .btn-navbar:hover,
+.navbar .btn-navbar:active,
+.navbar .btn-navbar.active,
+.navbar .btn-navbar.disabled,
+.navbar .btn-navbar[disabled] {
+ color: #ffffff;
+ background-color: #e5e5e5;
+ *background-color: #d9d9d9;
+}
+
+.navbar .btn-navbar:active,
+.navbar .btn-navbar.active {
+ background-color: #cccccc \9;
+}
+
+.navbar .btn-navbar .icon-bar {
+ display: block;
+ width: 18px;
+ height: 2px;
+ background-color: #f5f5f5;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ border-radius: 1px;
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.btn-navbar .icon-bar + .icon-bar {
+ margin-top: 3px;
+}
+
+.navbar .nav > li > .dropdown-menu:before {
+ position: absolute;
+ top: -7px;
+ left: 9px;
+ display: inline-block;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-left: 7px solid transparent;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ content: '';
+}
+
+.navbar .nav > li > .dropdown-menu:after {
+ position: absolute;
+ top: -6px;
+ left: 10px;
+ display: inline-block;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #ffffff;
+ border-left: 6px solid transparent;
+ content: '';
+}
+
+.navbar-fixed-bottom .nav > li > .dropdown-menu:before {
+ top: auto;
+ bottom: -7px;
+ border-top: 7px solid #ccc;
+ border-bottom: 0;
+ border-top-color: rgba(0, 0, 0, 0.2);
+}
+
+.navbar-fixed-bottom .nav > li > .dropdown-menu:after {
+ top: auto;
+ bottom: -6px;
+ border-top: 6px solid #ffffff;
+ border-bottom: 0;
+}
+
+.navbar .nav li.dropdown > a:hover .caret {
+ border-top-color: #555555;
+ border-bottom-color: #555555;
+}
+
+.navbar .nav li.dropdown.open > .dropdown-toggle,
+.navbar .nav li.dropdown.active > .dropdown-toggle,
+.navbar .nav li.dropdown.open.active > .dropdown-toggle {
+ color: #555555;
+ background-color: #e5e5e5;
+}
+
+.navbar .nav li.dropdown > .dropdown-toggle .caret {
+ border-top-color: #777777;
+ border-bottom-color: #777777;
+}
+
+.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
+.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
+.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
+ border-top-color: #555555;
+ border-bottom-color: #555555;
+}
+
+.navbar .pull-right > li > .dropdown-menu,
+.navbar .nav > li > .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu:before,
+.navbar .nav > li > .dropdown-menu.pull-right:before {
+ right: 12px;
+ left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu:after,
+.navbar .nav > li > .dropdown-menu.pull-right:after {
+ right: 13px;
+ left: auto;
+}
+
+.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
+.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
+ right: 100%;
+ left: auto;
+ margin-right: -1px;
+ margin-left: 0;
+ -webkit-border-radius: 6px 0 6px 6px;
+ -moz-border-radius: 6px 0 6px 6px;
+ border-radius: 6px 0 6px 6px;
+}
+
+.navbar-inverse .navbar-inner {
+ background-color: #1b1b1b;
+ background-image: -moz-linear-gradient(top, #222222, #111111);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
+ background-image: -webkit-linear-gradient(top, #222222, #111111);
+ background-image: -o-linear-gradient(top, #222222, #111111);
+ background-image: linear-gradient(to bottom, #222222, #111111);
+ background-repeat: repeat-x;
+ border-color: #252525;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
+}
+
+.navbar-inverse .brand,
+.navbar-inverse .nav > li > a {
+ color: #999999;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.navbar-inverse .brand:hover,
+.navbar-inverse .nav > li > a:hover {
+ color: #ffffff;
+}
+
+.navbar-inverse .brand {
+ color: #999999;
+}
+
+.navbar-inverse .navbar-text {
+ color: #999999;
+}
+
+.navbar-inverse .nav > li > a:focus,
+.navbar-inverse .nav > li > a:hover {
+ color: #ffffff;
+ background-color: transparent;
+}
+
+.navbar-inverse .nav .active > a,
+.navbar-inverse .nav .active > a:hover,
+.navbar-inverse .nav .active > a:focus {
+ color: #ffffff;
+ background-color: #111111;
+}
+
+.navbar-inverse .navbar-link {
+ color: #999999;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #ffffff;
+}
+
+.navbar-inverse .divider-vertical {
+ border-right-color: #222222;
+ border-left-color: #111111;
+}
+
+.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
+ color: #ffffff;
+ background-color: #111111;
+}
+
+.navbar-inverse .nav li.dropdown > a:hover .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
+ border-top-color: #999999;
+ border-bottom-color: #999999;
+}
+
+.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
+.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
+.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+.navbar-inverse .navbar-search .search-query {
+ color: #ffffff;
+ background-color: #515151;
+ border-color: #111111;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+ -webkit-transition: none;
+ -moz-transition: none;
+ -o-transition: none;
+ transition: none;
+}
+
+.navbar-inverse .navbar-search .search-query:-moz-placeholder {
+ color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
+ color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
+ color: #cccccc;
+}
+
+.navbar-inverse .navbar-search .search-query:focus,
+.navbar-inverse .navbar-search .search-query.focused {
+ padding: 5px 15px;
+ color: #333333;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #ffffff;
+ border: 0;
+ outline: 0;
+ -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+}
+
+.navbar-inverse .btn-navbar {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #0e0e0e;
+ *background-color: #040404;
+ background-image: -moz-linear-gradient(top, #151515, #040404);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
+ background-image: -webkit-linear-gradient(top, #151515, #040404);
+ background-image: -o-linear-gradient(top, #151515, #040404);
+ background-image: linear-gradient(to bottom, #151515, #040404);
+ background-repeat: repeat-x;
+ border-color: #040404 #040404 #000000;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.navbar-inverse .btn-navbar:hover,
+.navbar-inverse .btn-navbar:active,
+.navbar-inverse .btn-navbar.active,
+.navbar-inverse .btn-navbar.disabled,
+.navbar-inverse .btn-navbar[disabled] {
+ color: #ffffff;
+ background-color: #040404;
+ *background-color: #000000;
+}
+
+.navbar-inverse .btn-navbar:active,
+.navbar-inverse .btn-navbar.active {
+ background-color: #000000 \9;
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin: 0 0 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.breadcrumb > li {
+ display: inline-block;
+ *display: inline;
+ text-shadow: 0 1px 0 #ffffff;
+ *zoom: 1;
+}
+
+.breadcrumb > li > .divider {
+ padding: 0 5px;
+ color: #ccc;
+}
+
+.breadcrumb > .active {
+ color: #999999;
+}
+
+.pagination {
+ margin: 20px 0;
+}
+
+.pagination ul {
+ display: inline-block;
+ *display: inline;
+ margin-bottom: 0;
+ margin-left: 0;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ *zoom: 1;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.pagination ul > li {
+ display: inline;
+}
+
+.pagination ul > li > a,
+.pagination ul > li > span {
+ float: left;
+ padding: 4px 12px;
+ line-height: 20px;
+ text-decoration: none;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+ border-left-width: 0;
+}
+
+.pagination ul > li > a:hover,
+.pagination ul > .active > a,
+.pagination ul > .active > span {
+ background-color: #f5f5f5;
+}
+
+.pagination ul > .active > a,
+.pagination ul > .active > span {
+ color: #999999;
+ cursor: default;
+}
+
+.pagination ul > .disabled > span,
+.pagination ul > .disabled > a,
+.pagination ul > .disabled > a:hover {
+ color: #999999;
+ cursor: default;
+ background-color: transparent;
+}
+
+.pagination ul > li:first-child > a,
+.pagination ul > li:first-child > span {
+ border-left-width: 1px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.pagination ul > li:last-child > a,
+.pagination ul > li:last-child > span {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-bottomright: 4px;
+}
+
+.pagination-centered {
+ text-align: center;
+}
+
+.pagination-right {
+ text-align: right;
+}
+
+.pagination-large ul > li > a,
+.pagination-large ul > li > span {
+ padding: 11px 19px;
+ font-size: 17.5px;
+}
+
+.pagination-large ul > li:first-child > a,
+.pagination-large ul > li:first-child > span {
+ -webkit-border-bottom-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+ -webkit-border-top-left-radius: 6px;
+ border-top-left-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ -moz-border-radius-topleft: 6px;
+}
+
+.pagination-large ul > li:last-child > a,
+.pagination-large ul > li:last-child > span {
+ -webkit-border-top-right-radius: 6px;
+ border-top-right-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ -moz-border-radius-topright: 6px;
+ -moz-border-radius-bottomright: 6px;
+}
+
+.pagination-mini ul > li:first-child > a,
+.pagination-small ul > li:first-child > a,
+.pagination-mini ul > li:first-child > span,
+.pagination-small ul > li:first-child > span {
+ -webkit-border-bottom-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+ -webkit-border-top-left-radius: 3px;
+ border-top-left-radius: 3px;
+ -moz-border-radius-bottomleft: 3px;
+ -moz-border-radius-topleft: 3px;
+}
+
+.pagination-mini ul > li:last-child > a,
+.pagination-small ul > li:last-child > a,
+.pagination-mini ul > li:last-child > span,
+.pagination-small ul > li:last-child > span {
+ -webkit-border-top-right-radius: 3px;
+ border-top-right-radius: 3px;
+ -webkit-border-bottom-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ -moz-border-radius-topright: 3px;
+ -moz-border-radius-bottomright: 3px;
+}
+
+.pagination-small ul > li > a,
+.pagination-small ul > li > span {
+ padding: 2px 10px;
+ font-size: 11.9px;
+}
+
+.pagination-mini ul > li > a,
+.pagination-mini ul > li > span {
+ padding: 0 6px;
+ font-size: 10.5px;
+}
+
+.pager {
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+ *zoom: 1;
+}
+
+.pager:before,
+.pager:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.pager:after {
+ clear: both;
+}
+
+.pager li {
+ display: inline;
+}
+
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+
+.pager li > a:hover {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > span {
+ color: #999999;
+ cursor: default;
+ background-color: #fff;
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000000;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+}
+
+.modal-backdrop,
+.modal-backdrop.fade.in {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.modal {
+ position: fixed;
+ top: 10%;
+ left: 50%;
+ z-index: 1050;
+ width: 560px;
+ margin-left: -280px;
+ background-color: #ffffff;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ *border: 1px solid #999;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ outline: none;
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+}
+
+.modal.fade {
+ top: -25%;
+ -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
+ -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
+ -o-transition: opacity 0.3s linear, top 0.3s ease-out;
+ transition: opacity 0.3s linear, top 0.3s ease-out;
+}
+
+.modal.fade.in {
+ top: 10%;
+}
+
+.modal-header {
+ padding: 9px 15px;
+ border-bottom: 1px solid #eee;
+}
+
+.modal-header .close {
+ margin-top: 2px;
+}
+
+.modal-header h3 {
+ margin: 0;
+ line-height: 30px;
+}
+
+.modal-body {
+ position: relative;
+ max-height: 400px;
+ padding: 15px;
+ overflow-y: auto;
+}
+
+.modal-form {
+ margin-bottom: 0;
+}
+
+.modal-footer {
+ padding: 14px 15px 15px;
+ margin-bottom: 0;
+ text-align: right;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+ *zoom: 1;
+ -webkit-box-shadow: inset 0 1px 0 #ffffff;
+ -moz-box-shadow: inset 0 1px 0 #ffffff;
+ box-shadow: inset 0 1px 0 #ffffff;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.modal-footer:after {
+ clear: both;
+}
+
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ padding: 5px;
+ font-size: 11px;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ visibility: visible;
+}
+
+.tooltip.in {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.tooltip.top {
+ margin-top: -3px;
+}
+
+.tooltip.right {
+ margin-left: 3px;
+}
+
+.tooltip.bottom {
+ margin-top: 3px;
+}
+
+.tooltip.left {
+ margin-left: -3px;
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #ffffff;
+ text-align: center;
+ white-space: nowrap;
+ text-decoration: none;
+ background-color: #000000;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-top-color: #000000;
+ border-width: 5px 5px 0;
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-right-color: #000000;
+ border-width: 5px 5px 5px 0;
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-left-color: #000000;
+ border-width: 5px 0 5px 5px;
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-bottom-color: #000000;
+ border-width: 0 5px 5px;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ width: 236px;
+ padding: 1px;
+ text-align: left;
+ white-space: normal;
+ background-color: #ffffff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+
+.popover.top {
+ margin-top: -10px;
+}
+
+.popover.right {
+ margin-left: 10px;
+}
+
+.popover.bottom {
+ margin-top: 10px;
+}
+
+.popover.left {
+ margin-left: -10px;
+}
+
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+.popover .arrow,
+.popover .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.popover .arrow {
+ border-width: 11px;
+}
+
+.popover .arrow:after {
+ border-width: 10px;
+ content: "";
+}
+
+.popover.top .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, 0.25);
+ border-bottom-width: 0;
+}
+
+.popover.top .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ border-top-color: #ffffff;
+ border-bottom-width: 0;
+}
+
+.popover.right .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, 0.25);
+ border-left-width: 0;
+}
+
+.popover.right .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ border-right-color: #ffffff;
+ border-left-width: 0;
+}
+
+.popover.bottom .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+ border-top-width: 0;
+}
+
+.popover.bottom .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ border-bottom-color: #ffffff;
+ border-top-width: 0;
+}
+
+.popover.left .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, 0.25);
+ border-right-width: 0;
+}
+
+.popover.left .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ border-left-color: #ffffff;
+ border-right-width: 0;
+}
+
+.thumbnails {
+ margin-left: -20px;
+ list-style: none;
+ *zoom: 1;
+}
+
+.thumbnails:before,
+.thumbnails:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.thumbnails:after {
+ clear: both;
+}
+
+.row-fluid .thumbnails {
+ margin-left: 0;
+}
+
+.thumbnails > li {
+ float: left;
+ margin-bottom: 20px;
+ margin-left: 20px;
+}
+
+.thumbnail {
+ display: block;
+ padding: 4px;
+ line-height: 20px;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+
+a.thumbnail:hover {
+ border-color: #0088cc;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
+
+.thumbnail > img {
+ display: block;
+ max-width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #555555;
+}
+
+.media,
+.media-body {
+ overflow: hidden;
+ *overflow: visible;
+ zoom: 1;
+}
+
+.media,
+.media .media {
+ margin-top: 15px;
+}
+
+.media:first-child {
+ margin-top: 0;
+}
+
+.media-object {
+ display: block;
+}
+
+.media-heading {
+ margin: 0 0 5px;
+}
+
+.media .pull-left {
+ margin-right: 10px;
+}
+
+.media .pull-right {
+ margin-left: 10px;
+}
+
+.media-list {
+ margin-left: 0;
+ list-style: none;
+}
+
+.label,
+.badge {
+ display: inline-block;
+ padding: 2px 4px;
+ font-size: 11.844px;
+ font-weight: bold;
+ line-height: 14px;
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #999999;
+}
+
+.label {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.badge {
+ padding-right: 9px;
+ padding-left: 9px;
+ -webkit-border-radius: 9px;
+ -moz-border-radius: 9px;
+ border-radius: 9px;
+}
+
+.label:empty,
+.badge:empty {
+ display: none;
+}
+
+a.label:hover,
+a.badge:hover {
+ color: #ffffff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.label-important,
+.badge-important {
+ background-color: #b94a48;
+}
+
+.label-important[href],
+.badge-important[href] {
+ background-color: #953b39;
+}
+
+.label-warning,
+.badge-warning {
+ background-color: #f89406;
+}
+
+.label-warning[href],
+.badge-warning[href] {
+ background-color: #c67605;
+}
+
+.label-success,
+.badge-success {
+ background-color: #468847;
+}
+
+.label-success[href],
+.badge-success[href] {
+ background-color: #356635;
+}
+
+.label-info,
+.badge-info {
+ background-color: #3a87ad;
+}
+
+.label-info[href],
+.badge-info[href] {
+ background-color: #2d6987;
+}
+
+.label-inverse,
+.badge-inverse {
+ background-color: #333333;
+}
+
+.label-inverse[href],
+.badge-inverse[href] {
+ background-color: #1a1a1a;
+}
+
+.btn .label,
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+.btn-mini .label,
+.btn-mini .badge {
+ top: 0;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-moz-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-ms-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 40px 0;
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f7f7f7;
+ background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
+ background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
+ background-repeat: repeat-x;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+}
+
+.progress .bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ color: #ffffff;
+ text-align: center;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #0e90d2;
+ background-image: -moz-linear-gradient(top, #149bdf, #0480be);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
+ background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
+ background-image: -o-linear-gradient(top, #149bdf, #0480be);
+ background-image: linear-gradient(to bottom, #149bdf, #0480be);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transition: width 0.6s ease;
+ -moz-transition: width 0.6s ease;
+ -o-transition: width 0.6s ease;
+ transition: width 0.6s ease;
+}
+
+.progress .bar + .bar {
+ -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+}
+
+.progress-striped .bar {
+ background-color: #149bdf;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ -moz-background-size: 40px 40px;
+ -o-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+
+.progress.active .bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -moz-animation: progress-bar-stripes 2s linear infinite;
+ -ms-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-danger .bar,
+.progress .bar-danger {
+ background-color: #dd514c;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
+}
+
+.progress-danger.progress-striped .bar,
+.progress-striped .bar-danger {
+ background-color: #ee5f5b;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-success .bar,
+.progress .bar-success {
+ background-color: #5eb95e;
+ background-image: -moz-linear-gradient(top, #62c462, #57a957);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
+ background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+ background-image: -o-linear-gradient(top, #62c462, #57a957);
+ background-image: linear-gradient(to bottom, #62c462, #57a957);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
+}
+
+.progress-success.progress-striped .bar,
+.progress-striped .bar-success {
+ background-color: #62c462;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-info .bar,
+.progress .bar-info {
+ background-color: #4bb1cf;
+ background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
+}
+
+.progress-info.progress-striped .bar,
+.progress-striped .bar-info {
+ background-color: #5bc0de;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.progress-warning .bar,
+.progress .bar-warning {
+ background-color: #faa732;
+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+ background-image: -o-linear-gradient(top, #fbb450, #f89406);
+ background-image: linear-gradient(to bottom, #fbb450, #f89406);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+}
+
+.progress-warning.progress-striped .bar,
+.progress-striped .bar-warning {
+ background-color: #fbb450;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.accordion {
+ margin-bottom: 20px;
+}
+
+.accordion-group {
+ margin-bottom: 2px;
+ border: 1px solid #e5e5e5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.accordion-heading {
+ border-bottom: 0;
+}
+
+.accordion-heading .accordion-toggle {
+ display: block;
+ padding: 8px 15px;
+}
+
+.accordion-toggle {
+ cursor: pointer;
+}
+
+.accordion-inner {
+ padding: 9px 15px;
+ border-top: 1px solid #e5e5e5;
+}
+
+.carousel {
+ position: relative;
+ margin-bottom: 20px;
+ line-height: 1;
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: 0.6s ease-in-out left;
+ -moz-transition: 0.6s ease-in-out left;
+ -o-transition: 0.6s ease-in-out left;
+ transition: 0.6s ease-in-out left;
+}
+
+.carousel-inner > .item > img {
+ display: block;
+ line-height: 1;
+}
+
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+
+.carousel-inner > .active {
+ left: 0;
+}
+
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.carousel-inner > .next {
+ left: 100%;
+}
+
+.carousel-inner > .prev {
+ left: -100%;
+}
+
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+
+.carousel-inner > .active.left {
+ left: -100%;
+}
+
+.carousel-inner > .active.right {
+ left: 100%;
+}
+
+.carousel-control {
+ position: absolute;
+ top: 40%;
+ left: 15px;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ font-size: 60px;
+ font-weight: 100;
+ line-height: 30px;
+ color: #ffffff;
+ text-align: center;
+ background: #222222;
+ border: 3px solid #ffffff;
+ -webkit-border-radius: 23px;
+ -moz-border-radius: 23px;
+ border-radius: 23px;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.carousel-control.right {
+ right: 15px;
+ left: auto;
+}
+
+.carousel-control:hover {
+ color: #ffffff;
+ text-decoration: none;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 15px;
+ background: #333333;
+ background: rgba(0, 0, 0, 0.75);
+}
+
+.carousel-caption h4,
+.carousel-caption p {
+ line-height: 20px;
+ color: #ffffff;
+}
+
+.carousel-caption h4 {
+ margin: 0 0 5px;
+}
+
+.carousel-caption p {
+ margin-bottom: 0;
+}
+
+.hero-unit {
+ padding: 60px;
+ margin-bottom: 30px;
+ font-size: 18px;
+ font-weight: 200;
+ line-height: 30px;
+ color: inherit;
+ background-color: #eeeeee;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.hero-unit h1 {
+ margin-bottom: 0;
+ font-size: 60px;
+ line-height: 1;
+ letter-spacing: -1px;
+ color: inherit;
+}
+
+.hero-unit li {
+ line-height: 30px;
+}
+
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.hide {
+ display: none;
+}
+
+.show {
+ display: block;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.affix {
+ position: fixed;
+}
diff --git a/app/assets/stylesheets/basic/font-awesome.css.erb b/app/assets/stylesheets/basic/font-awesome.css.erb
new file mode 100644
index 000000000..fb299380e
--- /dev/null
+++ b/app/assets/stylesheets/basic/font-awesome.css.erb
@@ -0,0 +1,31 @@
+/* Font Awesome 3.0
+ the iconic font designed for use with Twitter Bootstrap
+ -------------------------------------------------------
+ The full suite of pictographic icons, examples, and documentation
+ can be found at: http://fortawesome.github.com/Font-Awesome/
+
+ License
+ -------------------------------------------------------
+ • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL
+ • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License -
+ http://opensource.org/licenses/mit-license.html
+ • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
+ • Attribution is no longer required in Font Awesome 3.0, but much appreciated:
+ "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome"
+
+ Contact
+ -------------------------------------------------------
+ Email: dave@davegandy.com
+ Twitter: http://twitter.com/fortaweso_me
+ Work: Lead Product Designer @ http://kyruus.com
+
+ */
+@font-face {
+ font-family: 'FontAwesome';
+ src:url(<%= asset_path'fontawesome-webfont.eot' %>);
+ src:url(<%= asset_path'fontawesome-webfont.eot?#iefix' %>) format('embedded-opentype'),
+ url(<%= asset_path'fontawesome-webfont.woff' %>) format('woff'),
+ url(<%= asset_path'fontawesome-webfont.ttf' %>) format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/basic/global.css.erb b/app/assets/stylesheets/basic/global.css.erb
new file mode 100644
index 000000000..06ee03b31
--- /dev/null
+++ b/app/assets/stylesheets/basic/global.css.erb
@@ -0,0 +1,421 @@
+a:focus {
+ outline: thin dotted;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+/**:link,
+*:visited,
+*:hover,
+*:active,
+*:focus,
+.transition {
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+.dont-move, #sidebar, #main-wrap, #sidebar-menu .scroller, .sub-nav-block-list {
+ -webkit-transition: none;
+ -moz-transition: none;
+ -o-transition: none;
+ transition: none;
+}*/
+::selection {
+ color: white;
+ background: black;
+ text-shadow: none !important;
+}
+/*::-webkit-scrollbar {
+ width: 10px;
+}
+::-webkit-scrollbar-track {
+ background: #FFF;
+ -webkit-box-shadow: inset 1px 1px 2px rgba(0,0,0,0.1);
+}
+::-webkit-scrollbar-thumb {
+ background: #CCC;
+ -webkit-box-shadow: inset 1px 1px 2px rgba(0,0,0,0.2);
+}
+::-webkit-scrollbar-thumb:hover {
+ background: #AAA;
+}
+::-webkit-scrollbar-thumb:active {
+ background: #888;
+ -webkit-box-shadow: inset 1px 1px 2px rgba(0,0,0,0.3);
+}*/
+body {
+ background-color: #F3F3F3;
+ font-family: 'Chivo';
+}
+body.modalBlur > nav,
+body.modalBlur > section {
+ -webkit-filter: blur(5px);
+}
+.label {
+ font-family: 'Quicksand';
+}
+.btn {
+ font-family: 'Varela Round';
+ letter-spacing: -.4px;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+label,
+legend {
+ font-family: 'Raleway';
+}
+
+
+/* Sidebar */
+#sidebar {
+ top: 0;
+ left: 0;
+ bottom: 0;
+ min-width: 61px;
+ z-index: 1030;
+ position: fixed;
+ background-color: #171717;
+ -webkit-box-shadow: inset -1px 0px 10px #000000;
+ -moz-box-shadow: inset -1px 0px 10px #000000;
+ -o-box-shadow: inset -1px 0px 10px #000000;
+ box-shadow: inset -1px 0px 10px #000000;
+}
+#sidebar #sidebar-menu {
+ position: absolute;
+ top: 88px;
+ bottom: 0;
+ z-index: 1;
+ display: block;
+ width: 61px;
+ /*overflow: auto;*/
+}
+#sidebar .scroller {
+ position: absolute;z-index:1;
+ /*-webkit-touch-callout:none;*/
+ -webkit-tap-highlight-color:rgba(0,0,0,0);
+ width:100%;
+ padding:0;
+}
+#sidebar-menu .content,
+#sidebar-menu .pane {
+ margin-top: 88px;
+}
+#sidebar .sidebar-nav {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ font-size: 1em;
+ width: 61px;
+ text-align: center;
+ list-style: none;
+}
+#sidebar > h2.position {
+ top: 40px;
+ margin: 0;
+ width: 61px;
+ color: #FFFFFF;
+ font-weight: normal;
+ font-size: 2.4em;
+ line-height: 47px;
+ line-height: 46px\9;
+ text-align: center;
+ position: absolute;
+ background-color: #08c;
+ background-image: -moz-linear-gradient(top, #08c, #006091);
+ background-image: -ms-linear-gradient(top, #08c, #006091);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#006091));
+ background-image: -webkit-linear-gradient(top, #08c, #006091);
+ background-image: -o-linear-gradient(top, #08c, #006091);
+ background-image: linear-gradient(top, #08c, #006091);
+ -webkit-box-shadow: 0px 1px 0px #333333;
+ -moz-box-shadow: 0px 1px 0px #333333;
+ -o-box-shadow: 0px 1px 0px #333333;
+ box-shadow: 0px 1px 0px #333333;
+}
+#sidebar > h2.position:after {
+ left: 50%;
+ bottom: 0;
+ width: 0px;
+ height: 0px;
+ content: " ";
+ display: block;
+ margin-left: -6px;
+ position: absolute;
+ margin-bottom: -1px;
+ border-style: solid;
+ border-width: 0 6px 6px 6px;
+ border-color: transparent transparent #171717 transparent;
+}
+#sidebar > h2.position a {
+ color: #FFFFFF;
+ padding: 6px 6px 5px;
+ text-decoration: none;
+ -webkit-text-shadow: 0px -1px 0px #333333;
+ -moz-text-shadow: 0px -1px 0px #333333;
+ -o-text-shadow: 0px -1px 0px #333333;
+ text-shadow: 0px -1px 0px #333333;
+}
+#sidebar .sidebar-nav > li {
+ min-width: 61px;
+ height: 45px;
+}
+#sidebar .sidebar-nav > li.active {
+ font-size: 1.2em;
+}
+#sidebar .sidebar-nav > li.active .sub-nav-block {
+ display: block;
+}
+#sidebar .sidebar-nav > li.active > a > span {
+ color: #FFFFFF;
+ cursor: pointer;
+ -webkit-text-shadow: 0px -1px 0px #636363;
+ -moz-text-shadow: 0px -1px 0px #636363;
+ -o-text-shadow: 0px -1px 0px #636363;
+ text-shadow: 0px -1px 0px #636363;
+}
+#sidebar .sidebar-nav > li > a > span {
+ padding: 10px;
+ color: #B0B0B0;
+ display: block;
+ -webkit-text-shadow: 0px 1px 0px #000000;
+ -moz-text-shadow: 0px 1px 0px #000000;
+ -o-text-shadow: 0px 1px 0px #000000;
+ text-shadow: 0px 1px 0px #000000;
+}
+#sidebar .sidebar-nav > li > a > span > i {
+ font-size: 1.7em;
+}
+#sidebar .sub-nav-block-list {
+ top: 40px;
+ bottom: 0;
+ left: 61px;
+ position: fixed;
+ text-align: left;
+ /*overflow: hidden;*/
+ -webkit-box-shadow: -1px 0px 10px rgba(33, 33, 33, .8);
+ -moz-box-shadow: -1px 0px 10px rgba(33, 33, 33, .8);
+ -o-box-shadow: -1px 0px 10px rgba(33, 33, 33, .8);
+ box-shadow: -1px 0px 10px rgba(33, 33, 33, .8);
+}
+#sidebar .sub-nav-block-list .sub-nav-block {
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ display: none;
+ position: absolute;
+ background-color: #0088CC;
+}
+#sidebar .sub-nav-block-list .sub-nav-block.show {
+ display: block;
+ overflow: hidden;
+}
+#sidebar .sub-nav-block-list .sub-nav-block:before {
+ bottom: 0px;
+ right: -20px;
+ opacity: .1;
+ color: #FFFFFF;
+ font-size: 14em;
+ line-height: 150px;
+ position: absolute;
+ display: none\9; /* 用IE的去死 */
+}
+#sidebar .sub-nav-block-list .sub-nav-block h4 {
+ color: #FFFFFF;
+ margin-top: 15px;
+ font-weight: normal;
+ padding: 0 15px 10px;
+ border-bottom: 1px solid #1C9BCC;
+}
+#sidebar .sub-nav-block-list .sub-nav-block > ul {
+ position: relative;
+ z-index: 2;
+}
+#sidebar .sub-nav-block-list .sub-nav-block a {
+ line-height: 25px;
+ color: #90D0FA;
+ -webkit-text-shadow: none;
+ -moz-text-shadow: none;
+ -o-text-shadow: none;
+ text-shadow: none;
+}
+#sidebar .sub-nav-block-list .sub-nav-block li.active a {
+ background-color: #EEEEEE;
+ color: #0081c2;
+ position: relative;
+}
+#sidebar .sub-nav-block-list .sub-nav-block li.active a:after {
+ top: 50%;
+ right: 10px;
+ width: auto;
+ height: auto;
+ display: inline;
+ content: "\e0d4";
+ font-size: 1.3em;
+ position: absolute;
+ font-style: normal;
+ font-weight: normal;
+ margin-top: -0.75em;
+ font-family: 'entypo';
+ text-decoration: inherit;
+}
+#sidebar .sub-nav-block-list .sub-nav-block a:hover {
+ color: #0081c2;
+}
+#sidebar .sub-nav-arrow {
+ left: 53px;
+ top: -10px;
+ width: 0px;
+ height: 0px;
+ z-index: -1;
+ position: absolute;
+ border-style: solid;
+ border-width: 8px 8px 8px 0;
+ border-color: transparent #0088CC transparent transparent;
+ display: none\9; /* 用IE的去死 */
+}
+
+
+/* Vertical Scrollbar */
+#sidebar .myScrollbarV {
+ position: absolute;
+ z-index: 100;
+ width: 2px;
+ bottom: 2px;
+ top: 2px;
+ left: 1px
+}
+
+#sidebar .myScrollbarV > div {
+ position: absolute;
+ z-index: 100;
+ width: 100%;
+ border-radius: 1px;
+ background-color: rgba(0, 136, 204, .3);
+}
+
+
+/* Main Wrap */
+#main-wrap {
+ padding-top: 40px;
+}
+#main-wrap .wrap-inner {
+ padding: 60px 20px 20px;
+}
+#main-wrap .wrap-inner.initial {
+ padding: 20px 20px 20px;
+}
+
+
+/* Member Filter */
+#member-filter.modal {
+ width: 80%;
+ margin-left: -40%;
+}
+#member-filter.modal.fade.in {
+ top: 50px;
+}
+#member-filter .modal-body {
+ max-height: 425px;
+}
+#member-filter .modal-body form {
+ margin-bottom: 0px;
+}
+#member-filter .modal-body form fieldset {
+ min-height: 140px;
+}
+#member-filter .modal-body .radio.inline,
+#member-filter .modal-body .checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ min-width: 100px;
+ margin-left: 0;
+}
+#member-filter .modal-body .form-actions {
+ margin: 20px 0 0;
+ padding: 10px 0 0;
+ background-color: transparent;
+ text-align: right;
+}
+#member-filter .modal-body .form-actions.condition {
+ margin: 10px 0 0 195px;
+}
+#member-filter .member-filter-options {
+ float: left;
+ display: inline-block;
+ width: 175px;
+ min-height: 400px;
+ margin-right: 10px;
+ padding: 0 10px 0 0;
+}
+#member-filter .member-filter-options select {
+ width: 165px;
+}
+#member-filter .member-filter-options .btn {
+ display: block;
+}
+#member-filter .member-filter-result {
+ padding-left: 15px;
+ min-height: 370px;
+ width: auto;
+}
+
+/* Edit link in structure */
+.editable {
+ position: relative;
+ padding: 0px;
+ margin: 0px;
+ min-height: 50px;
+}
+.edit_link {
+ display: none;
+}
+.edit_link a {
+ position: absolute;
+ z-index: 10;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ text-indent: -9999px;
+ background: url(<%= asset_path 'editicon.png' %>) no-repeat center center rgba(255,255,255,.8);
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 1);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 1);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 1);
+}
+.editable:hover .edit_link {
+ display: block;
+}
+
+
+/* IE go die */
+:root #sidebar .sub-nav-block:before {
+ display: block\9;
+}
+
+
+/* Responsive */
+@media (max-width: 767px) {
+ body {
+ padding: 0;
+ }
+ #member-filter.modal {
+ width: auto;
+ margin-left: auto;
+ }
+}
+
+@media (max-width: 480px) {
+ /* Main Wrap */
+ #main-wrap .wrap-inner {
+ padding: 20px 0;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/basic/icon.css.erb b/app/assets/stylesheets/basic/icon.css.erb
new file mode 100644
index 000000000..f510a6e2e
--- /dev/null
+++ b/app/assets/stylesheets/basic/icon.css.erb
@@ -0,0 +1,715 @@
+[data-icons]:before {
+ font-family: 'entypo';
+ content: attr(data-icons);
+ speak: none;
+ font-weight: normal;
+ -webkit-font-smoothing: antialiased;
+}
+@font-face {
+ font-family: 'entypo';
+ src:url(<%= asset_path 'entypo.eot' %>);
+ src:url(<%= asset_path 'entypo.eot?#iefix' %>) format('embedded-opentype'),
+ url(<%= asset_path 'entypo.svg#entypo' %>) format('svg'),
+ url(<%= asset_path 'entypo.woff' %>) format('woff'),
+ url(<%= asset_path 'entypo.ttf' %>) format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
+/* Font Awesome styles
+ ------------------------------------------------------- */
+/* includes sprites.less reset */
+.ui-icon,
+[class^="icon-"],
+[class*=" icon-"] {
+ font-family: 'FontAwesome';
+}
+.ui-icon,
+[class^="icons-"],
+[class*=" icons-"] {
+ font-family: 'entypo';
+}
+.ui-icon,
+[class^="icon"],
+[class*=" icon"] {
+ font-weight: normal;
+ font-style: normal;
+ text-decoration: inherit;
+ display: inline-block;
+ width: auto;
+ height: auto;
+ margin-top: 0;
+ line-height: normal;
+ vertical-align: baseline;
+ background-image: none !important;
+ background-position: 0% 0%;
+ background-repeat: repeat;
+
+
+}
+.ui-icon,
+[class^="icon"]:before,
+[class*=" icon"]:before {
+ text-decoration: inherit;
+ display: inline-block;
+ speak: none;
+}
+/* makes sure icons active on rollover in links */
+a .ui-icon,
+a [class^="icon"],
+a [class*=" icon"] {
+ display: inline-block;
+}
+/* makes the font 33% larger relative to the icon container */
+.icon-large:before {
+ vertical-align: -10%;
+ font-size: 1.3333333333333333em;
+}
+.btn .ui-icon
+.nav .ui-icon,
+.btn [class^="icon"],
+.nav [class^="icon"],
+.btn [class*=" icon"],
+.nav [class*=" icon"] {
+ display: inline;
+ /* keeps button heights with and without icons the same */
+ line-height: .6em;
+}
+.btn .ui-icon.icon-spin,
+.nav .ui-icon.icon-spin,
+.btn [class^="icon"].icon-spin,
+.nav [class^="icon"].icon-spin,
+.btn [class*=" icon"].icon-spin,
+.nav [class*=" icon"].icon-spin {
+ display: inline-block;
+}
+li .ui-icon,
+li [class^="icon"],
+li [class*=" icon"] {
+ display: inline-block;
+ width: 1.25em;
+ text-align: center;
+}
+li .ui-icon.icon-large,
+li [class^="icon"].icon-large,
+li [class*=" icon"].icon-large {
+ /* increased font size for icon-large */
+
+ width: 1.5625em;
+}
+ul.icons {
+ list-style-type: none;
+ text-indent: -0.75em;
+}
+ul.icons li .ui-icon,
+ul.icons li [class^="icon"],
+ul.icons li [class*=" icon"] {
+ width: .75em;
+}
+.icon-muted {
+ color: #eeeeee;
+}
+.icon-border {
+ border: solid 1px #eeeeee;
+ padding: .2em .25em .15em;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.icon-2x {
+ font-size: 2em;
+}
+.icon-2x.icon-border {
+ border-width: 2px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.icon-3x {
+ font-size: 3em;
+}
+.icon-3x.icon-border {
+ border-width: 3px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.icon-4x {
+ font-size: 4em;
+}
+.icon-4x.icon-border {
+ border-width: 4px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+[class^="icon"].pull-left,
+[class*=" icon"].pull-left {
+ margin-right: .35em;
+}
+[class^="icon"].pull-right,
+[class*=" icon"].pull-right {
+ margin-left: .35em;
+}
+.btn [class^="icon"].pull-left.icon-2x,
+.btn [class*=" icon"].pull-left.icon-2x,
+.btn [class^="icon"].pull-right.icon-2x,
+.btn [class*=" icon"].pull-right.icon-2x {
+ margin-top: .35em;
+}
+.btn [class^="icon"].icon-spin.icon-large,
+.btn [class*=" icon"].icon-spin.icon-large {
+ height: .75em;
+}
+.btn.btn-small [class^="icon"].pull-left.icon-2x,
+.btn.btn-small [class*=" icon"].pull-left.icon-2x,
+.btn.btn-small [class^="icon"].pull-right.icon-2x,
+.btn.btn-small [class*=" icon"].pull-right.icon-2x {
+ margin-top: .45em;
+}
+.btn.btn-large [class^="icon"].pull-left.icon-2x,
+.btn.btn-large [class*=" icon"].pull-left.icon-2x,
+.btn.btn-large [class^="icon"].pull-right.icon-2x,
+.btn.btn-large [class*=" icon"].pull-right.icon-2x {
+ margin-top: .2em;
+}
+.icon-spin {
+ display: inline-block;
+ -webkit-animation: spin 2s infinite linear;
+ -moz-animation: spin 2s infinite linear;
+ -o-animation: spin 2s infinite linear;
+ animation: spin 2s infinite linear;
+}
+@-moz-keyframes spin {
+ 0% { -moz-transform: rotate(0deg); }
+ 100% { -moz-transform: rotate(359deg); }
+}
+@-webkit-keyframes spin {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(359deg); }
+}
+@-o-keyframes spin {
+ 0% { -o-transform: rotate(0deg); }
+ 100% { -o-transform: rotate(359deg); }
+}
+@-ms-keyframes spin {
+ 0% { -ms-transform: rotate(0deg); }
+ 100% { -ms-transform: rotate(359deg); }
+}
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(359deg); }
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.icon-glass:before { content: "\f000"; }
+.icon-music:before { content: "\f001"; }
+.icon-search:before { content: "\f002"; }
+.icon-envelope:before { content: "\f003"; }
+.icon-heart:before { content: "\f004"; }
+.icon-star:before { content: "\f005"; }
+.icon-star-empty:before { content: "\f006"; }
+.icon-user:before { content: "\f007"; }
+.icon-film:before { content: "\f008"; }
+.icon-th-large:before { content: "\f009"; }
+.icon-th:before { content: "\f00a"; }
+.icon-th-list:before { content: "\f00b"; }
+.icon-ok:before { content: "\f00c"; }
+.icon-remove:before { content: "\f00d"; }
+.icon-zoom-in:before { content: "\f00e"; }
+
+.icon-zoom-out:before { content: "\f010"; }
+.icon-off:before { content: "\f011"; }
+.icon-signal:before { content: "\f012"; }
+.icon-cog:before { content: "\f013"; }
+.icon-trash:before { content: "\f014"; }
+.icon-home:before { content: "\f015"; }
+.icon-file:before { content: "\f016"; }
+.icon-time:before { content: "\f017"; }
+.icon-road:before { content: "\f018"; }
+.icon-download-alt:before { content: "\f019"; }
+.icon-download:before { content: "\f01a"; }
+.icon-upload:before { content: "\f01b"; }
+.icon-inbox:before { content: "\f01c"; }
+.icon-play-circle:before { content: "\f01d"; }
+.icon-repeat:before { content: "\f01e"; }
+
+/* \f020 doesn't work in Safari. all shifted one down */
+.icon-refresh:before { content: "\f021"; }
+.icon-list-alt:before { content: "\f022"; }
+.icon-lock:before { content: "\f023"; }
+.icon-flag:before { content: "\f024"; }
+.icon-headphones:before { content: "\f025"; }
+.icon-volume-off:before { content: "\f026"; }
+.icon-volume-down:before { content: "\f027"; }
+.icon-volume-up:before { content: "\f028"; }
+.icon-qrcode:before { content: "\f029"; }
+.icon-barcode:before { content: "\f02a"; }
+.icon-tag:before { content: "\f02b"; }
+.icon-tags:before { content: "\f02c"; }
+.icon-book:before { content: "\f02d"; }
+.icon-bookmark:before { content: "\f02e"; }
+.icon-print:before { content: "\f02f"; }
+
+.icon-camera:before { content: "\f030"; }
+.icon-font:before { content: "\f031"; }
+.icon-bold:before { content: "\f032"; }
+.icon-italic:before { content: "\f033"; }
+.icon-text-height:before { content: "\f034"; }
+.icon-text-width:before { content: "\f035"; }
+.icon-align-left:before { content: "\f036"; }
+.icon-align-center:before { content: "\f037"; }
+.icon-align-right:before { content: "\f038"; }
+.icon-align-justify:before { content: "\f039"; }
+.icon-list:before { content: "\f03a"; }
+.icon-indent-left:before { content: "\f03b"; }
+.icon-indent-right:before { content: "\f03c"; }
+.icon-facetime-video:before { content: "\f03d"; }
+.icon-picture:before { content: "\f03e"; }
+
+.icon-pencil:before { content: "\f040"; }
+.icon-map-marker:before { content: "\f041"; }
+.icon-adjust:before { content: "\f042"; }
+.icon-tint:before { content: "\f043"; }
+.icon-edit:before { content: "\f044"; }
+.icon-share:before { content: "\f045"; }
+.icon-check:before { content: "\f046"; }
+.icon-move:before { content: "\f047"; }
+.icon-step-backward:before { content: "\f048"; }
+.icon-fast-backward:before { content: "\f049"; }
+.icon-backward:before { content: "\f04a"; }
+.icon-play:before { content: "\f04b"; }
+.icon-pause:before { content: "\f04c"; }
+.icon-stop:before { content: "\f04d"; }
+.icon-forward:before { content: "\f04e"; }
+
+.icon-fast-forward:before { content: "\f050"; }
+.icon-step-forward:before { content: "\f051"; }
+.icon-eject:before { content: "\f052"; }
+.icon-chevron-left:before { content: "\f053"; }
+.icon-chevron-right:before { content: "\f054"; }
+.icon-plus-sign:before { content: "\f055"; }
+.icon-minus-sign:before { content: "\f056"; }
+.icon-remove-sign:before { content: "\f057"; }
+.icon-ok-sign:before { content: "\f058"; }
+.icon-question-sign:before { content: "\f059"; }
+.icon-info-sign:before { content: "\f05a"; }
+.icon-screenshot:before { content: "\f05b"; }
+.icon-remove-circle:before { content: "\f05c"; }
+.icon-ok-circle:before { content: "\f05d"; }
+.icon-ban-circle:before { content: "\f05e"; }
+
+.icon-arrow-left:before { content: "\f060"; }
+.icon-arrow-right:before { content: "\f061"; }
+.icon-arrow-up:before { content: "\f062"; }
+.icon-arrow-down:before { content: "\f063"; }
+.icon-share-alt:before { content: "\f064"; }
+.icon-resize-full:before { content: "\f065"; }
+.icon-resize-small:before { content: "\f066"; }
+.icon-plus:before { content: "\f067"; }
+.icon-minus:before { content: "\f068"; }
+.icon-asterisk:before { content: "\f069"; }
+.icon-exclamation-sign:before { content: "\f06a"; }
+.icon-gift:before { content: "\f06b"; }
+.icon-leaf:before { content: "\f06c"; }
+.icon-fire:before { content: "\f06d"; }
+.icon-eye-open:before { content: "\f06e"; }
+
+.icon-eye-close:before { content: "\f070"; }
+.icon-warning-sign:before { content: "\f071"; }
+.icon-plane:before { content: "\f072"; }
+.icon-calendar:before { content: "\f073"; }
+.icon-random:before { content: "\f074"; }
+.icon-comment:before { content: "\f075"; }
+.icon-magnet:before { content: "\f076"; }
+.icon-chevron-up:before { content: "\f077"; }
+.icon-chevron-down:before { content: "\f078"; }
+.icon-retweet:before { content: "\f079"; }
+.icon-shopping-cart:before { content: "\f07a"; }
+.icon-folder-close:before { content: "\f07b"; }
+.icon-folder-open:before { content: "\f07c"; }
+.icon-resize-vertical:before { content: "\f07d"; }
+.icon-resize-horizontal:before { content: "\f07e"; }
+
+.icon-bar-chart:before { content: "\f080"; }
+.icon-twitter-sign:before { content: "\f081"; }
+.icon-facebook-sign:before { content: "\f082"; }
+.icon-camera-retro:before { content: "\f083"; }
+.icon-key:before { content: "\f084"; }
+.icon-cogs:before { content: "\f085"; }
+.icon-comments:before { content: "\f086"; }
+.icon-thumbs-up:before { content: "\f087"; }
+.icon-thumbs-down:before { content: "\f088"; }
+.icon-star-half:before { content: "\f089"; }
+.icon-heart-empty:before { content: "\f08a"; }
+.icon-signout:before { content: "\f08b"; }
+.icon-linkedin-sign:before { content: "\f08c"; }
+.icon-pushpin:before { content: "\f08d"; }
+.icon-external-link:before { content: "\f08e"; }
+
+.icon-signin:before { content: "\f090"; }
+.icon-trophy:before { content: "\f091"; }
+.icon-github-sign:before { content: "\f092"; }
+.icon-upload-alt:before { content: "\f093"; }
+.icon-lemon:before { content: "\f094"; }
+.icon-phone:before { content: "\f095"; }
+.icon-check-empty:before { content: "\f096"; }
+.icon-bookmark-empty:before { content: "\f097"; }
+.icon-phone-sign:before { content: "\f098"; }
+.icon-twitter:before { content: "\f099"; }
+.icon-facebook:before { content: "\f09a"; }
+.icon-github:before { content: "\f09b"; }
+.icon-unlock:before { content: "\f09c"; }
+.icon-credit-card:before { content: "\f09d"; }
+.icon-rss:before { content: "\f09e"; }
+
+.icon-hdd:before { content: "\f0a0"; }
+.icon-bullhorn:before { content: "\f0a1"; }
+.icon-bell:before { content: "\f0a2"; }
+.icon-certificate:before { content: "\f0a3"; }
+.icon-hand-right:before { content: "\f0a4"; }
+.icon-hand-left:before { content: "\f0a5"; }
+.icon-hand-up:before { content: "\f0a6"; }
+.icon-hand-down:before { content: "\f0a7"; }
+.icon-circle-arrow-left:before { content: "\f0a8"; }
+.icon-circle-arrow-right:before { content: "\f0a9"; }
+.icon-circle-arrow-up:before { content: "\f0aa"; }
+.icon-circle-arrow-down:before { content: "\f0ab"; }
+.icon-globe:before { content: "\f0ac"; }
+.icon-wrench:before { content: "\f0ad"; }
+.icon-tasks:before { content: "\f0ae"; }
+
+.icon-filter:before { content: "\f0b0"; }
+.icon-briefcase:before { content: "\f0b1"; }
+.icon-fullscreen:before { content: "\f0b2"; }
+
+.icon-group:before { content: "\f0c0"; }
+.icon-link:before { content: "\f0c1"; }
+.icon-cloud:before { content: "\f0c2"; }
+.icon-beaker:before { content: "\f0c3"; }
+.icon-cut:before { content: "\f0c4"; }
+.icon-copy:before { content: "\f0c5"; }
+.icon-paper-clip:before { content: "\f0c6"; }
+.icon-save:before { content: "\f0c7"; }
+.icon-sign-blank:before { content: "\f0c8"; }
+.icon-reorder:before { content: "\f0c9"; }
+.icon-list-ul:before { content: "\f0ca"; }
+.icon-list-ol:before { content: "\f0cb"; }
+.icon-strikethrough:before { content: "\f0cc"; }
+.icon-underline:before { content: "\f0cd"; }
+.icon-table:before { content: "\f0ce"; }
+
+.icon-magic:before { content: "\f0d0"; }
+.icon-truck:before { content: "\f0d1"; }
+.icon-pinterest:before { content: "\f0d2"; }
+.icon-pinterest-sign:before { content: "\f0d3"; }
+.icon-google-plus-sign:before { content: "\f0d4"; }
+.icon-google-plus:before { content: "\f0d5"; }
+.icon-money:before { content: "\f0d6"; }
+.icon-caret-down:before { content: "\f0d7"; }
+.icon-caret-up:before { content: "\f0d8"; }
+.icon-caret-left:before { content: "\f0d9"; }
+.icon-caret-right:before { content: "\f0da"; }
+.icon-columns:before { content: "\f0db"; }
+.icon-sort:before { content: "\f0dc"; }
+.icon-sort-down:before { content: "\f0dd"; }
+.icon-sort-up:before { content: "\f0de"; }
+
+.icon-envelope-alt:before { content: "\f0e0"; }
+.icon-linkedin:before { content: "\f0e1"; }
+.icon-undo:before { content: "\f0e2"; }
+.icon-legal:before { content: "\f0e3"; }
+.icon-dashboard:before { content: "\f0e4"; }
+.icon-comment-alt:before { content: "\f0e5"; }
+.icon-comments-alt:before { content: "\f0e6"; }
+.icon-bolt:before { content: "\f0e7"; }
+.icon-sitemap:before { content: "\f0e8"; }
+.icon-umbrella:before { content: "\f0e9"; }
+.icon-paste:before { content: "\f0ea"; }
+.icon-lightbulb:before { content: "\f0eb"; }
+.icon-exchange:before { content: "\f0ec"; }
+.icon-cloud-download:before { content: "\f0ed"; }
+.icon-cloud-upload:before { content: "\f0ee"; }
+
+.icon-user-md:before { content: "\f0f0"; }
+.icon-stethoscope:before { content: "\f0f1"; }
+.icon-suitcase:before { content: "\f0f2"; }
+.icon-bell-alt:before { content: "\f0f3"; }
+.icon-coffee:before { content: "\f0f4"; }
+.icon-food:before { content: "\f0f5"; }
+.icon-file-alt:before { content: "\f0f6"; }
+.icon-building:before { content: "\f0f7"; }
+.icon-hospital:before { content: "\f0f8"; }
+.icon-ambulance:before { content: "\f0f9"; }
+.icon-medkit:before { content: "\f0fa"; }
+.icon-fighter-jet:before { content: "\f0fb"; }
+.icon-beer:before { content: "\f0fc"; }
+.icon-h-sign:before { content: "\f0fd"; }
+.icon-plus-sign-alt:before { content: "\f0fe"; }
+
+.icon-double-angle-left:before { content: "\f100"; }
+.icon-double-angle-right:before { content: "\f101"; }
+.icon-double-angle-up:before { content: "\f102"; }
+.icon-double-angle-down:before { content: "\f103"; }
+.icon-angle-left:before { content: "\f104"; }
+.icon-angle-right:before { content: "\f105"; }
+.icon-angle-up:before { content: "\f106"; }
+.icon-angle-down:before { content: "\f107"; }
+.icon-desktop:before { content: "\f108"; }
+.icon-laptop:before { content: "\f109"; }
+.icon-tablet:before { content: "\f10a"; }
+.icon-mobile-phone:before { content: "\f10b"; }
+.icon-circle-blank:before { content: "\f10c"; }
+.icon-quote-left:before { content: "\f10d"; }
+.icon-quote-right:before { content: "\f10e"; }
+
+.icon-spinner:before { content: "\f110"; }
+.icon-circle:before { content: "\f111"; }
+.icon-reply:before { content: "\f112"; }
+.icon-github-alt:before { content: "\f113"; }
+.icon-folder-close-alt:before { content: "\f114"; }
+.icon-folder-open-alt:before { content: "\f115"; }
+
+.icons-phone:before { content: "\e000"; }
+.icons-mobile:before { content: "\e001"; }
+.icons-mouse:before { content: "\e002"; }
+.icons-directions:before { content: "\e003"; }
+.icons-mail:before { content: "\e004"; }
+.icons-paperplane:before { content: "\e005"; }
+.icons-pencil:before { content: "\e006"; }
+.icons-feather:before { content: "\e007"; }
+.icons-paperclip:before { content: "\e008"; }
+.icons-drawer:before { content: "\e009"; }
+.icons-reply:before { content: "\e00a"; }
+.icons-reply-all:before { content: "\e00b"; }
+.icons-forward:before { content: "\e00c"; }
+.icons-user:before { content: "\e00d"; }
+.icons-users:before { content: "\e00e"; }
+.icons-user-add:before { content: "\e00f"; }
+.icons-vcard:before { content: "\e010"; }
+.icons-export:before { content: "\e011"; }
+.icons-location:before { content: "\e012"; }
+.icons-map:before { content: "\e013"; }
+.icons-compass:before { content: "\e014"; }
+.icons-location-2:before { content: "\e015"; }
+.icons-target:before { content: "\e016"; }
+.icons-share:before { content: "\e017"; }
+.icons-sharable:before { content: "\e018"; }
+.icons-heart:before { content: "\e019"; }
+.icons-heart-2:before { content: "\e01a"; }
+.icons-star:before { content: "\e01b"; }
+.icons-star-2:before { content: "\e01c"; }
+.icons-thumbs-up:before { content: "\e01d"; }
+.icons-thumbs-down:before { content: "\e01e"; }
+.icons-chat:before { content: "\e01f"; }
+.icons-comment:before { content: "\e020"; }
+.icons-quote:before { content: "\e021"; }
+.icons-house:before { content: "\e022"; }
+.icons-popup:before { content: "\e023"; }
+.icons-search:before { content: "\e024"; }
+.icons-flashlight:before { content: "\e025"; }
+.icons-printer:before { content: "\e026"; }
+.icons-bell:before { content: "\e027"; }
+.icons-link:before { content: "\e028"; }
+.icons-flag:before { content: "\e029"; }
+.icons-cog:before { content: "\e02a"; }
+.icons-tools:before { content: "\e02b"; }
+.icons-trophy:before { content: "\e02c"; }
+.icons-tag:before { content: "\e02d"; }
+.icons-camera:before { content: "\e02e"; }
+.icons-megaphone:before { content: "\e02f"; }
+.icons-moon:before { content: "\e030"; }
+.icons-palette:before { content: "\e031"; }
+.icons-leaf:before { content: "\e032"; }
+.icons-music:before { content: "\e033"; }
+.icons-music-2:before { content: "\e034"; }
+.icons-new:before { content: "\e035"; }
+.icons-graduation:before { content: "\e036"; }
+.icons-book:before { content: "\e037"; }
+.icons-newspaper:before { content: "\e038"; }
+.icons-bag:before { content: "\e039"; }
+.icons-airplane:before { content: "\e03a"; }
+.icons-lifebuoy:before { content: "\e03b"; }
+.icons-eye:before { content: "\e03c"; }
+.icons-clock:before { content: "\e03d"; }
+.icons-microphone:before { content: "\e03e"; }
+.icons-calendar:before { content: "\e03f"; }
+.icons-bolt:before { content: "\e040"; }
+.icons-thunder:before { content: "\e041"; }
+.icons-droplet:before { content: "\e042"; }
+.icons-cd:before { content: "\e043"; }
+.icons-briefcase:before { content: "\e044"; }
+.icons-air:before { content: "\e045"; }
+.icons-hourglass:before { content: "\e046"; }
+.icons-gauge:before { content: "\e047"; }
+.icons-language:before { content: "\e048"; }
+.icons-network:before { content: "\e049"; }
+.icons-key:before { content: "\e04a"; }
+.icons-battery:before { content: "\e04b"; }
+.icons-bucket:before { content: "\e04c"; }
+.icons-magnet:before { content: "\e04d"; }
+.icons-drive:before { content: "\e04e"; }
+.icons-cup:before { content: "\e04f"; }
+.icons-rocket:before { content: "\e050"; }
+.icons-brush:before { content: "\e051"; }
+.icons-suitcase:before { content: "\e052"; }
+.icons-cone:before { content: "\e053"; }
+.icons-earth:before { content: "\e054"; }
+.icons-keyboard:before { content: "\e055"; }
+.icons-browser:before { content: "\e056"; }
+.icons-publish:before { content: "\e057"; }
+.icons-progress-3:before { content: "\e058"; }
+.icons-progress-2:before { content: "\e059"; }
+.icons-brogress-1:before { content: "\e05a"; }
+.icons-progress-0:before { content: "\e05b"; }
+.icons-sun:before { content: "\e05c"; }
+.icons-sun-2:before { content: "\e05d"; }
+.icons-adjust:before { content: "\e05e"; }
+.icons-code:before { content: "\e05f"; }
+.icons-screen:before { content: "\e060"; }
+.icons-infinity:before { content: "\e061"; }
+.icons-light-bulb:before { content: "\e062"; }
+.icons-credit-card:before { content: "\e063"; }
+.icons-database:before { content: "\e064"; }
+.icons-voicemail:before { content: "\e065"; }
+.icons-clipboard:before { content: "\e066"; }
+.icons-cart:before { content: "\e067"; }
+.icons-box:before { content: "\e068"; }
+.icons-ticket:before { content: "\e069"; }
+.icons-rss:before { content: "\e06a"; }
+.icons-signal:before { content: "\e06b"; }
+.icons-thermometer:before { content: "\e06c"; }
+.icons-droplets:before { content: "\e06d"; }
+.icons-untitled:before { content: "\e06e"; }
+.icons-statistics:before { content: "\e06f"; }
+.icons-pie:before { content: "\e070"; }
+.icons-bars:before { content: "\e071"; }
+.icons-graph:before { content: "\e072"; }
+.icons-lock:before { content: "\e073"; }
+.icons-lock-open:before { content: "\e074"; }
+.icons-logout:before { content: "\e075"; }
+.icons-login:before { content: "\e076"; }
+.icons-checkmark:before { content: "\e077"; }
+.icons-cross:before { content: "\e078"; }
+.icons-minus:before { content: "\e079"; }
+.icons-plus:before { content: "\e07a"; }
+.icons-cross-2:before { content: "\e07b"; }
+.icons-minus-2:before { content: "\e07c"; }
+.icons-plus-2:before { content: "\e07d"; }
+.icons-cross-3:before { content: "\e07e"; }
+.icons-minus-3:before { content: "\e07f"; }
+.icons-plus-3:before { content: "\e080"; }
+.icons-erase:before { content: "\e081"; }
+.icons-blocked:before { content: "\e082"; }
+.icons-info:before { content: "\e083"; }
+.icons-info-2:before { content: "\e084"; }
+.icons-question:before { content: "\e085"; }
+.icons-help:before { content: "\e086"; }
+.icons-warning:before { content: "\e087"; }
+.icons-cycle:before { content: "\e088"; }
+.icons-cw:before { content: "\e089"; }
+.icons-ccw:before { content: "\e08a"; }
+.icons-shuffle:before { content: "\e08b"; }
+.icons-arrow:before { content: "\e08c"; }
+.icons-arrow-2:before { content: "\e08d"; }
+.icons-retweet:before { content: "\e08e"; }
+.icons-loop:before { content: "\e08f"; }
+.icons-history:before { content: "\e090"; }
+.icons-back:before { content: "\e091"; }
+.icons-switch:before { content: "\e092"; }
+.icons-list:before { content: "\e093"; }
+.icons-add-to-list:before { content: "\e094"; }
+.icons-layout:before { content: "\e095"; }
+.icons-list-2:before { content: "\e096"; }
+.icons-text:before { content: "\e097"; }
+.icons-text-2:before { content: "\e098"; }
+.icons-document:before { content: "\e099"; }
+.icons-docs:before { content: "\e09a"; }
+.icons-landscape:before { content: "\e09b"; }
+.icons-pictures:before { content: "\e09c"; }
+.icons-video:before { content: "\e09d"; }
+.icons-music-3:before { content: "\e09e"; }
+.icons-folder:before { content: "\e09f"; }
+.icons-archive:before { content: "\e0a0"; }
+.icons-trash:before { content: "\e0a1"; }
+.icons-upload:before { content: "\e0a2"; }
+.icons-download:before { content: "\e0a3"; }
+.icons-disk:before { content: "\e0a4"; }
+.icons-install:before { content: "\e0a5"; }
+.icons-cloud:before { content: "\e0a6"; }
+.icons-upload-2:before { content: "\e0a7"; }
+.icons-bookmark:before { content: "\e0a8"; }
+.icons-bookmarks:before { content: "\e0a9"; }
+.icons-book-2:before { content: "\e0aa"; }
+.icons-play:before { content: "\e0ab"; }
+.icons-pause:before { content: "\e0ac"; }
+.icons-record:before { content: "\e0ad"; }
+.icons-stop:before { content: "\e0ae"; }
+.icons-next:before { content: "\e0af"; }
+.icons-previous:before { content: "\e0b0"; }
+.icons-first:before { content: "\e0b1"; }
+.icons-last:before { content: "\e0b2"; }
+.icons-resize-enlarge:before { content: "\e0b3"; }
+.icons-resize-shrink:before { content: "\e0b4"; }
+.icons-volume:before { content: "\e0b5"; }
+.icons-sound:before { content: "\e0b6"; }
+.icons-mute:before { content: "\e0b7"; }
+.icons-flow-cascade:before { content: "\e0b8"; }
+.icons-flow-branch:before { content: "\e0b9"; }
+.icons-flow-tree:before { content: "\e0ba"; }
+.icons-flow-line:before { content: "\e0bb"; }
+.icons-flow-parallel:before { content: "\e0bc"; }
+.icons-arrow-left:before { content: "\e0bd"; }
+.icons-arrow-down:before { content: "\e0be"; }
+.icons-arrow-up--upload:before { content: "\e0bf"; }
+.icons-arrow-right:before { content: "\e0c0"; }
+.icons-arrow-left-2:before { content: "\e0c1"; }
+.icons-arrow-down-2:before { content: "\e0c2"; }
+.icons-arrow-up:before { content: "\e0c3"; }
+.icons-arrow-right-2:before { content: "\e0c4"; }
+.icons-arrow-left-3:before { content: "\e0c5"; }
+.icons-arrow-down-3:before { content: "\e0c6"; }
+.icons-arrow-up-2:before { content: "\e0c7"; }
+.icons-arrow-right-3:before { content: "\e0c8"; }
+.icons-arrow-left-4:before { content: "\e0c9"; }
+.icons-arrow-down-4:before { content: "\e0ca"; }
+.icons-arrow-up-3:before { content: "\e0cb"; }
+.icons-arrow-right-4:before { content: "\e0cc"; }
+.icons-arrow-left-5:before { content: "\e0cd"; }
+.icons-arrow-down-5:before { content: "\e0ce"; }
+.icons-arrow-up-4:before { content: "\e0cf"; }
+.icons-arrow-right-5:before { content: "\e0d0"; }
+.icons-arrow-left-6:before { content: "\e0d1"; }
+.icons-arrow-down-6:before { content: "\e0d2"; }
+.icons-arrow-up-5:before { content: "\e0d3"; }
+.icons-arrow-right-6:before { content: "\e0d4"; }
+.icons-arrow-left-7:before { content: "\e0d5"; }
+.icons-arrow-down-7:before { content: "\e0d6"; }
+.icons-arrow-up-6:before { content: "\e0d7"; }
+.icons-untitled-2:before { content: "\e0d8"; }
+.icons-arrow-left-8:before { content: "\e0d9"; }
+.icons-arrow-down-8:before { content: "\e0da"; }
+.icons-arrow-up-7:before { content: "\e0db"; }
+.icons-arrow-right-7:before { content: "\e0dc"; }
+.icons-menu:before { content: "\e0dd"; }
+.icons-ellipsis:before { content: "\e0de"; }
+.icons-dots:before { content: "\e0df"; }
+.icons-dot:before { content: "\e0e0"; }
+.icons-cc:before { content: "\e0e1"; }
+.icons-cc-by:before { content: "\e0e2"; }
+.icons-cc-nc:before { content: "\e0e3"; }
+.icons-cc-nc-eu:before { content: "\e0e4"; }
+.icons-cc-nc-jp:before { content: "\e0e5"; }
+.icons-cc-sa:before { content: "\e0e6"; }
+.icons-cc-nd:before { content: "\e0e7"; }
+.icons-cc-pd:before { content: "\e0e8"; }
+.icons-cc-zero:before { content: "\e0e9"; }
+.icons-cc-share:before { content: "\e0ea"; }
+.icons-cc-share-2:before { content: "\e0eb"; }
+.icons-daniel-bruce:before { content: "\e0ec"; }
+.icons-daniel-bruce-2:before { content: "\e0ed"; }
diff --git a/app/assets/stylesheets/basic/nanoscroller.css b/app/assets/stylesheets/basic/nanoscroller.css
new file mode 100644
index 000000000..251cc1c0c
--- /dev/null
+++ b/app/assets/stylesheets/basic/nanoscroller.css
@@ -0,0 +1,64 @@
+/** initial setup **/
+.nano {
+ position : relative;
+ width : 100%;
+ height : 100%;
+ overflow : hidden;
+}
+.nano .content {
+ position : absolute;
+ overflow : scroll;
+ overflow-x : hidden;
+ top : 0;
+ right : 0;
+ bottom : 0;
+ left : 0;
+}
+.nano .content:focus {
+ outline: thin dotted;
+}
+.nano .content::-webkit-scrollbar {
+ visibility: hidden;
+}
+.has-scrollbar .content::-webkit-scrollbar {
+ visibility: visible;
+}
+.nano > .pane {
+ /*background : rgba(0,0,0,.25);*/
+ position : absolute;
+ width : 10px;
+ right : 0;
+ top : 0;
+ bottom : 0;
+ visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
+ opacity : .01;
+ -webkit-transition : .2s;
+ -moz-transition : .2s;
+ -o-transition : .2s;
+ transition : .2s;
+ -moz-border-radius : 5px;
+ -webkit-border-radius : 5px;
+ border-radius : 5px;
+}
+.nano > .pane > .slider {
+ background: #444;
+ background: rgba(0,0,0,.5);
+ position : relative;
+ margin : 0 1px;
+ -moz-border-radius : 3px;
+ -webkit-border-radius : 3px;
+ border-radius : 3px;
+}
+.nano:hover > .pane, .pane.active, .pane.flashed {
+ visibility : visible\9; /* Target only IE7 and IE8 with this hack */
+ opacity : 0.99;
+}
+#sidebar-menu > .pane {
+ width : 4px\9;
+ right : auto\9;
+ left : 0\9;
+ opacity : 1\9;
+}
+#sidebar-menu > .pane > .slider {
+ background: #0088cc\9;
+}
diff --git a/app/assets/stylesheets/basic/orbit_bar.css.erb b/app/assets/stylesheets/basic/orbit_bar.css.erb
new file mode 100644
index 000000000..8eb3336b3
--- /dev/null
+++ b/app/assets/stylesheets/basic/orbit_bar.css.erb
@@ -0,0 +1,224 @@
+#orbit-bar {
+ top: 0px;
+ left: -10px;
+ right: -10px;
+ height: 40px;
+ z-index: 1041;
+ position: fixed;
+ margin-bottom: 0;
+}
+#orbit-bar .orbitlogo {
+ width: 20px;
+ height: 20px;
+ background-size: 70%;
+ display: inline-block;
+ background-position: center;
+ background-repeat: no-repeat;
+ background-image: url(<%= asset_path 'orbit-logo.svg' %>);
+
+ /* For Suck IE */
+ background-image: url(<%= asset_path 'orbit-logo.png' %>)\9;
+}
+#orbit-bar.navbar .nav > li > a {
+ color: #EEE;
+ text-shadow: 0 -1px 0 #000;
+ border-right: 1px solid #363636;
+ box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3);
+}
+#orbit-bar.navbar .nav > li:first-child > a {
+ border-left: 1px solid #363636;
+ box-shadow: -1px 0px 0px rgba(0, 0, 0, 0.3), inset -1px 0px 0px rgba(0, 0, 0, 0.3);
+}
+#orbit-bar.navbar .nav > li > a:focus,
+#orbit-bar.navbar .nav > li > a:hover {
+ background-color: #0095CF;
+ text-shadow: 0 -1px 0 #014380;
+}
+#orbit-bar.navbar .nav li.dropdown.open > .dropdown-toggle,
+#orbit-bar.navbar .nav li.dropdown.active > .dropdown-toggle,
+#orbit-bar.navbar .nav li.dropdown.open.active > .dropdown-toggle {
+ background-color: #0095CF;
+ text-shadow: 0 -1px 0 #014380;
+}
+#orbit-bar .navbar-inner {
+ height: 40px;
+ border-width: 0;
+ min-height: 40px;
+ background-color: #333333;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+ -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.7);
+ -moz-box-shadow: 0 2px 10px rgba(0,0,0,.7);
+ box-shadow: 0 2px 10px rgba(0,0,0,.7);
+
+ /* Customization Color*/
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#1D1D1D));
+ background-image: -webkit-linear-gradient(top, #333333, #1D1D1D);
+ background-image: -moz-linear-gradient(top, #333333, #1D1D1D);
+ background-image: -o-linear-gradient(top, #333333, #1D1D1D);
+ background-image: linear-gradient(to bottom, #333333, #1D1D1D);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#1D1D1D', GradientType=0);
+}
+#orbit-bar .nav {
+ top: auto;
+ left: auto;
+ right: auto;
+ bottom: auto;
+}
+#orbit-bar .nav [class^="icon"],
+#orbit-bar .nav [class*=" icon"] {
+ font-size: 1.5em;
+}
+
+/*Login*/
+#orbit-bar .modal {
+ width: 460px;
+ margin-left: -230px;
+}
+#orbit-bar .modal-footer {
+ text-align: center;
+}
+#orbit-bar .modal .container {
+ width: 312px;
+ margin-bottom: 0;
+}
+#orbit-bar .modal [class^="icon"],
+#orbit-bar .modal [class*=" icon"] {
+ font-size: 1em;
+ color: #8D8D8D;
+}
+#orbit-bar .modal .input-append,
+#orbit-bar .modal .input-prepend {
+ margin-bottom: 15px;
+}
+
+/*Search*/
+#orbit-bar #search {
+ margin-bottom: 0;
+ position: relative;
+ padding: 8px 10px 0;
+ border-right: 1px solid #363636;
+ box-shadow: 1px 0px 0px rgba(0, 0, 0, 0.3);
+}
+#orbit-bar #search form {
+ margin-bottom: 8px;
+}
+#orbit-bar #search input[type="text"] {
+ height: 14px;
+ padding-left: 25px;
+ padding-right: 25px;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ -o-border-radius: 12px;
+ border-radius: 12px;
+
+ /* For Suck IE */
+ line-height: 16px\9;
+}
+#orbit-bar #search .icon-search,
+#orbit-bar #search .search-clear {
+ position: absolute;
+ color: #A3A3A3;
+ top: 14px;
+}
+#orbit-bar #search .icon-search {
+ left: 13px;
+ font-size: 1.2em;
+}
+#orbit-bar #search .search-clear {
+ right: 14px;
+ font-size: 1.3em;
+}
+#orbit-bar #search .search-clear:hover {
+ color: #333;
+ cursor:pointer;
+}
+
+/*User info*/
+#orbit-bar #orbit-user .user-pic {
+ width: 40px;
+ height: 40px;
+ margin: -12px 10px -10px -15px;
+}
+
+/*Language & flag*/
+#orbit-bar #orbit-language [class^="flag-"],
+#orbit-bar #orbit-language [class*=" flag-"] {
+ background-image: url(<%= asset_path 'flag.png' %>);
+ background-repeat: no-repeat;
+ background-color: transparent;
+ display: inline-block;
+ margin: -8px 0 -8px -5px;
+ width: 24px;
+ height: 24px;
+}
+#orbit-bar #orbit-language .dropdown-menu [class^="flag-"],
+#orbit-bar #orbit-language .dropdown-menu [class*=" flag-"] {
+ margin: -8px 10px -8px 0px;
+}
+.flag-bg {background-position: 0px 0px;}
+.flag-cs {background-position: -24px 0px;}
+.flag-da {background-position: -48px 0px;}
+.flag-de {background-position: -72px 0px;}
+.flag-en {background-position: 0px -24px;}
+.flag-es {background-position: -24px -24px;}
+.flag-fi {background-position: -48px -24px;}
+.flag-fr {background-position: -72px -24px;}
+.flag-hr {background-position: 0px -48px;}
+.flag-id {background-position: -24px -48px;}
+.flag-is {background-position: -48px -48px;}
+.flag-it {background-position: -72px -48px;}
+.flag-ja {background-position: 0px -72px;}
+.flag-kr {background-position: -24px -72px;}
+.flag-lt {background-position: -48px -72px;}
+.flag-lv {background-position: -72px -72px;}
+.flag-ms {background-position: 0px -96px;}
+.flag-nb {background-position: -24px -96px;}
+.flag-nl {background-position: -48px -96px;}
+.flag-pl {background-position: -72px -96px;}
+.flag-pt-BR {background-position: 0px -120px;}
+.flag-pt {background-position: -24px -120px;}
+.flag-ro {background-position: -48px -120px;}
+.flag-ru {background-position: -72px -120px;}
+.flag-sk {background-position: 0px -144px;}
+.flag-sl {background-position: -24px -144px;}
+.flag-sr {background-position: -48px -144px;}
+.flag-sv {background-position: -72px -144px;}
+.flag-th {background-position: 0px -168px;}
+.flag-tr {background-position: -24px -168px;}
+.flag-zh-CN {background-position: -48px -168px;}
+.flag-zh-TW {background-position: -72px -168px;}
+
+
+/* For Retina */
+@media screen and (-webkit-min-device-pixel-ratio: 2), screen and (max--moz-device-pixel-ratio: 2) {
+ #orbit-bar #orbit-language [class^="flag-"],
+ #orbit-bar #orbit-language [class*=" flag-"] {
+ background-image: url(<%= asset_path 'flag@2x.png' %>);
+ background-size: 96px 192px;
+ }
+}
+
+
+/* Responsive */
+@media (max-width: 480px) {
+ #orbit-bar .navbar-inner .nav {
+ margin-right: 0;
+ }
+ #orbit-bar #orbit-user span,
+ #orbit-bar #search {
+ display: none;
+ }
+ #orbit-bar #orbit-language [class^="flag-"],
+ #orbit-bar #orbit-language [class*=" flag-"] {
+ margin: -8px;
+ }
+ #orbit-bar #orbit-user .user-pic {
+ margin: -12px -15px -10px -15px;
+ }
+ #orbit-bar .modal {
+ width: 350px;
+ margin-left: -175px;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/icon-ie7.min.css b/app/assets/stylesheets/icon-ie7.min.css
new file mode 100644
index 000000000..ceff6261a
--- /dev/null
+++ b/app/assets/stylesheets/icon-ie7.min.css
@@ -0,0 +1,1514 @@
+/* Font Awesome 3.0
+ the iconic font designed for use with Twitter Bootstrap
+ -------------------------------------------------------
+ The full suite of pictographic icons, examples, and documentation
+ can be found at: http://fortawesome.github.com/Font-Awesome/
+
+ License
+ -------------------------------------------------------
+ • The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL
+ • Font Awesome CSS, LESS, and SASS files are licensed under the MIT License -
+ http://opensource.org/licenses/mit-license.html
+ • The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
+ • Attribution is no longer required in Font Awesome 3.0, but much appreciated:
+ "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome"
+
+ Contact
+ -------------------------------------------------------
+ Email: dave@davegandy.com
+ Twitter: http://twitter.com/fortaweso_me
+ Work: Lead Product Designer @ http://kyruus.com
+
+ */
+[class^="icon"],
+[class*=" icon"] {
+ padding-right: .3em;
+}
+.icon-large {
+ font-size: 1.3333333333333333em;
+ margin-top: -4px;
+ padding-top: 3px;
+ margin-bottom: -4px;
+ padding-bottom: 3px;
+ vertical-align: -20%;
+}
+.btn [class^="icon"],
+.nav [class^="icon"],
+.btn [class*=" icon"],
+.nav [class*=" icon"] {
+ vertical-align: inherit;
+ margin-top: -4px;
+ padding-top: 3px;
+ margin-bottom: -4px;
+ padding-bottom: 3px;
+ line-height: .9em;
+}
+a [class^="icon"],
+a [class*=" icon"] {
+ cursor: pointer;
+}
+ul.icons {
+ text-indent: -1.5em;
+ margin-left: 3em;
+}
+.icon-glass {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-music {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-search {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-envelope {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-heart {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-star {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-star-empty {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-user {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-film {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-th-large {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-th {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-th-list {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-ok {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-remove {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-zoom-in {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-zoom-out {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-off {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-signal {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-cog {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-trash {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-home {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-file {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-time {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-road {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-download-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-download {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-upload {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-inbox {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-play-circle {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-repeat {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-refresh {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-list-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-lock {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-flag {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-headphones {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-volume-off {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-volume-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-volume-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-qrcode {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-barcode {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-tag {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-tags {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-book {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bookmark {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-print {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-camera {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-font {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bold {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-italic {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-text-height {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-text-width {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-align-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-align-center {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-align-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-align-justify {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-list {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-indent-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-indent-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-facetime-video {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-picture {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-pencil {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-map-marker {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-adjust {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-tint {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-edit {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-share {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-check {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-move {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-step-backward {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-fast-backward {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-backward {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-play {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-pause {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-stop {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-forward {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-fast-forward {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-step-forward {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-eject {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-chevron-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-chevron-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-plus-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-minus-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-remove-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-ok-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-question-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-info-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-screenshot {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-remove-circle {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-ok-circle {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-ban-circle {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-arrow-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-arrow-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-arrow-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-arrow-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-share-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-resize-full {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-resize-small {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-plus {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-minus {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-asterisk {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-exclamation-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-gift {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-leaf {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-fire {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-eye-open {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-eye-close {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-warning-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-plane {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-calendar {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-random {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-comment {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-magnet {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-chevron-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-chevron-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-retweet {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-shopping-cart {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-folder-close {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-folder-open {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-resize-vertical {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-resize-horizontal {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bar-chart {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-twitter-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-facebook-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-camera-retro {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-key {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-cogs {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-comments {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-thumbs-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-thumbs-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-star-half {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-heart-empty {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-signout {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-linkedin-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-pushpin {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-external-link {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-signin {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-trophy {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-github-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-upload-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-lemon {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-phone {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-check-empty {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bookmark-empty {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-phone-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-twitter {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-facebook {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-github {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-unlock {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-credit-card {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-rss {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-hdd {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bullhorn {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bell {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-certificate {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-hand-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-hand-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-hand-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-hand-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-circle-arrow-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-circle-arrow-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-circle-arrow-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-circle-arrow-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-globe {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-wrench {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-tasks {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-filter {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-briefcase {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-fullscreen {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-group {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-link {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-cloud {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-beaker {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-cut {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-copy {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-paper-clip {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-save {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-sign-blank {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-reorder {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-list-ul {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-list-ol {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-strikethrough {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-underline {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-table {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-magic {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-truck {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-pinterest {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-pinterest-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-google-plus-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-google-plus {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-money {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-caret-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-caret-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-caret-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-caret-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-columns {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-sort {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-sort-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-sort-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-envelope-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-linkedin {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-undo {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-legal {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-dashboard {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-comment-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-comments-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bolt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-sitemap {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-umbrella {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-paste {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-lightbulb {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-exchange {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-cloud-download {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-cloud-upload {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-user-md {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-stethoscope {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-suitcase {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-bell-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-coffee {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-food {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-file-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-building {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-hospital {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-ambulance {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-medkit {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-fighter-jet {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-beer {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-h-sign {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-plus-sign-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-double-angle-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-double-angle-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-double-angle-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-double-angle-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-angle-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-angle-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-angle-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-angle-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-desktop {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-laptop {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-tablet {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-mobile-phone {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-circle-blank {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-quote-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-quote-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-spinner {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-circle {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-reply {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-github-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-folder-close-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icon-folder-open-alt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-phone {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-mobile {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-mouse {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-directions {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-mail {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-paperplane {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-pencil {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-feather {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-paperclip {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-drawer {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-reply {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-reply-all {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-forward {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-user {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-users {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-user-add {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-vcard {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-export {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-location {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-map {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-compass {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-location-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-target {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-share {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-sharable {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-heart {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-heart-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-star {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-star-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-thumbs-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-thumbs-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-chat {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-comment {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-quote {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-house {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-popup {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-search {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-flashlight {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-printer {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-bell {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-link {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-flag {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cog {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-tools {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-trophy {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-tag {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-camera {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-megaphone {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-moon {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-palette {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-leaf {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-music {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-music-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-new {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-graduation {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-book {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-newspaper {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-bag {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-airplane {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-lifebuoy {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-eye {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-clock {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-microphone {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-calendar {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-bolt {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-thunder {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-droplet {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cd {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-briefcase {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-air {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-hourglass {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-gauge {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-language {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-network {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-key {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-battery {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-bucket {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-magnet {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-drive {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cup {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-rocket {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-brush {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-suitcase {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cone {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-earth {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-keyboard {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-browser {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-publish {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-progress-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-progress-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-brogress-1 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-progress-0 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-sun {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-sun-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-adjust {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-code {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-screen {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-infinity {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-light-bulb {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-credit-card {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-database {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-voicemail {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-clipboard {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cart {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-box {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-ticket {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-rss {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-signal {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-thermometer {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-droplets {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-untitled {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-statistics {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-pie {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-bars {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-graph {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-lock {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-lock-open {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-logout {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-login {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-checkmark {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cross {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-minus {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-plus {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cross-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-minus-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-plus-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cross-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-minus-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-plus-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-erase {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-blocked {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-info {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-info-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-question {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-help {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-warning {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cycle {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cw {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-ccw {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-shuffle {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-retweet {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-loop {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-history {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-back {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-switch {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-list {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-add-to-list {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-layout {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-list-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-text {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-text-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-document {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-docs {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-landscape {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-pictures {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-video {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-music-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-folder {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-archive {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-trash {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-upload {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-download {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-disk {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-install {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cloud {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-upload-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-bookmark {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-bookmarks {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-book-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-play {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-pause {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-record {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-stop {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-next {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-previous {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-first {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-last {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-resize-enlarge {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-resize-shrink {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-volume {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-sound {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-mute {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-flow-cascade {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-flow-branch {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-flow-tree {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-flow-line {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-flow-parallel {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up--upload {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-right {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-right-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-right-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left-4 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down-4 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up-3 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-right-4 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left-5 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down-5 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up-4 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-right-5 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left-6 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down-6 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up-5 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-right-6 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left-7 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down-7 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up-6 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-untitled-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-left-8 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-down-8 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-up-7 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-arrow-right-7 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-menu {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-ellipsis {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-dots {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-dot {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-by {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-nc {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-nc-eu {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-nc-jp {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-sa {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-nd {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-pd {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-zero {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-share {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-cc-share-2 {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-daniel-bruce {
+ *zoom: expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
+}
+.icons-daniel-bruce-2 {
+ *zoom:expression(this.runtimeStyle['zoom'] = '1',this.innerHTML = ');
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/checkbox-card.css b/app/assets/stylesheets/lib/checkbox-card.css
new file mode 100644
index 000000000..9f1a3d1a6
--- /dev/null
+++ b/app/assets/stylesheets/lib/checkbox-card.css
@@ -0,0 +1,149 @@
+.mini-layout {
+
+}
+.mini-layout .mini-layout-sidebar {
+ position: relative;
+}
+.mini-layout .mini-layout-sidebar:before {
+ content: "";
+ height: 100%;
+ position: absolute;
+ right: -8.5555%;
+ border-right: 1px solid #e5e5e5;
+}
+.checkbox-card {
+ margin: 0;
+}
+.checkbox-card li {
+ position: relative;
+ list-style: none;
+ color: #FFFFFF;
+ width: 180px;
+ height: 40px;
+ margin: 0 10px 10px 0;
+ float: left;
+ display: inline-block;
+ background-color: #cccccc;
+ overflow: hidden;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+.checkbox-card li.mark {
+ width: 0;
+ height: 0;
+ padding: 0;
+ margin: 0;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+ visibility: hidden;
+}
+.checkbox-card li:hover {
+ background-color: #0088cc;
+}
+.checkbox-card li:after {
+ content: "";
+ display: block;
+ clear: both;
+ height: 0;
+ visibility: hidden;
+}
+.checkbox-card li.active:before {
+ -webkit-text-size-adjust : none;
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ color: #FFF;
+ text-decoration: inherit;
+ content: "\f00c";
+ position: absolute;
+ right: 0px;
+ top: 0px;
+ line-height: 14px;
+ text-indent: 10px;
+ font-size: 10px;
+ width: 0px;
+ height: 0px;
+ border-style: solid;
+ border-width: 0 22px 22px 0;
+ border-color: transparent #51a351 transparent transparent;
+}
+.checkbox-card li.active label {
+}
+.checkbox-card li label {
+ margin-bottom: 0px;
+ overflow: hidden;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.checkbox-card li input {
+ visibility: hidden;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: 0;
+}
+.checkbox-card li label span {
+ -webkit-text-size-adjust : none;
+ font-size: 10px;
+ display: block;
+ width: 130px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: #666666;
+ margin-top: -3px;
+}
+.checkbox-card li:hover label span,
+.checkbox-card li:hover label span.user-name {
+ color: #FFFFFF;
+}
+.checkbox-card li label span.user-name {
+ font-size: 12px;
+ color: #363636;
+ padding: 2px 0 0;
+ margin-top: 0;
+}
+.checkbox-card li .user-pic {
+ float: left;
+ margin-right: 5px;
+ width: 40px;
+ height: 40px;
+}
+
+
+
+/* Responsive */
+@media (max-width: 767px) {
+ .mini-layout .mini-layout-sidebar,
+ .mini-layout .mini-layout-body {
+ width: 100%;
+ margin: 0;
+ }
+ .mini-layout .mini-layout-sidebar .nav {
+ border-bottom: 1px solid #e5e5e5;
+ margin-bottom: 10px;
+ padding-bottom: 5px;
+ }
+ .mini-layout .mini-layout-sidebar:before {
+ border-right: none;
+ }
+ .mini-layout .mini-layout-sidebar .nav-stacked > li {
+ float: left;
+ }
+ .checkbox-card li {
+ width: 210px;
+ margin: 0 0 10px 9px;
+ }
+ .checkbox-card li label span {
+ width: 160px;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/dashboards.css b/app/assets/stylesheets/lib/dashboards.css
new file mode 100644
index 000000000..5399c470b
--- /dev/null
+++ b/app/assets/stylesheets/lib/dashboards.css
@@ -0,0 +1,78 @@
+#dashboards hr {
+ border-top: 1px solid #e0dfdf;
+ border-bottom: 1px solid #fefefe;
+}
+#dashboards .box {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+#dashboards .box-header {
+ height: 20px;
+ border: 1px solid #ddd;
+ margin-bottom: -1px;
+ padding: 10px;
+ background-color: #fafafa;
+ background-image: -moz-linear-gradient(top, #fafafa, #efefef);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fafafa), to(#efefef));
+ background-image: -webkit-linear-gradient(top, #fafafa, #efefef);
+ background-image: -o-linear-gradient(top, #fafafa, #efefef);
+ background-image: linear-gradient(to bottom, #fafafa, #efefef);
+ filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fafafa', endColorstr='#efefef', GradientType=0);
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ -webkit-border-radius: 2px 2px 0px 0px;
+ -moz-border-radius: 2px 2px 0px 0px;
+ border-radius: 2px 2px 0px 0px;
+ overflow: hidden;
+}
+#dashboards .box-header h2{
+ font-size: 16px;
+ line-height: 16px;
+ float:left;
+ margin-top: 0px;
+ color: #646464;
+ font-weight: normal;
+ text-shadow: 0px 1px 0px #fff;
+}
+#dashboards .box-header h2 i{
+ margin: 1px 0px 0px 5px;
+ text-shadow: 0px 1px 0px rgba(255, 255, 255, .9);
+}
+#dashboards .box-header .break{
+ border-left: 1px solid #fcfcfc;
+ border-right: 1px solid #ddd;
+ margin: -13px 10px -9px 10px;
+ padding: 13px 0px 9px 0px;
+
+}
+#dashboards .box-content {
+ margin-top: -1px;
+ padding: 10px;
+ border: 1px solid #ddd;
+ background: #fcfcfc;
+ -webkit-border-radius: 0px 0px 2px 2px;
+ -moz-border-radius: 0px 0px 2px 2px;
+ border-radius: 0px 0px 2px 2px;
+ -webkit-box-shadow: 0 1px 0px rgba(255, 255, 255, .6);
+ -moz-box-shadow: 0 1px 0px rgba(255, 255, 255, .6);
+ box-shadow: 0 1px 0px rgba(255, 255, 255, .6);
+}
+#dashboards .box-content .table {
+ margin-bottom: 0;
+}
+#dashboards .box-content .pager {
+ margin: 10px 0 0;
+ text-align: right;
+}
+
+
+/* Responsive */
+@media (max-width: 480px) {
+ #dashboards hr {
+ display: none;
+ }
+ #dashboards .row-fluid {
+ margin-bottom: -10px;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/fileupload.css b/app/assets/stylesheets/lib/fileupload.css
new file mode 100644
index 000000000..61dfdf73e
--- /dev/null
+++ b/app/assets/stylesheets/lib/fileupload.css
@@ -0,0 +1,157 @@
+.fileupload {
+ margin-bottom: 9px;
+}
+
+.fileupload .input-prepend label,
+.fileupload .input-append label {
+ display: inline;
+}
+.fileupload .input-prepend label .uneditable-input,
+.fileupload .input-append label .uneditable-input {
+ margin-left: -4px;
+ margin-right: -4px;
+}
+.fileupload .uneditable-input {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: top;
+ cursor: text;
+}
+
+.fileupload .thumbnail {
+ display: inline-block;
+ margin-right: 5px;
+ margin-bottom: 5px;
+ overflow: hidden;
+ text-align: center;
+ vertical-align: top;
+}
+
+.fileupload .thumbnail > img {
+ display: inline-block;
+ max-height: 100%;
+ vertical-align: top;
+}
+
+.fileupload .btn {
+ vertical-align: top;
+}
+
+.fileupload .btn-file {
+ margin-bottom: 5px;
+ position: relative;
+ overflow: hidden;
+ vertical-align: top;
+}
+
+.fileupload .btn-file > input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin: 0;
+ font-size: 23px;
+ cursor: pointer;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ transform: translate(-300px, 0) scale(4);
+ direction: ltr;
+}
+
+.fileupload-exists .fileupload-new,
+.fileupload-new .fileupload-exists {
+ display: none;
+}
+
+.fileupload .fileupload-remove {
+ clear: both;
+ display: none;
+ margin-top: 10px;
+}
+
+.fileupload-edit .fileupload-remove,
+.fileupload-edit .btn .fileupload-exists {
+ display: block;
+}
+
+.fileupload-edit .btn .fileupload-new {
+ display: none;
+}
+
+.fileupload-inline .fileupload-controls {
+ display: inline;
+}
+
+.fileupload-new .input-append .btn-file {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+
+.fileupload-preview {
+ max-width: 200px;
+ max-height: 200px;
+}
+
+.thumbnail-borderless .thumbnail {
+ padding: 0;
+ border: none;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.fileupload-new.thumbnail-borderless .thumbnail {
+ border: 1px solid #ddd;
+}
+
+.control-group.warning .fileupload .uneditable-input {
+ color: #a47e3c;
+ border-color: #a47e3c;
+}
+
+.control-group.warning .fileupload .fileupload-preview {
+ color: #a47e3c;
+}
+
+.control-group.warning .fileupload .thumbnail {
+ border-color: #a47e3c;
+}
+
+.control-group.error .fileupload .uneditable-input {
+ color: #b94a48;
+ border-color: #b94a48;
+}
+
+.control-group.error .fileupload .fileupload-preview {
+ color: #b94a48;
+}
+
+.control-group.error .fileupload .thumbnail {
+ border-color: #b94a48;
+}
+
+.control-group.success .fileupload .uneditable-input {
+ color: #468847;
+ border-color: #468847;
+}
+
+.control-group.success .fileupload .fileupload-preview {
+ color: #468847;
+}
+
+.control-group.success .fileupload .thumbnail {
+ border-color: #468847;
+}
+@media (min-width: 768px) and (max-width: 979px) {
+ .fileupload .input-medium {
+ width: 90px!important;
+ }
+}
+@media (max-width: 767px) {
+ .fileupload .input-medium {
+ width: 90px!important;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/filter.css b/app/assets/stylesheets/lib/filter.css
new file mode 100644
index 000000000..6e76a70dc
--- /dev/null
+++ b/app/assets/stylesheets/lib/filter.css
@@ -0,0 +1,84 @@
+/* Filter */
+#filter.open {
+ border-bottom: none;
+ padding-bottom: 10px;
+}
+#filter .filter-nav {
+ margin-bottom: 0px;
+}
+#filter.open .filter-nav {
+ margin-bottom: 10px;
+}
+#filter .filter-nav a {
+ text-decoration: none;
+}
+#filter .filter-nav .accordion-group {
+ border: none;
+}
+#filter .filter-nav .accordion-group.active {
+ background-color: #08c;
+ position: relative;
+}
+#filter .filter-nav .accordion-group.active a {
+ color: #FFF;
+}
+#filter .filter-nav .accordion-group.active:after {
+ display: block;
+ height: 0px;
+ width: 0px;
+ position: absolute;
+ bottom: -12px;
+ left: 50%;
+ margin-left: -5px;
+ content: "";
+ border-style: solid;
+ border-width: 0 6px 6px 6px;
+ border-color: transparent transparent #e5e5e5 transparent;
+ z-index: 5
+}
+#filter .filter-group {
+ clear: both;
+ border: none;
+ margin-bottom: 0px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+#filter .filter-group .accordion-body {
+ background-color: #e5e5e5;
+ border-radius: 3px;
+}
+#filter .filter-group .accordion-body .filter-clear {
+ padding: 4px;
+ border-top: 1px solid #D5D5D5;
+ text-align: right;
+ -webkit-box-shadow: inset 0px 1px 0px #ECECEC;
+ -moz-box-shadow: inset 0px 1px 0px #ECECEC;
+ -o-box-shadow: inset 0px 1px 0px #ECECEC;
+ box-shadow: inset 0px 1px 0px #ECECEC;
+}
+#filter .filter-group .accordion-body .filter-clear a {
+ text-decoration: none;
+}
+#filter .filter-group .collapse.in {
+}
+#filter .filter-group .accordion-inner {
+ padding: 8px 8px 5px;
+ /*margin-top: 10px;*/
+}
+#filter .filter-group .accordion-inner > .btn {
+ margin-bottom: 3px;
+}
+
+
+/* Responsive */
+@media (max-width: 480px) {
+ /* Filter */
+ #filter .filter-nav {
+ float: left;
+ }
+ #filter .accordion-inner.pagination-right {
+ text-align: left;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/gallery.css b/app/assets/stylesheets/lib/gallery.css
new file mode 100644
index 000000000..daf4812a7
--- /dev/null
+++ b/app/assets/stylesheets/lib/gallery.css
@@ -0,0 +1,299 @@
+#orbit_gallery {
+ margin: 0;
+ padding: 0 0 10px;
+ list-style: none;
+}
+#orbit_gallery .rgalbum {
+ margin: 5px;
+ padding: 10px;
+ width: 200px;
+ background: #FFFFFF;
+ -webkit-transition-property: left, right, top;
+ -moz-transition-property: left, right, top;
+ -ms-transition-property: left, right, top;
+ -o-transition-property: left, right, top;
+ transition-property: left, right, top;
+}
+#orbit_gallery .rgalbum:hover {
+ box-shadow: 0px 0px 5px rgba(0,0,0,.2);
+}
+#orbit_gallery .rgalbum a {
+ position: relative;
+ display: block;
+ overflow: hidden;
+ margin: 0 0 10px;
+ width: 200px;
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+#orbit_gallery .rgalbum a img {
+ max-width: 200px;
+}
+#orbit_gallery .rgalbum:hover a img {
+ -webkit-filter: blur(2px);
+}
+#orbit_gallery .rgalbum a span {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ display: block;
+ margin: 0;
+ background-color: #000000;
+ opacity: .0;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+#orbit_gallery .rgalbum:hover a span {
+ opacity: .4;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
+ filter: alpha(opacity=40);
+}
+#orbit_gallery .rgalbum a .albumname {
+ position: absolute;
+ bottom: 0;
+ margin: 0;
+ padding: 10px;
+ color: #F2F2F2;
+ text-shadow: 0px -1px 0 rgba(0,0,0,0.4);
+ letter-spacing: -0.5px;
+ font-size: 30px;
+ font-family: 'Playfair Display SC', sans-serif;
+ line-height: 28px;
+ opacity: .0;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+ -webkit-text-size-adjust : none;
+}
+#orbit_gallery .rgalbum:hover a .albumname {
+ opacity: 1;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+ filter: alpha(opacity=100);
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+#orbit_gallery .rgalbum .gallery_info {
+ margin: 0;
+ list-style: none;
+}
+#orbit_gallery .rgalbum .gallery_info li {
+ display: inline-block;
+ float: left;
+ color: #777777;
+ font-size: 11px;
+ line-height: 20px;
+ cursor: pointer;
+ -webkit-text-size-adjust : none;
+}
+#orbit_gallery .rgalbum .gallery_info li:hover {
+ color: #0088CC;
+}
+#orbit_gallery .rgalbum .gallery_info li .icons-tag {
+ margin-left: 10px;
+}
+#orbit_gallery .rgalbum .gallery_info li.albumcateg {
+ float: right;
+ overflow: hidden;
+ max-width: 125px;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+#orbit_gallery .rgalbum .gallery_info li.view {
+ overflow: hidden;
+ max-width: 50px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+#orbit_gallery .rgalbum .albumtag {
+ display: none;
+ overflow: hidden;
+ margin: 0;
+}
+
+
+/* Gallery Body */
+.rgbody .gallery-info {
+ padding: 0 5px;
+}
+.rgbody .gallery-info h3 {
+ margin: 5px 0 0;
+ color: #333;
+ text-shadow: 0 1px 0 #ffffff;
+ font-family: 'Playfair Display SC', sans-serif;
+}
+.rgbody .gallery-info .muted {
+ font-family: 'Raleway', sans-serif;
+}
+
+#imgholder {
+ margin: 0;
+ padding: 0 0 10px;
+ list-style: none;
+}
+#imgholder .rgalbum {
+ margin: 5px;
+ padding: 5px;
+ width: 200px;
+ background: #FFFFFF;
+ -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, .1);
+ -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, .1);
+ box-shadow: 0px 0px 5px rgba(0, 0, 0, .1);
+ -webkit-transition-property: left, right, top;
+ -moz-transition-property: left, right, top;
+ -ms-transition-property: left, right, top;
+ -o-transition-property: left, right, top;
+ transition-property: left, right, top;
+ -o-box-shadow: 0px 0px 5px rgba(0, 0, 0, .1);
+}
+#imgholder .rgalbum a {
+ display: block;
+ overflow: hidden;
+ margin: 0;
+ width: 200px;
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+#imgholder .rgalbum a img {
+ max-width: 200px;
+}
+
+
+/* File Upload */
+#fileupload {
+ position: relative;
+ display: none;
+ clear: both;
+ overflow: hidden;
+ margin: 40px 0 15px;
+ /*height: 300px;*/
+ border: 1px solid #d4d4d4;
+ border-radius: 4px;
+ background-color: #FDFDFD;
+ /*-webkit-box-shadow: 0px 0px 10px rgba(0, 0, 0, .15) inset;
+ box-shadow: 0px 0px 10px rgba(0, 0, 0, .15) inset;*/
+}
+#fileupload form, #fileupload table {
+ margin: 0;
+}
+#fileupload .fileupload-buttonbar .navbar {
+ margin-bottom: 0;
+}
+#fileupload .fileupload-buttonbar .navbar button {
+ border: none;
+ border-right: 1px solid #d4d4d4;
+ background-color: transparent;
+ padding: 10px 15px 10px;
+ color: #777777;
+ text-decoration: none;
+ text-shadow: 0 1px 0 #ffffff;
+}
+#fileupload .fileupload-buttonbar .navbar button:hover {
+ color: #333333;
+ text-decoration: none;
+ background-color: #EDEDED;
+}
+#fileupload .fileupload-buttonbar .navbar .fileinput-button {
+ position: relative;
+ overflow: hidden;
+}
+#fileupload .fileupload-buttonbar .navbar .fileinput-button input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin: 0;
+ font-size: 23px;
+ opacity: 0;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ cursor: pointer;
+ -webkit-transform: translate(-300px, 0) scale(4);
+ -moz-transform: translate(-300px, 0) scale(4);
+ -ms-transform: translate(-300px, 0) scale(4);
+ -o-transform: translate(-300px, 0) scale(4);
+ transform: translate(-300px, 0) scale(4);
+ direction: ltr;
+}
+#fileupload .fileupload-buttonbar .navbar-inner {
+ border-width: 0 0 1px;
+ border-radius: 4px 4px 0 0;
+ padding: 0;
+}
+
+#fileupload .fileupload-progress .progress {
+ position: absolute;
+ right: 0;
+ left: 0;
+ margin-bottom: 0;
+ height: 5px;
+ border-radius: 0;
+ background-color: transparent;
+ background-image: none;
+}
+#fileupload .fileupload-progress .progress-success.progress-striped .bar {
+ background-color: #0088CC;
+}
+#fileupload .fileupload-progress .progress-extended {
+ position: absolute;
+ top: 1px;
+ right: 0;
+ padding-right: 15px;
+ color: #0088CC;
+ text-align: right;
+ text-shadow: 0 1px 0 #ffffff;
+ letter-spacing: -0.1em;
+ font-size: 20px;
+ font-family: 'Varela Round', sans-serif;
+ line-height: 40px;
+}
+
+#fileupload #dropzone {
+ margin: 15px 10px 10px;
+ padding: 30px;
+ text-align: center;
+ font-size: 2em;
+ font-family: 'Raleway';
+ line-height: 1.2em;
+ color: #e4e4e4;
+}
+#fileupload #dropzone div[data-icons] {
+ font-size: 4em;
+ height: 70px;
+ padding-top: 30px;
+ text-shadow: 0px -1px 0px #ececec;
+ color: #f5f5f5;
+}
+#fileupload #dropzone.drop {
+ padding: 28px;
+ border: 2px dashed #0088CC;
+ border-radius: 10px;
+ color: #0088CC;
+}
+#fileupload #dropzone.drop div[data-icons] {
+ text-shadow: 0px -1px 0px #0c5f80;
+ color: #0088CC;
+}
+
+#fileupload .fileupload-loading {
+ position: absolute;
+ left: 50%;
+ width: 128px;
+ height: 128px;
+ background: url(../img/loading.gif) center no-repeat;
+ display: none;
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/items.css b/app/assets/stylesheets/lib/items.css
new file mode 100644
index 000000000..749248c09
--- /dev/null
+++ b/app/assets/stylesheets/lib/items.css
@@ -0,0 +1,277 @@
+#items .ui-tooltip {
+ color: #FFFFFF;
+ padding: 0px 5px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ border-radius: 3px;
+ background-color: #000;
+}
+#items .ui-tooltip:after {
+ content: '';
+ position: absolute;
+ left: 50%;
+ bottom: -3px;
+ margin-left: -4px;
+ width: 0px;
+ height: 0px;
+ border-style: solid;
+ border-width: 4px 4px 0 4px;
+ border-color: #000000 transparent transparent transparent;
+}
+#items .sortable {
+ list-style: none;
+ margin: 0;
+ padding: 0 10px;
+ border: 1px solid #d4d4d4;
+ background-color: rgb(236, 236, 236);
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+#items .sortable ol,
+#items .sortable ul {
+ list-style: none;
+}
+#items .sortable .navbar {
+ margin-bottom: 15px;
+}
+#items .sortable > .navbar {
+ margin: -1px -11px 10px;
+}
+#items .sortable .navbar .nav > li > a,
+#items .sortable .navbar .brand {
+ padding: 10px;
+}
+#items .sortable .navbar .item-title {
+ color: #777777;
+ padding: 0 10px;
+ position: relative;
+ line-height: 3.5em;
+ display: inline-block;
+ float: left;
+}
+#items .sortable .navbar .item-title:hover {
+}
+#items .sortable .navbar .item-title a:hover {
+ text-decoration: none;
+}
+/*#items .sortable .navbar .active .item-title>a {
+ max-width: 70px;
+ display: inline-block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}*/
+#items .sortable .navbar .item-title .item-menu a {
+ display: inline-block;
+ padding: 3px 5px;
+ clear: both;
+ font-weight: normal;
+ line-height: 20px;
+ color: #333333;
+ white-space: nowrap;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+#items .sortable .navbar .item-title .item-menu a:hover,
+#items .sortable .navbar .item-title .item-menu a:focus,
+#items .sortable .navbar .item-title .item-menu a.active {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #0081c2;
+}
+#items .sortable .navbar .item-title .item-menu a.delete:hover,
+#items .sortable .navbar .item-title .item-menu a.delete:focus {
+ background-color: #bd362f;
+}
+#items .sortable .navbar .item-title .item-menu:before {
+ /*position: absolute;
+ top: 50%;
+ left: -5px;
+ margin-top: -5px;
+ display: inline-block;
+ width: 0px;
+ height: 0px;
+ border-style: solid;
+ border-width: 5px 5px 5px 0;
+ border-color: transparent rgb(233, 233, 233) transparent transparent;
+ content: '';*/
+}
+#items .sortable .navbar .item-title em {
+ display: inline-block;
+ padding: 0 5px;
+ max-width: 300px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+#items .sortable .navbar .item-info {
+ margin-top: 12px;
+ color: #DDDDDD;
+ text-align: right;
+}
+#items .sortable ol {
+ margin-left: 12px;
+}
+#items .sortable ol {
+ margin: -59px 0 15px;
+ padding: 59px 10px 0;
+ border: 1px solid #d4d4d4;
+ background-color: rgb(236, 236, 236);
+ -webkit-box-shadow: 0 0 10px rgba(150, 150, 150, .3);
+ -moz-box-shadow: 0 0 10px rgba(150, 150, 150, .3);
+ box-shadow: 0 0 10px rgba(150, 150, 150, .3);
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+#items .sortable li {
+ margin-left: 30px;
+ margin-left: 0\9;
+ position: relative;
+ -webkit-transition: none;
+ -moz-transition: none;
+ -o-transition: none;
+ transition: none;
+}
+#items .sortable li:after {
+ top: 10px;
+ z-index: 1;
+ content: "";
+ width: 10px;
+ left: -20px;
+ height: 10px;
+ display: block;
+ position: absolute;;
+ border-width: 0 0 2px 2px;
+ border-color: rgba(100, 100, 100, .5);
+ border-style: solid;
+ display: none\9; /* 用IE的去死 */
+}
+#items .sortable li:before {
+ content: "";
+ display: block;
+ position: absolute;
+ top: 0px;
+ left: -20px;
+ bottom: -15px;
+ border-left: 2px solid rgb(226, 226, 226);
+ box-shadow: 1px 1px 0px rgba(255, 255, 255, .4);
+ display: none\9; /* 用IE的去死 */
+}
+#items .sortable li:last-child:before {
+ bottom: auto;
+ height: 20px;
+}
+#items .sortable li.collapsed > ol {
+ display: none;
+}
+#items .sortable li.collapsed > .navbar {
+ position: relative;
+ margin-right: 8px;
+}
+#items .sortable li.collapsed > .navbar:before,
+#items .sortable li.collapsed > .navbar:after {
+ content: "";
+ display: block;
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ width: 100%;
+ height: 100%;
+ z-index: 0;
+ background-color: rgb(235, 235, 235);
+ border: 1px solid rgb(221, 221, 221);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+#items .sortable li.collapsed > .navbar:before {
+ top: 1px;
+ left: 1px;
+ z-index: 1;
+ background-color: rgb(241, 241, 241);
+}
+#items .sortable li.disabled .navbar .navbar-inner {
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
+ filter: alpha(opacity=40);
+ opacity: .4;
+}
+#items .sortable li > .navbar .navbar-inner {
+ position: relative;
+ z-index: 2;
+}
+#items .sortable .navbar .navbar-inner.active {
+ border: 2px solid #3a87ad;
+}
+#items .sortable .navbar .navbar-inner .item-menu {
+ display: none;
+ padding: 0 10px;
+ /*margin-left: 10px;*/
+ line-height: 34px;
+ position: relative;
+ /*background-color: rgb(233, 233, 233);
+ background-image: -moz-linear-gradient(top, rgb(224, 224, 224), rgb(238, 238, 238));
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(rgb(224, 224, 224)), to(rgb(238, 238, 238)));
+ background-image: -webkit-linear-gradient(top, rgb(224, 224, 224), rgb(238, 238, 238));
+ background-image: -o-linear-gradient(top, rgb(224, 224, 224), rgb(238, 238, 238));
+ background-image: linear-gradient(to bottom, rgb(224, 224, 224), rgb(238, 238, 238));
+ border-top: 1px solid rgb(213, 213, 213);
+ border-bottom: 1px solid #FFFFFF;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;*/
+}
+#items .sortable .navbar .navbar-inner:hover .item-menu {
+ display: inline-block!important;
+}
+#items .sortable li .navbar .brand {
+ line-height: 14px;
+ cursor: move;
+ color: #DDDDDD;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.2);
+}
+#items .sortable li .navbar .brand:hover {
+ color: #CCCCCC;
+ text-shadow: 0 -1px 0 rgba(0,0,0,.5);
+}
+#items .sortable li .navbar .item-type {
+ line-height: 14px;
+ padding: 13px 0 12px;
+ display: block;
+ float: left;
+ margin-left: -5px;
+ font-size: 16px;
+ font-weight: 200;
+}
+#items .sortable li .navbar .item-type.link {
+ color: #51a351;
+}
+#items .sortable li .navbar .item-type.page {
+ color: #2f96b4;
+}
+#items .sortable .placeholder {
+ height: 40px;
+ margin-bottom: 10px;
+ border: 2px dashed #bce8f1;
+ background-color: #d9edf7;
+ -webkit-border-radius: 7px;
+ -moz-border-radius: 7px;
+ border-radius: 7px;
+}
+#items .sortable .mjs-nestedSortable-error {
+ background: #f2dede;
+ border-color: #eed3d7;
+}
+
+
+/* IE go dead */
+:root #items .sortable li {
+ margin-left: 30px;
+}
+:root #items .sortable li:after,
+:root #items .sortable li:before {
+ display: block\9;
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/jquery.fileupload-ui.css b/app/assets/stylesheets/lib/jquery.fileupload-ui.css
new file mode 100644
index 000000000..4f994f241
--- /dev/null
+++ b/app/assets/stylesheets/lib/jquery.fileupload-ui.css
@@ -0,0 +1,83 @@
+@charset "UTF-8";
+/*
+ * jQuery File Upload UI Plugin CSS 7.4
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+.fileinput-button {
+ position: relative;
+ overflow: hidden;
+ float: left;
+ margin-right: 4px;
+}
+.fileinput-button input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin: 0;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ transform: translate(-300px, 0) scale(4);
+ font-size: 23px;
+ direction: ltr;
+ cursor: pointer;
+}
+.fileupload-buttonbar .btn,
+.fileupload-buttonbar .toggle {
+ margin-bottom: 5px;
+}
+.files .progress {
+ width: 200px;
+}
+.progress-animated .bar {
+ background: url(../img/progressbar.gif) !important;
+ filter: none;
+}
+.fileupload-loading {
+ position: absolute;
+ left: 50%;
+ width: 128px;
+ height: 128px;
+ background: url(../img/loading.gif) center no-repeat;
+ display: none;
+}
+.fileupload-processing .fileupload-loading {
+ display: block;
+}
+
+/* Fix for IE 6: */
+* html .fileinput-button {
+ line-height: 24px;
+ margin: 1px -3px 0 0;
+}
+
+/* Fix for IE 7: */
+* + html .fileinput-button {
+ padding: 2px 15px;
+ margin: 1px 0 0 0;
+}
+
+@media (max-width: 767px) {
+ .fileupload-buttonbar .toggle,
+ .files .toggle,
+ .files .btn span {
+ display: none;
+ }
+ .files .preview * {
+ width: 40px;
+ }
+ .files .name * {
+ width: 80px;
+ display: inline-block;
+ word-wrap: break-word;
+ }
+ .files .progress {
+ width: 20px;
+ }
+}
diff --git a/app/assets/stylesheets/lib/main-forms.css b/app/assets/stylesheets/lib/main-forms.css
new file mode 100644
index 000000000..5d55142c1
--- /dev/null
+++ b/app/assets/stylesheets/lib/main-forms.css
@@ -0,0 +1,197 @@
+.main-forms fieldset {
+ background-color: #FFFFFF;
+ border: 1px solid #EDEDED;
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+}
+.main-forms fieldset .input-area {
+ padding: 20px 20px 0;
+}
+.main-forms fieldset .input-area:after {
+ content: "";
+ clear: both;
+ display: block;
+ height: 0;
+ visibility: hidden;
+}
+.main-forms fieldset .input-area .nav-name {
+ float: left;
+ width: 100px;
+ padding-top: 5px;
+ text-align: right;
+ display: block;
+ margin-bottom: 5px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 20px;
+}
+.main-forms fieldset .input-area .control-label {
+ width: 100px;
+}
+.main-forms fieldset .input-area .controls {
+ margin-left: 120px;
+}
+.main-forms fieldset .input-area .controls hr {
+ margin: 5px 0 10px;
+}
+.main-forms fieldset .input-area .controls h5 {
+ margin: 5px 0;
+}
+.main-forms fieldset .input-area .controls .file-link {
+ margin-right: 10px;
+ display: inline-block;
+ width: 178px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.main-forms fieldset .input-area .controls .input-prepend {
+ margin-bottom: 5px;
+}
+.main-forms fieldset .input-area .controls .input-prepend a {
+ text-decoration: none;
+ color: #333333;
+}
+.main-forms fieldset .input-area .controls .input-prepend .tab-content > .active {
+ display: inline-block;
+}
+.main-forms fieldset .input-area .controls .add-btn {
+ margin: 3px 0;
+}
+.main-forms fieldset .input-area .fileupload {
+ margin-bottom: 0;
+}
+.main-forms fieldset .input-area .datetimepick {
+ margin-right: 5px;
+ margin-bottom: 5px;
+}
+.main-forms fieldset .input-area .language-area .input-content .mceLayout {
+ width: 100%!important;
+}
+.main-forms fieldset .input-area .module-nav,
+.main-forms fieldset .input-area .language-nav {
+ margin: 0 0 20px;
+ padding: 0 0 15px 120px;
+ border-bottom: 1px solid #ddd;
+}
+.main-forms fieldset .input-area .module-nav li,
+.main-forms fieldset .input-area .language-nav li {
+ position: relative;
+}
+
+.main-forms fieldset .input-area .module-nav li.active:before,
+.main-forms fieldset .input-area .module-nav li.active:after,
+.main-forms fieldset .input-area .language-nav li.active:before,
+.main-forms fieldset .input-area .language-nav li.active:after {
+ display: block;
+ height: 0px;
+ width: 0px;
+ position: absolute;
+ bottom: -15px;
+ left: 50%;
+ margin-left: -5px;
+ content: "";
+ border-style: solid;
+ border-width: 0 6px 6px 6px;
+ border-color: transparent transparent #EDEDED transparent;
+ z-index: 5
+}
+.main-forms fieldset .input-area .module-nav li.active:after {
+ display: none;
+}
+.main-forms fieldset .input-area .language-nav li.active:after {
+ bottom: -16px;
+ margin-left: -4px;
+ border-width: 0 5px 5px 5px;
+ border-color: transparent transparent #FFFFFF transparent;
+}
+.main-forms fieldset .input-area .module-nav {
+ margin-bottom: 0;
+ border-bottom: none;
+}
+.main-forms fieldset .input-area .language-area,
+.main-forms fieldset .input-area .module-area {
+ overflow: hidden;
+}
+.main-forms fieldset .input-area .module-area {
+ padding-top: 20px;
+ margin-bottom: 40px;
+ background-color: #EDEDED;
+ border-radius: 5px;
+}
+.main-forms fieldset .form-actions {
+ padding-left: 140px;
+ margin: 0px;
+ -webkit-border-radius: 0 0 9px 9px;
+ -moz-border-radius: 0 0 9px 9px;
+ border-radius: 0 0 9px 9px;
+}
+.main-forms fieldset .input-area .nav-scroll {
+ margin-left: 120px;
+ width:800px;
+ position:relative;
+ z-index:1;
+ overflow:hidden;
+}
+.main-forms fieldset .input-area .nav-scroll .scroller {
+ width: 1000px;
+ height:100%;
+ float:left;
+ padding:0;
+}
+.main-forms fieldset .input-area .controls[data-toggle^="buttons-"] label {
+ position: relative;
+ margin: 0 0 5px;
+}
+.main-forms fieldset .input-area .controls[data-toggle^="buttons-"] input[type="radio"],
+.main-forms fieldset .input-area .controls[data-toggle^="buttons-"] input[type="checkbox"] {
+ margin-left: 0;
+ margin-top: 0;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ display: block;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+}
+.main-forms fieldset .input-area .question {
+ margin-top: 5px;
+}
+
+
+/* Responsive */
+@media (min-width: 768px) and (max-width: 979px) {
+}
+
+@media (max-width: 480px) {
+ .main-forms fieldset .input-area .nav-name {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ text-align: left;
+ }
+ .main-forms fieldset .input-area .module-area {
+ padding: 20px;
+ }
+ .main-forms fieldset .input-area .module-nav,
+ .main-forms fieldset .input-area .language-nav {
+ padding: 0 0 15px 0px;
+ }
+ .main-forms fieldset .form-actions {
+ padding-right: 20px;
+ padding-left: 20px;
+ }
+ .main-forms fieldset .input-area .control-label {
+ width: auto;
+ }
+ .main-forms fieldset .input-area .controls {
+ margin-left: 0;
+ }
+ .main-forms fieldset .form-actions {
+ padding-left: 20px;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/main-list.css.erb b/app/assets/stylesheets/lib/main-list.css.erb
new file mode 100644
index 000000000..31d3ea7ef
--- /dev/null
+++ b/app/assets/stylesheets/lib/main-list.css.erb
@@ -0,0 +1,184 @@
+/* Main List */
+.main-list {
+ margin-bottom: 10px;
+}
+.main-list tbody {
+ border: 1px solid #dddddd;
+}
+.main-list thead {
+ border: 1px solid #454545;
+}
+.main-list thead th {
+ vertical-align: middle;
+ background-color: #454545;
+ white-space: nowrap;
+ color: #FFFFFF;
+}
+.main-list tbody tr.disable td {
+ color: #C5C5C5;
+ background-color: #eeeeee;
+}
+.main-list tbody tr.disable td .label-info {
+ background-color: #999999;
+}
+.main-list tbody tr.active td:first-child {
+ position: relative;
+}
+.main-list tbody tr.active td:first-child:before {
+ content: "";
+ width: 0px;
+ height: 0px;
+ left: -21px;
+ top: 50%;
+ margin-top: -6px;
+ position: absolute;
+ border-style: solid;
+ border-width: 6px 0 6px 6px;
+ border-color: transparent transparent transparent #333333;
+}
+.main-list td {
+ background-color: #FFFFFF;
+}
+.main-list td.preview img {
+ width: 100%;
+}
+.main-list td .banner-link {
+ width: 100px;
+ max-width: 120px;
+ display: inline-block;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.main-list td .file-list {
+ display: inline-block;
+ margin: 0 0 -6px;
+}
+.main-list td .file-list:after {
+ content: "";
+ clear: both;
+ display: block;
+ height: 0;
+ visibility: hidden;
+}
+.main-list td .file-type {
+ position: relative;
+ list-style: none;
+ float: left;
+ display: inline-block;
+}
+.main-list td .file-type a {
+ background-color: #A6A6A6;
+ color: #FFFFFF;
+ margin-right: 10px;
+ padding: 2px 5px 2px 3px;
+ border-radius: 3px;
+ text-decoration: none;
+ text-shadow: 0px -1px 0px rgba(100, 100, 100, .6);
+}
+.main-list td .file-type i,
+.main-forms fieldset .input-area .controls .file-type i {
+ width: 16px;
+ height: 16px;
+ margin-bottom: -1px;
+ display: inline-block;
+}
+.main-list td .file-type[class^="type-"] i,
+.main-list td .file-type[class*=" type-"] i,
+.main-forms fieldset .input-area .controls .file-type[class*=" type-"] i,
+.main-forms fieldset .input-area .controls .file-type[class^="type-"] i {
+ background-image: url(<%= asset_path 'file_type.png' %>);
+}
+.file-type.type-pdf i {background-position: 0px 0px;}
+.file-type.type-psd i {background-position: -16px 0px;}
+.file-type.type-ai i {background-position: -32px 0px;}
+.file-type.type-fla i {background-position: -48px 0px;}
+.file-type.type-in i {background-position: -64px 0px;}
+.file-type.type-acc i {background-position: 0px -16px;}
+.file-type.type-do i {background-position: -16px -16px;}
+.file-type.type-xl i {background-position: -32px -16px;}
+.file-type.type-pp i {background-position: -48px -16px;}
+.file-type.type-zip i {background-position: -64px -16px;}
+.file-type.type-txt i {background-position: 0px -32px;}
+.file-type.type-jp i {background-position: -16px -32px;}
+.file-type.type-gif i {background-position: -32px -32px;}
+.file-type.type-png i {background-position: -48px -32px;}
+.file-type.type-audio i {background-position: -64px -32px;}
+
+.main-list td .quick-edit {
+ height: 22px;
+ margin-top: 5px;
+}
+.main-list td .quick-edit .nav {
+ display: none;
+ margin-bottom: 0;
+}
+.main-list tr:hover .quick-edit .nav {
+ display: block;
+}
+.main-list td .quick-edit .nav > li > a {
+ padding-top: 4px;
+ padding-bottom: 4px;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+.main-list thead tr.sort-header th a {
+ padding: 8px;
+ margin: -8px;
+ display: block;
+ color: #FFFFFF;
+ text-decoration: none;
+}
+.main-list thead tr.sort-header th.active a {
+ padding-bottom: 4px;
+ border-bottom: 4px solid #08c;
+}
+.main-list .footable-row-detail td {
+ padding: 0;
+ border-top: none;
+}
+.main-list .footable-row-detail td .footable-row-detail-inner {
+ padding: 8px;
+ position: relative;
+ border-radius: 5px;
+ margin: 0 8px 8px;
+ background-color: #ededed;
+}
+.main-list .footable-row-detail td .footable-row-detail-inner:after {
+ display: block;
+ height: 0px;
+ width: 0px;
+ position: absolute;
+ top: -6px;
+ left: 50%;
+ margin-left: -3px;
+ content: "";
+ border-style: solid;
+ border-width: 0 6px 6px 6px;
+ border-color: transparent transparent #ededed transparent;
+}
+.main-list .footable-row-detail td .footable-row-detail-inner div {
+ margin: 10px 0;
+}
+#preview .preview {
+ margin: 0 auto;
+}
+
+
+/* For Retina */
+@media screen and (-webkit-min-device-pixel-ratio: 2), screen and (max--moz-device-pixel-ratio: 2) {
+ .main-list td .file-type[class^="type-"] i,
+ .main-list td .file-type[class*=" type-"] i,
+ .main-forms fieldset .input-area .controls .file-type[class*=" type-"] i,
+ .main-forms fieldset .input-area .controls .file-type[class^="type-"] i {
+ background-image: url(<%= asset_path 'file_type@2x.png' %>);
+ background-size: 80px 48px;
+ }
+}
+
+
+/* Responsive */
+@media (max-width: 480px) {
+ .main-list td .quick-edit .nav {
+ display: block;
+ }
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/nanoscroller.css b/app/assets/stylesheets/lib/nanoscroller.css
new file mode 100644
index 000000000..4f0b9e500
--- /dev/null
+++ b/app/assets/stylesheets/lib/nanoscroller.css
@@ -0,0 +1,55 @@
+/** initial setup **/
+.nano {
+ position : relative;
+ width : 100%;
+ height : 100%;
+ overflow : hidden;
+}
+.nano .content {
+ position : absolute;
+ overflow : scroll;
+ overflow-x : hidden;
+ top : 0;
+ right : 0;
+ bottom : 0;
+ left : 0;
+}
+.nano .content:focus {
+ outline: thin dotted;
+}
+.nano .content::-webkit-scrollbar {
+ visibility: hidden;
+}
+.has-scrollbar .content::-webkit-scrollbar {
+ visibility: visible;
+}
+.nano > .pane {
+ /*background : rgba(0,0,0,.25);*/
+ position : absolute;
+ width : 10px;
+ right : 0;
+ top : 0;
+ bottom : 0;
+ visibility : hidden\9; /* Target only IE7 and IE8 with this hack */
+ opacity : .01;
+ -webkit-transition : .2s;
+ -moz-transition : .2s;
+ -o-transition : .2s;
+ transition : .2s;
+ -moz-border-radius : 5px;
+ -webkit-border-radius : 5px;
+ border-radius : 5px;
+}
+.nano > .pane > .slider {
+ background: #444;
+ background: rgba(0,0,0,.5);
+ position : relative;
+ margin : 0 1px;
+ -moz-border-radius : 3px;
+ -webkit-border-radius : 3px;
+ border-radius : 3px;
+}
+.nano:hover > .pane, .pane.active, .pane.flashed {
+ visibility : visible\9; /* Target only IE7 and IE8 with this hack */
+ opacity : 0.99;
+}
diff --git a/app/assets/stylesheets/lib/pageslide.css b/app/assets/stylesheets/lib/pageslide.css
new file mode 100644
index 000000000..697c5ab99
--- /dev/null
+++ b/app/assets/stylesheets/lib/pageslide.css
@@ -0,0 +1,91 @@
+#pageslide {
+ /* These styles MUST be included. Do not change. */
+ display: none;
+ position: fixed;
+ top: 40px;
+ bottom: 0;
+ z-index: 1000;
+ overflow: auto;
+
+ /* Specify the width of your pageslide here */
+ padding: 5px;
+
+ /* These styles are optional, and describe how the pageslide will look */
+ background-color: #333;
+ color: #FFF;
+ -webkit-box-shadow: inset 0 0 5px 5px #222;
+ -moz-box-shadow: inset 0 0 5px 5px #222;
+ box-shadow: inset 0 0 5px 5px #222;
+}
+#pageslide .content {
+ padding: 15px;
+}
+#pageslide #view-page .content,
+#pageslide #view-page .pane {
+ padding: 0px;
+ margin-top: 57px;
+}
+#pageslide #view-page .content {
+ padding-bottom: 10px;
+}
+#pageslide #view-page .page-info {
+ padding: 0 10px;
+ border-bottom: 1px solid #222222;
+ box-shadow: 0px 1px 0px #404040;
+ line-height: 50px;
+}
+#pageslide #view-page .page-info a {
+ color: #8f8f8f;
+ font-size: 2em;
+ text-decoration: none;
+}
+#pageslide #view-page .page-info a:hover {
+ color: #efefef;
+}
+#pageslide #view-page .page-info h3 {
+ margin: 5px 0;
+}
+#pageslide form {
+ margin-bottom: 0;
+}
+#pageslide legend {
+ color: #FFFFFF;
+ border-bottom: 1px solid #949494;
+}
+#pageslide .radio.inline,
+#pageslide .checkbox.inline {
+ white-space: nowrap;
+}
+#pageslide .radio.inline,
+#pageslide .checkbox.inline,
+#pageslide .radio.inline + #pageslide .radio.inline,
+#pageslide .checkbox.inline + #pageslide .checkbox.inline {
+ margin-left: 0;
+ margin-right: 20px;
+ margin-right: 10px\9;
+}
+#pageslide .form-actions {
+ background-color: transparent;
+ margin-bottom: 0;
+ margin-bottom: 20px\9;
+ padding: 19px 0 0;
+ border-top-color: #828282;
+ text-align: right;
+}
+#pageslide .preview {
+ position: relative;
+ height: 80px;
+ margin: 0;
+ padding: 0;
+}
+#pageslide .preview img {
+ position: absolute;
+ left: 0;
+ top: 0;
+}
+#pageslide .banner_set {
+ vertical-align: middle;
+ display: inline-block;
+ height: 30px;
+ padding: 0 2px 0 5px;
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/tags-groups.css b/app/assets/stylesheets/lib/tags-groups.css
new file mode 100644
index 000000000..b5ed7ac02
--- /dev/null
+++ b/app/assets/stylesheets/lib/tags-groups.css
@@ -0,0 +1,158 @@
+.tags .lead {
+ padding: 20px 5px 0px;
+ margin-bottom: 5px;
+ border-bottom: 1px solid #e5e5e5;
+}
+.tags .lead .badge {
+ margin-top: 5px;
+}
+.tags .tags-groups {
+ list-style: none;
+ margin: 0 0 20px;
+ padding: 0;
+}
+.tags .tags-groups:after {
+ content: "";
+ clear: both;
+ height: 0;
+ display: block;
+ visibility: hidden;
+}
+.tags .tags-groups.module-tags li.default a {
+ margin-left: 5px;
+}
+.tags .tags-groups li {
+ overflow: hidden;
+ float: left;
+ width: auto;
+ display: inline-block;
+ padding: 2px 10px;
+ margin: 5px;
+ background-color: #f89406;
+ white-space: nowrap;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+ -webkit-transition: all .2s linear;
+ -moz-transition: all .2s linear;
+ -o-transition: all .2s linear;
+ transition: all .2s linear;
+}
+.tags .tags-groups li.mark {
+ width: 0;
+ height: 0;
+ padding: 0;
+ margin: 0;
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+ visibility: hidden;
+}
+.tags .tags-groups li.active {
+ background-color: #3a87ad;
+}
+.tags .tags-groups li.active .amount {
+ color: #8cb8be;
+}
+.tags .tags-groups li a {
+ text-decoration: none;
+ color: #ededed;
+}
+.tags .tags-groups li .amount {
+ color: #fdcf3b;
+ float: right;
+ margin-left: 15px;
+}
+.tags .tags-groups li .card {
+ position: relative;
+ margin: 0;
+ width: 18px;
+ height: 18px;
+}
+.tags .tags-groups li .card:after {
+ font-family: FontAwesome;
+ content: '\f111';
+ color: #fdcf3b;
+ font-size: 14px;
+ display: block;
+ width: 10px;
+ height: 20px;
+ position: absolute;
+ left: 0;
+ top: 0;
+}
+.tags .tags-groups li .card.active:after {
+ content: '\f058';
+ font-size: 18px;
+ left: -2px;
+ top: 1px;
+}
+.tags .tags-groups li .card input {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ z-index: 1;
+ margin: 0;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+}
+
+
+/* Tags Merger */
+#tags-merger.modal {
+ width: 960px;
+ margin-left: -480px;
+}
+#tags-merger form {
+ margin-bottom: 0;
+}
+#tags-merger .tags .tags-groups li {
+ cursor: pointer;
+}
+#tags-merger .tags .tags-groups li.def {
+ background-color: #468847;
+}
+#tags-merger .modal-body .pull-left {
+ margin: 0 5px;
+}
+#tags-merger .modal-body .help-block {
+ text-align: left;
+ padding: 0 5px;
+}
+
+
+
+
+.tags .tags-groups li.default {
+ background-color: #468847;
+}
+.tags .tags-groups li.default.active {
+ background-color: #3a87ad;
+}
+.tags .tags-groups li.default .amount {
+ color: #8cbe9a;
+}
+.tags .tags-groups li.default.active .amount {
+ color: #8cb8be;
+}
+.tags .tags-groups li.default .card:after {
+ color: #8cbe9a;
+}
+.tags .tags-groups li.active .card:after {
+ color: #8cb8be;
+}
+
+
+
+
+#pageslide #filter-default-tag {
+ width: 199px;
+ margin-bottom: 5px;
+}
+#pageslide .add-defalt-tags-list {
+ margin-bottom: 0;
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/lib/wrap-nav.css b/app/assets/stylesheets/lib/wrap-nav.css
new file mode 100644
index 000000000..530b63f6b
--- /dev/null
+++ b/app/assets/stylesheets/lib/wrap-nav.css
@@ -0,0 +1,52 @@
+/* Wrap Nav */
+
+/* Top Nav */
+.topnav {
+ margin-bottom: 10px;
+ margin-top: -60px;
+ border-bottom: 1px solid #e5e5e5;
+ position: relative;
+ z-index: 1000;
+ /*position: fixed;*/
+ /*top: 40px;*/
+ /*left: 81px;*/
+ /*right: 20px;*/
+ padding: 10px 0px 0px;
+ background-color: #F3F3F3;
+}
+.topnav form {
+ margin-bottom: 6px;
+}
+.topnav form input {
+ height: 16px;
+ margin-top: 4px;
+ margin-left: 10px;
+}
+.topnav .btn-group {
+ margin-top: 3px;
+ margin-left: 10px;
+}
+
+/* Bottom Nav */
+.bottomnav {
+ padding: 10px 0 5px;
+ left: 81px;
+ right: 20px;
+ bottom: 0px;
+ position: fixed;
+ z-index: 1;
+ background-color: #F3F3F3;
+ border-top: 1px solid #DDDDDD;
+}
+.bottomnav .action {
+ margin-bottom: 6px;
+}
+.bottomnav .pagination {
+ margin: 0;
+}
+
+/* Breadcrumb */
+.topnav .breadcrumb {
+ background-color: transparent;
+ margin-bottom: 0px;
+}
\ No newline at end of file
diff --git a/app/assets/stylesheets/orbit_bar_bootstrap.css b/app/assets/stylesheets/orbit_bar_bootstrap.css
new file mode 100644
index 000000000..b2e591966
--- /dev/null
+++ b/app/assets/stylesheets/orbit_bar_bootstrap.css
@@ -0,0 +1,6090 @@
+/*!
+ * Bootstrap v2.2.2
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+.orbit-bar article,
+.orbit-bar aside,
+.orbit-bar details,
+.orbit-bar figcaption,
+.orbit-bar figure,
+.orbit-bar footer,
+.orbit-bar header,
+.orbit-bar hgroup,
+.orbit-bar nav,
+.orbit-bar section {
+ display: block;
+}
+
+.orbit-bar audio,
+.orbit-bar canvas,
+.orbit-bar video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+
+.orbit-bar audio:not([controls]) {
+ display: none;
+}
+
+#orbit-bar {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+.orbit-bar a:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.orbit-bar a:hover,
+.orbit-bar a:active {
+ outline: 0;
+}
+
+.orbit-bar sub,
+.orbit-bar sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+.orbit-bar sup {
+ top: -0.5em;
+}
+
+.orbit-bar sub {
+ bottom: -0.25em;
+}
+
+.orbit-bar img {
+ width: auto\9;
+ height: auto;
+ max-width: 100%;
+ vertical-align: middle;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+
+.orbit-bar #map_canvas img,
+.orbit-bar .google-maps img {
+ max-width: none;
+}
+
+.orbit-bar button,
+.orbit-bar input,
+.orbit-bar select,
+.orbit-bar textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+
+.orbit-bar button,
+.orbit-bar input {
+ *overflow: visible;
+ line-height: normal;
+}
+
+.orbit-bar button::-moz-focus-inner,
+.orbit-bar input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+.orbit-bar button,
+.orbit-bar html input[type="button"],
+.orbit-bar input[type="reset"],
+.orbit-bar input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button;
+}
+
+.orbit-bar label,
+.orbit-bar select,
+.orbit-bar button,
+.orbit-bar input[type="button"],
+.orbit-bar input[type="reset"],
+.orbit-bar input[type="submit"],
+.orbit-bar input[type="radio"],
+.orbit-bar input[type="checkbox"] {
+ cursor: pointer;
+}
+
+.orbit-bar input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+.orbit-bar input[type="search"]::-webkit-search-decoration,
+.orbit-bar input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+.orbit-bar textarea {
+ overflow: auto;
+ vertical-align: top;
+}
+
+@media print {
+ .orbit-bar {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+ .orbit-bar a,
+ .orbit-bar a:visited {
+ text-decoration: underline;
+ }
+ .orbit-bar a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ .orbit-bar abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ .orbit-bar .ir a:after,
+ .orbit-bar a[href^="javascript:"]:after,
+ .orbit-bar a[href^="#"]:after {
+ content: "";
+ }
+ .orbit-bar pre,
+ .orbit-bar blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+ .orbit-bar thead {
+ display: table-header-group;
+ }
+ .orbit-bar tr,
+ .orbit-bar img {
+ page-break-inside: avoid;
+ }
+ .orbit-bar img {
+ max-width: 100% !important;
+ }
+ @page {
+ margin: 0.5cm;
+ }
+ .orbit-bar p,
+ .orbit-bar h2,
+ .orbit-bar h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ .orbit-bar h2,
+ .orbit-bar h3 {
+ page-break-after: avoid;
+ }
+}
+
+.orbit-bar .clearfix {
+ *zoom: 1;
+}
+
+.orbit-bar .clearfix:before,
+.orbit-bar .clearfix:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .clearfix:after {
+ clear: both;
+}
+
+.orbit-bar .hide-text {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.orbit-bar .input-block-level {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#orbit-bar {
+ margin: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 75%;
+ line-height: 20px;
+ color: #333333;
+ background-color: #ffffff;
+}
+
+.orbit-bar a {
+ color: #0088cc;
+ text-decoration: none;
+}
+
+.orbit-bar a:hover {
+ color: #005580;
+ text-decoration: underline;
+}
+
+.orbit-bar .img-rounded {
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.orbit-bar .img-polaroid {
+ padding: 4px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+
+.orbit-bar .img-circle {
+ -webkit-border-radius: 500px;
+ -moz-border-radius: 500px;
+ border-radius: 500px;
+}
+
+.orbit-bar .row {
+ margin-left: -20px;
+ *zoom: 1;
+}
+
+.orbit-bar .row:before,
+.orbit-bar .row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .row:after {
+ clear: both;
+}
+
+.orbit-bar [class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 20px;
+}
+
+.orbit-bar .container,
+.orbit-bar .navbar-static-top .container,
+.orbit-bar .navbar-fixed-top .container,
+.orbit-bar .navbar-fixed-bottom .container {
+ width: 940px;
+}
+
+.orbit-bar .span12 {
+ width: 940px;
+}
+
+.orbit-bar .span11 {
+ width: 860px;
+}
+
+.orbit-bar .span10 {
+ width: 780px;
+}
+
+.orbit-bar .span9 {
+ width: 700px;
+}
+
+.orbit-bar .span8 {
+ width: 620px;
+}
+
+.orbit-bar .span7 {
+ width: 540px;
+}
+
+.orbit-bar .span6 {
+ width: 460px;
+}
+
+.orbit-bar .span5 {
+ width: 380px;
+}
+
+.orbit-bar .span4 {
+ width: 300px;
+}
+
+.orbit-bar .span3 {
+ width: 220px;
+}
+
+.orbit-bar .span2 {
+ width: 140px;
+}
+
+.orbit-bar .span1 {
+ width: 60px;
+}
+
+.orbit-bar .offset12 {
+ margin-left: 980px;
+}
+
+.orbit-bar .offset11 {
+ margin-left: 900px;
+}
+
+.orbit-bar .offset10 {
+ margin-left: 820px;
+}
+
+.orbit-bar .offset9 {
+ margin-left: 740px;
+}
+
+.orbit-bar .offset8 {
+ margin-left: 660px;
+}
+
+.orbit-bar .offset7 {
+ margin-left: 580px;
+}
+
+.orbit-bar .offset6 {
+ margin-left: 500px;
+}
+
+.orbit-bar .offset5 {
+ margin-left: 420px;
+}
+
+.orbit-bar .offset4 {
+ margin-left: 340px;
+}
+
+.orbit-bar .offset3 {
+ margin-left: 260px;
+}
+
+.orbit-bar .offset2 {
+ margin-left: 180px;
+}
+
+.orbit-bar .offset1 {
+ margin-left: 100px;
+}
+
+.orbit-bar .row-fluid {
+ width: 100%;
+ *zoom: 1;
+}
+
+.orbit-bar .row-fluid:before,
+.orbit-bar .row-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .row-fluid:after {
+ clear: both;
+}
+
+.orbit-bar .row-fluid [class*="span"] {
+ display: block;
+ float: left;
+ width: 100%;
+ min-height: 30px;
+ margin-left: 2.127659574468085%;
+ *margin-left: 2.074468085106383%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.orbit-bar .row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+}
+
+.orbit-bar .row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 2.127659574468085%;
+}
+
+.orbit-bar .row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680851063829%;
+}
+
+.orbit-bar .row-fluid .span11 {
+ width: 91.48936170212765%;
+ *width: 91.43617021276594%;
+}
+
+.orbit-bar .row-fluid .span10 {
+ width: 82.97872340425532%;
+ *width: 82.92553191489361%;
+}
+
+.orbit-bar .row-fluid .span9 {
+ width: 74.46808510638297%;
+ *width: 74.41489361702126%;
+}
+
+.orbit-bar .row-fluid .span8 {
+ width: 65.95744680851064%;
+ *width: 65.90425531914893%;
+}
+
+.orbit-bar .row-fluid .span7 {
+ width: 57.44680851063829%;
+ *width: 57.39361702127659%;
+}
+
+.orbit-bar .row-fluid .span6 {
+ width: 48.93617021276595%;
+ *width: 48.88297872340425%;
+}
+
+.orbit-bar .row-fluid .span5 {
+ width: 40.42553191489362%;
+ *width: 40.37234042553192%;
+}
+
+.orbit-bar .row-fluid .span4 {
+ width: 31.914893617021278%;
+ *width: 31.861702127659576%;
+}
+
+.orbit-bar .row-fluid .span3 {
+ width: 23.404255319148934%;
+ *width: 23.351063829787233%;
+}
+
+.orbit-bar .row-fluid .span2 {
+ width: 14.893617021276595%;
+ *width: 14.840425531914894%;
+}
+
+.orbit-bar .row-fluid .span1 {
+ width: 6.382978723404255%;
+ *width: 6.329787234042553%;
+}
+
+.orbit-bar .row-fluid .offset12 {
+ margin-left: 104.25531914893617%;
+ *margin-left: 104.14893617021275%;
+}
+
+.orbit-bar .row-fluid .offset12:first-child {
+ margin-left: 102.12765957446808%;
+ *margin-left: 102.02127659574467%;
+}
+
+.orbit-bar .row-fluid .offset11 {
+ margin-left: 95.74468085106382%;
+ *margin-left: 95.6382978723404%;
+}
+
+.orbit-bar .row-fluid .offset11:first-child {
+ margin-left: 93.61702127659574%;
+ *margin-left: 93.51063829787232%;
+}
+
+.orbit-bar .row-fluid .offset10 {
+ margin-left: 87.23404255319149%;
+ *margin-left: 87.12765957446807%;
+}
+
+.orbit-bar .row-fluid .offset10:first-child {
+ margin-left: 85.1063829787234%;
+ *margin-left: 84.99999999999999%;
+}
+
+.orbit-bar .row-fluid .offset9 {
+ margin-left: 78.72340425531914%;
+ *margin-left: 78.61702127659572%;
+}
+
+.orbit-bar .row-fluid .offset9:first-child {
+ margin-left: 76.59574468085106%;
+ *margin-left: 76.48936170212764%;
+}
+
+.orbit-bar .row-fluid .offset8 {
+ margin-left: 70.2127659574468%;
+ *margin-left: 70.10638297872339%;
+}
+
+.orbit-bar .row-fluid .offset8:first-child {
+ margin-left: 68.08510638297872%;
+ *margin-left: 67.9787234042553%;
+}
+
+.orbit-bar .row-fluid .offset7 {
+ margin-left: 61.70212765957446%;
+ *margin-left: 61.59574468085106%;
+}
+
+.orbit-bar .row-fluid .offset7:first-child {
+ margin-left: 59.574468085106375%;
+ *margin-left: 59.46808510638297%;
+}
+
+.orbit-bar .row-fluid .offset6 {
+ margin-left: 53.191489361702125%;
+ *margin-left: 53.085106382978715%;
+}
+
+.orbit-bar .row-fluid .offset6:first-child {
+ margin-left: 51.063829787234035%;
+ *margin-left: 50.95744680851063%;
+}
+
+.orbit-bar .row-fluid .offset5 {
+ margin-left: 44.68085106382979%;
+ *margin-left: 44.57446808510638%;
+}
+
+.orbit-bar .row-fluid .offset5:first-child {
+ margin-left: 42.5531914893617%;
+ *margin-left: 42.4468085106383%;
+}
+
+.orbit-bar .row-fluid .offset4 {
+ margin-left: 36.170212765957444%;
+ *margin-left: 36.06382978723405%;
+}
+
+.orbit-bar .row-fluid .offset4:first-child {
+ margin-left: 34.04255319148936%;
+ *margin-left: 33.93617021276596%;
+}
+
+.orbit-bar .row-fluid .offset3 {
+ margin-left: 27.659574468085104%;
+ *margin-left: 27.5531914893617%;
+}
+
+.orbit-bar .row-fluid .offset3:first-child {
+ margin-left: 25.53191489361702%;
+ *margin-left: 25.425531914893618%;
+}
+
+.orbit-bar .row-fluid .offset2 {
+ margin-left: 19.148936170212764%;
+ *margin-left: 19.04255319148936%;
+}
+
+.orbit-bar .row-fluid .offset2:first-child {
+ margin-left: 17.02127659574468%;
+ *margin-left: 16.914893617021278%;
+}
+
+.orbit-bar .row-fluid .offset1 {
+ margin-left: 10.638297872340425%;
+ *margin-left: 10.53191489361702%;
+}
+
+.orbit-bar .row-fluid .offset1:first-child {
+ margin-left: 8.51063829787234%;
+ *margin-left: 8.404255319148938%;
+}
+
+.orbit-bar [class*="span"].hide,
+.orbit-bar .row-fluid [class*="span"].hide {
+ display: none;
+}
+
+.orbit-bar [class*="span"].pull-right,
+.orbit-bar .row-fluid [class*="span"].pull-right {
+ float: right;
+}
+
+.orbit-bar .container {
+ margin-right: auto;
+ margin-left: auto;
+ *zoom: 1;
+}
+
+.orbit-bar .container:before,
+.orbit-bar .container:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .container:after {
+ clear: both;
+}
+
+.orbit-bar .container-fluid {
+ padding-right: 20px;
+ padding-left: 20px;
+ *zoom: 1;
+}
+
+.orbit-bar .container-fluid:before,
+.orbit-bar .container-fluid:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .container-fluid:after {
+ clear: both;
+}
+
+.orbit-bar p {
+ margin: 0 0 10px;
+}
+
+.orbit-bar .lead {
+ margin-bottom: 20px;
+ font-size: 21px;
+ font-weight: 200;
+ line-height: 30px;
+}
+
+.orbit-bar small {
+ font-size: 85%;
+}
+
+.orbit-bar strong {
+ font-weight: bold;
+}
+
+.orbit-bar em {
+ font-style: italic;
+}
+
+.orbit-bar cite {
+ font-style: normal;
+}
+
+.orbit-bar .muted {
+ color: #999999;
+}
+
+.orbit-bar a.muted:hover {
+ color: #808080;
+}
+
+.orbit-bar .text-warning {
+ color: #c09853;
+}
+
+.orbit-bar a.text-warning:hover {
+ color: #a47e3c;
+}
+
+.orbit-bar .text-error {
+ color: #b94a48;
+}
+
+.orbit-bar a.text-error:hover {
+ color: #953b39;
+}
+
+.orbit-bar .text-info {
+ color: #3a87ad;
+}
+
+.orbit-bar a.text-info:hover {
+ color: #2d6987;
+}
+
+.orbit-bar .text-success {
+ color: #468847;
+}
+
+.orbit-bar a.text-success:hover {
+ color: #356635;
+}
+
+.orbit-bar h1,
+.orbit-bar h2,
+.orbit-bar h3,
+.orbit-bar h4,
+.orbit-bar h5,
+.orbit-bar h6 {
+ margin: 10px 0;
+ font-family: inherit;
+ font-weight: bold;
+ line-height: 20px;
+ color: inherit;
+ text-rendering: optimizelegibility;
+}
+
+.orbit-bar h1 small,
+.orbit-bar h2 small,
+.orbit-bar h3 small,
+.orbit-bar h4 small,
+.orbit-bar h5 small,
+.orbit-bar h6 small {
+ font-weight: normal;
+ line-height: 1;
+ color: #999999;
+}
+
+.orbit-bar h1,
+.orbit-bar h2,
+.orbit-bar h3 {
+ line-height: 40px;
+}
+
+.orbit-bar h1 {
+ font-size: 38.5px;
+}
+
+.orbit-bar h2 {
+ font-size: 31.5px;
+}
+
+.orbit-bar h3 {
+ font-size: 24.5px;
+}
+
+.orbit-bar h4 {
+ font-size: 17.5px;
+}
+
+.orbit-bar h5 {
+ font-size: 14px;
+}
+
+.orbit-bar h6 {
+ font-size: 11.9px;
+}
+
+.orbit-bar h1 small {
+ font-size: 24.5px;
+}
+
+.orbit-bar h2 small {
+ font-size: 17.5px;
+}
+
+.orbit-bar h3 small {
+ font-size: 14px;
+}
+
+.orbit-bar h4 small {
+ font-size: 14px;
+}
+
+.orbit-bar .page-header {
+ padding-bottom: 9px;
+ margin: 20px 0 30px;
+ border-bottom: 1px solid #eeeeee;
+}
+
+.orbit-bar ul,
+.orbit-bar ol {
+ padding: 0;
+ margin: 0 0 10px 25px;
+}
+
+.orbit-bar ul ul,
+.orbit-bar ul ol,
+.orbit-bar ol ol,
+.orbit-bar ol ul {
+ margin-bottom: 0;
+}
+
+.orbit-bar li {
+ line-height: 20px;
+}
+
+.orbit-bar ul.unstyled,
+.orbit-bar ol.unstyled {
+ margin-left: 0;
+ list-style: none;
+}
+
+.orbit-bar ul.inline,
+.orbit-bar ol.inline {
+ margin-left: 0;
+ list-style: none;
+}
+
+.orbit-bar ul.inline > li,
+.orbit-bar ol.inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+.orbit-bar dl {
+ margin-bottom: 20px;
+}
+
+.orbit-bar dt,
+.orbit-bar dd {
+ line-height: 20px;
+}
+
+.orbit-bar dt {
+ font-weight: bold;
+}
+
+.orbit-bar dd {
+ margin-left: 10px;
+}
+
+.orbit-bar .dl-horizontal {
+ *zoom: 1;
+}
+
+.orbit-bar .dl-horizontal:before,
+.orbit-bar .dl-horizontal:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .dl-horizontal:after {
+ clear: both;
+}
+
+.orbit-bar .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.orbit-bar .dl-horizontal dd {
+ margin-left: 180px;
+}
+
+.orbit-bar hr {
+ margin: 20px 0;
+ border: 0;
+ border-top: 1px solid #eeeeee;
+ border-bottom: 1px solid #ffffff;
+}
+
+.orbit-bar abbr[title],
+.orbit-bar abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999999;
+}
+
+.orbit-bar abbr.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+.orbit-bar blockquote {
+ padding: 0 0 0 15px;
+ margin: 0 0 20px;
+ border-left: 5px solid #eeeeee;
+}
+
+.orbit-bar blockquote p {
+ margin-bottom: 0;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 25px;
+}
+
+.orbit-bar blockquote small {
+ display: block;
+ line-height: 20px;
+ color: #999999;
+}
+
+.orbit-bar blockquote small:before {
+ content: '\2014 \00A0';
+}
+
+.orbit-bar blockquote.pull-right {
+ float: right;
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #eeeeee;
+ border-left: 0;
+}
+
+.orbit-bar blockquote.pull-right p,
+.orbit-bar blockquote.pull-right small {
+ text-align: right;
+}
+
+.orbit-bar blockquote.pull-right small:before {
+ content: '';
+}
+
+.orbit-bar blockquote.pull-right small:after {
+ content: '\00A0 \2014';
+}
+
+.orbit-bar q:before,
+.orbit-bar q:after,
+.orbit-bar blockquote:before,
+.orbit-bar blockquote:after {
+ content: "";
+}
+
+.orbit-bar address {
+ display: block;
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 20px;
+}
+
+.orbit-bar code,
+.orbit-bar pre {
+ padding: 0 3px 2px;
+ font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
+ font-size: 12px;
+ color: #333333;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.orbit-bar code {
+ padding: 2px 4px;
+ color: #d14;
+ white-space: nowrap;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8;
+}
+
+.orbit-bar pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 20px;
+ word-break: break-all;
+ word-wrap: break-word;
+ white-space: pre;
+ white-space: pre-wrap;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar pre.prettyprint {
+ margin-bottom: 20px;
+}
+
+.orbit-bar pre code {
+ padding: 0;
+ color: inherit;
+ white-space: pre;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border: 0;
+}
+
+.orbit-bar .pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+.orbit-bar form {
+ margin: 0 0 20px;
+}
+
+.orbit-bar fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+.orbit-bar legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: 40px;
+ color: #333333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.orbit-bar legend small {
+ font-size: 15px;
+ color: #999999;
+}
+
+.orbit-bar label,
+.orbit-bar input,
+.orbit-bar button,
+.orbit-bar select,
+.orbit-bar textarea {
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 20px;
+}
+
+.orbit-bar input,
+.orbit-bar button,
+.orbit-bar select,
+.orbit-bar textarea {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+.orbit-bar label {
+ display: block;
+ margin-bottom: 5px;
+}
+
+.orbit-bar select,
+.orbit-bar textarea,
+.orbit-bar input[type="text"],
+.orbit-bar input[type="password"],
+.orbit-bar input[type="datetime"],
+.orbit-bar input[type="datetime-local"],
+.orbit-bar input[type="date"],
+.orbit-bar input[type="month"],
+.orbit-bar input[type="time"],
+.orbit-bar input[type="week"],
+.orbit-bar input[type="number"],
+.orbit-bar input[type="email"],
+.orbit-bar input[type="url"],
+.orbit-bar input[type="search"],
+.orbit-bar input[type="tel"],
+.orbit-bar input[type="color"],
+.orbit-bar .uneditable-input {
+ display: inline-block;
+ height: 20px;
+ padding: 4px 6px;
+ margin-bottom: 10px;
+ font-size: 14px;
+ line-height: 20px;
+ color: #555555;
+ vertical-align: middle;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar input,
+.orbit-bar textarea,
+.orbit-bar .uneditable-input {
+ width: 206px;
+}
+
+.orbit-bar textarea {
+ height: auto;
+}
+
+.orbit-bar textarea,
+.orbit-bar input[type="text"],
+.orbit-bar input[type="password"],
+.orbit-bar input[type="datetime"],
+.orbit-bar input[type="datetime-local"],
+.orbit-bar input[type="date"],
+.orbit-bar input[type="month"],
+.orbit-bar input[type="time"],
+.orbit-bar input[type="week"],
+.orbit-bar input[type="number"],
+.orbit-bar input[type="email"],
+.orbit-bar input[type="url"],
+.orbit-bar input[type="search"],
+.orbit-bar input[type="tel"],
+.orbit-bar input[type="color"],
+.orbit-bar .uneditable-input {
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+ transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+
+.orbit-bar textarea:focus,
+.orbit-bar input[type="text"]:focus,
+.orbit-bar input[type="password"]:focus,
+.orbit-bar input[type="datetime"]:focus,
+.orbit-bar input[type="datetime-local"]:focus,
+.orbit-bar input[type="date"]:focus,
+.orbit-bar input[type="month"]:focus,
+.orbit-bar input[type="time"]:focus,
+.orbit-bar input[type="week"]:focus,
+.orbit-bar input[type="number"]:focus,
+.orbit-bar input[type="email"]:focus,
+.orbit-bar input[type="url"]:focus,
+.orbit-bar input[type="search"]:focus,
+.orbit-bar input[type="tel"]:focus,
+.orbit-bar input[type="color"]:focus,
+.orbit-bar .uneditable-input:focus {
+ border-color: rgba(82, 168, 236, 0.8);
+ outline: 0;
+ outline: thin dotted \9;
+ /* IE6-9 */
+
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+}
+
+.orbit-bar input[type="radio"],
+.orbit-bar input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ *margin-top: 0;
+ line-height: normal;
+}
+
+.orbit-bar input[type="file"],
+.orbit-bar input[type="image"],
+.orbit-bar input[type="submit"],
+.orbit-bar input[type="reset"],
+.orbit-bar input[type="button"],
+.orbit-bar input[type="radio"],
+.orbit-bar input[type="checkbox"] {
+ width: auto;
+}
+
+.orbit-bar select,
+.orbit-bar input[type="file"] {
+ height: 30px;
+ /* In IE7, the height of the select element cannot be changed by height, only font-size */
+
+ *margin-top: 4px;
+ /* For IE7, add top margin to align select with labels */
+
+ line-height: 30px;
+}
+
+.orbit-bar select {
+ width: 220px;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+}
+
+.orbit-bar select[multiple],
+.orbit-bar select[size] {
+ height: auto;
+}
+
+.orbit-bar select:focus,
+.orbit-bar input[type="file"]:focus,
+.orbit-bar input[type="radio"]:focus,
+.orbit-bar input[type="checkbox"]:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.orbit-bar .uneditable-input,
+.orbit-bar .uneditable-textarea {
+ color: #999999;
+ cursor: not-allowed;
+ background-color: #fcfcfc;
+ border-color: #cccccc;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+}
+
+.orbit-bar .uneditable-input {
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.orbit-bar .uneditable-textarea {
+ width: auto;
+ height: auto;
+}
+
+.orbit-bar input:-moz-placeholder,
+.orbit-bar textarea:-moz-placeholder {
+ color: #999999;
+}
+
+.orbit-bar input:-ms-input-placeholder,
+.orbit-bar textarea:-ms-input-placeholder {
+ color: #999999;
+}
+
+.orbit-bar input::-webkit-input-placeholder,
+.orbit-bar textarea::-webkit-input-placeholder {
+ color: #999999;
+}
+
+.orbit-bar .radio,
+.orbit-bar .checkbox {
+ min-height: 20px;
+ padding-left: 20px;
+}
+
+.orbit-bar .radio input[type="radio"],
+.orbit-bar .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -20px;
+}
+
+.orbit-bar .controls > .radio:first-child,
+.orbit-bar .controls > .checkbox:first-child {
+ padding-top: 5px;
+}
+
+.orbit-bar .radio.inline,
+.orbit-bar .checkbox.inline {
+ display: inline-block;
+ padding-top: 5px;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.orbit-bar .radio.inline + .radio.inline,
+.orbit-bar .checkbox.inline + .checkbox.inline {
+ margin-left: 10px;
+}
+
+.orbit-bar .input-mini {
+ width: 60px;
+}
+
+.orbit-bar .input-small {
+ width: 90px;
+}
+
+.orbit-bar .input-medium {
+ width: 150px;
+}
+
+.orbit-bar .input-large {
+ width: 210px;
+}
+
+.orbit-bar .input-xlarge {
+ width: 270px;
+}
+
+.orbit-bar .input-xxlarge {
+ width: 530px;
+}
+
+.orbit-bar input[class*="span"],
+.orbit-bar select[class*="span"],
+.orbit-bar textarea[class*="span"],
+.orbit-bar .uneditable-input[class*="span"],
+.orbit-bar .row-fluid input[class*="span"],
+.orbit-bar .row-fluid select[class*="span"],
+.orbit-bar .row-fluid textarea[class*="span"],
+.orbit-bar .row-fluid .uneditable-input[class*="span"] {
+ float: none;
+ margin-left: 0;
+}
+
+.orbit-bar .input-append input[class*="span"],
+.orbit-bar .input-append .uneditable-input[class*="span"],
+.orbit-bar .input-prepend input[class*="span"],
+.orbit-bar .input-prepend .uneditable-input[class*="span"],
+.orbit-bar .row-fluid input[class*="span"],
+.orbit-bar .row-fluid select[class*="span"],
+.orbit-bar .row-fluid textarea[class*="span"],
+.orbit-bar .row-fluid .uneditable-input[class*="span"],
+.orbit-bar .row-fluid .input-prepend [class*="span"],
+.orbit-bar .row-fluid .input-append [class*="span"] {
+ display: inline-block;
+}
+
+.orbit-bar input,
+.orbit-bar textarea,
+.orbit-bar .uneditable-input {
+ margin-left: 0;
+}
+
+.orbit-bar .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 20px;
+}
+
+.orbit-bar input.span12,
+.orbit-bar textarea.span12,
+.orbit-bar .uneditable-input.span12 {
+ width: 926px;
+}
+
+.orbit-bar input.span11,
+.orbit-bar textarea.span11,
+.orbit-bar .uneditable-input.span11 {
+ width: 846px;
+}
+
+.orbit-bar input.span10,
+.orbit-bar textarea.span10,
+.orbit-bar .uneditable-input.span10 {
+ width: 766px;
+}
+
+.orbit-bar input.span9,
+.orbit-bar textarea.span9,
+.orbit-bar .uneditable-input.span9 {
+ width: 686px;
+}
+
+.orbit-bar input.span8,
+.orbit-bar textarea.span8,
+.orbit-bar .uneditable-input.span8 {
+ width: 606px;
+}
+
+.orbit-bar input.span7,
+.orbit-bar textarea.span7,
+.orbit-bar .uneditable-input.span7 {
+ width: 526px;
+}
+
+.orbit-bar input.span6,
+.orbit-bar textarea.span6,
+.orbit-bar .uneditable-input.span6 {
+ width: 446px;
+}
+
+.orbit-bar input.span5,
+.orbit-bar textarea.span5,
+.orbit-bar .uneditable-input.span5 {
+ width: 366px;
+}
+
+.orbit-bar input.span4,
+.orbit-bar textarea.span4,
+.orbit-bar .uneditable-input.span4 {
+ width: 286px;
+}
+
+.orbit-bar input.span3,
+.orbit-bar textarea.span3,
+.orbit-bar .uneditable-input.span3 {
+ width: 206px;
+}
+
+.orbit-bar input.span2,
+.orbit-bar textarea.span2,
+.orbit-bar .uneditable-input.span2 {
+ width: 126px;
+}
+
+.orbit-bar input.span1,
+.orbit-bar textarea.span1,
+.orbit-bar .uneditable-input.span1 {
+ width: 46px;
+}
+
+.orbit-bar .controls-row {
+ *zoom: 1;
+}
+
+.orbit-bar .controls-row:before,
+.orbit-bar .controls-row:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .controls-row:after {
+ clear: both;
+}
+
+.orbit-bar .controls-row [class*="span"],
+.orbit-bar .row-fluid .controls-row [class*="span"] {
+ float: left;
+}
+
+.orbit-bar .controls-row .checkbox[class*="span"],
+.orbit-bar .controls-row .radio[class*="span"] {
+ padding-top: 5px;
+}
+
+.orbit-bar input[disabled],
+.orbit-bar select[disabled],
+.orbit-bar textarea[disabled],
+.orbit-bar input[readonly],
+.orbit-bar select[readonly],
+.orbit-bar textarea[readonly] {
+ cursor: not-allowed;
+ background-color: #eeeeee;
+}
+
+.orbit-bar input[type="radio"][disabled],
+.orbit-bar input[type="checkbox"][disabled],
+.orbit-bar input[type="radio"][readonly],
+.orbit-bar input[type="checkbox"][readonly] {
+ background-color: transparent;
+}
+
+.orbit-bar .control-group.warning .control-label,
+.orbit-bar .control-group.warning .help-block,
+.orbit-bar .control-group.warning .help-inline {
+ color: #c09853;
+}
+
+.orbit-bar .control-group.warning .checkbox,
+.orbit-bar .control-group.warning .radio,
+.orbit-bar .control-group.warning input,
+.orbit-bar .control-group.warning select,
+.orbit-bar .control-group.warning textarea {
+ color: #c09853;
+}
+
+.orbit-bar .control-group.warning input,
+.orbit-bar .control-group.warning select,
+.orbit-bar .control-group.warning textarea {
+ border-color: #c09853;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.orbit-bar .control-group.warning input:focus,
+.orbit-bar .control-group.warning select:focus,
+.orbit-bar .control-group.warning textarea:focus {
+ border-color: #a47e3c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
+}
+
+.orbit-bar .control-group.warning .input-prepend .add-on,
+.orbit-bar .control-group.warning .input-append .add-on {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #c09853;
+}
+
+.orbit-bar .control-group.error .control-label,
+.orbit-bar .control-group.error .help-block,
+.orbit-bar .control-group.error .help-inline {
+ color: #b94a48;
+}
+
+.orbit-bar .control-group.error .checkbox,
+.orbit-bar .control-group.error .radio,
+.orbit-bar .control-group.error input,
+.orbit-bar .control-group.error select,
+.orbit-bar .control-group.error textarea {
+ color: #b94a48;
+}
+
+.orbit-bar .control-group.error input,
+.orbit-bar .control-group.error select,
+.orbit-bar .control-group.error textarea {
+ border-color: #b94a48;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.orbit-bar .control-group.error input:focus,
+.orbit-bar .control-group.error select:focus,
+.orbit-bar .control-group.error textarea:focus {
+ border-color: #953b39;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
+}
+
+.orbit-bar .control-group.error .input-prepend .add-on,
+.orbit-bar .control-group.error .input-append .add-on {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #b94a48;
+}
+
+.orbit-bar .control-group.success .control-label,
+.orbit-bar .control-group.success .help-block,
+.orbit-bar .control-group.success .help-inline {
+ color: #468847;
+}
+
+.orbit-bar .control-group.success .checkbox,
+.orbit-bar .control-group.success .radio,
+.orbit-bar .control-group.success input,
+.orbit-bar .control-group.success select,
+.orbit-bar .control-group.success textarea {
+ color: #468847;
+}
+
+.orbit-bar .control-group.success input,
+.orbit-bar .control-group.success select,
+.orbit-bar .control-group.success textarea {
+ border-color: #468847;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.orbit-bar .control-group.success input:focus,
+.orbit-bar .control-group.success select:focus,
+.orbit-bar .control-group.success textarea:focus {
+ border-color: #356635;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
+}
+
+.orbit-bar .control-group.success .input-prepend .add-on,
+.orbit-bar .control-group.success .input-append .add-on {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #468847;
+}
+
+.orbit-bar .control-group.info .control-label,
+.orbit-bar .control-group.info .help-block,
+.orbit-bar .control-group.info .help-inline {
+ color: #3a87ad;
+}
+
+.orbit-bar .control-group.info .checkbox,
+.orbit-bar .control-group.info .radio,
+.orbit-bar .control-group.info input,
+.orbit-bar .control-group.info select,
+.orbit-bar .control-group.info textarea {
+ color: #3a87ad;
+}
+
+.orbit-bar .control-group.info input,
+.orbit-bar .control-group.info select,
+.orbit-bar .control-group.info textarea {
+ border-color: #3a87ad;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+.orbit-bar .control-group.info input:focus,
+.orbit-bar .control-group.info select:focus,
+.orbit-bar .control-group.info textarea:focus {
+ border-color: #2d6987;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
+}
+
+.orbit-bar .control-group.info .input-prepend .add-on,
+.orbit-bar .control-group.info .input-append .add-on {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #3a87ad;
+}
+
+.orbit-bar input:focus:invalid,
+.orbit-bar textarea:focus:invalid,
+.orbit-bar select:focus:invalid {
+ color: #b94a48;
+ border-color: #ee5f5b;
+}
+
+.orbit-bar input:focus:invalid:focus,
+.orbit-bar textarea:focus:invalid:focus,
+.orbit-bar select:focus:invalid:focus {
+ border-color: #e9322d;
+ -webkit-box-shadow: 0 0 6px #f8b9b7;
+ -moz-box-shadow: 0 0 6px #f8b9b7;
+ box-shadow: 0 0 6px #f8b9b7;
+}
+
+.orbit-bar .form-actions {
+ padding: 19px 20px 20px;
+ margin-top: 20px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #e5e5e5;
+ *zoom: 1;
+}
+
+.orbit-bar .form-actions:before,
+.orbit-bar .form-actions:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .form-actions:after {
+ clear: both;
+}
+
+.orbit-bar .help-block,
+.orbit-bar .help-inline {
+ color: #595959;
+}
+
+.orbit-bar .help-block {
+ display: block;
+ margin-bottom: 10px;
+}
+
+.orbit-bar .help-inline {
+ display: inline-block;
+ *display: inline;
+ padding-left: 5px;
+ vertical-align: middle;
+ *zoom: 1;
+}
+
+.orbit-bar .input-append,
+.orbit-bar .input-prepend {
+ margin-bottom: 5px;
+ font-size: 0;
+ white-space: nowrap;
+}
+
+.orbit-bar .input-append input,
+.orbit-bar .input-prepend input,
+.orbit-bar .input-append select,
+.orbit-bar .input-prepend select,
+.orbit-bar .input-append .uneditable-input,
+.orbit-bar .input-prepend .uneditable-input,
+.orbit-bar .input-append .dropdown-menu,
+.orbit-bar .input-prepend .dropdown-menu {
+ font-size: 14px;
+}
+
+.orbit-bar .input-append input,
+.orbit-bar .input-prepend input,
+.orbit-bar .input-append select,
+.orbit-bar .input-prepend select,
+.orbit-bar .input-append .uneditable-input,
+.orbit-bar .input-prepend .uneditable-input {
+ position: relative;
+ margin-bottom: 0;
+ *margin-left: 0;
+ vertical-align: top;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.orbit-bar .input-append input:focus,
+.orbit-bar .input-prepend input:focus,
+.orbit-bar .input-append select:focus,
+.orbit-bar .input-prepend select:focus,
+.orbit-bar .input-append .uneditable-input:focus,
+.orbit-bar .input-prepend .uneditable-input:focus {
+ z-index: 2;
+}
+
+.orbit-bar .input-append .add-on,
+.orbit-bar .input-prepend .add-on {
+ display: inline-block;
+ width: auto;
+ height: 20px;
+ min-width: 16px;
+ padding: 4px 5px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 20px;
+ text-align: center;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #eeeeee;
+ border: 1px solid #ccc;
+}
+
+.orbit-bar .input-append .add-on,
+.orbit-bar .input-prepend .add-on,
+.orbit-bar .input-append .btn,
+.orbit-bar .input-prepend .btn,
+.orbit-bar .input-append .btn-group > .dropdown-toggle,
+.orbit-bar .input-prepend .btn-group > .dropdown-toggle {
+ vertical-align: top;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .input-append .active,
+.orbit-bar .input-prepend .active {
+ background-color: #a9dba9;
+ border-color: #46a546;
+}
+
+.orbit-bar .input-prepend .add-on,
+.orbit-bar .input-prepend .btn {
+ margin-right: -1px;
+}
+
+.orbit-bar .input-prepend .add-on:first-child,
+.orbit-bar .input-prepend .btn:first-child {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.orbit-bar .input-append input,
+.orbit-bar .input-append select,
+.orbit-bar .input-append .uneditable-input {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.orbit-bar .input-append input + .btn-group .btn:last-child,
+.orbit-bar .input-append select + .btn-group .btn:last-child,
+.orbit-bar .input-append .uneditable-input + .btn-group .btn:last-child {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.orbit-bar .input-append .add-on,
+.orbit-bar .input-append .btn,
+.orbit-bar .input-append .btn-group {
+ margin-left: -1px;
+}
+
+.orbit-bar .input-append .add-on:last-child,
+.orbit-bar .input-append .btn:last-child,
+.orbit-bar .input-append .btn-group:last-child > .dropdown-toggle {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.orbit-bar .input-prepend.input-append input,
+.orbit-bar .input-prepend.input-append select,
+.orbit-bar .input-prepend.input-append .uneditable-input {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .input-prepend.input-append input + .btn-group .btn,
+.orbit-bar .input-prepend.input-append select + .btn-group .btn,
+.orbit-bar .input-prepend.input-append .uneditable-input + .btn-group .btn {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.orbit-bar .input-prepend.input-append .add-on:first-child,
+.orbit-bar .input-prepend.input-append .btn:first-child {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.orbit-bar .input-prepend.input-append .add-on:last-child,
+.orbit-bar .input-prepend.input-append .btn:last-child {
+ margin-left: -1px;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.orbit-bar .input-prepend.input-append .btn-group:first-child {
+ margin-left: 0;
+}
+
+.orbit-bar input.search-query {
+ padding-right: 14px;
+ padding-right: 4px \9;
+ padding-left: 14px;
+ padding-left: 4px \9;
+ /* IE7-8 doesn't have border-radius, so don't indent the padding */
+
+ margin-bottom: 0;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+
+/* Allow for input prepend/append in search forms */
+
+.orbit-bar .form-search .input-append .search-query,
+.orbit-bar .form-search .input-prepend .search-query {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .form-search .input-append .search-query {
+ -webkit-border-radius: 14px 0 0 14px;
+ -moz-border-radius: 14px 0 0 14px;
+ border-radius: 14px 0 0 14px;
+}
+
+.orbit-bar .form-search .input-append .btn {
+ -webkit-border-radius: 0 14px 14px 0;
+ -moz-border-radius: 0 14px 14px 0;
+ border-radius: 0 14px 14px 0;
+}
+
+.orbit-bar .form-search .input-prepend .search-query {
+ -webkit-border-radius: 0 14px 14px 0;
+ -moz-border-radius: 0 14px 14px 0;
+ border-radius: 0 14px 14px 0;
+}
+
+.orbit-bar .form-search .input-prepend .btn {
+ -webkit-border-radius: 14px 0 0 14px;
+ -moz-border-radius: 14px 0 0 14px;
+ border-radius: 14px 0 0 14px;
+}
+
+.orbit-bar .form-search input,
+.orbit-bar .form-inline input,
+.orbit-bar .form-horizontal input,
+.orbit-bar .form-search textarea,
+.orbit-bar .form-inline textarea,
+.orbit-bar .form-horizontal textarea,
+.orbit-bar .form-search select,
+.orbit-bar .form-inline select,
+.orbit-bar .form-horizontal select,
+.orbit-bar .form-search .help-inline,
+.orbit-bar .form-inline .help-inline,
+.orbit-bar .form-horizontal .help-inline,
+.orbit-bar .form-search .uneditable-input,
+.orbit-bar .form-inline .uneditable-input,
+.orbit-bar .form-horizontal .uneditable-input,
+.orbit-bar .form-search .input-prepend,
+.orbit-bar .form-inline .input-prepend,
+.orbit-bar .form-horizontal .input-prepend,
+.orbit-bar .form-search .input-append,
+.orbit-bar .form-inline .input-append,
+.orbit-bar .form-horizontal .input-append {
+ display: inline-block;
+ *display: inline;
+ margin-bottom: 0;
+ vertical-align: middle;
+ *zoom: 1;
+}
+
+.orbit-bar .form-search .hide,
+.orbit-bar .form-inline .hide,
+.orbit-bar .form-horizontal .hide {
+ display: none;
+}
+
+.orbit-bar .form-search label,
+.orbit-bar .form-inline label,
+.orbit-bar .form-search .btn-group,
+.orbit-bar .form-inline .btn-group {
+ display: inline-block;
+}
+
+.orbit-bar .form-search .input-append,
+.orbit-bar .form-inline .input-append,
+.orbit-bar .form-search .input-prepend,
+.orbit-bar .form-inline .input-prepend {
+ margin-bottom: 0;
+}
+
+.orbit-bar .form-search .radio,
+.orbit-bar .form-search .checkbox,
+.orbit-bar .form-inline .radio,
+.orbit-bar .form-inline .checkbox {
+ padding-left: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+
+.orbit-bar .form-search .radio input[type="radio"],
+.orbit-bar .form-search .checkbox input[type="checkbox"],
+.orbit-bar .form-inline .radio input[type="radio"],
+.orbit-bar .form-inline .checkbox input[type="checkbox"] {
+ float: left;
+ margin-right: 3px;
+ margin-left: 0;
+}
+
+.orbit-bar .control-group {
+ margin-bottom: 10px;
+}
+
+.orbit-bar legend + .control-group {
+ margin-top: 20px;
+ -webkit-margin-top-collapse: separate;
+}
+
+.orbit-bar .form-horizontal .control-group {
+ margin-bottom: 20px;
+ *zoom: 1;
+}
+
+.orbit-bar .form-horizontal .control-group:before,
+.orbit-bar .form-horizontal .control-group:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .form-horizontal .control-group:after {
+ clear: both;
+}
+
+.orbit-bar .form-horizontal .control-label {
+ float: left;
+ width: 160px;
+ padding-top: 5px;
+ text-align: right;
+}
+
+.orbit-bar .form-horizontal .controls {
+ *display: inline-block;
+ *padding-left: 20px;
+ margin-left: 180px;
+ *margin-left: 0;
+}
+
+.orbit-bar .form-horizontal .controls:first-child {
+ *padding-left: 180px;
+}
+
+.orbit-bar .form-horizontal .help-block {
+ margin-bottom: 0;
+}
+
+.orbit-bar .form-horizontal input + .help-block,
+.orbit-bar .form-horizontal select + .help-block,
+.orbit-bar .form-horizontal textarea + .help-block,
+.orbit-bar .form-horizontal .uneditable-input + .help-block,
+.orbit-bar .form-horizontal .input-prepend + .help-block,
+.orbit-bar .form-horizontal .input-append + .help-block {
+ margin-top: 10px;
+}
+
+.orbit-bar .form-horizontal .form-actions {
+ padding-left: 180px;
+}
+
+.orbit-bar table {
+ max-width: 100%;
+ background-color: transparent;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+.orbit-bar .table {
+ width: 100%;
+ margin-bottom: 20px;
+}
+
+.orbit-bar .table th,
+.orbit-bar .table td {
+ padding: 8px;
+ line-height: 20px;
+ text-align: left;
+ vertical-align: top;
+ border-top: 1px solid #dddddd;
+}
+
+.orbit-bar .table th {
+ font-weight: bold;
+}
+
+.orbit-bar .table thead th {
+ vertical-align: bottom;
+}
+
+.orbit-bar .table caption + thead tr:first-child th,
+.orbit-bar .table caption + thead tr:first-child td,
+.orbit-bar .table colgroup + thead tr:first-child th,
+.orbit-bar .table colgroup + thead tr:first-child td,
+.orbit-bar .table thead:first-child tr:first-child th,
+.orbit-bar .table thead:first-child tr:first-child td {
+ border-top: 0;
+}
+
+.orbit-bar .table tbody + tbody {
+ border-top: 2px solid #dddddd;
+}
+
+.orbit-bar .table .table {
+ background-color: #ffffff;
+}
+
+.orbit-bar .table-condensed th,
+.orbit-bar .table-condensed td {
+ padding: 4px 5px;
+}
+
+.orbit-bar .table-bordered {
+ border: 1px solid #dddddd;
+ border-collapse: separate;
+ *border-collapse: collapse;
+ border-left: 0;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar .table-bordered th,
+.orbit-bar .table-bordered td {
+ border-left: 1px solid #dddddd;
+}
+
+.orbit-bar .table-bordered caption + thead tr:first-child th,
+.orbit-bar .table-bordered caption + tbody tr:first-child th,
+.orbit-bar .table-bordered caption + tbody tr:first-child td,
+.orbit-bar .table-bordered colgroup + thead tr:first-child th,
+.orbit-bar .table-bordered colgroup + tbody tr:first-child th,
+.orbit-bar .table-bordered colgroup + tbody tr:first-child td,
+.orbit-bar .table-bordered thead:first-child tr:first-child th,
+.orbit-bar .table-bordered tbody:first-child tr:first-child th,
+.orbit-bar .table-bordered tbody:first-child tr:first-child td {
+ border-top: 0;
+}
+
+.orbit-bar .table-bordered thead:first-child tr:first-child > th:first-child,
+.orbit-bar .table-bordered tbody:first-child tr:first-child > td:first-child {
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.orbit-bar .table-bordered thead:first-child tr:first-child > th:last-child,
+.orbit-bar .table-bordered tbody:first-child tr:first-child > td:last-child {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+}
+
+.orbit-bar .table-bordered thead:last-child tr:last-child > th:first-child,
+.orbit-bar .table-bordered tbody:last-child tr:last-child > td:first-child,
+.orbit-bar .table-bordered tfoot:last-child tr:last-child > td:first-child {
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+}
+
+.orbit-bar .table-bordered thead:last-child tr:last-child > th:last-child,
+.orbit-bar .table-bordered tbody:last-child tr:last-child > td:last-child,
+.orbit-bar .table-bordered tfoot:last-child tr:last-child > td:last-child {
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+}
+
+.orbit-bar .table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
+ -webkit-border-bottom-left-radius: 0;
+ border-bottom-left-radius: 0;
+ -moz-border-radius-bottomleft: 0;
+}
+
+.orbit-bar .table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
+ -webkit-border-bottom-right-radius: 0;
+ border-bottom-right-radius: 0;
+ -moz-border-radius-bottomright: 0;
+}
+
+.orbit-bar .table-bordered caption + thead tr:first-child th:first-child,
+.orbit-bar .table-bordered caption + tbody tr:first-child td:first-child,
+.orbit-bar .table-bordered colgroup + thead tr:first-child th:first-child,
+.orbit-bar .table-bordered colgroup + tbody tr:first-child td:first-child {
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.orbit-bar .table-bordered caption + thead tr:first-child th:last-child,
+.orbit-bar .table-bordered caption + tbody tr:first-child td:last-child,
+.orbit-bar .table-bordered colgroup + thead tr:first-child th:last-child,
+.orbit-bar .table-bordered colgroup + tbody tr:first-child td:last-child {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+}
+
+.orbit-bar .table-striped tbody > tr:nth-child(odd) > td,
+.orbit-bar .table-striped tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9;
+}
+
+.orbit-bar .table-hover tbody tr:hover td,
+.orbit-bar .table-hover tbody tr:hover th {
+ background-color: #f5f5f5;
+}
+
+.orbit-bar table td[class*="span"],
+.orbit-bar table th[class*="span"],
+.orbit-bar .row-fluid table td[class*="span"],
+.orbit-bar .row-fluid table th[class*="span"] {
+ display: table-cell;
+ float: none;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span1,
+.orbit-bar .table th.span1 {
+ float: none;
+ width: 44px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span2,
+.orbit-bar .table th.span2 {
+ float: none;
+ width: 124px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span3,
+.orbit-bar .table th.span3 {
+ float: none;
+ width: 204px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span4,
+.orbit-bar .table th.span4 {
+ float: none;
+ width: 284px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span5,
+.orbit-bar .table th.span5 {
+ float: none;
+ width: 364px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span6,
+.orbit-bar .table th.span6 {
+ float: none;
+ width: 444px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span7,
+.orbit-bar .table th.span7 {
+ float: none;
+ width: 524px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span8,
+.orbit-bar .table th.span8 {
+ float: none;
+ width: 604px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span9,
+.orbit-bar .table th.span9 {
+ float: none;
+ width: 684px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span10,
+.orbit-bar .table th.span10 {
+ float: none;
+ width: 764px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span11,
+.orbit-bar .table th.span11 {
+ float: none;
+ width: 844px;
+ margin-left: 0;
+}
+
+.orbit-bar .table td.span12,
+.orbit-bar .table th.span12 {
+ float: none;
+ width: 924px;
+ margin-left: 0;
+}
+
+.orbit-bar .table tbody tr.success td {
+ background-color: #dff0d8;
+}
+
+.orbit-bar .table tbody tr.error td {
+ background-color: #f2dede;
+}
+
+.orbit-bar .table tbody tr.warning td {
+ background-color: #fcf8e3;
+}
+
+.orbit-bar .table tbody tr.info td {
+ background-color: #d9edf7;
+}
+
+.orbit-bar .table-hover tbody tr.success:hover td {
+ background-color: #d0e9c6;
+}
+
+.orbit-bar .table-hover tbody tr.error:hover td {
+ background-color: #ebcccc;
+}
+
+.orbit-bar .table-hover tbody tr.warning:hover td {
+ background-color: #faf2cc;
+}
+
+.orbit-bar .table-hover tbody tr.info:hover td {
+ background-color: #c4e3f3;
+}
+
+.orbit-bar [class^="icon-"],
+.orbit-bar [class*=" icon-"] {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ margin-top: 1px;
+ *margin-right: .3em;
+ line-height: 14px;
+ vertical-align: text-top;
+ background-image: url("../images/glyphicons-halflings.png");
+ background-position: 14px 14px;
+ background-repeat: no-repeat;
+}
+
+/* White icons with optional class, or on hover/active states of certain elements */
+
+.orbit-bar .icon-white,
+.orbit-bar .nav-pills > .active > a > [class^="icon-"],
+.orbit-bar .nav-pills > .active > a > [class*=" icon-"],
+.orbit-bar .nav-list > .active > a > [class^="icon-"],
+.orbit-bar .nav-list > .active > a > [class*=" icon-"],
+.orbit-bar .navbar-inverse .nav > .active > a > [class^="icon-"],
+.orbit-bar .navbar-inverse .nav > .active > a > [class*=" icon-"],
+.orbit-bar .dropdown-menu > li > a:hover > [class^="icon-"],
+.orbit-bar .dropdown-menu > li > a:hover > [class*=" icon-"],
+.orbit-bar .dropdown-menu > .active > a > [class^="icon-"],
+.orbit-bar .dropdown-menu > .active > a > [class*=" icon-"],
+.orbit-bar .dropdown-submenu:hover > a > [class^="icon-"],
+.orbit-bar .dropdown-submenu:hover > a > [class*=" icon-"] {
+ background-image: url("../images/glyphicons-halflings-white.png");
+}
+
+.orbit-bar .icon-glass {
+ background-position: 0 0;
+}
+
+.orbit-bar .icon-music {
+ background-position: -24px 0;
+}
+
+.orbit-bar .icon-search {
+ background-position: -48px 0;
+}
+
+.orbit-bar .icon-envelope {
+ background-position: -72px 0;
+}
+
+.orbit-bar .icon-heart {
+ background-position: -96px 0;
+}
+
+.orbit-bar .icon-star {
+ background-position: -120px 0;
+}
+
+.orbit-bar .icon-star-empty {
+ background-position: -144px 0;
+}
+
+.orbit-bar .icon-user {
+ background-position: -168px 0;
+}
+
+.orbit-bar .icon-film {
+ background-position: -192px 0;
+}
+
+.orbit-bar .icon-th-large {
+ background-position: -216px 0;
+}
+
+.orbit-bar .icon-th {
+ background-position: -240px 0;
+}
+
+.orbit-bar .icon-th-list {
+ background-position: -264px 0;
+}
+
+.orbit-bar .icon-ok {
+ background-position: -288px 0;
+}
+
+.orbit-bar .icon-remove {
+ background-position: -312px 0;
+}
+
+.orbit-bar .icon-zoom-in {
+ background-position: -336px 0;
+}
+
+.orbit-bar .icon-zoom-out {
+ background-position: -360px 0;
+}
+
+.orbit-bar .icon-off {
+ background-position: -384px 0;
+}
+
+.orbit-bar .icon-signal {
+ background-position: -408px 0;
+}
+
+.orbit-bar .icon-cog {
+ background-position: -432px 0;
+}
+
+.orbit-bar .icon-trash {
+ background-position: -456px 0;
+}
+
+.orbit-bar .icon-home {
+ background-position: 0 -24px;
+}
+
+.orbit-bar .icon-file {
+ background-position: -24px -24px;
+}
+
+.orbit-bar .icon-time {
+ background-position: -48px -24px;
+}
+
+.orbit-bar .icon-road {
+ background-position: -72px -24px;
+}
+
+.orbit-bar .icon-download-alt {
+ background-position: -96px -24px;
+}
+
+.orbit-bar .icon-download {
+ background-position: -120px -24px;
+}
+
+.orbit-bar .icon-upload {
+ background-position: -144px -24px;
+}
+
+.orbit-bar .icon-inbox {
+ background-position: -168px -24px;
+}
+
+.orbit-bar .icon-play-circle {
+ background-position: -192px -24px;
+}
+
+.orbit-bar .icon-repeat {
+ background-position: -216px -24px;
+}
+
+.orbit-bar .icon-refresh {
+ background-position: -240px -24px;
+}
+
+.orbit-bar .icon-list-alt {
+ background-position: -264px -24px;
+}
+
+.orbit-bar .icon-lock {
+ background-position: -287px -24px;
+}
+
+.orbit-bar .icon-flag {
+ background-position: -312px -24px;
+}
+
+.orbit-bar .icon-headphones {
+ background-position: -336px -24px;
+}
+
+.orbit-bar .icon-volume-off {
+ background-position: -360px -24px;
+}
+
+.orbit-bar .icon-volume-down {
+ background-position: -384px -24px;
+}
+
+.orbit-bar .icon-volume-up {
+ background-position: -408px -24px;
+}
+
+.orbit-bar .icon-qrcode {
+ background-position: -432px -24px;
+}
+
+.orbit-bar .icon-barcode {
+ background-position: -456px -24px;
+}
+
+.orbit-bar .icon-tag {
+ background-position: 0 -48px;
+}
+
+.orbit-bar .icon-tags {
+ background-position: -25px -48px;
+}
+
+.orbit-bar .icon-book {
+ background-position: -48px -48px;
+}
+
+.orbit-bar .icon-bookmark {
+ background-position: -72px -48px;
+}
+
+.orbit-bar .icon-print {
+ background-position: -96px -48px;
+}
+
+.orbit-bar .icon-camera {
+ background-position: -120px -48px;
+}
+
+.orbit-bar .icon-font {
+ background-position: -144px -48px;
+}
+
+.orbit-bar .icon-bold {
+ background-position: -167px -48px;
+}
+
+.orbit-bar .icon-italic {
+ background-position: -192px -48px;
+}
+
+.orbit-bar .icon-text-height {
+ background-position: -216px -48px;
+}
+
+.orbit-bar .icon-text-width {
+ background-position: -240px -48px;
+}
+
+.orbit-bar .icon-align-left {
+ background-position: -264px -48px;
+}
+
+.orbit-bar .icon-align-center {
+ background-position: -288px -48px;
+}
+
+.orbit-bar .icon-align-right {
+ background-position: -312px -48px;
+}
+
+.orbit-bar .icon-align-justify {
+ background-position: -336px -48px;
+}
+
+.orbit-bar .icon-list {
+ background-position: -360px -48px;
+}
+
+.orbit-bar .icon-indent-left {
+ background-position: -384px -48px;
+}
+
+.orbit-bar .icon-indent-right {
+ background-position: -408px -48px;
+}
+
+.orbit-bar .icon-facetime-video {
+ background-position: -432px -48px;
+}
+
+.orbit-bar .icon-picture {
+ background-position: -456px -48px;
+}
+
+.orbit-bar .icon-pencil {
+ background-position: 0 -72px;
+}
+
+.orbit-bar .icon-map-marker {
+ background-position: -24px -72px;
+}
+
+.orbit-bar .icon-adjust {
+ background-position: -48px -72px;
+}
+
+.orbit-bar .icon-tint {
+ background-position: -72px -72px;
+}
+
+.orbit-bar .icon-edit {
+ background-position: -96px -72px;
+}
+
+.orbit-bar .icon-share {
+ background-position: -120px -72px;
+}
+
+.orbit-bar .icon-check {
+ background-position: -144px -72px;
+}
+
+.orbit-bar .icon-move {
+ background-position: -168px -72px;
+}
+
+.orbit-bar .icon-step-backward {
+ background-position: -192px -72px;
+}
+
+.orbit-bar .icon-fast-backward {
+ background-position: -216px -72px;
+}
+
+.orbit-bar .icon-backward {
+ background-position: -240px -72px;
+}
+
+.orbit-bar .icon-play {
+ background-position: -264px -72px;
+}
+
+.orbit-bar .icon-pause {
+ background-position: -288px -72px;
+}
+
+.orbit-bar .icon-stop {
+ background-position: -312px -72px;
+}
+
+.orbit-bar .icon-forward {
+ background-position: -336px -72px;
+}
+
+.orbit-bar .icon-fast-forward {
+ background-position: -360px -72px;
+}
+
+.orbit-bar .icon-step-forward {
+ background-position: -384px -72px;
+}
+
+.orbit-bar .icon-eject {
+ background-position: -408px -72px;
+}
+
+.orbit-bar .icon-chevron-left {
+ background-position: -432px -72px;
+}
+
+.orbit-bar .icon-chevron-right {
+ background-position: -456px -72px;
+}
+
+.orbit-bar .icon-plus-sign {
+ background-position: 0 -96px;
+}
+
+.orbit-bar .icon-minus-sign {
+ background-position: -24px -96px;
+}
+
+.orbit-bar .icon-remove-sign {
+ background-position: -48px -96px;
+}
+
+.orbit-bar .icon-ok-sign {
+ background-position: -72px -96px;
+}
+
+.orbit-bar .icon-question-sign {
+ background-position: -96px -96px;
+}
+
+.orbit-bar .icon-info-sign {
+ background-position: -120px -96px;
+}
+
+.orbit-bar .icon-screenshot {
+ background-position: -144px -96px;
+}
+
+.orbit-bar .icon-remove-circle {
+ background-position: -168px -96px;
+}
+
+.orbit-bar .icon-ok-circle {
+ background-position: -192px -96px;
+}
+
+.orbit-bar .icon-ban-circle {
+ background-position: -216px -96px;
+}
+
+.orbit-bar .icon-arrow-left {
+ background-position: -240px -96px;
+}
+
+.orbit-bar .icon-arrow-right {
+ background-position: -264px -96px;
+}
+
+.orbit-bar .icon-arrow-up {
+ background-position: -289px -96px;
+}
+
+.orbit-bar .icon-arrow-down {
+ background-position: -312px -96px;
+}
+
+.orbit-bar .icon-share-alt {
+ background-position: -336px -96px;
+}
+
+.orbit-bar .icon-resize-full {
+ background-position: -360px -96px;
+}
+
+.orbit-bar .icon-resize-small {
+ background-position: -384px -96px;
+}
+
+.orbit-bar .icon-plus {
+ background-position: -408px -96px;
+}
+
+.orbit-bar .icon-minus {
+ background-position: -433px -96px;
+}
+
+.orbit-bar .icon-asterisk {
+ background-position: -456px -96px;
+}
+
+.orbit-bar .icon-exclamation-sign {
+ background-position: 0 -120px;
+}
+
+.orbit-bar .icon-gift {
+ background-position: -24px -120px;
+}
+
+.orbit-bar .icon-leaf {
+ background-position: -48px -120px;
+}
+
+.orbit-bar .icon-fire {
+ background-position: -72px -120px;
+}
+
+.orbit-bar .icon-eye-open {
+ background-position: -96px -120px;
+}
+
+.orbit-bar .icon-eye-close {
+ background-position: -120px -120px;
+}
+
+.orbit-bar .icon-warning-sign {
+ background-position: -144px -120px;
+}
+
+.orbit-bar .icon-plane {
+ background-position: -168px -120px;
+}
+
+.orbit-bar .icon-calendar {
+ background-position: -192px -120px;
+}
+
+.orbit-bar .icon-random {
+ width: 16px;
+ background-position: -216px -120px;
+}
+
+.orbit-bar .icon-comment {
+ background-position: -240px -120px;
+}
+
+.orbit-bar .icon-magnet {
+ background-position: -264px -120px;
+}
+
+.orbit-bar .icon-chevron-up {
+ background-position: -288px -120px;
+}
+
+.orbit-bar .icon-chevron-down {
+ background-position: -313px -119px;
+}
+
+.orbit-bar .icon-retweet {
+ background-position: -336px -120px;
+}
+
+.orbit-bar .icon-shopping-cart {
+ background-position: -360px -120px;
+}
+
+.orbit-bar .icon-folder-close {
+ background-position: -384px -120px;
+}
+
+.orbit-bar .icon-folder-open {
+ width: 16px;
+ background-position: -408px -120px;
+}
+
+.orbit-bar .icon-resize-vertical {
+ background-position: -432px -119px;
+}
+
+.orbit-bar .icon-resize-horizontal {
+ background-position: -456px -118px;
+}
+
+.orbit-bar .icon-hdd {
+ background-position: 0 -144px;
+}
+
+.orbit-bar .icon-bullhorn {
+ background-position: -24px -144px;
+}
+
+.orbit-bar .icon-bell {
+ background-position: -48px -144px;
+}
+
+.orbit-bar .icon-certificate {
+ background-position: -72px -144px;
+}
+
+.orbit-bar .icon-thumbs-up {
+ background-position: -96px -144px;
+}
+
+.orbit-bar .icon-thumbs-down {
+ background-position: -120px -144px;
+}
+
+.orbit-bar .icon-hand-right {
+ background-position: -144px -144px;
+}
+
+.orbit-bar .icon-hand-left {
+ background-position: -168px -144px;
+}
+
+.orbit-bar .icon-hand-up {
+ background-position: -192px -144px;
+}
+
+.orbit-bar .icon-hand-down {
+ background-position: -216px -144px;
+}
+
+.orbit-bar .icon-circle-arrow-right {
+ background-position: -240px -144px;
+}
+
+.orbit-bar .icon-circle-arrow-left {
+ background-position: -264px -144px;
+}
+
+.orbit-bar .icon-circle-arrow-up {
+ background-position: -288px -144px;
+}
+
+.orbit-bar .icon-circle-arrow-down {
+ background-position: -312px -144px;
+}
+
+.orbit-bar .icon-globe {
+ background-position: -336px -144px;
+}
+
+.orbit-bar .icon-wrench {
+ background-position: -360px -144px;
+}
+
+.orbit-bar .icon-tasks {
+ background-position: -384px -144px;
+}
+
+.orbit-bar .icon-filter {
+ background-position: -408px -144px;
+}
+
+.orbit-bar .icon-briefcase {
+ background-position: -432px -144px;
+}
+
+.orbit-bar .icon-fullscreen {
+ background-position: -456px -144px;
+}
+
+.orbit-bar .dropup,
+.orbit-bar .dropdown {
+ position: relative;
+}
+
+.orbit-bar .dropdown-toggle {
+ *margin-bottom: -3px;
+}
+
+.orbit-bar .dropdown-toggle:active,
+.orbit-bar .open .dropdown-toggle {
+ outline: 0;
+}
+
+.orbit-bar .caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ vertical-align: top;
+ border-top: 4px solid #000000;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+ content: "";
+}
+
+.orbit-bar .dropdown .caret {
+ margin-top: 8px;
+ margin-left: 2px;
+}
+
+.orbit-bar .dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ list-style: none;
+ background-color: #ffffff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ *border-right-width: 2px;
+ *border-bottom-width: 2px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+
+.orbit-bar .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.orbit-bar .dropdown-menu .divider {
+ *width: 100%;
+ height: 1px;
+ margin: 9px 1px;
+ *margin: -5px 0 5px;
+ overflow: hidden;
+ background-color: #e5e5e5;
+ border-bottom: 1px solid #ffffff;
+}
+
+.orbit-bar .dropdown-menu li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 20px;
+ color: #333333;
+ white-space: nowrap;
+}
+
+.orbit-bar .dropdown-menu li > a:hover,
+.orbit-bar .dropdown-menu li > a:focus,
+.orbit-bar .dropdown-submenu:hover > a {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #0081c2;
+ background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+ background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.orbit-bar .dropdown-menu .active > a,
+.orbit-bar .dropdown-menu .active > a:hover {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #0081c2;
+ background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
+ background-image: -o-linear-gradient(top, #0088cc, #0077b3);
+ background-image: linear-gradient(to bottom, #0088cc, #0077b3);
+ background-repeat: repeat-x;
+ outline: 0;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
+}
+
+.orbit-bar .dropdown-menu .disabled > a,
+.orbit-bar .dropdown-menu .disabled > a:hover {
+ color: #999999;
+}
+
+.orbit-bar .dropdown-menu .disabled > a:hover {
+ text-decoration: none;
+ cursor: default;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .open {
+ *z-index: 1000;
+}
+
+.orbit-bar .open > .dropdown-menu {
+ display: block;
+}
+
+.orbit-bar .pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+.orbit-bar .dropup .caret,
+.orbit-bar .navbar-fixed-bottom .dropdown .caret {
+ border-top: 0;
+ border-bottom: 4px solid #000000;
+ content: "";
+}
+
+.orbit-bar .dropup .dropdown-menu,
+.orbit-bar .navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+
+.orbit-bar .dropdown-submenu {
+ position: relative;
+}
+
+.orbit-bar .dropdown-submenu > .dropdown-menu {
+ top: 0;
+ left: 100%;
+ margin-top: -6px;
+ margin-left: -1px;
+ -webkit-border-radius: 0 6px 6px 6px;
+ -moz-border-radius: 0 6px 6px 6px;
+ border-radius: 0 6px 6px 6px;
+}
+
+.orbit-bar .dropdown-submenu:hover > .dropdown-menu {
+ display: block;
+}
+
+.orbit-bar .dropup .dropdown-submenu > .dropdown-menu {
+ top: auto;
+ bottom: 0;
+ margin-top: 0;
+ margin-bottom: -2px;
+ -webkit-border-radius: 5px 5px 5px 0;
+ -moz-border-radius: 5px 5px 5px 0;
+ border-radius: 5px 5px 5px 0;
+}
+
+.orbit-bar .dropdown-submenu > a:after {
+ display: block;
+ float: right;
+ width: 0;
+ height: 0;
+ margin-top: 5px;
+ margin-right: -10px;
+ border-color: transparent;
+ border-left-color: #cccccc;
+ border-style: solid;
+ border-width: 5px 0 5px 5px;
+ content: " ";
+}
+
+.orbit-bar .dropdown-submenu:hover > a:after {
+ border-left-color: #ffffff;
+}
+
+.orbit-bar .dropdown-submenu.pull-left {
+ float: none;
+}
+
+.orbit-bar .dropdown-submenu.pull-left > .dropdown-menu {
+ left: -100%;
+ margin-left: 10px;
+ -webkit-border-radius: 6px 0 6px 6px;
+ -moz-border-radius: 6px 0 6px 6px;
+ border-radius: 6px 0 6px 6px;
+}
+
+.orbit-bar .dropdown .dropdown-menu .nav-header {
+ padding-right: 20px;
+ padding-left: 20px;
+}
+
+.orbit-bar .typeahead {
+ z-index: 1051;
+ margin-top: 2px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar .well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+
+.orbit-bar .well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+.orbit-bar .well-large {
+ padding: 24px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.orbit-bar .well-small {
+ padding: 9px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity 0.15s linear;
+ -moz-transition: opacity 0.15s linear;
+ -o-transition: opacity 0.15s linear;
+ transition: opacity 0.15s linear;
+}
+
+.fade.in {
+ opacity: 1;
+}
+
+.orbit-bar .collapse {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height 0.35s ease;
+ -moz-transition: height 0.35s ease;
+ -o-transition: height 0.35s ease;
+ transition: height 0.35s ease;
+}
+
+.orbit-bar .collapse.in {
+ height: auto;
+}
+
+.orbit-bar .close {
+ float: right;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 20px;
+ color: #000000;
+ text-shadow: 0 1px 0 #ffffff;
+ opacity: 0.2;
+ filter: alpha(opacity=20);
+}
+
+.orbit-bar .close:hover {
+ color: #000000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+}
+
+.orbit-bar button.close {
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+ -webkit-appearance: none;
+}
+
+.orbit-bar .btn {
+ display: inline-block;
+ *display: inline;
+ padding: 4px 12px;
+ margin-bottom: 0;
+ *margin-left: .3em;
+ font-size: 14px;
+ line-height: 20px;
+ color: #333333;
+ text-align: center;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+ vertical-align: middle;
+ cursor: pointer;
+ background-color: #f5f5f5;
+ *background-color: #e6e6e6;
+ background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
+ background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+ background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
+ background-repeat: repeat-x;
+ border: 1px solid #bbbbbb;
+ *border: 0;
+ border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ border-bottom-color: #a2a2a2;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ *zoom: 1;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.orbit-bar .btn:hover,
+.orbit-bar .btn:active,
+.orbit-bar .btn.active,
+.orbit-bar .btn.disabled,
+.orbit-bar .btn[disabled] {
+ color: #333333;
+ background-color: #e6e6e6;
+ *background-color: #d9d9d9;
+}
+
+.orbit-bar .btn:active,
+.orbit-bar .btn.active {
+ background-color: #cccccc \9;
+}
+
+.orbit-bar .btn:first-child {
+ *margin-left: 0;
+}
+
+.orbit-bar .btn:hover {
+ color: #333333;
+ text-decoration: none;
+ background-position: 0 -15px;
+ -webkit-transition: background-position 0.1s linear;
+ -moz-transition: background-position 0.1s linear;
+ -o-transition: background-position 0.1s linear;
+ transition: background-position 0.1s linear;
+}
+
+.orbit-bar .btn:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.orbit-bar .btn.active,
+.orbit-bar .btn:active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.orbit-bar .btn.disabled,
+.orbit-bar .btn[disabled] {
+ cursor: default;
+ background-image: none;
+ opacity: 0.65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.orbit-bar .btn-large {
+ padding: 11px 19px;
+ font-size: 17.5px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.orbit-bar .btn-large [class^="icon-"],
+.orbit-bar .btn-large [class*=" icon-"] {
+ margin-top: 4px;
+}
+
+.orbit-bar .btn-small {
+ padding: 2px 10px;
+ font-size: 11.9px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.orbit-bar .btn-small [class^="icon-"],
+.orbit-bar .btn-small [class*=" icon-"] {
+ margin-top: 0;
+}
+
+.orbit-bar .btn-mini [class^="icon-"],
+.orbit-bar .btn-mini [class*=" icon-"] {
+ margin-top: -1px;
+}
+
+.orbit-bar .btn-mini {
+ padding: 0 6px;
+ font-size: 10.5px;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.orbit-bar .btn-block {
+ display: block;
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.orbit-bar .btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+.orbit-bar input[type="submit"].btn-block,
+.orbit-bar input[type="reset"].btn-block,
+.orbit-bar input[type="button"].btn-block {
+ width: 100%;
+}
+
+.orbit-bar .btn-primary.active,
+.orbit-bar .btn-warning.active,
+.orbit-bar .btn-danger.active,
+.orbit-bar .btn-success.active,
+.orbit-bar .btn-info.active,
+.orbit-bar .btn-inverse.active {
+ color: rgba(255, 255, 255, 0.75);
+}
+
+.orbit-bar .btn {
+ border-color: #c5c5c5;
+ border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
+}
+
+.orbit-bar .btn-primary {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #006dcc;
+ *background-color: #0044cc;
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+ background-image: linear-gradient(to bottom, #0088cc, #0044cc);
+ background-repeat: repeat-x;
+ border-color: #0044cc #0044cc #002a80;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .btn-primary:hover,
+.orbit-bar .btn-primary:active,
+.orbit-bar .btn-primary.active,
+.orbit-bar .btn-primary.disabled,
+.orbit-bar .btn-primary[disabled] {
+ color: #ffffff;
+ background-color: #0044cc;
+ *background-color: #003bb3;
+}
+
+.orbit-bar .btn-primary:active,
+.orbit-bar .btn-primary.active {
+ background-color: #003399 \9;
+}
+
+.orbit-bar .btn-warning {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #faa732;
+ *background-color: #f89406;
+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+ background-image: -o-linear-gradient(top, #fbb450, #f89406);
+ background-image: linear-gradient(to bottom, #fbb450, #f89406);
+ background-repeat: repeat-x;
+ border-color: #f89406 #f89406 #ad6704;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .btn-warning:hover,
+.orbit-bar .btn-warning:active,
+.orbit-bar .btn-warning.active,
+.orbit-bar .btn-warning.disabled,
+.orbit-bar .btn-warning[disabled] {
+ color: #ffffff;
+ background-color: #f89406;
+ *background-color: #df8505;
+}
+
+.orbit-bar .btn-warning:active,
+.orbit-bar .btn-warning.active {
+ background-color: #c67605 \9;
+}
+
+.orbit-bar .btn-danger {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #da4f49;
+ *background-color: #bd362f;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
+ background-repeat: repeat-x;
+ border-color: #bd362f #bd362f #802420;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .btn-danger:hover,
+.orbit-bar .btn-danger:active,
+.orbit-bar .btn-danger.active,
+.orbit-bar .btn-danger.disabled,
+.orbit-bar .btn-danger[disabled] {
+ color: #ffffff;
+ background-color: #bd362f;
+ *background-color: #a9302a;
+}
+
+.orbit-bar .btn-danger:active,
+.orbit-bar .btn-danger.active {
+ background-color: #942a25 \9;
+}
+
+.orbit-bar .btn-success {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #5bb75b;
+ *background-color: #51a351;
+ background-image: -moz-linear-gradient(top, #62c462, #51a351);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
+ background-image: -webkit-linear-gradient(top, #62c462, #51a351);
+ background-image: -o-linear-gradient(top, #62c462, #51a351);
+ background-image: linear-gradient(to bottom, #62c462, #51a351);
+ background-repeat: repeat-x;
+ border-color: #51a351 #51a351 #387038;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .btn-success:hover,
+.orbit-bar .btn-success:active,
+.orbit-bar .btn-success.active,
+.orbit-bar .btn-success.disabled,
+.orbit-bar .btn-success[disabled] {
+ color: #ffffff;
+ background-color: #51a351;
+ *background-color: #499249;
+}
+
+.orbit-bar .btn-success:active,
+.orbit-bar .btn-success.active {
+ background-color: #408140 \9;
+}
+
+.orbit-bar .btn-info {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #49afcd;
+ *background-color: #2f96b4;
+ background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
+ background-repeat: repeat-x;
+ border-color: #2f96b4 #2f96b4 #1f6377;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .btn-info:hover,
+.orbit-bar .btn-info:active,
+.orbit-bar .btn-info.active,
+.orbit-bar .btn-info.disabled,
+.orbit-bar .btn-info[disabled] {
+ color: #ffffff;
+ background-color: #2f96b4;
+ *background-color: #2a85a0;
+}
+
+.orbit-bar .btn-info:active,
+.orbit-bar .btn-info.active {
+ background-color: #24748c \9;
+}
+
+.orbit-bar .btn-inverse {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #363636;
+ *background-color: #222222;
+ background-image: -moz-linear-gradient(top, #444444, #222222);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
+ background-image: -webkit-linear-gradient(top, #444444, #222222);
+ background-image: -o-linear-gradient(top, #444444, #222222);
+ background-image: linear-gradient(to bottom, #444444, #222222);
+ background-repeat: repeat-x;
+ border-color: #222222 #222222 #000000;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .btn-inverse:hover,
+.orbit-bar .btn-inverse:active,
+.orbit-bar .btn-inverse.active,
+.orbit-bar .btn-inverse.disabled,
+.orbit-bar .btn-inverse[disabled] {
+ color: #ffffff;
+ background-color: #222222;
+ *background-color: #151515;
+}
+
+.orbit-bar .btn-inverse:active,
+.orbit-bar .btn-inverse.active {
+ background-color: #080808 \9;
+}
+
+.orbit-bar button.btn,
+.orbit-bar input[type="submit"].btn {
+ *padding-top: 3px;
+ *padding-bottom: 3px;
+}
+
+.orbit-bar button.btn::-moz-focus-inner,
+.orbit-bar input[type="submit"].btn::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+.orbit-bar button.btn.btn-large,
+.orbit-bar input[type="submit"].btn.btn-large {
+ *padding-top: 7px;
+ *padding-bottom: 7px;
+}
+
+.orbit-bar button.btn.btn-small,
+.orbit-bar input[type="submit"].btn.btn-small {
+ *padding-top: 3px;
+ *padding-bottom: 3px;
+}
+
+.orbit-bar button.btn.btn-mini,
+.orbit-bar input[type="submit"].btn.btn-mini {
+ *padding-top: 1px;
+ *padding-bottom: 1px;
+}
+
+.orbit-bar .btn-link,
+.orbit-bar .btn-link:active,
+.orbit-bar .btn-link[disabled] {
+ background-color: transparent;
+ background-image: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.orbit-bar .btn-link {
+ color: #0088cc;
+ cursor: pointer;
+ border-color: transparent;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .btn-link:hover {
+ color: #005580;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.orbit-bar .btn-link[disabled]:hover {
+ color: #333333;
+ text-decoration: none;
+}
+
+.orbit-bar .btn-group {
+ position: relative;
+ display: inline-block;
+ *display: inline;
+ *margin-left: .3em;
+ font-size: 0;
+ white-space: nowrap;
+ vertical-align: middle;
+ *zoom: 1;
+}
+
+.orbit-bar .btn-group:first-child {
+ *margin-left: 0;
+}
+
+.orbit-bar .btn-group + .btn-group {
+ margin-left: 5px;
+}
+
+.orbit-bar .btn-toolbar {
+ margin-top: 10px;
+ margin-bottom: 10px;
+ font-size: 0;
+}
+
+.orbit-bar .btn-toolbar > .btn + .btn,
+.orbit-bar .btn-toolbar > .btn-group + .btn,
+.orbit-bar .btn-toolbar > .btn + .btn-group {
+ margin-left: 5px;
+}
+
+.orbit-bar .btn-group > .btn {
+ position: relative;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .btn-group > .btn + .btn {
+ margin-left: -1px;
+}
+
+.orbit-bar .btn-group > .btn,
+.orbit-bar .btn-group > .dropdown-menu,
+.orbit-bar .btn-group > .popover {
+ font-size: 14px;
+}
+
+.orbit-bar .btn-group > .btn-mini {
+ font-size: 10.5px;
+}
+
+.orbit-bar .btn-group > .btn-small {
+ font-size: 11.9px;
+}
+
+.orbit-bar .btn-group > .btn-large {
+ font-size: 17.5px;
+}
+
+.orbit-bar .btn-group > .btn:first-child {
+ margin-left: 0;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.orbit-bar .btn-group > .btn:last-child,
+.orbit-bar .btn-group > .dropdown-toggle {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-bottomright: 4px;
+}
+
+.orbit-bar .btn-group > .btn.large:first-child {
+ margin-left: 0;
+ -webkit-border-bottom-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+ -webkit-border-top-left-radius: 6px;
+ border-top-left-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ -moz-border-radius-topleft: 6px;
+}
+
+.orbit-bar .btn-group > .btn.large:last-child,
+.orbit-bar .btn-group > .large.dropdown-toggle {
+ -webkit-border-top-right-radius: 6px;
+ border-top-right-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ -moz-border-radius-topright: 6px;
+ -moz-border-radius-bottomright: 6px;
+}
+
+.orbit-bar .btn-group > .btn:hover,
+.orbit-bar .btn-group > .btn:focus,
+.orbit-bar .btn-group > .btn:active,
+.orbit-bar .btn-group > .btn.active {
+ z-index: 2;
+}
+
+.orbit-bar .btn-group .dropdown-toggle:active,
+.orbit-bar .btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+.orbit-bar .btn-group > .btn + .dropdown-toggle {
+ *padding-top: 5px;
+ padding-right: 8px;
+ *padding-bottom: 5px;
+ padding-left: 8px;
+ -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.orbit-bar .btn-group > .btn-mini + .dropdown-toggle {
+ *padding-top: 2px;
+ padding-right: 5px;
+ *padding-bottom: 2px;
+ padding-left: 5px;
+}
+
+.orbit-bar .btn-group > .btn-small + .dropdown-toggle {
+ *padding-top: 5px;
+ *padding-bottom: 4px;
+}
+
+.orbit-bar .btn-group > .btn-large + .dropdown-toggle {
+ *padding-top: 7px;
+ padding-right: 12px;
+ *padding-bottom: 7px;
+ padding-left: 12px;
+}
+
+.orbit-bar .btn-group.open .dropdown-toggle {
+ background-image: none;
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.orbit-bar .btn-group.open .btn.dropdown-toggle {
+ background-color: #e6e6e6;
+}
+
+.orbit-bar .btn-group.open .btn-primary.dropdown-toggle {
+ background-color: #0044cc;
+}
+
+.orbit-bar .btn-group.open .btn-warning.dropdown-toggle {
+ background-color: #f89406;
+}
+
+.orbit-bar .btn-group.open .btn-danger.dropdown-toggle {
+ background-color: #bd362f;
+}
+
+.orbit-bar .btn-group.open .btn-success.dropdown-toggle {
+ background-color: #51a351;
+}
+
+.orbit-bar .btn-group.open .btn-info.dropdown-toggle {
+ background-color: #2f96b4;
+}
+
+.orbit-bar .btn-group.open .btn-inverse.dropdown-toggle {
+ background-color: #222222;
+}
+
+.orbit-bar .btn .caret {
+ margin-top: 8px;
+ margin-left: 0;
+}
+
+.orbit-bar .btn-mini .caret,
+.orbit-bar .btn-small .caret,
+.orbit-bar .btn-large .caret {
+ margin-top: 6px;
+}
+
+.orbit-bar .btn-large .caret {
+ border-top-width: 5px;
+ border-right-width: 5px;
+ border-left-width: 5px;
+}
+
+.orbit-bar .dropup .btn-large .caret {
+ border-bottom-width: 5px;
+}
+
+.orbit-bar .btn-primary .caret,
+.orbit-bar .btn-warning .caret,
+.orbit-bar .btn-danger .caret,
+.orbit-bar .btn-info .caret,
+.orbit-bar .btn-success .caret,
+.orbit-bar .btn-inverse .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+.orbit-bar .btn-group-vertical {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+
+ *zoom: 1;
+}
+
+.orbit-bar .btn-group-vertical > .btn {
+ display: block;
+ float: none;
+ max-width: 100%;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .btn-group-vertical > .btn + .btn {
+ margin-top: -1px;
+ margin-left: 0;
+}
+
+.orbit-bar .btn-group-vertical > .btn:first-child {
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.orbit-bar .btn-group-vertical > .btn:last-child {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.orbit-bar .btn-group-vertical > .btn-large:first-child {
+ -webkit-border-radius: 6px 6px 0 0;
+ -moz-border-radius: 6px 6px 0 0;
+ border-radius: 6px 6px 0 0;
+}
+
+.orbit-bar .btn-group-vertical > .btn-large:last-child {
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+}
+
+.orbit-bar .alert {
+ padding: 8px 35px 8px 14px;
+ margin-bottom: 20px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ background-color: #fcf8e3;
+ border: 1px solid #fbeed5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar .alert,
+.orbit-bar .alert h4 {
+ color: #c09853;
+}
+
+.orbit-bar .alert h4 {
+ margin: 0;
+}
+
+.orbit-bar .alert .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ line-height: 20px;
+}
+
+.orbit-bar .alert-success {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.orbit-bar .alert-success h4 {
+ color: #468847;
+}
+
+.orbit-bar .alert-danger,
+.orbit-bar .alert-error {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #eed3d7;
+}
+
+.orbit-bar .alert-danger h4,
+.orbit-bar .alert-error h4 {
+ color: #b94a48;
+}
+
+.orbit-bar .alert-info {
+ color: #3a87ad;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.orbit-bar .alert-info h4 {
+ color: #3a87ad;
+}
+
+.orbit-bar .alert-block {
+ padding-top: 14px;
+ padding-bottom: 14px;
+}
+
+.orbit-bar .alert-block > p,
+.orbit-bar .alert-block > ul {
+ margin-bottom: 0;
+}
+
+.orbit-bar .alert-block p + p {
+ margin-top: 5px;
+}
+
+.orbit-bar .nav {
+ margin-bottom: 20px;
+ margin-left: 0;
+ list-style: none;
+}
+
+.orbit-bar .nav > li > a {
+ display: block;
+}
+
+.orbit-bar .nav > li > a:hover {
+ text-decoration: none;
+ background-color: #eeeeee;
+}
+
+.orbit-bar .nav > li > a > img {
+ max-width: none;
+}
+
+.orbit-bar .nav > .pull-right {
+ float: right;
+}
+
+.orbit-bar .nav-header {
+ display: block;
+ padding: 3px 15px;
+ font-size: 11px;
+ font-weight: bold;
+ line-height: 20px;
+ color: #999999;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ text-transform: uppercase;
+}
+
+.orbit-bar .nav li + .nav-header {
+ margin-top: 9px;
+}
+
+.orbit-bar .nav-list {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-bottom: 0;
+}
+
+.orbit-bar .nav-list > li > a,
+.orbit-bar .nav-list .nav-header {
+ margin-right: -15px;
+ margin-left: -15px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+
+.orbit-bar .nav-list > li > a {
+ padding: 3px 15px;
+}
+
+.orbit-bar .nav-list > .active > a,
+.orbit-bar .nav-list > .active > a:hover {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+ background-color: #0088cc;
+}
+
+.orbit-bar .nav-list [class^="icon-"],
+.orbit-bar .nav-list [class*=" icon-"] {
+ margin-right: 2px;
+}
+
+.orbit-bar .nav-list .divider {
+ *width: 100%;
+ height: 1px;
+ margin: 9px 1px;
+ *margin: -5px 0 5px;
+ overflow: hidden;
+ background-color: #e5e5e5;
+ border-bottom: 1px solid #ffffff;
+}
+
+.orbit-bar .nav-tabs,
+.orbit-bar .nav-pills {
+ *zoom: 1;
+}
+
+.orbit-bar .nav-tabs:before,
+.orbit-bar .nav-pills:before,
+.orbit-bar .nav-tabs:after,
+.orbit-bar .nav-pills:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .nav-tabs:after,
+.orbit-bar .nav-pills:after {
+ clear: both;
+}
+
+.orbit-bar .nav-tabs > li,
+.orbit-bar .nav-pills > li {
+ float: left;
+}
+
+.orbit-bar .nav-tabs > li > a,
+.orbit-bar .nav-pills > li > a {
+ padding-right: 12px;
+ padding-left: 12px;
+ margin-right: 2px;
+ line-height: 14px;
+}
+
+.orbit-bar .nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+.orbit-bar .nav-tabs > li {
+ margin-bottom: -1px;
+}
+
+.orbit-bar .nav-tabs > li > a {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ line-height: 20px;
+ border: 1px solid transparent;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.orbit-bar .nav-tabs > li > a:hover {
+ border-color: #eeeeee #eeeeee #dddddd;
+}
+
+.orbit-bar .nav-tabs > .active > a,
+.orbit-bar .nav-tabs > .active > a:hover {
+ color: #555555;
+ cursor: default;
+ background-color: #ffffff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+
+.orbit-bar .nav-pills > li > a {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+.orbit-bar .nav-pills > .active > a,
+.orbit-bar .nav-pills > .active > a:hover {
+ color: #ffffff;
+ background-color: #0088cc;
+}
+
+.orbit-bar .nav-stacked > li {
+ float: none;
+}
+
+.orbit-bar .nav-stacked > li > a {
+ margin-right: 0;
+}
+
+.orbit-bar .nav-tabs.nav-stacked {
+ border-bottom: 0;
+}
+
+.orbit-bar .nav-tabs.nav-stacked > li > a {
+ border: 1px solid #ddd;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .nav-tabs.nav-stacked > li:first-child > a {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.orbit-bar .nav-tabs.nav-stacked > li:last-child > a {
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-border-radius-bottomleft: 4px;
+}
+
+.orbit-bar .nav-tabs.nav-stacked > li > a:hover {
+ z-index: 2;
+ border-color: #ddd;
+}
+
+.orbit-bar .nav-pills.nav-stacked > li > a {
+ margin-bottom: 3px;
+}
+
+.orbit-bar .nav-pills.nav-stacked > li:last-child > a {
+ margin-bottom: 1px;
+}
+
+.orbit-bar .nav-tabs .dropdown-menu {
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+}
+
+.orbit-bar .nav-pills .dropdown-menu {
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.orbit-bar .nav .dropdown-toggle .caret {
+ margin-top: 6px;
+ border-top-color: #0088cc;
+ border-bottom-color: #0088cc;
+}
+
+.orbit-bar .nav .dropdown-toggle:hover .caret {
+ border-top-color: #005580;
+ border-bottom-color: #005580;
+}
+
+/* move down carets for tabs */
+
+.orbit-bar .nav-tabs .dropdown-toggle .caret {
+ margin-top: 8px;
+}
+
+.orbit-bar .nav .active .dropdown-toggle .caret {
+ border-top-color: #fff;
+ border-bottom-color: #fff;
+}
+
+.orbit-bar .nav-tabs .active .dropdown-toggle .caret {
+ border-top-color: #555555;
+ border-bottom-color: #555555;
+}
+
+.orbit-bar .nav > .dropdown.active > a:hover {
+ cursor: pointer;
+}
+
+.orbit-bar .nav-tabs .open .dropdown-toggle,
+.orbit-bar .nav-pills .open .dropdown-toggle,
+.orbit-bar .nav > li.dropdown.open.active > a:hover {
+ color: #ffffff;
+ background-color: #999999;
+ border-color: #999999;
+}
+
+.orbit-bar .nav li.dropdown.open .caret,
+.orbit-bar .nav li.dropdown.open.active .caret,
+.orbit-bar .nav li.dropdown.open a:hover .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.orbit-bar .tabs-stacked .open > a:hover {
+ border-color: #999999;
+}
+
+.orbit-bar .tabbable {
+ *zoom: 1;
+}
+
+.orbit-bar .tabbable:before,
+.orbit-bar .tabbable:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .tabbable:after {
+ clear: both;
+}
+
+.orbit-bar .tab-content {
+ overflow: auto;
+}
+
+.orbit-bar .tabs-below > .nav-tabs,
+.orbit-bar .tabs-right > .nav-tabs,
+.orbit-bar .tabs-left > .nav-tabs {
+ border-bottom: 0;
+}
+
+.orbit-bar .tab-content > .tab-pane,
+.orbit-bar .pill-content > .pill-pane {
+ display: none;
+}
+
+.orbit-bar .tab-content > .active,
+.orbit-bar .pill-content > .active {
+ display: block;
+}
+
+.orbit-bar .tabs-below > .nav-tabs {
+ border-top: 1px solid #ddd;
+}
+
+.orbit-bar .tabs-below > .nav-tabs > li {
+ margin-top: -1px;
+ margin-bottom: 0;
+}
+
+.orbit-bar .tabs-below > .nav-tabs > li > a {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.orbit-bar .tabs-below > .nav-tabs > li > a:hover {
+ border-top-color: #ddd;
+ border-bottom-color: transparent;
+}
+
+.orbit-bar .tabs-below > .nav-tabs > .active > a,
+.orbit-bar .tabs-below > .nav-tabs > .active > a:hover {
+ border-color: transparent #ddd #ddd #ddd;
+}
+
+.orbit-bar .tabs-left > .nav-tabs > li,
+.orbit-bar .tabs-right > .nav-tabs > li {
+ float: none;
+}
+
+.orbit-bar .tabs-left > .nav-tabs > li > a,
+.orbit-bar .tabs-right > .nav-tabs > li > a {
+ min-width: 74px;
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+
+.orbit-bar .tabs-left > .nav-tabs {
+ float: left;
+ margin-right: 19px;
+ border-right: 1px solid #ddd;
+}
+
+.orbit-bar .tabs-left > .nav-tabs > li > a {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.orbit-bar .tabs-left > .nav-tabs > li > a:hover {
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.orbit-bar .tabs-left > .nav-tabs .active > a,
+.orbit-bar .tabs-left > .nav-tabs .active > a:hover {
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+
+.orbit-bar .tabs-right > .nav-tabs {
+ float: right;
+ margin-left: 19px;
+ border-left: 1px solid #ddd;
+}
+
+.orbit-bar .tabs-right > .nav-tabs > li > a {
+ margin-left: -1px;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.orbit-bar .tabs-right > .nav-tabs > li > a:hover {
+ border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.orbit-bar .tabs-right > .nav-tabs .active > a,
+.orbit-bar .tabs-right > .nav-tabs .active > a:hover {
+ border-color: #ddd #ddd #ddd transparent;
+ *border-left-color: #ffffff;
+}
+
+.orbit-bar .nav > .disabled > a {
+ color: #999999;
+}
+
+.orbit-bar .nav > .disabled > a:hover {
+ text-decoration: none;
+ cursor: default;
+ background-color: transparent;
+}
+
+.orbit-bar.navbar,
+.orbit-bar .navbar,
+.orbit-bar .navbar {
+ *position: relative;
+ *z-index: 2;
+ margin-bottom: 20px;
+ overflow: visible;
+}
+
+.orbit-bar .navbar-inner {
+ min-height: 40px;
+ padding-right: 20px;
+ padding-left: 20px;
+ background-color: #fafafa;
+ background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
+ background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
+ background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
+ background-repeat: repeat-x;
+ border: 1px solid #d4d4d4;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
+ *zoom: 1;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
+}
+
+.orbit-bar .navbar-inner:before,
+.orbit-bar .navbar-inner:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .navbar-inner:after {
+ clear: both;
+}
+
+.orbit-bar.navbar .container,
+.orbit-bar .navbar .container,
+.orbit-bar .navbar .container {
+ width: auto;
+}
+
+.orbit-bar .nav-collapse.collapse {
+ height: auto;
+ overflow: visible;
+}
+
+.orbit-bar.navbar .brand,
+.orbit-bar .navbar .brand,
+.orbit-bar .navbar .brand {
+ display: block;
+ float: left;
+ padding: 10px 20px 10px;
+ margin-left: -20px;
+ font-size: 20px;
+ font-weight: 200;
+ color: #777777;
+ text-shadow: 0 1px 0 #ffffff;
+}
+
+.orbit-bar.navbar .brand:hover,
+.orbit-bar .navbar .brand:hover {
+ text-decoration: none;
+}
+
+.orbit-bar .navbar-text {
+ margin-bottom: 0;
+ line-height: 40px;
+ color: #777777;
+}
+
+.orbit-bar .navbar-link {
+ color: #777777;
+}
+
+.orbit-bar .navbar-link:hover {
+ color: #333333;
+}
+
+.orbit-bar.navbar .divider-vertical,
+.orbit-bar .navbar .divider-vertical {
+ height: 40px;
+ margin: 0 9px;
+ border-right: 1px solid #ffffff;
+ border-left: 1px solid #f2f2f2;
+}
+
+.orbit-bar.navbar .btn,
+.orbit-bar .navbar .btn,
+.orbit-bar.navbar .btn-group,
+.orbit-bar .navbar .btn-group {
+ margin-top: 5px;
+}
+
+.orbit-bar.navbar .btn-group .btn,
+.orbit-bar .navbar .btn-group .btn,
+.orbit-bar.navbar .input-prepend .btn,
+.orbit-bar .navbar .input-prepend .btn,
+.orbit-bar.navbar .input-append .btn,
+.orbit-bar .navbar .input-append .btn {
+ margin-top: 0;
+}
+
+.orbit-bar .navbar-form {
+ margin-bottom: 0;
+ *zoom: 1;
+}
+
+.orbit-bar .navbar-form:before,
+.orbit-bar .navbar-form:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .navbar-form:after {
+ clear: both;
+}
+
+.orbit-bar .navbar-form input,
+.orbit-bar .navbar-form select,
+.orbit-bar .navbar-form .radio,
+.orbit-bar .navbar-form .checkbox {
+ margin-top: 5px;
+}
+
+.orbit-bar .navbar-form input,
+.orbit-bar .navbar-form select,
+.orbit-bar .navbar-form .btn {
+ display: inline-block;
+ margin-bottom: 0;
+}
+
+.orbit-bar .navbar-form input[type="image"],
+.orbit-bar .navbar-form input[type="checkbox"],
+.orbit-bar .navbar-form input[type="radio"] {
+ margin-top: 3px;
+}
+
+.orbit-bar .navbar-form .input-append,
+.orbit-bar .navbar-form .input-prepend {
+ margin-top: 5px;
+ white-space: nowrap;
+}
+
+.orbit-bar .navbar-form .input-append input,
+.orbit-bar .navbar-form .input-prepend input {
+ margin-top: 0;
+}
+
+.orbit-bar .navbar-search {
+ position: relative;
+ float: left;
+ margin-top: 5px;
+ margin-bottom: 0;
+}
+
+.orbit-bar .navbar-search .search-query {
+ padding: 4px 14px;
+ margin-bottom: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 1;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+
+.orbit-bar .navbar-static-top {
+ position: static;
+ margin-bottom: 0;
+}
+
+.orbit-bar .navbar-static-top .navbar-inner {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .navbar-fixed-top,
+.orbit-bar .navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+ margin-bottom: 0;
+}
+
+.orbit-bar .navbar-fixed-top .navbar-inner,
+.orbit-bar .navbar-static-top .navbar-inner {
+ border-width: 0 0 1px;
+}
+
+.orbit-bar .navbar-fixed-bottom .navbar-inner {
+ border-width: 1px 0 0;
+}
+
+.orbit-bar .navbar-fixed-top .navbar-inner,
+.orbit-bar .navbar-fixed-bottom .navbar-inner {
+ padding-right: 0;
+ padding-left: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+
+.orbit-bar .navbar-static-top .container,
+.orbit-bar .navbar-fixed-top .container,
+.orbit-bar .navbar-fixed-bottom .container {
+ width: 940px;
+}
+
+.orbit-bar .navbar-fixed-top {
+ top: 0;
+}
+
+.orbit-bar .navbar-fixed-top .navbar-inner,
+.orbit-bar .navbar-static-top .navbar-inner {
+ -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.orbit-bar .navbar-fixed-bottom {
+ bottom: 0;
+}
+
+.orbit-bar .navbar-fixed-bottom .navbar-inner {
+ -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
+}
+
+.orbit-bar.navbar .nav,
+.orbit-bar .navbar .nav {
+ position: relative;
+ left: 0;
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+}
+
+.orbit-bar.navbar .nav.pull-right,
+.orbit-bar .navbar .nav.pull-right {
+ float: right;
+ margin-right: 0;
+}
+
+.orbit-bar.navbar .nav > li,
+.orbit-bar .navbar .nav > li {
+ float: left;
+}
+
+.orbit-bar.navbar .nav > li > a,
+.orbit-bar .navbar .nav > li > a {
+ float: none;
+ padding: 10px 15px 10px;
+ color: #777777;
+ text-decoration: none;
+ text-shadow: 0 1px 0 #ffffff;
+}
+
+.orbit-bar.navbar .nav .dropdown-toggle .caret,
+.orbit-bar .navbar .nav .dropdown-toggle .caret {
+ margin-top: 8px;
+}
+
+.orbit-bar.navbar .nav > li > a:focus,
+.orbit-bar .navbar .nav > li > a:focus,
+.orbit-bar.navbar .nav > li > a:hover,
+.orbit-bar .navbar .nav > li > a:hover {
+ color: #333333;
+ text-decoration: none;
+ background-color: transparent;
+}
+
+.orbit-bar.navbar .nav > .active > a,
+.orbit-bar .navbar .nav > .active > a,
+.orbit-bar.navbar .nav > .active > a:hover,
+.orbit-bar .navbar .nav > .active > a:hover,
+.orbit-bar.navbar .nav > .active > a:focus,
+.orbit-bar .navbar .nav > .active > a:focus {
+ color: #555555;
+ text-decoration: none;
+ background-color: #e5e5e5;
+ -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+ -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+ box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
+}
+
+.orbit-bar.navbar .btn-navbar,
+.orbit-bar .navbar .btn-navbar {
+ display: none;
+ float: right;
+ padding: 7px 10px;
+ margin-right: 5px;
+ margin-left: 5px;
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #ededed;
+ *background-color: #e5e5e5;
+ background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
+ background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
+ background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
+ background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
+ background-repeat: repeat-x;
+ border-color: #e5e5e5 #e5e5e5 #bfbfbf;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+}
+
+.orbit-bar.navbar .btn-navbar:hover,
+.orbit-bar .navbar .btn-navbar:hover,
+.orbit-bar.navbar .btn-navbar:active,
+.orbit-bar .navbar .btn-navbar:active,
+.orbit-bar.navbar .btn-navbar.active,
+.orbit-bar .navbar .btn-navbar.active,
+.orbit-bar.navbar .btn-navbar.disabled,
+.orbit-bar .navbar .btn-navbar.disabled,
+.orbit-bar.navbar .btn-navbar[disabled],
+.orbit-bar .navbar .btn-navbar[disabled] {
+ color: #ffffff;
+ background-color: #e5e5e5;
+ *background-color: #d9d9d9;
+}
+
+.orbit-bar.navbar .btn-navbar:active,
+.orbit-bar .navbar .btn-navbar:active,
+.orbit-bar.navbar .btn-navbar.active,
+.orbit-bar .navbar .btn-navbar.active {
+ background-color: #cccccc \9;
+}
+
+.orbit-bar.navbar .btn-navbar .icon-bar,
+.orbit-bar .navbar .btn-navbar .icon-bar {
+ display: block;
+ width: 18px;
+ height: 2px;
+ background-color: #f5f5f5;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ border-radius: 1px;
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.orbit-bar .btn-navbar .icon-bar + .icon-bar {
+ margin-top: 3px;
+}
+
+.orbit-bar.navbar .nav > li > .dropdown-menu:before,
+.orbit-bar .navbar .nav > li > .dropdown-menu:before {
+ position: absolute;
+ top: -7px;
+ left: 9px;
+ display: inline-block;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-left: 7px solid transparent;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ content: '';
+}
+
+.orbit-bar.navbar .nav > li > .dropdown-menu:after,
+.orbit-bar .navbar .nav > li > .dropdown-menu:after {
+ position: absolute;
+ top: -6px;
+ left: 10px;
+ display: inline-block;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #ffffff;
+ border-left: 6px solid transparent;
+ content: '';
+}
+
+.orbit-bar .navbar-fixed-bottom .nav > li > .dropdown-menu:before {
+ top: auto;
+ bottom: -7px;
+ border-top: 7px solid #ccc;
+ border-bottom: 0;
+ border-top-color: rgba(0, 0, 0, 0.2);
+}
+
+.orbit-bar .navbar-fixed-bottom .nav > li > .dropdown-menu:after {
+ top: auto;
+ bottom: -6px;
+ border-top: 6px solid #ffffff;
+ border-bottom: 0;
+}
+
+.orbit-bar.navbar .nav li.dropdown > a:hover .caret,
+.orbit-bar .navbar .nav li.dropdown > a:hover .caret {
+ border-top-color: #555555;
+ border-bottom-color: #555555;
+}
+
+.orbit-bar.navbar .nav li.dropdown.open > .dropdown-toggle,
+.orbit-bar .navbar .nav li.dropdown.open > .dropdown-toggle,
+.orbit-bar.navbar .nav li.dropdown.active > .dropdown-toggle,
+.orbit-bar .navbar .nav li.dropdown.active > .dropdown-toggle,
+.orbit-bar.navbar .nav li.dropdown.open.active > .dropdown-toggle,
+.orbit-bar .navbar .nav li.dropdown.open.active > .dropdown-toggle {
+ color: #555555;
+ background-color: #e5e5e5;
+}
+
+.orbit-bar.navbar .nav li.dropdown > .dropdown-toggle .caret,
+.orbit-bar .navbar .nav li.dropdown > .dropdown-toggle .caret {
+ border-top-color: #777777;
+ border-bottom-color: #777777;
+}
+
+.orbit-bar.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
+.orbit-bar .navbar .nav li.dropdown.open > .dropdown-toggle .caret,
+.orbit-bar.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
+.orbit-bar .navbar .nav li.dropdown.active > .dropdown-toggle .caret,
+.orbit-bar.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret,
+.orbit-bar .navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
+ border-top-color: #555555;
+ border-bottom-color: #555555;
+}
+
+.orbit-bar.navbar .pull-right > li > .dropdown-menu,
+.orbit-bar .navbar .pull-right > li > .dropdown-menu,
+.orbit-bar.navbar .nav > li > .dropdown-menu.pull-right,
+.orbit-bar .navbar .nav > li > .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.orbit-bar.navbar .pull-right > li > .dropdown-menu:before,
+.orbit-bar .navbar .pull-right > li > .dropdown-menu:before,
+.orbit-bar.navbar .nav > li > .dropdown-menu.pull-right:before,
+.orbit-bar .navbar .nav > li > .dropdown-menu.pull-right:before {
+ right: 12px;
+ left: auto;
+}
+
+.orbit-bar.navbar .pull-right > li > .dropdown-menu:after,
+.orbit-bar .navbar .pull-right > li > .dropdown-menu:after,
+.orbit-bar.navbar .nav > li > .dropdown-menu.pull-right:after,
+.orbit-bar .navbar .nav > li > .dropdown-menu.pull-right:after {
+ right: 13px;
+ left: auto;
+}
+
+.orbit-bar.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
+.orbit-bar .navbar .pull-right > li > .dropdown-menu .dropdown-menu,
+.orbit-bar.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu,
+.orbit-bar .navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
+ right: 100%;
+ left: auto;
+ margin-right: -1px;
+ margin-left: 0;
+ -webkit-border-radius: 6px 0 6px 6px;
+ -moz-border-radius: 6px 0 6px 6px;
+ border-radius: 6px 0 6px 6px;
+}
+
+.orbit-bar .navbar-inverse .navbar-inner {
+ background-color: #1b1b1b;
+ background-image: -moz-linear-gradient(top, #222222, #111111);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
+ background-image: -webkit-linear-gradient(top, #222222, #111111);
+ background-image: -o-linear-gradient(top, #222222, #111111);
+ background-image: linear-gradient(to bottom, #222222, #111111);
+ background-repeat: repeat-x;
+ border-color: #252525;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
+}
+
+.orbit-bar .navbar-inverse .brand,
+.orbit-bar .navbar-inverse .nav > li > a {
+ color: #999999;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.orbit-bar .navbar-inverse .brand:hover,
+.orbit-bar .navbar-inverse .nav > li > a:hover {
+ color: #ffffff;
+}
+
+.orbit-bar .navbar-inverse .brand {
+ color: #999999;
+}
+
+.orbit-bar .navbar-inverse .navbar-text {
+ color: #999999;
+}
+
+.orbit-bar .navbar-inverse .nav > li > a:focus,
+.orbit-bar .navbar-inverse .nav > li > a:hover {
+ color: #ffffff;
+ background-color: transparent;
+}
+
+.orbit-bar .navbar-inverse .nav .active > a,
+.orbit-bar .navbar-inverse .nav .active > a:hover,
+.orbit-bar .navbar-inverse .nav .active > a:focus {
+ color: #ffffff;
+ background-color: #111111;
+}
+
+.orbit-bar .navbar-inverse .navbar-link {
+ color: #999999;
+}
+
+.orbit-bar .navbar-inverse .navbar-link:hover {
+ color: #ffffff;
+}
+
+.orbit-bar .navbar-inverse .divider-vertical {
+ border-right-color: #222222;
+ border-left-color: #111111;
+}
+
+.orbit-bar .navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
+.orbit-bar .navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
+.orbit-bar .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
+ color: #ffffff;
+ background-color: #111111;
+}
+
+.orbit-bar .navbar-inverse .nav li.dropdown > a:hover .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+.orbit-bar .navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
+ border-top-color: #999999;
+ border-bottom-color: #999999;
+}
+
+.orbit-bar .navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
+.orbit-bar .navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
+.orbit-bar .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
+ border-top-color: #ffffff;
+ border-bottom-color: #ffffff;
+}
+
+.orbit-bar .navbar-inverse .navbar-search .search-query {
+ color: #ffffff;
+ background-color: #515151;
+ border-color: #111111;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
+ -webkit-transition: none;
+ -moz-transition: none;
+ -o-transition: none;
+ transition: none;
+}
+
+.orbit-bar .navbar-inverse .navbar-search .search-query:-moz-placeholder {
+ color: #cccccc;
+}
+
+.orbit-bar .navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
+ color: #cccccc;
+}
+
+.orbit-bar .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
+ color: #cccccc;
+}
+
+.orbit-bar .navbar-inverse .navbar-search .search-query:focus,
+.orbit-bar .navbar-inverse .navbar-search .search-query.focused {
+ padding: 5px 15px;
+ color: #333333;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #ffffff;
+ border: 0;
+ outline: 0;
+ -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+}
+
+.orbit-bar .navbar-inverse .btn-navbar {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #0e0e0e;
+ *background-color: #040404;
+ background-image: -moz-linear-gradient(top, #151515, #040404);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
+ background-image: -webkit-linear-gradient(top, #151515, #040404);
+ background-image: -o-linear-gradient(top, #151515, #040404);
+ background-image: linear-gradient(to bottom, #151515, #040404);
+ background-repeat: repeat-x;
+ border-color: #040404 #040404 #000000;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.orbit-bar .navbar-inverse .btn-navbar:hover,
+.orbit-bar .navbar-inverse .btn-navbar:active,
+.orbit-bar .navbar-inverse .btn-navbar.active,
+.orbit-bar .navbar-inverse .btn-navbar.disabled,
+.orbit-bar .navbar-inverse .btn-navbar[disabled] {
+ color: #ffffff;
+ background-color: #040404;
+ *background-color: #000000;
+}
+
+.orbit-bar .navbar-inverse .btn-navbar:active,
+.orbit-bar .navbar-inverse .btn-navbar.active {
+ background-color: #000000 \9;
+}
+
+.orbit-bar .breadcrumb {
+ padding: 8px 15px;
+ margin: 0 0 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar .breadcrumb > li {
+ display: inline-block;
+ *display: inline;
+ text-shadow: 0 1px 0 #ffffff;
+ *zoom: 1;
+}
+
+.orbit-bar .breadcrumb > li > .divider {
+ padding: 0 5px;
+ color: #ccc;
+}
+
+.orbit-bar .breadcrumb > .active {
+ color: #999999;
+}
+
+.orbit-bar .pagination {
+ margin: 20px 0;
+}
+
+.orbit-bar .pagination ul {
+ display: inline-block;
+ *display: inline;
+ margin-bottom: 0;
+ margin-left: 0;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ *zoom: 1;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.orbit-bar .pagination ul > li {
+ display: inline;
+}
+
+.orbit-bar .pagination ul > li > a,
+.orbit-bar .pagination ul > li > span {
+ float: left;
+ padding: 4px 12px;
+ line-height: 20px;
+ text-decoration: none;
+ background-color: #ffffff;
+ border: 1px solid #dddddd;
+ border-left-width: 0;
+}
+
+.orbit-bar .pagination ul > li > a:hover,
+.orbit-bar .pagination ul > .active > a,
+.orbit-bar .pagination ul > .active > span {
+ background-color: #f5f5f5;
+}
+
+.orbit-bar .pagination ul > .active > a,
+.orbit-bar .pagination ul > .active > span {
+ color: #999999;
+ cursor: default;
+}
+
+.orbit-bar .pagination ul > .disabled > span,
+.orbit-bar .pagination ul > .disabled > a,
+.orbit-bar .pagination ul > .disabled > a:hover {
+ color: #999999;
+ cursor: default;
+ background-color: transparent;
+}
+
+.orbit-bar .pagination ul > li:first-child > a,
+.orbit-bar .pagination ul > li:first-child > span {
+ border-left-width: 1px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-topleft: 4px;
+}
+
+.orbit-bar .pagination ul > li:last-child > a,
+.orbit-bar .pagination ul > li:last-child > span {
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-bottomright: 4px;
+}
+
+.orbit-bar .pagination-centered {
+ text-align: center;
+}
+
+.orbit-bar .pagination-right {
+ text-align: right;
+}
+
+.orbit-bar .pagination-large ul > li > a,
+.orbit-bar .pagination-large ul > li > span {
+ padding: 11px 19px;
+ font-size: 17.5px;
+}
+
+.orbit-bar .pagination-large ul > li:first-child > a,
+.orbit-bar .pagination-large ul > li:first-child > span {
+ -webkit-border-bottom-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+ -webkit-border-top-left-radius: 6px;
+ border-top-left-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ -moz-border-radius-topleft: 6px;
+}
+
+.orbit-bar .pagination-large ul > li:last-child > a,
+.orbit-bar .pagination-large ul > li:last-child > span {
+ -webkit-border-top-right-radius: 6px;
+ border-top-right-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ -moz-border-radius-topright: 6px;
+ -moz-border-radius-bottomright: 6px;
+}
+
+.orbit-bar .pagination-mini ul > li:first-child > a,
+.orbit-bar .pagination-small ul > li:first-child > a,
+.orbit-bar .pagination-mini ul > li:first-child > span,
+.orbit-bar .pagination-small ul > li:first-child > span {
+ -webkit-border-bottom-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+ -webkit-border-top-left-radius: 3px;
+ border-top-left-radius: 3px;
+ -moz-border-radius-bottomleft: 3px;
+ -moz-border-radius-topleft: 3px;
+}
+
+.orbit-bar .pagination-mini ul > li:last-child > a,
+.orbit-bar .pagination-small ul > li:last-child > a,
+.orbit-bar .pagination-mini ul > li:last-child > span,
+.orbit-bar .pagination-small ul > li:last-child > span {
+ -webkit-border-top-right-radius: 3px;
+ border-top-right-radius: 3px;
+ -webkit-border-bottom-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+ -moz-border-radius-topright: 3px;
+ -moz-border-radius-bottomright: 3px;
+}
+
+.orbit-bar .pagination-small ul > li > a,
+.orbit-bar .pagination-small ul > li > span {
+ padding: 2px 10px;
+ font-size: 11.9px;
+}
+
+.orbit-bar .pagination-mini ul > li > a,
+.orbit-bar .pagination-mini ul > li > span {
+ padding: 0 6px;
+ font-size: 10.5px;
+}
+
+.orbit-bar .pager {
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+ *zoom: 1;
+}
+
+.orbit-bar .pager:before,
+.orbit-bar .pager:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .pager:after {
+ clear: both;
+}
+
+.orbit-bar .pager li {
+ display: inline;
+}
+
+.orbit-bar .pager li > a,
+.orbit-bar .pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+
+.orbit-bar .pager li > a:hover {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.orbit-bar .pager .next > a,
+.orbit-bar .pager .next > span {
+ float: right;
+}
+
+.orbit-bar .pager .previous > a,
+.orbit-bar .pager .previous > span {
+ float: left;
+}
+
+.orbit-bar .pager .disabled > a,
+.orbit-bar .pager .disabled > a:hover,
+.orbit-bar .pager .disabled > span {
+ color: #999999;
+ cursor: default;
+ background-color: #fff;
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000000;
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+}
+
+.modal-backdrop,
+.modal-backdrop.fade.in {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.modal {
+ position: fixed;
+ top: 10%;
+ left: 50%;
+ z-index: 1050;
+ width: 560px;
+ margin-left: -280px;
+ background-color: #ffffff;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ *border: 1px solid #999;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ outline: none;
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+}
+
+.modal.fade {
+ top: -25%;
+ -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
+ -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
+ -o-transition: opacity 0.3s linear, top 0.3s ease-out;
+ transition: opacity 0.3s linear, top 0.3s ease-out;
+}
+
+.modal.fade.in {
+ top: 10%;
+}
+
+.modal-header {
+ padding: 9px 15px;
+ border-bottom: 1px solid #eee;
+}
+
+.modal-header .close {
+ margin-top: 2px;
+}
+
+.modal-header h3 {
+ margin: 0;
+ line-height: 30px;
+}
+
+.modal-body {
+ position: relative;
+ max-height: 400px;
+ padding: 15px;
+ overflow-y: auto;
+}
+
+.modal-form {
+ margin-bottom: 0;
+}
+
+.modal-footer {
+ padding: 14px 15px 15px;
+ margin-bottom: 0;
+ text-align: right;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+ *zoom: 1;
+ -webkit-box-shadow: inset 0 1px 0 #ffffff;
+ -moz-box-shadow: inset 0 1px 0 #ffffff;
+ box-shadow: inset 0 1px 0 #ffffff;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.modal-footer:after {
+ clear: both;
+}
+
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+
+.orbit-bar .tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ padding: 5px;
+ font-size: 11px;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ visibility: visible;
+}
+
+.orbit-bar .tooltip.in {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.orbit-bar .tooltip.top {
+ margin-top: -3px;
+}
+
+.orbit-bar .tooltip.right {
+ margin-left: 3px;
+}
+
+.orbit-bar .tooltip.bottom {
+ margin-top: 3px;
+}
+
+.orbit-bar .tooltip.left {
+ margin-left: -3px;
+}
+
+.orbit-bar .tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #ffffff;
+ text-align: center;
+ white-space: nowrap;
+ text-decoration: none;
+ background-color: #000000;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar .tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.orbit-bar .tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-top-color: #000000;
+ border-width: 5px 5px 0;
+}
+
+.orbit-bar .tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-right-color: #000000;
+ border-width: 5px 5px 5px 0;
+}
+
+.orbit-bar .tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-left-color: #000000;
+ border-width: 5px 0 5px 5px;
+}
+
+.orbit-bar .tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-bottom-color: #000000;
+ border-width: 0 5px 5px;
+}
+
+.orbit-bar .popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ width: 236px;
+ padding: 1px;
+ text-align: left;
+ white-space: normal;
+ background-color: #ffffff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+
+.orbit-bar .popover.top {
+ margin-top: -10px;
+}
+
+.orbit-bar .popover.right {
+ margin-left: 10px;
+}
+
+.orbit-bar .popover.bottom {
+ margin-top: 10px;
+}
+
+.orbit-bar .popover.left {
+ margin-left: -10px;
+}
+
+.orbit-bar .popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+}
+
+.orbit-bar .popover-content {
+ padding: 9px 14px;
+}
+
+.orbit-bar .popover .arrow,
+.orbit-bar .popover .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.orbit-bar .popover .arrow {
+ border-width: 11px;
+}
+
+.orbit-bar .popover .arrow:after {
+ border-width: 10px;
+ content: "";
+}
+
+.orbit-bar .popover.top .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, 0.25);
+ border-bottom-width: 0;
+}
+
+.orbit-bar .popover.top .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ border-top-color: #ffffff;
+ border-bottom-width: 0;
+}
+
+.orbit-bar .popover.right .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, 0.25);
+ border-left-width: 0;
+}
+
+.orbit-bar .popover.right .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ border-right-color: #ffffff;
+ border-left-width: 0;
+}
+
+.orbit-bar .popover.bottom .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, 0.25);
+ border-top-width: 0;
+}
+
+.orbit-bar .popover.bottom .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ border-bottom-color: #ffffff;
+ border-top-width: 0;
+}
+
+.orbit-bar .popover.left .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, 0.25);
+ border-right-width: 0;
+}
+
+.orbit-bar .popover.left .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ border-left-color: #ffffff;
+ border-right-width: 0;
+}
+
+.orbit-bar .thumbnails {
+ margin-left: -20px;
+ list-style: none;
+ *zoom: 1;
+}
+
+.orbit-bar .thumbnails:before,
+.orbit-bar .thumbnails:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.orbit-bar .thumbnails:after {
+ clear: both;
+}
+
+.orbit-bar .row-fluid .thumbnails {
+ margin-left: 0;
+}
+
+.orbit-bar .thumbnails > li {
+ float: left;
+ margin-bottom: 20px;
+ margin-left: 20px;
+}
+
+.orbit-bar .thumbnail {
+ display: block;
+ padding: 4px;
+ line-height: 20px;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+
+.orbit-bar a.thumbnail:hover {
+ border-color: #0088cc;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
+
+.orbit-bar .thumbnail > img {
+ display: block;
+ max-width: 100%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.orbit-bar .thumbnail .caption {
+ padding: 9px;
+ color: #555555;
+}
+
+.orbit-bar .media,
+.orbit-bar .media-body {
+ overflow: hidden;
+ *overflow: visible;
+ zoom: 1;
+}
+
+.orbit-bar .media,
+.orbit-bar .media .media {
+ margin-top: 15px;
+}
+
+.orbit-bar .media:first-child {
+ margin-top: 0;
+}
+
+.orbit-bar .media-object {
+ display: block;
+}
+
+.orbit-bar .media-heading {
+ margin: 0 0 5px;
+}
+
+.orbit-bar .media .pull-left {
+ margin-right: 10px;
+}
+
+.orbit-bar .media .pull-right {
+ margin-left: 10px;
+}
+
+.orbit-bar .media-list {
+ margin-left: 0;
+ list-style: none;
+}
+
+.orbit-bar .label,
+.orbit-bar .badge {
+ display: inline-block;
+ padding: 2px 4px;
+ font-size: 11.844px;
+ font-weight: bold;
+ line-height: 14px;
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #999999;
+}
+
+.orbit-bar .label {
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.orbit-bar .badge {
+ padding-right: 9px;
+ padding-left: 9px;
+ -webkit-border-radius: 9px;
+ -moz-border-radius: 9px;
+ border-radius: 9px;
+}
+
+.orbit-bar .label:empty,
+.orbit-bar .badge:empty {
+ display: none;
+}
+
+.orbit-bar a.label:hover,
+.orbit-bar a.badge:hover {
+ color: #ffffff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.orbit-bar .label-important,
+.orbit-bar .badge-important {
+ background-color: #b94a48;
+}
+
+.orbit-bar .label-important[href],
+.orbit-bar .badge-important[href] {
+ background-color: #953b39;
+}
+
+.orbit-bar .label-warning,
+.orbit-bar .badge-warning {
+ background-color: #f89406;
+}
+
+.orbit-bar .label-warning[href],
+.orbit-bar .badge-warning[href] {
+ background-color: #c67605;
+}
+
+.orbit-bar .label-success,
+.orbit-bar .badge-success {
+ background-color: #468847;
+}
+
+.orbit-bar .label-success[href],
+.orbit-bar .badge-success[href] {
+ background-color: #356635;
+}
+
+.orbit-bar .label-info,
+.orbit-bar .badge-info {
+ background-color: #3a87ad;
+}
+
+.orbit-bar .label-info[href],
+.orbit-bar .badge-info[href] {
+ background-color: #2d6987;
+}
+
+.orbit-bar .label-inverse,
+.orbit-bar .badge-inverse {
+ background-color: #333333;
+}
+
+.orbit-bar .label-inverse[href],
+.orbit-bar .badge-inverse[href] {
+ background-color: #1a1a1a;
+}
+
+.orbit-bar .btn .label,
+.orbit-bar .btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+.orbit-bar .btn-mini .label,
+.orbit-bar .btn-mini .badge {
+ top: 0;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-moz-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-ms-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 40px 0;
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+.orbit-bar .progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f7f7f7;
+ background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
+ background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
+ background-repeat: repeat-x;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+}
+
+.orbit-bar .progress .bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ color: #ffffff;
+ text-align: center;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #0e90d2;
+ background-image: -moz-linear-gradient(top, #149bdf, #0480be);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
+ background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
+ background-image: -o-linear-gradient(top, #149bdf, #0480be);
+ background-image: linear-gradient(to bottom, #149bdf, #0480be);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transition: width 0.6s ease;
+ -moz-transition: width 0.6s ease;
+ -o-transition: width 0.6s ease;
+ transition: width 0.6s ease;
+}
+
+.orbit-bar .progress .bar + .bar {
+ -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+}
+
+.orbit-bar .progress-striped .bar {
+ background-color: #149bdf;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ -moz-background-size: 40px 40px;
+ -o-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+
+.orbit-bar .progress.active .bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -moz-animation: progress-bar-stripes 2s linear infinite;
+ -ms-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+.orbit-bar .progress-danger .bar,
+.orbit-bar .progress .bar-danger {
+ background-color: #dd514c;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
+}
+
+.orbit-bar .progress-danger.progress-striped .bar,
+.orbit-bar .progress-striped .bar-danger {
+ background-color: #ee5f5b;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.orbit-bar .progress-success .bar,
+.orbit-bar .progress .bar-success {
+ background-color: #5eb95e;
+ background-image: -moz-linear-gradient(top, #62c462, #57a957);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
+ background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+ background-image: -o-linear-gradient(top, #62c462, #57a957);
+ background-image: linear-gradient(to bottom, #62c462, #57a957);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
+}
+
+.orbit-bar .progress-success.progress-striped .bar,
+.orbit-bar .progress-striped .bar-success {
+ background-color: #62c462;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.orbit-bar .progress-info .bar,
+.orbit-bar .progress .bar-info {
+ background-color: #4bb1cf;
+ background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
+}
+
+.orbit-bar .progress-info.progress-striped .bar,
+.orbit-bar .progress-striped .bar-info {
+ background-color: #5bc0de;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.orbit-bar .progress-warning .bar,
+.orbit-bar .progress .bar-warning {
+ background-color: #faa732;
+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+ background-image: -o-linear-gradient(top, #fbb450, #f89406);
+ background-image: linear-gradient(to bottom, #fbb450, #f89406);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
+}
+
+.orbit-bar .progress-warning.progress-striped .bar,
+.orbit-bar .progress-striped .bar-warning {
+ background-color: #fbb450;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+
+.orbit-bar .accordion {
+ margin-bottom: 20px;
+}
+
+.orbit-bar .accordion-group {
+ margin-bottom: 2px;
+ border: 1px solid #e5e5e5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.orbit-bar .accordion-heading {
+ border-bottom: 0;
+}
+
+.orbit-bar .accordion-heading .accordion-toggle {
+ display: block;
+ padding: 8px 15px;
+}
+
+.orbit-bar .accordion-toggle {
+ cursor: pointer;
+}
+
+.orbit-bar .accordion-inner {
+ padding: 9px 15px;
+ border-top: 1px solid #e5e5e5;
+}
+
+.orbit-bar .carousel {
+ position: relative;
+ margin-bottom: 20px;
+ line-height: 1;
+}
+
+.orbit-bar .carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.orbit-bar .carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: 0.6s ease-in-out left;
+ -moz-transition: 0.6s ease-in-out left;
+ -o-transition: 0.6s ease-in-out left;
+ transition: 0.6s ease-in-out left;
+}
+
+.orbit-bar .carousel-inner > .item > img {
+ display: block;
+ line-height: 1;
+}
+
+.orbit-bar .carousel-inner > .active,
+.orbit-bar .carousel-inner > .next,
+.orbit-bar .carousel-inner > .prev {
+ display: block;
+}
+
+.orbit-bar .carousel-inner > .active {
+ left: 0;
+}
+
+.orbit-bar .carousel-inner > .next,
+.orbit-bar .carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.orbit-bar .carousel-inner > .next {
+ left: 100%;
+}
+
+.orbit-bar .carousel-inner > .prev {
+ left: -100%;
+}
+
+.orbit-bar .carousel-inner > .next.left,
+.orbit-bar .carousel-inner > .prev.right {
+ left: 0;
+}
+
+.orbit-bar .carousel-inner > .active.left {
+ left: -100%;
+}
+
+.orbit-bar .carousel-inner > .active.right {
+ left: 100%;
+}
+
+.orbit-bar .carousel-control {
+ position: absolute;
+ top: 40%;
+ left: 15px;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ font-size: 60px;
+ font-weight: 100;
+ line-height: 30px;
+ color: #ffffff;
+ text-align: center;
+ background: #222222;
+ border: 3px solid #ffffff;
+ -webkit-border-radius: 23px;
+ -moz-border-radius: 23px;
+ border-radius: 23px;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+
+.orbit-bar .carousel-control.right {
+ right: 15px;
+ left: auto;
+}
+
+.orbit-bar .carousel-control:hover {
+ color: #ffffff;
+ text-decoration: none;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+}
+
+.orbit-bar .carousel-caption {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 15px;
+ background: #333333;
+ background: rgba(0, 0, 0, 0.75);
+}
+
+.orbit-bar .carousel-caption h4,
+.orbit-bar .carousel-caption p {
+ line-height: 20px;
+ color: #ffffff;
+}
+
+.orbit-bar .carousel-caption h4 {
+ margin: 0 0 5px;
+}
+
+.orbit-bar .carousel-caption p {
+ margin-bottom: 0;
+}
+
+.orbit-bar .hero-unit {
+ padding: 60px;
+ margin-bottom: 30px;
+ font-size: 18px;
+ font-weight: 200;
+ line-height: 30px;
+ color: inherit;
+ background-color: #eeeeee;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.orbit-bar .hero-unit h1 {
+ margin-bottom: 0;
+ font-size: 60px;
+ line-height: 1;
+ letter-spacing: -1px;
+ color: inherit;
+}
+
+.orbit-bar .hero-unit li {
+ line-height: 30px;
+}
+
+.orbit-bar .pull-right {
+ float: right;
+}
+
+.orbit-bar .pull-left {
+ float: left;
+}
+
+.orbit-bar .hide {
+ display: none;
+}
+
+.orbit-bar .show {
+ display: block;
+}
+
+.orbit-bar .invisible {
+ visibility: hidden;
+}
+
+.orbit-bar .affix {
+ position: fixed;
+}
diff --git a/app/assets/stylesheets/page_layout.css b/app/assets/stylesheets/page_layout.css
new file mode 100644
index 000000000..1f3780005
--- /dev/null
+++ b/app/assets/stylesheets/page_layout.css
@@ -0,0 +1,6 @@
+/*
+ *= require basic/font-awesome
+ *= require basic/icon
+ *= require basic/orbit_bar
+ *= require basic/global
+*/
\ No newline at end of file
diff --git a/app/assets/stylesheets/structure.css b/app/assets/stylesheets/structure.css
new file mode 100644
index 000000000..f1c706550
--- /dev/null
+++ b/app/assets/stylesheets/structure.css
@@ -0,0 +1,5 @@
+/*
+ *= require basic
+ *= require lib/items
+ *= require lib/pageslide
+*/
\ No newline at end of file