//! // jc.jquery.js // written by James D Chalmers // Where possible, Code Copyright & Property of MTCMedia LTD // www.mtcmedia.co.uk // MTCMEDIA: Internet Media Solutions // v1.635 // UNRELEASED last updated 13 August 2010 // added $.isStyled - checks if a style(class) exists in the stylesheet. // fixed all warnings in netbeans // adjusted jcID to use $.fn.data() // added synth event support to dragMe // v1.634 // UNRELEASED last updated 30 Apr 2010 // alphabginstance to lowercase // working on horzscroll, brandscroll & marquee replacement. // added jcID - a uniform & persistant ID for all jc$ elements. // horzscroll basic up and running // fixed ie8 bug for horzscroll. Unfortunately now does not self-clean // refined isnull & isfunc // realise need to adopt (function($){/*exec*/})(jQuery); approach // added jc$.timer - time logging for the lazy peeps // added is_array // added count(); // added console.error non-fail support for lacking browsers // added check for global_debug var, if true, some alerts will display // added console check alert if (global_debug) // fixed isnull to actually specify T // added ajaxForm // added default value for global_debug // swapped 1:0 for isfunc so it actually works. // console.log does $('body').append // added sip // added extra interface to horzscroll // added swapKeys, string method extender to do easy find replace. // fixed 'float' error on brandscroll // added jc$.randNum // fixed object cloning in centerscreen // fixed some incorrect practices here and there. // added dragMe - lighter version of the jQuery ui drag. // added getOuterWidth // v1.633 // released 26 Mar 2010 // updated centerscreen to include 'show' option. default : 1 // added bswap // added findpr // updated screenfill to include 'onresizeshow' & 'show' option. default : 0, 1 // updated screenfill to modern variable name conventions (mvnc) // updated screenfill to include forced w & h declarations // updated centerscreen to mvnc. // updated screenfill to store ratio as element attribute // updated screenfill to operate based on parent element // added syntheticHistory. Even works in safari as long as hash is not a real id. // updated alphabg to auto window.resize // added setOpac. Allows easy opacity setting via class name eg: class="something anything setOpac-25" // that will set the element to 25% opacity. // call it $.setOpac.init(); // added stylesheet_swap. allows easy cross-browser changing of stylesheets. // methods: init, enable, disable, change. // further updated centerscreen to mvnc - fixed error. // renamed _grabber on alphabg // deprecated jcmarquee !!!!!!! - a new function will replace this and brandscroll // brandscroll updated to use a central jc$ object // jc$ object beginnings, this will be further refined. // added in callback to stylesheet_swap and apply style on startup // v1.632 // released 17 Feb 2010 // Added auto window.resize events to centerscreen & screenfill // v1.631 // released 8 Feb 2010 // updated centerscreen // added auto positioning to element // this should be checked across all functions // some rollfade updates got over-written. These have now been fixed. // v1.63 // released 27 Jan 2010 // added jcmarquee // this is an adaptation of brandscroll // these two functions badly need to be deprecated and // rewritten as a single light function // that is highly customisable. // modified brandscroll_settings identifier. // now : var i = 'bs_'+Math.floor(Math.random()*10102030123); // v1.62 // released 19 Jan 2010 // changelog: // fixed rollfade checkclass // adjusted rollfade default (fades in to 1.0 opacity now instead of 0.9) // fixed brandscroll mouse out // cleared timeout properly in brandscroll // adding date to new versions // v1.61 // changelog // added daisychaining to all functions // modified centerscreen // v1.6 // changelog // added brandscroll(); // v1.51 // changelog // added formhint // v1.0 traced back to 8th Dec 2009 // @TODO // move all id and data storage to jc$ object. // rewrite brandscroll // replace all dom insertions with more effecient methods eg: var $div = $('
').insertAfter($el); // deprecate jc$.settings /////// NEEDED GLOBAL VARIABLES var jc$ = { ids : [], timeouts : [], intervals : [], settings : [] }, addMethod = '', global_debug = typeof(global_debug)=='undefined' ? 0 : global_debug; /////// NEEDED FUNCTIONS // #sp - stops event bubbling function sp (event){ event.stopPropagation(); } // #sip - stops immediate event bubbling function sip(event){ event.stopImmediatePropagation(); } // #isnull - typeof shorthand // for use within a function with a defined parameter. function (x){ alert(isnull(x)); } // returns 1 if null, 0 if not. // specify t to change 'undefined' // t=function, returns 1 if function, 0 if not. function isnull (v, t){ t = t || 'undefined'; return typeof(v)==t ? 1 : 0; } // #isfunc - isnull(v, 'function') shorthand // for use within a function with a defined parameter. function (x){ alert(isfunc(x)); } function isfunc (v){ return isnull(v, 'function') ? 1 : 0; } // #is_array function is_array(obj) { return (obj.constructor.toString().indexOf("Array") == -1)? false : true; } // #count function count(obj, undefined){ if(typeof obj !== undefined){ if(is_array(obj)){ return obj.length; } else { var c = 0; for (var i in obj) { c++; } return c; } } return false; } // #console - support for console.debug if(typeof(console)=='undefined') { if(global_debug){ $('body').prepend( "This site is in global_debug mode.\nConsole was not"+ " found.\nConsole.log() messages appended to body." ); } var console = {}; console.debug = function(){}; console.log = function(text){ if(global_debug){ $('body').append('

'+text+'

'); } }; console.error = function(){}; } // #jcID - assigns an id & stores in the jc$ object, returns id. $.fn.jcID = function(){ var $el = $(this), id = $el.data('jc'); if(!id) { id = Math.floor(Math.random()*10120310010123); $el.data('jc', id); jc$.ids[id] = this; } return id; }; // #timer jc$.timer = function(name){ name = name || 'A function'; this.name = name; this.startTime = new Date().getTime(); this.endTime = 0; this.timeTaken = 0; }; jc$.timer.prototype.log = function(){ this.getTime(); console.log(this.name+'; Completed in '+this.timeTaken+'ms.'); return true; }; jc$.timer.prototype.getTime = function(){ this.endTime = new Date().getTime(); this.timeTaken = this.endTime-this.startTime; } jc$.timer.prototype.start = function(name){ this.startTime = new Date().getTime(); this.endTime = 0; this.name = name || this.name; }; // #randNum jc$.randNum = function(p){ p = p || 'jc$randNum'; return p+Math.floor(Math.random()*10210010); }; /////// JC.JQUERY.FUNCTIONS // #screenfill // leaves no borders // yset $.fn.screenfill = function(o){ o = $.extend({ animate : 1, animateDuration : 500, onresize : 1, onresizeanimate : 0, show : 1, onresizeshow : 0, w : 0, h : 0, parent : 0 }, o); $('html, body').css({overflow : 'hidden'}); var w = $(window).width(); var h = $(window).height(); return this.each(function(){ var $el = $(this), ew = $el.outerWidth(), eh= $el.outerHeight(); if(o.parent){ w = $el.parent().outerWidth(); h = $el.parent().outerHeight(); } if(o.w>0){ew = o.w;} if(o.h>0){eh = o.h;} var ratio = ''; // store ratio if(typeof($el.attr('screenfill_ratio'))!='undefined'){ ratio = $el.attr('screenfill_ratio'); } else { ratio = ew / eh; $el.attr('screenfill_ratio', ratio); } // auto positioning if($el.css('position')!='absolute'){ $el.css('position', 'relative'); } var co = {}; // css options if(w > h){ co.width = w; co.height = (w/ratio); } else { co.height = h; co.width = (h*ratio); } if(co.width < w){ co.height = h; co.width = (h*ratio); } if(co.height < h) { co.height = h; co.width = (h*ratio); } // center co.left = ((w-co.width)/2)+'px'; co.top = ((h-co.height)/2)+'px'; co.height += 'px'; co.width += 'px'; if(o.animate){ $el.stop().animate(co, {queue : false, duration : o.animateDuration}); } else { $el.stop().css(co); } if(o.show){ $el.fadeIn(); } if(o.onresize){ var o2 = $.extend(true, {}, o); o2.animate = o.onresizeanimate; o2.onresize = 0; o2.show = 0; $(window).bind('resize', function(){ $el.screenfill(o2); }); } }); }; // #centerscreen // v1.631 update: // supports auto positioning // v1.61 updates: // now supports custom pre-set width / height // and horizontal and vertical adjustments // also supports centering relative to immediate parent $.fn.centerscreen = function(opts){ var defaults = { horizontal : 1, vertical : 1, animate : 1, speed : 500, parent : 0, vertical_adjustment : 0, horizontal_adjustment : 0, w : 0, h : 0, onresize : 1, onresizeanimate : 0, show : 1 }; this.each(function(){ var o = $.extend({},defaults,opts), $el = $(this), ew = $el.outerWidth(true), eh = $el.outerHeight(true), w = '', h = ''; if(o.parent){ w = $el.parent().outerWidth(); h = $el.parent().outerHeight(); } else { w = $(window).width(); h = $(window).height(); } // auto positioning if($el.css('position') != 'absolute'){ $el.css('position', 'relative'); } if(o.w >0){ w = o.w-1+1; } if(o.h>0){ h = o.h-1+1; } w = (o.horizontal_adjustment-1+1)+w; h = (o.vertical_adjustment-1+1)+h; var co = {}; if(ew < w){ if(o.horizontal){ co.left = (w-ew)/2+'px'; } } else { co.left = 0; } if(eh < h) { if(o.vertical){ co.top = (h-eh)/2+'px'; } } else { co.top = 0; } if(o.animate){ $el.stop().animate(co, {queue : false, duration : o.speed}); } else { $el.stop().css(co); } if(o.onresize){ var o2 = $.extend({}, o); o2.onresize = 0; o2.animate = o.onresizeanimate; o2.show = 0; $(window).bind('resize', function(){ $el.centerscreen(o2); }); } if(o.show) { $el.show(); } }); return this; }; // #rollover // name images, imagename_0.jpg (or whatever filetype) // imagename_1.jpg (for hover).. $.fn.rollover = function(options){ options = $.extend({ preloadID : '#rollover_preloader' }, options); return this.each(function(){ var el = $(this); if(typeof(el.attr('src')) == 'undefined'){ // find the image el = el.find('img'); } if(el.length > 0){ // start rollover var thissrc = el.attr('src'); // thissrc is image original src var thishover = thissrc; thishover = thishover.replace(/(.*)_[0-9](\.[a-z]+)$/, "$1_1$2"); el.hover(function(){ el.attr('src', thishover); }, function(){ el.attr('src', thissrc); }); // close hover // PRELOAD if($(options.preloadID).length == 0){ // create it $('body').prepend(''); } $(options.preloadID).append(''); } // close el.length }); // close each }; // #slidepanel $.fn.slidepanel = function(options) { options = $.extend({ slideID : '.slider', speed_in : 500, speed_out : 500, hideOptions : { top : '100%' } },options); return this.each(function(){ var el = $(this); var slide = $(this).find(options.slideID); // auto positioning if(el.css('position')!='absolute'){ el.css('position', 'relative'); } // store original positions etc var originalcss = { top : slide.css('top'), left : slide.css('left') }; function hide() { slide.stop().animate(options.hideOptions, {queue : false, duration : options.speed_out}); } function show() { slide.stop().animate(originalcss, {queue : false, duration : options.speed_in}); } hide(); el.hover(show, hide); slide.mouseover(sp); slide.children().mouseover(sp); }); }; ////// Alpha PNG Background replacement... ///// note that options.color could supply a background image as well. //// #alphabg $.fn.alphabg = function(o) { o = $.extend({ opacity : 0.7, zIndex : '-1', color : '#000', fadeDuration : 0, onresize : 1, fade : 1, onresizeFade : 0 },o); return this.each(function(){ var $el = $(this); var grabber = Math.floor(Math.random()*10010923); $el.attr('alphabginstance', grabber); // auto positioning if($el.css('position')!='absolute'){ $el.css('position', 'relative'); } var thisz = $el.css('z-index'); if(typeof(thisz) == 'undefined' || (thisz+'x').replace(/[^0-9]/g, '') == ''){ $el.css('z-index', '1'); } var w = $el.outerWidth()+'px'; var h = $el.outerHeight()+'px'; var bghtml = '
'; var g = '[alphabginstance="'+grabber+'"] '; if($(g+'> .bg').length == 0){ $el.append(bghtml); } else { $(g+'> .bg').css({width : w, height : h}); } if(o.fade){ $(g+'> .bg').fadeTo(o.fadeDuration, o.opacity); } if(o.onresize){ var o2 = {}; for (var i in o){o2[i] = o[i];} o2.onresize = 0; $(window).bind('resize', function(){ $el.alphabg(o2); }); } }); }; // #rollfade // apply fading effects to rollover // check's custom class $.fn.rollfade = function(options){ options = $.extend({ checkClass : 'clicked', fadeIn : 1.0, fadeOut : 0.5, // also default fade duration : 300 }, options); options.checkClass = options.checkClass.replace(/\./g, ''); return this.each(function(){ var el = $(this); if(!el.hasClass('.'+options.checkClass)){ el.fadeTo(0, options.fadeOut); } el.hover(function(){ if(el.hasClass('.'+options.checkClass) == false){ el.stop().fadeTo(options.duration, options.fadeIn); } }, function(){ if(el.hasClass(options.checkClass) == false){ el.stop().fadeTo(options.duration, options.fadeOut); } }); }); }; // #formhint // helpful form field hint text // clears on focus $.fn.formhint = function(options){ options = $.extend({ attr : 'title' }, options); return this.each(function(){ // set value as title var el = $(this); if(el.val() == ''){ el.val(el.attr(options.attr)); el.focus(function(){ if(el.val() == el.attr(options.attr)){ el.val(''); } else { el.select(); } }); // close focus el.blur(function(){ if(el.val() == ''){ el.val(el.attr(options.attr)); } }); // close blur } else { // close if) el.focus(function(){ el.select(); }); } }); // close each }; // #brandscroll // notes: needs continuous mode // needs work on onclick etc - passing $(this) // needs support for multiple instances. // example usage // $(window).load(function(){ // $('#brandscroll').brandscroll(); // // $('.right').brandscroll_button({ // el : '#brandscroll', // direction : 'right' // }); // // $('.left').brandscroll_button({ // el : '#brandscroll' // }); // }); // html markup //
//
// //
//
// apply styles to #brandscroll and .item, as well as perhaps .left and .right jc$.settings.brandscroll = []; jc$.intervals.brandscroll = []; jc$.timeouts.brandscroll = []; $.fn.brandscroll = function(options){ options = $.extend({ speed : 1000, stoponhover : true, onclick : '', onmouseover : '', onmouseout : '', autoplay : true, autoplayinterval : 2000, cycle : true, autoheight : true, itemspacing : 5, autocenteritems : true, force : 100, rewindspeed : 1900 },options); return this.each(function(){ if($(this).length>0){ var el = $(this); // assign id and save to moveQueue var i = 'bs_'+Math.floor(Math.random()*10102030123); // this is used to add actions to queue :) el.attr('brandscrollInstance', i); // save settings jc$.settings.brandscroll[i] = options; // get items var items = el.children('.item'); // empty el interior el.children(':not(.item)').remove(); // build el.wrapInner('
'); var vp = el.children('.viewport'); vp.wrapInner('
'); var us = vp.children('.universe'); // force apply some el css if(el.css('position')!='absolute'){ el.css('position', 'relative'); } // force apply some vp css vp.css({ 'position' : 'relative', height : '100%', width : '100%', 'z-index' : 1, overflow : 'hidden' }); // insert a clear us.append('
'); // style universe items items = us.children('.item'); items.css({ 'float' : 'left', 'margin-right' : options.itemspacing+'px' }); // calculate universe width var us_width = 0; // also calculate max height var maxheight = 0; items.each(function(){ var e = $(this); us_width += (e.outerWidth(true)); var thisheight = e.outerHeight(true); if(thisheight > maxheight){maxheight=thisheight;} }); // force apply some universe css us.css({ 'position' : 'absolute', top : '0px', left : '0px', height : '100%', 'z-index' : 5, width : us_width+'px' }); if(options.autoheight){ var css = {height : maxheight+'px'}; el.css(css); us.css(css); vp.css(css); } // do autocenter if(options.autocenteritems){ items.each(function(){ var e = $(this); if(e.outerHeight(true) < maxheight){ var thistop = maxheight - e.outerHeight(true); thistop = thistop/2; e.css({ 'position' : 'relative', top : thistop+'px' }); } }); } // do autoplay if(options.autoplay){ jc$.intervals.brandscroll[i] = setInterval(function(){ el.brandscroll_move({ force : options.force, cycle : options.cycle, i : i, speed : options.speed, rewindspeed : options.rewindspeed }); }, options.autoplayinterval); } // do stop on hover if(options.stoponhover){ items.hover(function(){ el.brandscroll_pause({i:i}); }, function(){ el.brandscroll_resume({i:i}); }); } if(options.onclick!=''){ items.click(function(){ return options['onclick'](); }); } if(options.onmouseover!=''){ items.mouseover(function(){ return options['onmouseover'](); }); } if(options.onmouseout!=''){ items.mouseout(function(){ return options['onmouseout'](); }); } } }); }; // brandscroll animation event $.fn.brandscroll_move = function(options){ options = $.extend({ force : '', cycle : '', i : '', speed : '', direction : 'right', rewindspeed : '', stopqueue : false }, options); return this.each(function(){ // establish elements var el = $(this); var vp = el.children('.viewport'); var us = vp.children('.universe'); var i = options.i; if(i==''){ i = el.attr('brandscrollInstance'); } var s = jc$.settings.brandscroll[i]; for (var c in options){ if(options[c]==''){ options[c]=s[c]; } } // get width of universe var uswidth = us.outerWidth(true); // get viewport width var vpwidth = vp.outerWidth(); // get current position var thisleft = us.position().left; // integify options.force = options.force-1+1; thisleft = thisleft-1+1; var speed = options.speed, ml = ''; if(options.direction=='right'){ // get moveleft value ml = thisleft-options.force; // cycle if(options.cycle){ if(ml == (-(uswidth-vpwidth)-(options.force))) { // reset ml = 0; speed = options.rewindspeed; } } if((ml*-1)>uswidth-vpwidth){ ml = -(uswidth-vpwidth); } } else { // move left // get moveleft value ml = thisleft+options.force; // cycle if(options.cycle){ if((ml*-1)==(-options.force)){ ml = (uswidth-vpwidth); ml = ml*-1; speed = options.rewindspeed; } } // see if its greater than end. if(ml>0){ ml = 0; } } ml = Math.floor(ml); if(options.stopqueue){ us.stop(true); } us.animate({ left : ml+'px' }, {queue : true, duration : speed}); el.brandscroll_pause(); var waitspeed = speed; if(speed==options.rewindspeed){ waitspeed += (options.rewindspeed/2); } jc$.timeouts.brandscroll[i] = setTimeout(function(){ el.brandscroll_resume(); }, waitspeed); }); }; $.fn.brandscroll_pause = function(options){ options = $.extend({ i : '' }, options); return this.each(function(){ var el = $(this); var i = options.i; if(i==''){ i = el.attr('brandscrollInstance'); } var us = el.find('.universe'); // we have enough info to re-start the // interval so we can just clear it here clearInterval(jc$.intervals.brandscroll[i]); clearTimeout(jc$.timeouts.brandscroll[i]); }); }; $.fn.brandscroll_resume = function(options){ options = $.extend({ i : '' }, options); return this.each(function(){ var el = $(this); var i = options.i; if(i==''){ i = el.attr('brandscrollInstance'); } var s = jc$.settings.brandscroll[i]; // we will restart the interval from the saved settings if(s.autoplay){ jc$.intervals.brandscroll[i] = setInterval(function(){ el.brandscroll_move({ force : s.force, cycle : s.cycle, i : i, speed : s.speed }); }, s.autoplayinterval); } }); }; $.fn.brandscroll_button = function(opts){ opts = $.extend({ direction : 'right', el : '', force : '', stopqueue : true }, opts); this.each(function(){ var options = $.extend(true, {}, opts); var el = $(this); if(options.el == ''){ alert('Please provide the el option. This can be a normal jquery css reference to the brandscroll element.'); } var e = $(options.el); var i = e.attr('brandscrollInstance'); var s = jc$.settings.brandscroll[i]; for (var c in options){ options[c] = (options[c]=='')? s[c] : options[c]; } el.click(function(){ e.brandscroll_move(options); return false; }); }); return this; }; // #bswap $.fn.bswap = function(o){ o = $.extend({ template : '{value}', rollfade : 1, rollfade_options : {fadeIn : 0.8, fadeOut : 1} }, o); return this.each(function(){ var $el = $(this); var thisid = 'bswap_'+Math.floor(Math.random()*1023092); var html = o.template.replace('{thisid}', thisid); html = html.replace('{src}', $el.attr('src')); html = html.replace('{value}', $el.attr('value')); $el.after(html); var $img = $('#'+thisid); $img.click(function(){ $el.trigger('click'); if($el.attr('tagName').toLowerCase == 'a'){ if(typeof($el.attr('href'))!='undefined'){ window.location = $el.attr('href'); } } }); if(o.rollfade){ $img.rollfade(o.rollfade_options); } $el.css({ 'position' : 'absolute', 'left' : '-99999px', 'width' : '50px', 'visibility' : 'hidden' }); }); }; // #findpr // find the specified parent by tagname $.fn.findpr = function(o){ o = $.extend({ tagName : 'li', limit : 5 }, o); var $el = $(this); if($el.parent().attr('tagName').toLowerCase() ==o.tagName){ var li = $el.parent(); } else { var foundli = 0, p = $el.parent(), i =0; while(!foundli) { p = p.parent(); if(p.attr('tagName').toLowerCase() == o.tagName){ li = p; foundli = 1; } // self protection i++; if(i>o.limit){break;} } } return li; }; // #syntheticHistory // important to know this doesnt work for ie6, ie7 $.syntheticHistory = function(o){ o = $.extend({ interval : 100, fn : function(){} }, o); var lastClick = ''; $('a[href^="#"]').each(function(){ var $e = $(this); $e.bind('click.syntheticHistory', function(){ lastClick = $e.attr('href'); }); }); var hash = window.location.hash; // watch history var inverval = setInterval(function(){ var newhash = window.location.hash; if (newhash!=hash){ hash = newhash; if(lastClick!=hash){ $('a[href="'+hash+'"]:first').trigger('click'); o.fn(hash, lastClick); } } }, o.interval); }; // #setOpac // class of setOpac-57 = opacity of 57 jc$.timeouts.setOpac = []; $.setOpac = function(o){ o = $.extend({ init : 1 }, o); var setOpac = { // vars prefix : "setOpac", regexp : '', fadeDuration : 1, id : Math.floor(Math.random()*100010), // functions init : function(){ clearTimeout(jc$.timeouts.setOpac[this.id]); var obj = this; this.regexp = new RegExp('.*'+this.prefix+"\-([0-9.]+).*"); $('[class*="'+this.prefix+'"]').each(function(){ var $e = $(this); var opacity = $e.attr('class'); opacity = opacity.replace(obj.regexp, '$1'); opacity = opacity / 100; $e.fadeTo(obj.fadeDuration, opacity); }); return this; }, destroy : function(){ $('[class*="'+this.prefix+'"]').each(function(){ var $e = $(this); $e.fadeTo(1,1); }); }, refresh : function () { this.destroy(); jc$.timeouts.setOpac[this.id] = setTimeout(function(){ this.init(); }, this.fadeDuration); } }; if(o.init){setOpac.init();} return setOpac; }; // #stylesheet_swap $.stylesheet_swap = function (o) { o = $.extend({ init : 1 }, o); var stylesheet = { stylesheet : $('#global-stylesheet'), selector : '#select-style', activeStyle : '', changeCallBack : '', init : function(){ var obj = this; this.selector = $(this.selector); this.stylesheet = this.stylesheet; if(this.activeStyle!=''){ this.change(this.activeStyle); } this.activeStyle = this.stylesheet.attr('href'); this.selector.val(this.activeStyle).change(function(){ var $e = $(this); obj.stylesheet.trigger('swapStyle'); obj.change($e.val()); }); return this; }, disable : function(){ this.stylesheet.attr('disabled', true); return this; }, enable : function(){ this.stylesheet.removeAttr('disabled'); return this; }, change : function(url){ this.stylesheet.attr('href', url); if(typeof(this.changeCallBack) != 'string' && typeof(this.changeCallBack) != 'undefined'){ this.changeCallBack(url, this.stylesheet, this.activeStyle); } } }; if(o.init){stylesheet.init();} return stylesheet; }; // #horzscroll jc$.horzscroll = {}; $.horzscroll = function(init,o){ var _ = this; // vars _.$el = ''; _.$us = ''; _.$vp = ''; _.$items = ''; _.itemSelector = '.item'; _.extraWidth = 0; _.id = 0; _.speed = 1000; _.rewindspeed = 2500; _.intervalSpeed = 2500; _.force = 300; _.easing = 'swing'; _.autoplay = 0; _.autorefresh = 1; _.$next = ''; _.$prev = ''; _.createButtons = 1; _.callbacks = { onMove : '', afterMove : '', getWidth : '', refresh : '', afterInit : '' }; _.templates = { vp : '
', us : '
' }; _.width = 0; _.uswidth = 0; _.usleft = 0; _.usmovestack = 0; _.intervals = { }; _.timeouts = {}; // functions _.init = function(){ _.$el = $(_.$el); _.$items = _.$el.find(_.itemSelector); // BUILD _.$vp = $(_.templates.vp).appendTo(_.$el); _.$us = $(_.templates.us).appendTo(_.$vp); _.$items.each(function(){ _.$us.append(this); }); _.updateItemHandle(); _.getUsWidth(); // CSS _.$vp.css({ 'position' : 'relative', 'overflow' : 'hidden', 'width' : '100%', 'height' : '100%', 'left' : '0px', 'top' : '0px' }); _.$us.css({ 'position' : 'absolute', 'height' : '100%', 'left' : '0px', 'top' : '0px' }); // SET _.getWidth(); if(_.id==0){ _.id = _.$el.jcID(); } if(_.autoplay){ _.move(_.force); _.intervals.autoplay = setInterval(function(){ _.move(_.force); }, _.intervalSpeed); } if(_.createButtons){ _.buttons(); } if(_.autorefresh){ $(window).bind('resize.horzscroll'+_.id, function(){ if(_.autorefresh){ clearTimeout(_.timeouts.autorefresh); _.timeouts.autorefresh = setTimeout(function(){ _.refresh(); }, 1000); } }); } if(typeof(_.callbacks.afterInit)=='function'){ _.callbacks.afterInit(_.usleft, -(_.uswidth - _.width), (_.force*-1), _.width, _.uswidth, _.$el); } }; _.move = function(force){ _.usleft = _.$us.position().left; if(isnull(force)){ force = _.force; } force = force*-1; force = force + _.usleft; _.getWidth(); var speed = _.speed; // get limit var limit = -(_.uswidth - _.width); // prevent moving too far if(force < limit){ force = limit; } if (force > 0){ force = 0; } // move it ja ja ja _.$us.stop(1).animate({ left : force+'px' }, {duration : speed, easing : _.easing, complete : function(){ _.usleft = _.$us.position().left; if(typeof(_.callbacks.aftermove)=='function'){ _.callbacks.aftermove(_.usleft, limit, force, _.width, _.uswidth, _.$el); } }}); if(typeof(_.callbacks.onmove)=='function') { _.callbacks.onmove(_.usleft, limit, force, _.width, _.uswidth, _.$el); } }; _.buttons = function(){ if(isnull(_.$next)){ _.$next = _.$el.parent('.next'); } if(isnull(_.$prev)){ _.$prev = _.$el.parent('.prev'); } _.$next = $(_.$next); _.$prev = $(_.$prev); _.$next.click(function(){ _.move(_.force); return false; }); _.$prev.click(function(){ _.move(_.force*-1); return false; }); }; _.getWidth = function(){ _.width = _.$vp.outerWidth(); if(typeof(_.callbacks.getWidth)=='function'){ _.callbacks.getWidth(_.width, _.uswidth, _.$items.length); } }; _.getUsWidth = function(){ _.uswidth = 0; _.$items.each(function(){ _.uswidth += $(this).outerWidth(true); }); _.$us.css({ 'width' : _.uswidth+'px' }); }; _.updateItemHandle = function(){ _.$items = _.$el.find(_.itemSelector); _.$items.css({ 'float' : 'left' }); } _.refresh = function(){ _.updateItemHandle(); _.getWidth(); _.getUsWidth(); if(typeof(_.callbacks.refresh)=='function'){ var limit = -(_.uswidth - _.width); _.callbacks.refresh(_.usleft, limit, (_.force*-1), _.width, _.uswidth, _.$el); } } _.destroy = function(){ _.$el.remove(); _.clearIntervals(); _.$el.html(_.$us.html()); _.$el.unbind('*'); $(window).unbind('resize.horzscroll'+_.id); }; _.clearIntervals = function(){ clearInterval(_.intervals.autoplay); clearTimeout(_.timeouts.autorefresh); }; // merge vars with options _ = $.extend(_, o); // init if(!isnull(init)){ if(init){_.init();} } else {_.init();} return _; }; $.fn.horzscroll = function(o, param2) { return this.each(function(){ var $el = $(this); var id = $el.jcID(); if(typeof(o)=='string'){ switch(o.toLowerCase()){ case 'destroy' : jc$.horzscroll[id].destroy(); break; case 'refresh' : jc$.horzscroll[id].refresh(); break; default : jc$.horzscroll[id][o.toLowerCase()](param2); break; } } else { if(isnull(o)){o = {};} o.$el = $el; o.id = id; jc$.horzscroll[id] = new $.horzscroll(1,o); } }); }; // #ajaxForm (function(){ var instances = {}; var addMethod = ''; $.ajaxForm = function(o, init){ var self = this; if(isnull(init)){init = 1;} if(init){this.init(o);} }; addMethod = $.ajaxForm.prototype; addMethod.init = function(o){ this.instance = ''; this.data = {}; this.ready = 1; this.$ = ''; this.getBy = '.ajax'; this.url = ''; this.success = function(){}; if(isnull(o)){o = {};} $.extend(true, this, o); this.$ = $(this.$); this.instance = this.$.jcID(); instances[this.instance] = this; this.url = this.$.attr('action'); }; addMethod.get = function(){ var self = this; this.data = {}; // get all data this.$.find(this.getBy).each(function(){ var $el = $(this); var type = $el.attr('type'); type = type.toLowerCase(); var addToData = 1; if(type == 'checkbox' || type == 'radio'){ if(!$el.is(':checked')){ addToData = 0; } } if(addToData){ self.data[$el.attr('name')] = $el.val(); } }); self.data.ajaxForm = true; }; addMethod.post = function(){ var self = this; self.get(); $.post(self.url, self.data, self.success); }; $.fn.ajaxForm = function(o){ if(typeof(o)=='string'){ return this.each(function(){ var $el = $(this); return instances[$el.jcID()][o](); }); } else { o = $.extend({}, o); return this.each(function(){ o.$ = this; return new $.ajaxForm(o); }); } }; })(); // #swapKeys String.prototype.swapKeys = function(keyPairs){ var txt = this, r = ''; for (var i in keyPairs) { r = new RegExp('{'+i+'}', 'g'); txt = txt.replace(r, keyPairs[i]); } return txt; }; // #dragMe $.dragMe = function(o, $el){ o = $.extend(true, { moveOnDrag : 1, onDrag : function($el, e){}, dragging : function(t, l, offset, event, $el){}, dragStop : function($el){}, grid : 0, roundtype : 'floor' }, o); var cursor = $el.css('cursor') || 'auto', offset = {}; $el.bind('mousedown.object-dragging', function(e, eSynth){ // CONFIGURE e = (eSynth)?eSynth:e; var top = $el.position().top, left= $el.position().left; offset = { x : e.pageX-left, y : e.pageY-top }; // BUILD $el.css('cursor', 'move').stop(1); $.dragMe.stopTextSelection(); o.onDrag($el, e); // BIND $(document) .bind('mousemove.object-dragging', function(event){ var l = left +(event.pageX - offset.x-left); var t = top +(event.pageY - offset.y-top); if(o.grid>0){ l = (Math[o.roundtype](l/o.grid)*o.grid); t = (Math[o.roundtype](t/o.grid)*o.grid); } if(o.moveOnDrag){ $el.css({ top : t+'px', left : l+'px' }); } o.dragging(l, t, offset, event, $el); }) .bind('mouseup.object-dragging', function(){ $(document) .unbind('mousemove.object-dragging') .unbind('mouseup.object-dragging'); $.dragMe.resumeTextSelection(); $el.css('cursor', cursor); o.dragStop($el); }); return false; }); }; $.fn.dragMe = function(opts){ this.each(function(){ var o = opts; if(typeof(o)=='string'){ if(o=='destroy'){ $(this).unbind('mousedown.object-dragging'); } } else { o = $.extend(true, {}, opts); $.dragMe(o, $(this)); } }); return this; }; $.dragMe.stopTextSelection = function(){ // prevent selecting text when dragging $(document).bind('selectstart.object-dragging', function(){ return false; }); if($.browser.mozilla){ $('body').css('MozUserSelect', 'none'); } return true; }; $.dragMe.resumeTextSelection = function(){ $(document).unbind('selectstart.object-dragging'); if($.browser.mozilla){ $('body').css('MozUserSelect', 'auto'); } return true; }; $.dragMe.iedragimages = function(){ if($.browser.msie){ // IE document.ondragstart = function(){return false;}; } }; $.fn.getOuterWidth = function(){ return (typeof window.getComputedStyle == 'function') ? Math.ceil(parseFloat(window.getComputedStyle(this.get(0), "").getPropertyValue("width"))) : this.outerWidth(); }; $.remoteImageDimensions = function (path, fn){ var self = this, img = new Image(); img.onload = function(){ self.width = img.width; self.height= img.height; fn(img.width, img.height, img); }; img.src = path; }; $.isStyled = function(className){ var re = new RegExp('(^|,)\\s*\\.'+className+'\\s*(\\,|$)'); var ret = false; for(var i=0; i0){ var i = Math.floor( Math.random()*functionsArray.length ); if(typeof functionsArray[i]=='function'){ functionsArray[i](); } else { $.randomFunction(functionsArray); } } return this; }; $.pickPointBetweenRange = function(min, max){ max -= min; max += 1; return Math.floor(Math.random()*max)+min; };