// jquery.jparallax.js
// 0.9.1
// Stephen Band
//
// Dependencies:
// jQuery 1.2.6 (jquery.com)
//
// Project and documentation site:
// http://webdev.stephband.info/parallax.html

(function(r){function stripFiletype(a){var x=a.replace('.html','');return x.replace('#','')}function initOrigin(l){if(l.xorigin=='left'){l.xorigin=0}else if(l.xorigin=='middle'||l.xorigin=='centre'||l.xorigin=='center'){l.xorigin=0.5}else if(l.xorigin=='right'){l.xorigin=1}if(l.yorigin=='top'){l.yorigin=0}else if(l.yorigin=='middle'||l.yorigin=='centre'||l.yorigin=='center'){l.yorigin=0.5}else if(l.yorigin=='bottom'){l.yorigin=1}}function positionMouse(a,b,c){var d={x:0,y:0,sum:0};if(!a.ontarget){d.x=c.x-b.x;d.y=c.y-b.y;d.sum=Math.sqrt(d.x*d.x+d.y*d.y);c.x=b.x+d.x*a.takeoverFactor;c.y=b.y+d.y*a.takeoverFactor;if(d.sum<a.takeoverThresh&&d.sum>a.takeoverThresh*-1){a.ontarget=true}}else{c.x=b.x;c.y=b.y}}function setupPorts(a,b){var c=b.element.offset();r.extend(a,{width:a.element.width(),height:a.element.height()});r.extend(b,{width:b.element.width(),height:b.element.height(),top:c.top,left:c.left})}function parseTravel(a,b,c){var d;var e;if(typeof(a)==='string'){if(a.search(/^\d+\s?px$/)!=-1){a=a.replace('px','');a=parseInt(a,10);d=b*(c-a);e=b*100+'%';return{travel:a,travelpx:true,offset:d,cssPos:e}}else if(a.search(/^\d+\s?%$/)!=-1){a.replace('%','');a=parseInt(a,10)/100}else{a=1}}d=b*(1-a);return{travel:a,travelpx:false,offset:d}}function setupLayer(a,i,b){var c;var d;var e={};a[i]=r.extend({},{width:a[i].element.width(),height:a[i].element.height()},a[i]);c=parseTravel(a[i].xtravel,a[i].xorigin,a[i].width);d=parseTravel(a[i].ytravel,a[i].yorigin,a[i].height);r.extend(a[i],{diffxrat:b.width/(a[i].width-b.width),diffyrat:b.height/(a[i].height-b.height),xtravel:c.travel,ytravel:d.travel,xtravelpx:c.travelpx,ytravelpx:d.travelpx,xoffset:c.offset,yoffset:d.offset});if(c.travelpx){e.left=c.cssPos}if(d.travelpx){e.top=d.cssPos}if(c.travelpx||d.travelpx){a[i].element.css(e)}}function setupLayerContents(a,i,b){var c;r.extend(a[i],{content:[]});for(var n=0;n<a[i].element.children().length;n++){if(!a[i].content[n])a[i].content[n]={};if(!a[i].content[n].element)a[i].content[n]['element']=a[i].element.children().eq(n);if(!a[i].content[n].anchor&&a[i].content[n].element.children('a').attr('name')){a[i].content[n]['anchor']=a[i].content[n].element.children('a').attr('name')}if(a[i].content[n].anchor){c=a[i].content[n].element.offset();r.extend(a[i].content[n],{width:a[i].content[n].element.width(),height:a[i].content[n].element.height(),x:c.left-b.left,y:c.top-b.top});r.extend(a[i].content[n],{posxrat:(a[i].content[n].x+a[i].content[n].width/2)/a[i].width,posyrat:(a[i].content[n].y+a[i].content[n].height/2)/a[i].height})}}}function moveLayers(a,b,c){var d;var e;var f;for(var i=0;i<a.length;i++){d=a[i].xtravel*b+a[i].xoffset;e=a[i].ytravel*c+a[i].yoffset;f={};if(a[i].xparallax){if(a[i].xtravelpx){f.marginLeft=d*-1+'px'}else{f.left=d*100+'%';f.marginLeft=d*a[i].width*-1+'px'}}if(a[i].yparallax){if(a[i].ytravelpx){f.marginTop=e*-1+'px'}else{f.top=e*100+'%';f.marginTop=e*a[i].height*-1+'px'}}a[i].element.css(f)}}r.fn.jparallax=function(l){var m=r().extend({},r.fn.jparallax.settings,l);var o={xparallax:m.xparallax,yparallax:m.yparallax,xorigin:m.xorigin,yorigin:m.yorigin,xtravel:m.xtravel,ytravel:m.ytravel};var p={element:m.mouseport,takeoverFactor:m.takeoverFactor,takeoverThresh:m.takeoverThresh};if(m.mouseport)p['element']=m.mouseport;var q=[];for(var a=1;a<arguments.length;a++){q.push(r.extend({},o,arguments[a]))}return this.each(function(){var e={x:0.5,y:0.5};var f={x:0.5,y:0.5};var g={running:false,frame:m.frameDuration,fire:function(x,y){positionMouse(j,e,f);moveLayers(k,f.x,f.y);this.running=setTimeout(function(){if(e.x!=x||e.y!=y||!j.ontarget){g.fire(e.x,e.y)}else if(g.running){g.running=false}},g.frame)}};var h={element:r(this)};var j=r.extend({},{element:h.element},p,{xinside:false,yinside:false,active:false,ontarget:false});var k=[];function matrixSearch(a,b,c){for(var i=0;i<a.length;i++){var d=false;for(var n=0;n<a[i].content.length;n++){if(a[i].content[n].anchor==b){c(i,n);return[i,n]}}}return false}setupPorts(h,j);for(var i=0;i<h.element.children().length;i++){k[i]=r.extend({},o,q[i],{element:h.element.children('*:eq('+i+')')});setupLayer(k,i,j);if(m.triggerResponse){setupLayerContents(k,i,h.element.offset())}}h.element.children().css('position','absolute');moveLayers(k,0.5,0.5);if(m.mouseResponse){r().mousemove(function(a){j.xinside=(a.pageX>=j.left&&a.pageX<j.width+j.left)?true:false;j.yinside=(a.pageY>=j.top&&a.pageY<j.height+j.top)?true:false;if(j.xinside&&j.yinside&&!j.active){j.ontarget=false;j.active=true}if(j.active){if(j.xinside){e.x=(a.pageX-j.left)/j.width}else{e.x=(a.pageX<j.left)?0:1}if(j.yinside){e.y=(a.pageY-j.top)/j.height}else{e.y=(a.pageY<j.top)?0:1}}if(j.xinside&&j.yinside){if(!g.running)g.fire(e.x,e.y)}else if(j.active){j.active=false}})}if(m.triggerResponse){h.element.bind("jparallax",function(a,b){b=stripFiletype(b);matrixSearch(k,b,function(i,n){e.x=k[i].content[n].posxrat*(k[i].diffxrat+1)-(0.5*k[i].diffxrat);e.y=k[i].content[n].posyrat*(k[i].diffyrat+1)-(0.5*k[i].diffyrat);if(!m.triggerExposesEdges){if(e.x<0)e.x=0;if(e.x>1)e.x=1;if(e.y<0)e.y=0;if(e.y>1)e.y=1}j.ontarget=false;if(!g.running)g.fire(e.x,e.y)})})}r(window).resize(function(){setupPorts(h,j);for(var i=0;i<k.length;i++){setupLayer(k,i,j)}})})};r.fn.jparallax.settings={mouseResponse:true,mouseActiveOutside:false,triggerResponse:true,triggerExposesEdges:false,xparallax:true,yparallax:true,xorigin:0.5,yorigin:0.5,xtravel:1,ytravel:1,takeoverFactor:0.65,takeoverThresh:0.002,frameDuration:25};initOrigin(r.fn.jparallax.settings);r(function(){})})(jQuery);