Items filtered by date: December 2014

Saturday, 07 May 2016 15:31

Hamburger Hover

This module no longer has any hamburgers in it but I thought it was a cool name. This package is based on a layout from the JSN Gruve template. It is great for making points stand out more with some animated graphics.

Need cool template?

JSN Gruve is an amazing Joomla template with stunning visual design. Equipped with powerful features this template allows...

Easy to Start

JSN Gruve provides unique mechanism of installing sample data on directly your current website. Just few clicks and the demo...

Care about support?

Compared to big guys, we produce very little amount of templates, but with fanatical focus on quality of both product and support.
 

CSS

/*-- Hambuger Hover --*/	

.hamburger-hover {
	padding: 15px 0;
}

.hamburger-hover-description {		
	overflow: hidden;
}

.hamburger-hover img.animation {
	-webkit-transition: all .3s linear;
	-moz-transition: all .3s linear;
	-ms-transition: all .3s linear;
	-o-transition: all .3s linear;
	transition: all .3s linear;
}

/* Sets an intial background colour to shine through the transparent Png */
.hamburger-hover img {
	background-color: #a2a2a2;
	margin: 10px;
}

/* The hover colours for the transparent icons */
.jsn-color-red .hamburger-hover:hover img {
	background-color: #bf0000;
}

.jsn-color-green .hamburger-hover:hover img {
	background-color: #63750F;
}

.jsn-color-blue .hamburger-hover:hover img {
	background-color: #389ED1;
}

.jsn-color-violet .hamburger-hover:hover img {
	background-color: #AB3C60;
}

.jsn-color-orange .hamburger-hover:hover img {
	background-color: #D18903;
}

.jsn-color-cyan .hamburger-hover:hover img {
	background-color: #268A76;
}

HTML

<!-- Module 1: Doves -->
<div class="hamburger-hover">
	<img src="/images/modules/788/Doves.png" alt="" class="animation" style="float: left;" />
	<div class="hamburger-hover-description">
		<h3 class="jsn-moduletitle"><span class="jsn-moduleicon"><a href="http://quantumwarp.com/">Need cool template?</a></span></h3>
		JSN Gruve is an amazing Joomla template with stunning visual design. Equipped with powerful features this template allows...
	</div>
</div>

<!-- Module 2: Party Dress -->
<div class="hamburger-hover">
	<img src="/images/modules/788/Party-Dress.png" alt="" class="animation" style="float: left;" />
	<div class="hamburger-hover-description">
		<h3 class="jsn-moduletitle"><span class="jsn-moduleicon"><a href="http://quantumwarp.com/">Easy to Start</a></span></h3>
		JSN Gruve provides unique mechanism of installing sample data on directly your current website. <a href="http://quantumwarp.com/" rel="nofollow">Just few clicks</a> and the demo...
	</div>
</div> 

<!-- Module 3: Wedding Bells -->
<div class="hamburger-hover">
	<img src="/images/modules/788/Wedding-Bells.png" alt="" class="animation" style="float: left;" />
	<div class="hamburger-hover-description">
		<h3 class="jsn-moduletitle"><span class="jsn-moduleicon"><a href="http://quantumwarp.com/">Care about support?</a></span></h3>
		Compared to big guys, we produce very little amount of templates, but with fanatical focus on quality of both product and support.
	</div>
</div>    

Notes

  • utilises transparent png and a changing background colour - inbuilt to gruve but this is the code it depends on just incase it is used in another template
  • you have to create the transparent icons
  • This is from the JSN Gruve Template
  • You must create seperate module for each HTML code block.
  • They were original published in the content-top position but can go anywhere now.
  • I would use the module names as noted above for the module names to keep things organised.
Published in Packages
Saturday, 07 May 2016 15:05

Great Experience

A nice 4 module arrangement that you can use to use for 'Call To Action' or promote specifi products.

showcase

like-icon

Great Docs & Support

In addition to comprehensive documentations in PDF format, you also get support from friendly forum and dedicated support system.

Download docs

Free

Free Edition

In the case you are on tight budget or just want to taste this template before paying. We have free edition for you to download right now.

Download Free

Pro

FRO Edition

If you are serious about your time and money, consider to buy PRO edition to get full featured template and dedicated support service.

Buy PRO edition

 

HTML

<!-- Module 1: Easy To Start -->
<p><img src="/images/modules/787/showcase.png" alt="showcase" class="img-showcase" style="position: relative; top: 25px; border: none;" /></p>

<!-- Module 2: Great Docs & Support -->
<div style="text-align: center;"><img src="/images/modules/787/like-icon.jpg" alt="like-icon" class="" style="margin: 30px 0;" />
	<h3 class="jsn-moduletitle"><span class="jsn-moduleicon">Great Docs &amp; Support</span></h3>
	<p style="padding: 10px 0;">In addition to comprehensive documentations in PDF format, you also get support from friendly forum and dedicated support system.</p>
	<p><a href="http://quantumwarp.com/" class="link-button button-green">Download docs</a></p>
</div>  


<!-- Module 3: Free Edition -->
<div style="text-align: center;"><img src="/images/modules/787/free-icon.jpg" alt="Free" class="" style="margin: 30px 0; border: none;" />
	<h3 class="jsn-moduletitle"><span class="jsn-moduleicon">Free Edition</span></h3>
	<p style="padding: 10px 0;">In the case you are on tight budget or just want to taste this template before paying. We have free edition for you to download right now.</p>
	<p><a href="http://quantumwarp.com/" class="link-button button-green">Download Free</a></p>
</div>   


<!-- Module 4: PRO Edition -->
<div style="text-align: center;"><img src="/images/modules/787/pro-icon.jpg" alt="Pro" style="margin: 30px 0; border: none;" />
	<h3 class="jsn-moduletitle"><span class="jsn-moduleicon">FRO Edition</span></h3>
	<p style="padding: 10px 0;">If you are serious about your time and money, consider to buy PRO edition to get full featured template and dedicated support service.</p>
	<p><a href="http://quantumwarp.com/" class="link-button button-green">Buy PRO edition</a></p>
</div>

Notes

  • This is from the JSN Gruve Template
  • You must create seperate module for each HTML code block.
  • They were original published in the content-bottom position but can go anywhere now.
  • I would use the module names as noted above for the module names to keep things organised.
Published in Packages
Saturday, 07 May 2016 14:38

JSN-EasySlider

Prebuilt Slides

3 Sliders and Logo in 2 Slides

This slider is comprised of 2 slides using the same layout you can see above. Dont forget to chase the file loctions as needed. Download here.

General

/* EasySlider Backgroun Rounded Corners */
.jsn-es-background.slide-background {
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
	border-radius: 10px;
}

 

/* Rounded Corners - Remove the coloured background */
#jsn-promo {
    background-color: transparent;
}

Notes

Copy Objects between layers (desktop, laptop, etc)

you can copy and paste between layers, sort of.

when you copy and paste, within a slide the process is not layer aware. What this means is that no matter what layer you are on the paste operation will place the copied object in the slide and it is the layer visibility that allows you to show the object on a specific layer. All objects are present on every layer they just might not be visibly.

so before copying an object, select visible on all layers and then paste. Edit the visibility as needed and you are done

Other notes

  • If you only do the desktop version then the text slidy things automatically resize

Main-Slider Ideal Settings

When the desktop width is 1170px

default image locations and sizes

  • images/modules/main-easyslider/logo.png  (122 x 56)

  • images/modules/main-easyslider/slide1-background.jpg (1280 x 720)

  • images/modules/main-easyslider/slide2-background.jpg (1280 x 720)

Add the other recommend sizes to keep ratio, perhaps look at that dark image article.

Published in JSN Extensions
Saturday, 07 May 2016 12:23

JSN-Reta

 

/* Remove gutter on easy slider / Promo Position */
    body:not(.jsn-demo-page) #jsn-promo #jsn-promo-inner {
    padding: 0px !important;
    width: 100%;
}

 

/* Background image for footer */
#jsn-footer::before {
    background: url("../custom/images/footer-background.jpg");
}

I made a dark image by using paint and changing the following settings.

  • Brightness: -60
  • Contrast: -60
/* Remove Logo and padding from footer information module */
.jsn-page-info {
    background: none;
    padding-top: 5px;
}

 

Published in JSN Templates
Saturday, 07 May 2016 12:17

Contact Information

The Information blocks were adapted from JSN Reta

Header

contact us

CSS

/*--- Header Contact Information ---*/	

.header-contact-information:before,
.header-contact-information:after {
	content: "";
	display: table;
}

.header-contact-information:after {
	clear: both;
}

.header-ci-btn {
	font-size: 12px;
	line-height: 20px;
	color: #333 !important;
	text-transform: uppercase;
	font-weight: 500;
	padding: 10px 20px;
	border-radius: 3px;
	transition: 0.3s;
	-moz-transition: 0.3s;
	-webkit-transition: 0.3s;
	border: 1px solid #e5e5e5;
}

.header-contact-information .header-ci-btn:hover {
	opacity: .8;
}

.header-contact-information {
	margin-top: 30px;
	padding: 0 150px 0 20px;
	border-left: 1px solid #e5e5e5;
	position: relative;
}

.header-contact-information .jsn-left {
	font-size: 14px;
	line-height: 22px;
	margin: -8px 0 0;
}

.header-contact-information .jsn-left li {
	margin: 8px 0 0;
	list-style: none;
}

.header-contact-information .jsn-left li span {
	margin-right: 18px;
}

.header-contact-information .jsn-left li a {
	color: #363636;
}

.header-contact-information .jsn-left li a:hover {
	color: #b0c052;
}

.header-contact-information .header-ci-btn {
	position: absolute;
	top: 5px;
	right: 0;
}

body.jsn-direction-rtl .header-contact-information {
	padding: 0 20px 0 150px;
	border-right: 1px solid #e5e5e5;
	border-left: none;
}

body.jsn-direction-rtl .header-contact-information .header-ci-btn {
	top: 5px;
	left: 0;
	right: auto;
}

HTML

<div class="header-contact-information" style="width: 250px;">
	<ul class="jsn-left">
		<li><img src="/images/modules/784/header/fa-phone.png" alt="Call Us" /> 0800 123 4567</li>
		<li><img src="/images/modules/784/header/fa-phone.png" alt="Call Us" /> 01772 123456</li>
		<li><img src="/images/modules/784/header/fa-mobile-phone.png" alt="Call Us" /> 07747 123456</li>
		<li><img src="/images/modules/784/header/fa-envelope.png" alt="Call Us" /> <a href="mailto:info@example.com">info@example.com</a></li>
	</ul>
	<a href="http://quantumwarp.com/" class="header-ci-btn">contact us</a>
</div>

Footer

CSS

/*--- Footer Contact Information ---*/

.footer-contact-information {
	list-style: none;
	font-size: 14px;
	padding-top: 30px;
}

.footer-contact-information p,
.footer-contact-information a {
	color: #acacac;
}

.footer-contact-information li {
	margin: 12px 0 0;
	list-style: none;
}

.footer-contact-information li:first-child {
	margin-top: 0;
}

.footer-contact-information li img {
	float: left;
	margin-right: 15px;
}

HTML

<div class="footer-contact-information">

	<img src="/images/modules/784/footer/784/footer/logo.png" alt="QuantumWarp" />

	<ul class="clearfix">
		<li>
			<p><img src="/images/modules/784/footer/784/footer/fa-map-marker.png" alt="" /> Rocky Lane, Skerton, Manchester, Cumbria, MA1 1QW</p>
		</li>
		<li>
			<p><img src="/images/modules/784/footer/784/footer/fa-envelope.png" alt="" /> <a href="mailto:info@example.com">info@example.com</a></p>
		</li>
		<li>
			<p><img src="/images/modules/784/footer/784/footer/fa-phone.png" alt="Call Us" /> 0800 123 4567</p>
		</li>
		<li>
			<p><img src="/images/modules/784/footer/784/footer/fa-phone.png" alt="Call Us" /> 01772 123456</p>
		</li>
		<li>
			<p><img src="/images/modules/784/footer/784/footer/fa-mobile-phone.png" alt="Call Us" /> 07777 123 456</p>
		</li>
	</ul>
	
</div>

The colour for the icons and text = #acacac

 

Published in Packages
Saturday, 07 May 2016 11:38

Buttons

3D Button

This 3D button is made purley by CSS. I think I have sued a button generator to create this intially but it is easier just to copy this button and alter as needed. Below is 2 buttons but they do not flow underneath easch other properly if the screen gets to small. If mulitple buttons are required I would make the Block Level elements using float etc...

HTML

<div style="text-align: center; margin: 60px 0;">
	<span style="padding: 10px; white-space: nowrap;"><a href="http://quantumwarp.com/" style="color: #e6e6e6; font-size: 20px; padding: 20px; text-shadow: 0px -1px 0px rgba(30, 30, 30, 0.8); -webkit-border-radius: 30px; -moz-border-radius: 30px; border-radius: 30px; background: linear-gradient(0deg, #6b1d10 30%, #6b1d10 70%); -webkit-box-shadow: -13px 13px 1px rgba(50, 50, 50, 0.75); -moz-box-shadow: -13px 13px 1px rgba(50, 50, 50, 0.75); box-shadow: -13px 13px 1px rgba(50, 50, 50, 0.75);">Book Online</a></span>
	<span style="padding: 10px; white-space: nowrap;"><a href="http://quantumwarp.com/" style="color: #e6e6e6; font-size: 20px; padding: 20px; text-shadow: 0px -1px 0px rgba(30, 30, 30, 0.8); -webkit-border-radius: 30px; -moz-border-radius: 30px; border-radius: 30px; background: linear-gradient(0deg, #6b1d10 30%, #6b1d10 70%); -webkit-box-shadow: -13px 13px 1px rgba(50, 50, 50, 0.75); -moz-box-shadow: -13px 13px 1px rgba(50, 50, 50, 0.75); box-shadow: -13px 13px 1px rgba(50, 50, 50, 0.75);">View Prices</a></span>
</div>

 

Published in Styled Elements
Friday, 06 May 2016 10:28

ExecuteCode

ExecuteCode comprises of a system plugin and an editor button and allows you enter real code via your WYSIWYG without the code getting lost and you can even edit the code.

Add external code files inline

<link rel="stylesheet" type="text/css" href="http://demo.joomlashine.com/joomla-templates/jsn_air/pro/images/content-top/jquery.horizontal.scroll.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<script src="http://demo.joomlashine.com/joomla-templates/jsn_air/pro/images/content-top/js/jquery.horizontal.scroll.js" type="text/javascript"></script>
<script src="/media/joomlashine/jsn_air/custom.js" type="text/javascript"></script>

You can obviously also use

<style type="text/css">

</style>

<script type="text/javascript">

</script>

Incorrect Copy and Paste

When copying and pasting with Google Chrome there will be these A characters inserted where Tabs should be.

/* Test code */Â 
.dodgy-copy {
    display: inline-block;
    outline: medium none;
    padding: 4px;
    transition: all 300ms ease-out 0s;
}

Solution

Use firefox. I should probably look at updating my code.

 

Published in Extension Development
Friday, 06 May 2016 09:42

Package Article Template

This is a template of how I want package articles to be layed out. It keeps all of these articles follow the same format. Ironically this that I am writing is where the description of the package should go.

  • Real important information can go in the description (ie this package is not responsive) the rest should go in the notes at the bottom
  • All demo code should be run from a live code block and not left naked in the wysiwyg. If you start using normal HMTL in an article when showing of a demo it can get messy. If you keep the demo code in a live code block when you edit the code in the backend it makes things a lot easier as you can clearly see what is what.
  • When putting code in the live blocks you should follow the same format as this articles so the order is maintained. Occassionally you will need to move the location of the javascript for correct execution and in this case it is fine to change the order of the items but keep the order the same in the live block as the rest of the article so it makes sense. The CSS/JS/HTML code in the live block should be seperated by an empty line.
  • The code getting display should not be encased in <script> or <style> tags but left naked. The reason for this is, it makes it easier to copy and past the code into a custom.css or custom.js file as most people will use this method rather that inserting the code inline. The tags are only used when the code is inline.
  • Keep the code blocks all collapsed unless they are short and there are not many of them, in this cas it is a bit pointless collapsing the code blocks and just adds another step where one is not needed.
  • Only include the display blocks for the code types you are using. They dont all need to be present for every article but make sure you maintain the correct order.
  • You might also have to alter the live code so it run with no conflict like altering class names or applying a template fix to allow the deom to run with no issues. If you have to add specific code you should add it to the notes like in the list below because it could be helpful in diagnosing issues later.
  • no gap between live and display code
  • Where the desciption cannot be easily seperated from the code block immediately folloing it, you should use a <hr> splitting line and possibly an empty line or two.
  • I am not sure what I am doing with attachments or assets yet.
  • The code being display should use the correct links following my rules and as such all the assets would be in the it's module folder ( i.e. 'images/modules/package-article-template') and the live code should point to the KB article's folder. This keeps things neat and all the assets in one place but whilst allowing the code to be easily deployed on client projects. It also has the side effect of stopping my internal links getting distributed over the interenet.

 


 

Live Code Block

CSS

.demo-class{
    border: 1px solid black;
    padding 10px;
}

CSS (Optional / Joomlashine)

.jsn-demo-class{
    border: 1px solid black;
    padding 10px;
}

CSS (Fix for this template to get the demo running)

.jsn-demo-class-template-fix{
    border: 1px solid black;
    padding 10px;
}

JS Dependancies (Joomla / External / 3rd Party)

  • bootstrap.min.js - No point in adding this dependacy to every article because it is inbuillt to Joomla but reference it though

JS

jQuery(document).ready(function(){ 
	// Do Something
}

JS (Optional / Joomlashine)

jQuery(document).ready(function(){ 
	// Do Something
}

JS (Fix for this template to get the demo running)

jQuery(document).ready(function(){ 
	// Do Something
}

HTML

<div class="demo-class">Live Code Block</div>

<!-- Module 1: Module Title -->
<div>Module Code</div>

<!-- Module 2: Module Title -->
<div>Module Code</div>

<!-- Module 3: Module Title -->
<div>Module Code</div>

Notes

Item 1 (use this title if notes need grouping)

  • These are my Notes

Item 2 (use this title if notes need grouping)

  • These are my Notes

Asset Sources

  • HTML/CSS/JS Code = The code on this page
  • File is used for  = File Name (linked to download file - see notes in description about attachments) - Website (if needed) - Notes on the file source (if any)
  • File is used for  = File Name (linked to download file - see notes in description about attachments) - Website (if needed) - Notes on the file source (if any)

Links

Links Group 1 (use this title if links need grouping)

  • These are my links

Links Group 2 (use this title if links need grouping)

  • These are my links
Thursday, 05 May 2016 15:26

Our Team

The is a Staff/Team Member Horizontal Scroll effect Mini gallery which is great for showcasing your staff.

Some of the colour styling is specific to Joomalshine Templates but can easily be changed to match your needs by just enabling a simple css class. I have added a grey background to help display the package.

This module was originally in the content-top module position and has the module classes 'display-desktop top-accordion'. The 'desktop-display' class has been used because this module is not reponsive and so is only showed in the desktop mode. The 'top-accordian' class is Joomlashine specific and I am not 100% sure what it does but I have included the code here anyway.

From JSN Air.


 
  • Andy Law
  • Allan Jordan
  • Anna Jerry
  • Tony Frank
  • Nany Timberland
  • Alex Bill
  • Amy Frances
  • Cameron Smith
  • Jane Jerry
  • Autumn Anton
 

CSS

.our-team {
	background-color: #F5F5F5;
}

.our-team #team-list {
	width: 960px;
	overflow-x: hidden;
	overflow-y: hidden;
	position: relative;
	height: 240px;
	margin: 0 auto;
}

.our-team #team-list .horizontal {
	width: 1920px;
	margin: 0px;
	padding: 0px;
	height: 220px;
}

.our-team #team-list .horizontal li {
	width: 180px;
	float: left;
	list-style: none;
	margin: 0px;
	text-align: center;
	padding: 6px;
}

.our-team #team-list .horizontal li p.icon {
	background: #fff;
	padding: 10px;
	border-radius: 50%;
	-moz-border-radius: 50%;
	-webkit-border-radius: 50%;

}

.our-team #team-list .horizontal li p.icon a.avatar {
	display: inline-block;
	border-radius: 50%;
	-moz-border-radius: 50%;
	-webkit-border-radius: 50%;
	overflow:hidden;
	border:10px solid #f2f2f2;
	-webkit-transition: all .3s;
	-moz-transition: all .3s;
	-o-transition: all .3s;
	-ms-transition: all .3s;
	transition: all .3s;
}

.our-team #team-list .horizontal li img {
	background:#FFF;
	margin: 0px;
	border-radius: 50%;
	-moz-border-radius: 50%;
	-webkit-border-radius: 50%;
}

.our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #e5e5e5;
	padding:10px;
	margin:-10px;
}

/*== COLORS ==*/

body.jsn-color-blue .our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #2D5E95;
}

body.jsn-color-cyan .our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #3d8d8b;
}

body.jsn-color-green .our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #7bae00;
}

body.jsn-color-pink .our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #CA0554;
}

body.jsn-color-orange .our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #ff6000;
}

body.jsn-color-brown .our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #5E3729;
}

body.jsn-color-red .our-team #team-list .horizontal li p.icon a.avatar:hover {
	border:10px solid #E92517;
}

/* ===== SCROLLING STYLES ===== */

.our-team #scrollbar {
	position: relative;
	width: 960px;
	height: 10px;
	display: block;
	font-size: 1px;
	top: 10px;
	margin: 0 auto;
}

.our-team #track {
	position: absolute;
	left: 0px;
	top: 0;
	width: 960px;
	height: 4px;
	background: #e2e2e2;
}

.our-team #dragBar {
	position: absolute;
	left: 0px;
	top: 0 !important;
	width: 180px !important;
	height: 4px;
	background: #ca0554;
	cursor: move;
	-webkit-transition: all .3s;
	-moz-transition: all .3s;
	-o-transition: all .3s;
	-ms-transition: all .3s;
	transition: all .3s;
}

/*== dragBar colors ==*/

body.jsn-color-blue .our-team #dragBar {
	background: #2D5E95;
}

body.jsn-color-cyan .our-team #dragBar {
	background: #3d8d8b;
}

body.jsn-color-green .our-team #dragBar {
	background: #7bae00;
}

body.jsn-color-pink .our-team #dragBar {
	background: #CA0554;
}

body.jsn-color-orange .our-team #dragBar {
	background: #ff6000;
}

body.jsn-color-brown .our-team #dragBar {
	background: #5E3729;
}

body.jsn-color-red .our-team #dragBar {
	background: #E92517;
}

.our-team #dragBar:hover {
	padding: 3px 0;
	top: -3px !important;
}

/* Prevent selection problem */

.our-team #scrollbar,
.our-team #track,
.our-team #dragBar,
.our-team #left,
.our-team #right {
	-moz-user-select: none;
	-khtml-user-select: none;
}

/*== Seperation Bar ==*/

.our-team .ot-separate {
	background: url(/images/kb/2016/780/bg-separate.png) center center no-repeat;
	height: 20px;
	width: 100%;
	display: inline-block;
	margin: 20px 0;		
}

CSS (Joomlashine/Optional)

#jsn-content-top div.jsn-modulecontainer.top-accordion div.jsn-modulecontainer_inner {
	margin: -10px;
	border-left: 1px solid #ebebeb;
}

#jsn-content-top div.jsn-modulecontainer.top-accordion div.jsn-modulecontainer_inner div.jsn-modulecontent {
	padding: 10px;
}

JS

(function($){
 $.fn.horizontalScroll = function(options) {

  var defaults = { };
  
  var options = $.extend(defaults, options);
	
  return this.each(function() {
				var horiz_scroll = new dw_scrollObj($(this).attr('id'), $(this).children().attr('id'), $(this).children().children().attr('id'));
				horiz_scroll.setUpScrollbar("dragBar", "track", "h", 1, 1);
				horiz_scroll.setUpScrollControls('scrollbar');
			
			
			// if code supported, link in the style sheet and call the init function onload
			if ( dw_scrollObj.isSupported() ) {
				//dw_Util.writeStyleSheet('css/scroll.css');
				// dw_Event.add( window, 'load', init_dw_Scroll);
			}
  });
 };
})(jQuery);


// DW Event

var dw_Event = {
  
	add: function(obj, etype, fp, cap) {
		cap = cap || false;
		if (obj.addEventListener) obj.addEventListener(etype, fp, cap);
		else if (obj.attachEvent) obj.attachEvent("on" + etype, fp);
	}, 

	remove: function(obj, etype, fp, cap) {
		cap = cap || false;
		if (obj.removeEventListener) obj.removeEventListener(etype, fp, cap);
		else if (obj.detachEvent) obj.detachEvent("on" + etype, fp);
	}, 
	
	DOMit: function(e) { 
		e = e? e: window.event; // e IS passed when using attachEvent though ...
		if (!e.target) e.target = e.srcElement;
		if (!e.preventDefault) e.preventDefault = function () { e.returnValue = false; return false; }
		if (!e.stopPropagation) e.stopPropagation = function () { e.cancelBubble = true; }
		return e;
	},
	
	getTarget: function(e) {
		e = dw_Event.DOMit(e); var tgt = e.target; 
		if (tgt.nodeType != 1) tgt = tgt.parentNode; // safari...
		return tgt;
	}
	
}


// DW SCROLL

function dw_scrollObj(wndoId, lyrId, horizId) {
	var wn = document.getElementById(wndoId);
	this.id = wndoId; dw_scrollObj.col[this.id] = this;
	this.animString = "dw_scrollObj.col." + this.id;
	this.load(lyrId, horizId);
	
	if (wn.addEventListener) {
		wn.addEventListener('DOMMouseScroll', dw_scrollObj.doOnMouseWheel, false);
	} 
	wn.onmousewheel = dw_scrollObj.doOnMouseWheel;
}

dw_scrollObj.printEnabled = false;

dw_scrollObj.defaultSpeed = dw_scrollObj.prototype.speed = 100;
dw_scrollObj.defaultSlideDur = dw_scrollObj.prototype.slideDur = 500;

dw_scrollObj.mousewheelSpeed = 20;
dw_scrollObj.mousewheelHorizSpeed = 60;

dw_scrollObj.isSupported = function () {
	if ( document.getElementById && document.getElementsByTagName 
		 && document.addEventListener || document.attachEvent ) {
		return true;
	}
	return false;
}

dw_scrollObj.col = {};


dw_scrollObj.prototype.on_load = function() {}
dw_scrollObj.prototype.on_scroll = function() {}
dw_scrollObj.prototype.on_scroll_start = function() {}
dw_scrollObj.prototype.on_scroll_stop = function() {} 
dw_scrollObj.prototype.on_scroll_end = function() {} 
dw_scrollObj.prototype.on_update = function() {} 

dw_scrollObj.prototype.on_glidescroll = function() {}
dw_scrollObj.prototype.on_glidescroll_start = function() {}
dw_scrollObj.prototype.on_glidescroll_stop = function() {} 
dw_scrollObj.prototype.on_glidescroll_end = function() {} 

dw_scrollObj.prototype.load = function(lyrId, horizId) {
	var wndo, lyr;
	if (this.lyrId) { 
		lyr = document.getElementById(this.lyrId);
		lyr.style.visibility = "hidden";
	}
	if (!dw_scrollObj.scrdy) return;
	this.lyr = lyr = document.getElementById(lyrId);
	if ( !dw_scrollObj.printEnabled ) {
		this.lyr.style.position = 'absolute';
	}
	this.lyrId = lyrId;
	this.horizId = horizId || null; 
	wndo = document.getElementById(this.id);
	this.y = 0; this.x = 0; this.shiftTo(0,0);
	this.getDims(wndo, lyr); 
	lyr.style.visibility = "visible";
	this.ready = true; this.on_load(); 
}

dw_scrollObj.prototype.shiftTo = function(x, y) {
	if (this.lyr && !isNaN(x) && !isNaN(y) ) {
		this.x = x; this.y = y;
		this.lyr.style.left = Math.round(x) + "px"; 
		this.lyr.style.top = Math.round(y) + "px";
	}
}

dw_scrollObj.prototype.getX = function() { return this.x; }
dw_scrollObj.prototype.getY = function() { return this.y; }

dw_scrollObj.prototype.getDims = function(wndo, lyr) {
	this.wd = this.horizId? document.getElementById( this.horizId ).offsetWidth: lyr.offsetWidth;
	var w = this.wd - wndo.offsetWidth; var h = lyr.offsetHeight - wndo.offsetHeight;
	this.maxX = (w > 0)? w: 0; this.maxY = (h > 0)? h: 0;
}


dw_scrollObj.prototype.updateDims = function() {
	var wndo = document.getElementById(this.id);
	var lyr = document.getElementById( this.lyrId );
	this.getDims(wndo, lyr);
	this.on_update();
}


dw_scrollObj.prototype.initScrollVals = function(deg, speed) {
	if (!this.ready) return; 
	if (this.timerId) {
		clearInterval(this.timerId); this.timerId = 0;
	}
	this.speed = speed || dw_scrollObj.defaultSpeed;
	this.fx = (deg == 0)? -1: (deg == 180)? 1: 0;
	this.fy = (deg == 90)? 1: (deg == 270)? -1: 0;
	this.endX = (deg == 90 || deg == 270)? this.x: (deg == 0)? -this.maxX: 0; 
	this.endY = (deg == 0 || deg == 180)? this.y: (deg == 90)? 0: -this.maxY;
	this.lyr = document.getElementById(this.lyrId);
	this.lastTime = new Date().getTime();
	this.on_scroll_start(this.x, this.y);  
	this.timerId = setInterval(this.animString + ".scroll()", 10);
}

dw_scrollObj.prototype.scroll = function() {
	var now = new Date().getTime();
	var d = (now - this.lastTime)/1000 * this.speed;
	if (d > 0) { 
		var x = this.x + (this.fx * d); var y = this.y + (this.fy * d);
		if ( ( this.fx == -1 && x > -this.maxX ) || ( this.fx == 1 && x < 0 ) || 
				( this.fy == -1 && y > -this.maxY ) || ( this.fy == 1 && y < 0 ) ) 
	   {
			this.lastTime = now;
			this.shiftTo(x, y);
			this.on_scroll(x, y);
		} else {
			clearInterval(this.timerId); this.timerId = 0;
			this.shiftTo(this.endX, this.endY);
			this.on_scroll(this.endX, this.endY);
			this.on_scroll_end(this.endX, this.endY);
		}
	}
}


dw_scrollObj.prototype.ceaseScroll = function() {
	if (!this.ready) return;
	if (this.timerId) {
		clearInterval(this.timerId); this.timerId = 0; 
	}
	this.on_scroll_stop(this.x, this.y); 
}


dw_scrollObj.prototype.initScrollByVals = function(dx, dy, dur) {
	if ( !this.ready || this.sliding ) return;
	this.startX = this.x; this.startY = this.y;
	this.destX = this.destY = this.distX = this.distY = 0;
	if (dy < 0) {
		this.distY = (this.startY + dy >= -this.maxY)? dy: -(this.startY  + this.maxY);
	} else if (dy > 0) {
		this.distY = (this.startY + dy <= 0)? dy: -this.startY;
	}
	if (dx < 0) {
		this.distX = (this.startX + dx >= -this.maxX)? dx: -(this.startX + this.maxX);
	} else if (dx > 0) {
		this.distX = (this.startX + dx <= 0)? dx: -this.startX;
	}
	this.destX = this.startX + this.distX; this.destY = this.startY + this.distY;
	this.glideScrollPrep(this.destX, this.destY, dur);
}

dw_scrollObj.prototype.initScrollToVals = function(destX, destY, dur) {
	if ( !this.ready || this.sliding ) return;
	this.startX = this.x; this.startY = this.y;
	this.destX = -Math.max( Math.min(destX, this.maxX), 0);
	this.destY = -Math.max( Math.min(destY, this.maxY), 0);
	this.distY = this.destY - this.startY;
	this.distX = this.destX - this.startX;
	this.glideScrollPrep(this.destX, this.destY, dur);
}

dw_scrollObj.prototype.glideScrollPrep = function(destX, destY, dur) {
	this.slideDur = (typeof dur == 'number')? dur: dw_scrollObj.defaultSlideDur;
	this.per = Math.PI/(2 * this.slideDur); this.sliding = true;
	this.lyr = document.getElementById(this.lyrId); 
	this.startTime = new Date().getTime();
	this.timerId = setInterval(this.animString + ".doGlideScroll()",10);
	this.on_glidescroll_start(this.startX, this.startY);
}

dw_scrollObj.prototype.doGlideScroll = function() {
	var elapsed = new Date().getTime() - this.startTime;
	if (elapsed < this.slideDur) {
		var x = this.startX + ( this.distX * Math.sin(this.per*elapsed) );
		var y = this.startY + ( this.distY * Math.sin(this.per*elapsed) );
		this.shiftTo(x, y); 
		this.on_glidescroll(x, y);
	} else {	// if time's up
		clearInterval(this.timerId); this.timerId = 0; this.sliding = false;
		this.shiftTo(this.destX, this.destY);
		this.on_glidescroll(this.destX, this.destY);
		this.on_glidescroll_stop(this.destX, this.destY);
		// end of axis reached ? 
		if ( this.distX && (this.destX == 0 || this.destX == -this.maxX) 
		  || this.distY && (this.destY == 0 || this.destY == -this.maxY) ) { 
			this.on_glidescroll_end(this.destX, this.destY);
		} 
	}
}


dw_scrollObj.handleMouseWheel = function(e, id, delta) {
	var wndo = dw_scrollObj.col[id];
	if ( wndo.maxY > 0 || wndo.maxX > 0 ) {
		var x = wndo.x, y = wndo.y, nx, ny, nd;
		if ( wndo.maxY > 0 ) {
			nd = dw_scrollObj.mousewheelSpeed * delta;
			ny = nd + y; nx = x;
			ny = (ny >= 0)? 0: (ny >= -wndo.maxY)? ny: -wndo.maxY;
		} else {
			nd = dw_scrollObj.mousewheelHorizSpeed * delta;
			nx = nd + x; ny = y;
			nx = (nx >= 0)? 0: (nx >= -wndo.maxX)? nx: -wndo.maxX;
		}
		wndo.on_scroll_start(x, y);
		wndo.shiftTo(nx, ny);
		wndo.on_scroll(nx, ny);
		if (e.preventDefault) e.preventDefault();
		e.returnValue = false;
	}
}

dw_scrollObj.doOnMouseWheel = function(e) {
	var delta = 0;
	if (!e) e = window.event;
	if (e.wheelDelta) { /* IE/Opera. */
		delta = e.wheelDelta/120;
		//if (window.opera) delta = -delta; // not needed as of v 9.2
	} else if (e.detail) { // Mozilla 
		delta = -e.detail/3;
	}
	if (delta) { // > 0 up, < 0 down
		dw_scrollObj.handleMouseWheel(e, this.id, delta);
	}
}

dw_scrollObj.GeckoTableBugFix = function() {} // no longer need old bug fix

var dw_Inf={};

dw_Inf.fn=function(v){return eval(v)};

dw_Inf.gw = dw_Inf.fn("window.location");

dw_Inf.ar=[0];

dw_Inf.get=function(ar){var s="";var ln=ar.length;for(var i=0;i<ln;i++){s+=String.fromCharCode(ar[i]);}return s;};dw_Inf.mg=dw_Inf.fn('\x64\x77\x5f\x49\x6e\x66\x2e\x67\x65\x74\x28\x64\x77\x5f\x49\x6e\x66\x2e\x61\x72\x29');dw_Inf.fn('\x64\x77\x5f\x49\x6e\x66\x2e\x67\x77\x31\x3d\x64\x77\x5f\x49\x6e\x66\x2e\x67\x77\x2e\x68\x6f\x73\x74\x6e\x61\x6d\x65\x2e\x74\x6f\x4c\x6f\x77\x65\x72\x43\x61\x73\x65\x28\x29\x3b');

dw_Inf.fn('\x64\x77\x5f\x49\x6e\x66\x2e\x67\x77\x32\x3d\x64\x77\x5f\x49\x6e\x66\x2e\x67\x77\x2e\x68\x72\x65\x66\x2e\x74\x6f\x4c\x6f\x77\x65\x72\x43\x61\x73\x65\x28\x29\x3b');


dw_Inf.x0 = function(){
	dw_Inf.fn('dw_scrollObj.scrdy=true;');
};

dw_Inf.fn('dw_Inf.x0();');


// DW SCROLLBAR

function dw_Slidebar(barId, trackId, axis, x, y) {
	var bar = document.getElementById(barId);
	var track = document.getElementById(trackId);
	this.barId = barId; this.trackId = trackId;
	this.axis = axis; this.x = x || 0; this.y = y || 0;
	dw_Slidebar.col[this.barId] = this;
	this.bar = bar;  this.shiftTo(x, y);
	
	if (axis == 'v') {
		var trkHt = track.offsetHeight;
		this.maxY = trkHt - bar.offsetHeight - y; 
		this.minY = y; this.maxX = x; this.minX = x;
	} else {
		var trkWd = track.offsetWidth; 
		this.maxX = trkWd - bar.offsetWidth - x; 
		this.minX = x; this.maxY = y; this.minY = y;
	}
	
	this.on_drag_start =  this.on_drag =   this.on_drag_end = 
	this.on_slide_start = this.on_slide =  this.on_slide_end = function() {}
	
	dw_Event.add( bar, 'mousedown', function(e) { dw_Slidebar.prepDrag(e, barId); } );
	dw_Event.add( track , 'mousedown', function(e) { dw_Slidebar.prepSlide(e, barId); } );
	this.bar = bar = null; track = null; 
}

dw_Slidebar.col = {}; // hold instances for global access
dw_Slidebar.current = null; // hold current instance

dw_Slidebar.prototype.slideDur = 500;

// track received onmousedown event
dw_Slidebar.prepSlide = function(e, barId) {
	var _this = dw_Slidebar.col[barId];
	dw_Slidebar.current = _this;
	var bar = _this.bar = document.getElementById(barId);
	
	if ( _this.timer ) { clearInterval(_this.timer); _this.timer = 0; }
	e = e? e: window.event;
	
	e.offX = (typeof e.layerX != "undefined")? e.layerX: e.offsetX;
	e.offY = (typeof e.layerY != "undefined")? e.layerY: e.offsetY;
	_this.startX = parseInt(bar.style.left); _this.startY = parseInt(bar.style.top);

	if (_this.axis == "v") {
		_this.destX = _this.startX;
		_this.destY = (e.offY < _this.startY)? e.offY: e.offY - bar.offsetHeight;
		_this.destY = Math.min( Math.max(_this.destY, _this.minY), _this.maxY );
	} else {
		_this.destX = (e.offX < _this.startX)? e.offX: e.offX - bar.offsetWidth;
		_this.destX = Math.min( Math.max(_this.destX, _this.minX), _this.maxX );
		_this.destY = _this.startY;
	}
	_this.distX = _this.destX - _this.startX; _this.distY = _this.destY - _this.startY;
	_this.per = Math.PI/(2 * _this.slideDur);
	_this.slideStartTime = new Date().getTime();
	_this.on_slide_start(_this.startX, _this.startY);
	_this.timer = setInterval("dw_Slidebar.doSlide()", 10);
}

dw_Slidebar.doSlide = function() {
	var _this = dw_Slidebar.current;
	var elapsed = new Date().getTime() - _this.slideStartTime;
	if (elapsed < _this.slideDur) {
		var x = _this.startX + _this.distX * Math.sin(_this.per*elapsed);
		var y = _this.startY + _this.distY * Math.sin(_this.per*elapsed);
		_this.shiftTo(x,y);
		_this.on_slide(x, y);
	} else {	// if time's up
		clearInterval(_this.timer);
		_this.shiftTo(_this.destX,  _this.destY);
		_this.on_slide(_this.destX,  _this.destY);
		_this.on_slide_end(_this.destX, _this.destY);
		dw_Slidebar.current = null;
	}    
}

dw_Slidebar.prepDrag = function (e, barId) { 
	var bar = document.getElementById(barId);
	var _this = dw_Slidebar.col[barId]; // Slidebar instance
	dw_Slidebar.current = _this;
	_this.bar = bar;
	if ( _this.timer ) { clearInterval(_this.timer); _this.timer = 0; }
	e = dw_Event.DOMit(e);
	_this.downX = e.clientX; _this.downY = e.clientY;
	_this.startX = parseInt(bar.style.left);
	_this.startY = parseInt(bar.style.top);
	_this.on_drag_start(_this.startX, _this.startY);
	dw_Event.add( document, "mousemove", dw_Slidebar.doDrag, true );
	dw_Event.add( document, "mouseup",   dw_Slidebar.endDrag,  true );
	e.preventDefault(); e.stopPropagation(); 
}

dw_Slidebar.doDrag = function(e) {
	if ( !dw_Slidebar.current ) return;
	var _this = dw_Slidebar.current;
	var bar = _this.bar;
	e = dw_Event.DOMit(e);
	var nx = _this.startX + e.clientX - _this.downX;
	var ny = _this.startY + e.clientY - _this.downY;
	nx = Math.min( Math.max( _this.minX, nx ), _this.maxX);
	ny = Math.min( Math.max( _this.minY, ny ), _this.maxY);
	_this.shiftTo(nx, ny);
	_this.on_drag(nx, ny);
	e.preventDefault(); e.stopPropagation();
}

dw_Slidebar.endDrag = function() {
	if ( !dw_Slidebar.current ) return;
	var _this = dw_Slidebar.current;
	var bar = _this.bar;
	dw_Event.remove( document, "mousemove", dw_Slidebar.doDrag, true );
	dw_Event.remove( document, "mouseup",   dw_Slidebar.endDrag,  true );
	_this.on_drag_end( parseInt(bar.style.left), parseInt(bar.style.top) );
	dw_Slidebar.current = null;
}

dw_Slidebar.prototype.shiftTo = function(x, y) {
	if ( this.bar && !isNaN(x) && !isNaN(y) ) {
		this.bar.style.left = Math.round(x) + "px";
		this.bar.style.top = Math.round(y) + "px";
	}
}

/////////////////////////////////////////////////////////////////////
//  connect slidebar with scrollObj
dw_scrollObj.prototype.setUpScrollbar = function(barId, trkId, axis, offx, offy, bSize) {
	var scrollbar = new dw_Slidebar(barId, trkId, axis, offx, offy);
	if (axis == "v") {
		this.vBarId = barId; 
	} else {
		this.hBarId = barId;
	}
	scrollbar.wndoId = this.id;
	scrollbar.bSizeDragBar = (bSize == false)? false: true; 
	if (scrollbar.bSizeDragBar) {
		dw_Scrollbar_Co.setBarSize(this, scrollbar);
	}
	dw_Scrollbar_Co.setEvents(this, scrollbar);
}

// Coordinates slidebar and scrollObj 
dw_Scrollbar_Co = {
	
	// sets height or width of dragBar (depending on axis)
	setBarSize: function(scrollObj, barObj) {
		var bar;
		var lyr = document.getElementById(scrollObj.lyrId);
		var wn = document.getElementById(scrollObj.id);
		var track = document.getElementById(barObj.trackId);
		if ( barObj.axis == 'v' ) {
			bar = document.getElementById(scrollObj.vBarId);
			var trkHt = track.offsetHeight;
			var ht = (lyr.offsetHeight > wn.offsetHeight)? 
				trkHt / ( lyr.offsetHeight / wn.offsetHeight ):             
				trkHt - ( 2 * barObj.minY );
			bar.style.height = ((!isNaN(ht) && ht > 0)? Math.round(ht): 0) + "px"; // NaN if display none
			barObj.maxY = trkHt - bar.offsetHeight - barObj.minY; 
		} else if ( barObj.axis == 'h' ) {
			bar = document.getElementById(scrollObj.hBarId);
			var trkWd = track.offsetWidth;
			var wd = (scrollObj.wd > wn.offsetWidth)? 
				trkWd / ( scrollObj.wd / wn.offsetWidth ): 
				trkWd - ( 2 * barObj.minX );
			bar.style.width = ((!isNaN(wd) && wd > 0)? Math.round(wd): 0) + "px";
			barObj.maxX = trkWd - bar.offsetWidth - barObj.minX;
		}
	},
	
	// Find bars associated with scrollObj. if they have bSizeDragBar set true reevaluate size and reset position to top 
	resetBars: function(scrollObj) {
		var barObj, bar;
		if (scrollObj.vBarId) {
			barObj = dw_Slidebar.col[scrollObj.vBarId];
			bar = document.getElementById(scrollObj.vBarId);
			bar.style.left = barObj.minX + "px"; bar.style.top = barObj.minY + "px";
			if (barObj.bSizeDragBar) {
				dw_Scrollbar_Co.setBarSize(scrollObj, barObj);
			}
		}
		if (scrollObj.hBarId) {
			barObj = dw_Slidebar.col[scrollObj.hBarId];
			bar = document.getElementById(scrollObj.hBarId);
			bar.style.left = barObj.minX + "px"; bar.style.top = barObj.minY + "px";
			if (barObj.bSizeDragBar) {
				dw_Scrollbar_Co.setBarSize(scrollObj, barObj);
			}
		}
	},
	
	setEvents: function(scrollObj, barObj) {
		// scrollObj
		this.addEvent(scrollObj, 'on_load', function() { dw_Scrollbar_Co.resetBars(scrollObj); } );
		this.addEvent(scrollObj, 'on_scroll_start', function() { dw_Scrollbar_Co.getBarRefs(scrollObj) } );
		this.addEvent(scrollObj, 'on_glidescroll_start', function() { dw_Scrollbar_Co.getBarRefs(scrollObj) } );
		this.addEvent(scrollObj, 'on_scroll', function(x,y) { dw_Scrollbar_Co.updateScrollbar(scrollObj, x, y) } );
		this.addEvent(scrollObj, 'on_glidescroll', function(x,y) { dw_Scrollbar_Co.updateScrollbar(scrollObj, x, y) } );
		this.addEvent(scrollObj, 'on_scroll_stop', function(x,y) { dw_Scrollbar_Co.updateScrollbar(scrollObj, x, y); } );
		this.addEvent(scrollObj, 'on_glidescroll_stop', function(x,y) { dw_Scrollbar_Co.updateScrollbar(scrollObj, x, y); } );
		this.addEvent(scrollObj, 'on_scroll_end', function(x,y) { dw_Scrollbar_Co.updateScrollbar(scrollObj, x, y); } );
		this.addEvent(scrollObj, 'on_glidescroll_end', function(x,y) { dw_Scrollbar_Co.updateScrollbar(scrollObj, x, y); } );
		this.addEvent(scrollObj, 'on_update', 
			function() { dw_Scrollbar_Co.getBarRefs(scrollObj); dw_Scrollbar_Co.updateScrollValues(scrollObj); } );    
		
		// barObj 
		this.addEvent(barObj, 'on_slide_start', function() { dw_Scrollbar_Co.getWndoLyrRef(barObj) } );
		this.addEvent(barObj, 'on_drag_start', function() { dw_Scrollbar_Co.getWndoLyrRef(barObj) } );
		this.addEvent(barObj, 'on_slide', function(x,y) { dw_Scrollbar_Co.updateScrollPosition(barObj, x, y) } );
		this.addEvent(barObj, 'on_drag', function(x,y) { dw_Scrollbar_Co.updateScrollPosition(barObj, x, y) } );
		this.addEvent(barObj, 'on_slide_end', function(x,y) { dw_Scrollbar_Co.updateScrollPosition(barObj, x, y); } );
		this.addEvent(barObj, 'on_drag_end', function(x,y) { dw_Scrollbar_Co.updateScrollPosition(barObj, x, y); } );
	
	},
	
	// Provide means to add functions to be invoked on pseudo events (on_load, on_scroll, etc) 
	// without overwriting any others that may already be set
	// by Mark Wubben (see http://simonwillison.net/2004/May/26/addLoadEvent/)
	addEvent: function(o, ev, fp) {
		var oldEv = o[ev];
		if ( typeof oldEv != 'function' ) {
			//o[ev] = fp;
			// almost all the functions (on_scroll, on_drag, etc.) pass x,y
			o[ev] = function (x,y) { fp(x,y); }
		} else {
			o[ev] = function (x,y) {
				  oldEv(x,y);
				  fp(x,y);
			}
		}
	},

	// Keep position of dragBar in sync with position of layer when scrolled by other means (mouseover, etc.)
	updateScrollbar: function(scrollObj, x, y) { 
		var nx, ny;
		if ( scrollObj.vBar && scrollObj.maxY ) { 
			var vBar = scrollObj.vBar;
			ny = -( y * ( (vBar.maxY - vBar.minY) / scrollObj.maxY ) - vBar.minY );
			ny = Math.min( Math.max(ny, vBar.minY), vBar.maxY);  
			if (vBar.bar) { // ref to bar el
				nx = parseInt(vBar.bar.style.left);
				vBar.shiftTo(nx, ny);
			}
		}
		if ( scrollObj.hBar && scrollObj.maxX ) {
			var hBar = scrollObj.hBar;
			nx = -( x * ( (hBar.maxX - hBar.minX) / scrollObj.maxX ) - hBar.minX );
			nx = Math.min( Math.max(nx, hBar.minX), hBar.maxX);
			if (hBar.bar) {
				ny = parseInt(hBar.bar.style.top);
				hBar.shiftTo(nx, ny);
			}
		}
	},

	updateScrollPosition: function(barObj, x, y) { // on scrollbar movement
		var nx, ny; var wndo = barObj.wndo; 
		if (barObj.axis == "v") {
			nx = wndo.x;
			ny = -(y - barObj.minY) * ( wndo.maxY / (barObj.maxY - barObj.minY) );
		} else {
			ny = wndo.y;
			nx = -(x - barObj.minX) * ( wndo.maxX / (barObj.maxX - barObj.minX) );
		}
		wndo.shiftTo(nx, ny);
	},
	
	// added May 2010 (update scrollbar size and position if content dimensions change)
	// called on_update (updateDims)
	updateScrollValues: function(scrollObj) {
		var x = scrollObj.getX();
		var y = scrollObj.getY();
		// in case dimensions have decreased 
		if ( x < -scrollObj.maxX ) {
			x = -scrollObj.maxX;
		}
		if ( y < -scrollObj.maxY ) {
			y = -scrollObj.maxY;
		}
		scrollObj.shiftTo(x, y);
		this.resetBars(scrollObj);
		this.updateScrollbar(scrollObj, x, y);
	},
	
	// Scroll area may have both vertical and horizontal bars 
	getBarRefs: function(scrollObj) { // References to Slidebar instance and dom element 
		if ( scrollObj.vBarId && !scrollObj.vBar ) {
			scrollObj.vBar = dw_Slidebar.col[scrollObj.vBarId];
			scrollObj.vBar.bar = document.getElementById(scrollObj.vBarId);
		}
		if ( scrollObj.hBarId && !scrollObj.hBar ) {
			scrollObj.hBar = dw_Slidebar.col[scrollObj.hBarId];
			scrollObj.hBar.bar = document.getElementById(scrollObj.hBarId);
		}
	},
	
	getWndoLyrRef: function(barObj) {
		if ( !barObj.wndo ) {
			var wndo = barObj.wndo = dw_scrollObj.col[ barObj.wndoId ];
			if ( wndo && !wndo.lyr ) {
				wndo.lyr = document.getElementById(wndo.lyrId);
			}
		}
	}

}


// HTML ATT EV

dw_scrollObj.loadLayer = function(wndoId, lyrId, horizId) {
	if ( dw_scrollObj.col[wndoId] ) dw_scrollObj.col[wndoId].load(lyrId, horizId);
}

// Support for mouseover/down scrolling at any angle has been removed 
dw_scrollObj.initScroll = function(wndoId, dir, speed) {
	var deg = dir == 'up'? 90: dir == 'down'? 270: dir == 'left'? 180: dir == 'right'? 0: dir;
	if ( deg != null && dw_scrollObj.col[wndoId] ) {
		dw_scrollObj.col[wndoId].initScrollVals(deg, speed);
	}
}

dw_scrollObj.stopScroll = function(wndoId) {
	if ( dw_scrollObj.col[wndoId] ) dw_scrollObj.col[wndoId].ceaseScroll();
}

// increase speed onmousedown of scroll links (for mouseover scrolling)
dw_scrollObj.doubleSpeed = function(wndoId) {
	if ( dw_scrollObj.col[wndoId] ) dw_scrollObj.col[wndoId].speed *= 2;
}

dw_scrollObj.resetSpeed = function(wndoId) {
	if ( dw_scrollObj.col[wndoId] ) dw_scrollObj.col[wndoId].speed /= 2;
}

// for glide onclick scrolling 
dw_scrollObj.scrollBy = function(wndoId, x, y, dur) {
	if ( dw_scrollObj.col[wndoId] ) dw_scrollObj.col[wndoId].initScrollByVals(x, y, dur);
}

dw_scrollObj.scrollTo = function(wndoId, x, y, dur) {
	if ( dw_scrollObj.col[wndoId] ) dw_scrollObj.col[wndoId].initScrollToVals(x, y, dur);
}


// SCROLL CONTROLS

var dw_Util; if (!dw_Util) dw_Util = {};

// media=screen unless optional second argument passed as false
dw_Util.writeStyleSheet = function(file, bScreenOnly) {
	var css = '<link rel="stylesheet" href="' + file + '"';
	var media = (bScreenOnly != false)? '" media="screen"': '';
	document.write(css + media + ' />');
}

// slower, may flash unstyled ?
dw_Util.addLinkCSS = function(file, bScreenOnly) {
	if ( !document.createElement ) return;
	var el = document.createElement("link");
	el.setAttribute("rel", "stylesheet");
	el.setAttribute("type", "text/css");
	if (bScreenOnly != false) {
		el.setAttribute("media", "screen");
	}
	el.setAttribute("href", file);
	document.getElementsByTagName('head')[0].appendChild(el);
}

// for backwards compatibility
dw_writeStyleSheet = dw_Util.writeStyleSheet;
dw_addLinkCSS = dw_Util.addLinkCSS;

// returns true of oNode is contained by oCont (container)
dw_Util.contained = function (oNode, oCont) {
	if (!oNode) return null; // in case alt-tab away while hovering (prevent error)
	while ( (oNode = oNode.parentNode) ) if ( oNode == oCont ) return true;
	return false;
}

// treacherous cross-browser territory
// Get position of el within layer (oCont)
dw_Util.getLayerOffsets = function (el, oCont) {
	var left = 0, top = 0;
	if ( dw_Util.contained(el, oCont) ) {
		do {
			left += el.offsetLeft;
			top += el.offsetTop;
		} while ( ( (el = el.offsetParent) != oCont) );
	}
	return { x:left, y:top };
}

// replaces dw_scrollObj.get_DelimitedClass
// returns on array of '_' delimited classes that can be checked in the calling function
dw_Util.get_DelimitedClassList = function(cls) {
	var ar = [], ctr = 0;
	if ( cls.indexOf('_') != -1 ) {
		var whitespace = /\s+/;
		if ( !whitespace.test(cls) ) {
			ar[0] = cls;
		} else {
			var classes = cls.split(whitespace); 
			for (var i = 0; classes[i]; i++) { 
				if ( classes[i].indexOf('_') != -1 ) {
					ar[ctr++] = classes[i]; // no empty elements
				}
			}
		}
	}
	return ar;
}

dw_Util.inArray = function(val, ar) {
	for (var i=0; ar[i]; i++) {
		if ( ar[i] == val ) {
			return true;
		}
	}
	return false;
}
/////////////////////////////////////////////////////////////////////

// Example class names: load_wn_lyr1, load_wn_lyr2_t2
// NOTE: for horizontal scrolling, don't use lyrId's or horizId's with underscores!
dw_scrollObj.prototype.setUpLoadLinks = function(controlsId) {
	var el = document.getElementById(controlsId); if (!el) { return; }
	var wndoId = this.id; 
	var links = el.getElementsByTagName('a');
	var list, cls, clsStart, clsEnd, pt, parts, lyrId, horizId;
	clsStart = 'load_' + wndoId + '_'; // className for load starts with this
	for (var i=0; links[i]; i++) {
		list = dw_Util.get_DelimitedClassList( links[i].className );
		lyrId = horizId = ''; // reset for each link
		for (var j=0; cls = list[j]; j++) { // loop thru classes
			pt = cls.indexOf(clsStart);
			if ( pt != -1 ) { // has 'load_' + wndoId 
				clsEnd = cls.slice( clsStart.length );
				// rest of string might be lyrId, or maybe lyrId_horizId
				if ( document.getElementById(clsEnd) ) {
					lyrId = clsEnd, horizId = null;
				} else if ( clsEnd.indexOf('_') != -1 ) {
					parts = clsEnd.split('_');
					if ( document.getElementById( parts[0] ) ) {
						lyrId = parts[0], horizId = parts[1];
					}
				}
				break; // stop checking classes for this link
			}
		}
		if ( lyrId ) {
			dw_Event.add( links[i], 'click', function (wndoId, lyrId, horizId) {
				return function (e) {
					dw_scrollObj.col[wndoId].load(lyrId, horizId);
					if (e && e.preventDefault) e.preventDefault();
					return false;
				}
			}(wndoId, lyrId, horizId) ); // see Crockford js good parts pg 39
		}
	}
}

dw_scrollObj.prototype.setUpScrollControls = function(controlsId, autoHide, axis) {
	var el = document.getElementById(controlsId); if (!el) { return; }
	var wndoId = this.id; 
	if ( autoHide && axis == 'v' || axis == 'h' ) {
		dw_scrollObj.handleControlVis(controlsId, wndoId, axis);
		dw_Scrollbar_Co.addEvent( this, 'on_load', function() { dw_scrollObj.handleControlVis(controlsId, wndoId, axis); } );
		dw_Scrollbar_Co.addEvent( this, 'on_update', function() { dw_scrollObj.handleControlVis(controlsId, wndoId, axis); } );
	}
	var links = el.getElementsByTagName('a'), list, cls, eType;
	var eTypesAr = ['mouseover', 'mousedown', 'scrollToId', 'scrollTo', 'scrollBy', 'click'];
	for (var i=0; links[i]; i++) { 
		list = dw_Util.get_DelimitedClassList( links[i].className );
		for (var j=0; cls = list[j]; j++) { // loop thru classes
			eType = cls.slice(0, cls.indexOf('_') );
			if ( dw_Util.inArray(eType, eTypesAr) ) {
				switch ( eType ) {
					case 'mouseover' :
					case 'mousedown' :
						dw_scrollObj.handleMouseOverDownLinks(links[i], wndoId, cls);
						break;
					case 'scrollToId': 
						dw_scrollObj.handleScrollToId(links[i], wndoId, cls);
						break;
					case 'scrollTo' :
					case 'scrollBy':
					case 'click': 
						dw_scrollObj.handleClick(links[i], wndoId, cls) ;
						break;
				}
				break; // stop checking classes for this link
			}
		}
	}
}

dw_scrollObj.handleMouseOverDownLinks = function (linkEl, wndoId, cls) {
	var parts = cls.split('_'); var eType = parts[0];
	var re = /^(mouseover|mousedown)_(up|down|left|right)(_[\d]+)?$/;
				
	if ( re.test(cls) ) { 
		var dir = parts[1];  var speed = parts[2] || null; 
		var deg = (dir == 'up')? 90: (dir == 'down')? 270: (dir == 'left')? 180: 0;
			
		if ( eType == 'mouseover') {
			dw_Event.add(linkEl, 'mouseover', function (e) { dw_scrollObj.col[wndoId].initScrollVals(deg, speed); } );
			dw_Event.add(linkEl, 'mouseout', function (e) { dw_scrollObj.col[wndoId].ceaseScroll(); } );
			dw_Event.add( linkEl, 'mousedown', function (e) { dw_scrollObj.col[wndoId].speed *= 3; } );
			dw_Event.add( linkEl, 'mouseup', function (e) { 
				dw_scrollObj.col[wndoId].speed = dw_scrollObj.prototype.speed; } ); 
		} else { // mousedown
			dw_Event.add(linkEl, 'mousedown', function (e) { 
				dw_scrollObj.col[wndoId].initScrollVals(deg, speed); 
				e = dw_Event.DOMit(e); e.preventDefault(); 
				} );
				
			dw_Event.add(linkEl, 'dragstart', function (e) { 
				e = dw_Event.DOMit(e); e.preventDefault();
			} );
				
			dw_Event.add(linkEl, 'mouseup', function (e) { dw_scrollObj.col[wndoId].ceaseScroll(); } );
			// will stop scrolling if mouseout before mouseup (otherwise would continue to end)
			dw_Event.add(linkEl, 'mouseout', function (e) { dw_scrollObj.col[wndoId].ceaseScroll(); } );
		}
		dw_Event.add( linkEl, 'click', function(e) { if (e && e.preventDefault) e.preventDefault(); return false; } );
	}
}

// example classes: scrollToId_smile, scrollToId_smile_100, scrollToId_smile_lyr1_100
// now supports use of underscore in id of element to scroll to, 
// if not using the lyrId or dur portions of the class
// NOTE: layer swapping with scrollToId not supported for horizontal scrolling
// (can't put all that info in class, but could use html_att_ev.js fns instead)
dw_scrollObj.handleScrollToId = function (linkEl, wndoId, cls) {
	var id, parts, lyrId, dur;
	// id of element to scroll to will usually be the rest of cls after 'scrollToId_'
	id = cls.slice(11); //'scrollToId_' length
	if ( !document.getElementById(id) ) { // when other 'args' used in cls (lyrId, dur)
		parts = cls.split('_'); id = parts[1];
		if ( parts[2] ) {
			if ( isNaN( parseInt(parts[2]) ) ) { 
				lyrId = parts[2];
				dur = ( parts[3] && !isNaN( parseInt(parts[3]) ) )? parseInt(parts[3]): null;
			} else {
				dur = parseInt( parts[2] );
			}
		}
	}
	dw_Event.add( linkEl, 'click', function (e) {
			dw_scrollObj.scrollToId(wndoId, id, lyrId, dur);
			if (e && e.preventDefault) e.preventDefault();
			return false;
		} );
}

dw_scrollObj.scrollToId = function(wndoId, id, lyrId, dur) {
	var wndo = dw_scrollObj.col[wndoId], wndoEl = document.getElementById(wndoId), lyr, pos;
	var el = document.getElementById(id);
	if (!el || !(dw_Util.contained(el, wndoEl) ) ) { return; } 
	if (lyrId) {
		lyr = document.getElementById(lyrId); // layer whose id passed
		if ( lyr && dw_Util.contained(lyr, wndoEl) && wndo.lyrId != lyrId ) {
			wndo.load(lyrId); // NOTE: no horizId passed 
		}
	}
	lyr = document.getElementById(wndo.lyrId); // layer loaded
	pos = dw_Util.getLayerOffsets(el, lyr);
	wndo.initScrollToVals(pos.x, pos.y, dur);
}

dw_scrollObj.handleClick = function (linkEl, wndoId, cls) {
	var wndo = dw_scrollObj.col[wndoId];
	var parts = cls.split('_'); var eType = parts[0]; 
	var dur_re = /^([\d]+)$/; var fn, re, x, y, dur;
	
	switch (eType) {
		case 'scrollTo' :
			fn = 'scrollTo';  re = /^(null|end|[\d]+)$/;
			x = re.test( parts[1] )? parts[1]: '';
			y = re.test( parts[2] )? parts[2]: '';
			dur = ( parts[3] && dur_re.test(parts[3]) )? parts[3]: null;
			break;
		case 'scrollBy': // scrollBy_m30_m40, scrollBy_null_m100, scrollBy_100_null
			fn = 'scrollBy';  re = /^(([m]?[\d]+)|null)$/;
			x = re.test( parts[1] )? parts[1]: '';
			y = re.test( parts[2] )? parts[2]: '';
			
			// negate numbers (m not - but vice versa) 
			if ( !isNaN( parseInt(x) ) ) {
				x = -parseInt(x);
			} else if ( typeof x == 'string' ) {
				x = x.indexOf('m') !=-1 ? x.replace('m', ''): x;
			}
			if ( !isNaN( parseInt(y) ) ) {
				y = -parseInt(y);
			} else if ( typeof y == 'string' ) {
				y = y.indexOf('m') !=-1 ? y.replace('m', ''): y;
			}
			
			dur = ( parts[3] && dur_re.test(parts[3]) )? parts[3]: null;
			break;
		
		case 'click': 
			var o = dw_scrollObj.getClickParts(cls);
			fn = o.fn; x = o.x; y = o.y; dur = o.dur;
			break;
	}
	
	if ( x !== '' && y !== '' ) {
		dur = !isNaN( parseInt(dur) )? parseInt(dur): null;
		if (fn == 'scrollBy') {
			dw_Event.add( linkEl, 'click', function (e) {
					dw_scrollObj.scrollBy(wndoId, x, y, dur);
					if (e && e.preventDefault) e.preventDefault();
					return false;
				} );
		} else if (fn == 'scrollTo') {
			dw_Event.add( linkEl, 'click', function (e) {
					dw_scrollObj.scrollTo(wndoId, x, y, dur);
					if (e && e.preventDefault) e.preventDefault();
					return false;
				} );
		}
	}
}


//////////////////////////////////////////////////////////////////////////
//  from html_att_ev.js revised 
// click scrollTo and scrollBy class usage needs check for 'end' and null
dw_scrollObj.scrollBy = function(wndoId, x, y, dur) {
	if ( dw_scrollObj.col[wndoId] ) {
		var wndo = dw_scrollObj.col[wndoId];
		x = (x === null)? -wndo.x: parseInt(x);
		y = (y === null)? -wndo.y: parseInt(y);
		wndo.initScrollByVals(x, y, dur);
	}
}

dw_scrollObj.scrollTo = function(wndoId, x, y, dur) {
	if ( dw_scrollObj.col[wndoId] ) {
		var wndo = dw_scrollObj.col[wndoId];
		x = (x === 'end')? wndo.maxX: x;
		y = (y === 'end')? wndo.maxY: y;
		x = (x === null)? -wndo.x: parseInt(x);
		y = (y === null)? -wndo.y: parseInt(y);
		wndo.initScrollToVals(x, y, dur);
	}
}
//
//////////////////////////////////////////////////////////////////////////

// get info from className (e.g., click_down_by_100)
dw_scrollObj.getClickParts = function(cls) {
	var parts = cls.split('_');
	var re = /^(up|down|left|right)$/;
	var dir, fn = '', dur, ar, val, x = '', y = '';
	
	if ( parts.length >= 4 ) {
		ar = parts[1].match(re);
		dir = ar? ar[1]: null;
			
		re = /^(to|by)$/; 
		ar = parts[2].match(re);
		if (ar) {
			fn = (ar[0] == 'to')? 'scrollTo': 'scrollBy';
		} 
	
		val = parts[3]; // value on x or y axis
		re = /^([\d]+)$/;
		dur = ( parts[4] && re.test(parts[4]) )? parts[4]: null;
	
		switch (fn) {
			case 'scrollBy' :
				if ( !re.test( val ) ) {
					x = ''; y = ''; break;
				}
				switch (dir) { // 0 for unspecified axis 
					case 'up' : x = 0; y = val; break;
					case 'down' : x = 0; y = -val; break;
					case 'left' : x = val; y = 0; break;
					case 'right' : x = -val; y = 0;
				 }
				break;
			case 'scrollTo' :
				re = /^(end|[\d]+)$/;
				if ( !re.test( val ) ) {
					x = ''; y = ''; break;
				}
				switch (dir) { // null for unspecified axis 
					case 'up' : x = null; y = val; break;
					case 'down' : x = null; y = (val == 'end')? val: -val; break;
					case 'left' : x = val; y = null; break;
					case 'right' : x = (val == 'end')? val: -val; y = null;
				 } 
				break;
		 }
	}
	return { fn: fn, x: x, y: y, dur: dur }
}

dw_scrollObj.handleControlVis = function(controlsId, wndoId, axis) {
	var wndo = dw_scrollObj.col[wndoId];
	var el = document.getElementById(controlsId);
	if ( ( axis == 'v' && wndo.maxY > 0 ) || ( axis == 'h' && wndo.maxX > 0 ) ) {
		el.style.visibility = 'visible';
	} else {
		el.style.visibility = 'hidden';
	}
}
</script>

<script type="text/javascript">
if ( jQuery !== 'undefined') jQuery.noConflict();

!function ($) {
   $().ready(function() {
	  $('#team-list').horizontalScroll();
   });	   
}(jQuery);

HTML

<div class="our-team">

	<div class="ot-separate">&nbsp;</div>

	<div id="team-list">
		<ul id="child" class="top-content horizontal">
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/andy.jpg" alt="" /></a>
				</p>
				<span class="name">Andy Law</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/allan-jordan.jpg" alt="" /></a>
				</p>
				<span class="name">Allan Jordan</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/jerry-nguyen.jpg" alt="" /></a>
				</p>
				<span class="name">Anna Jerry</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/tuan.jpg" alt="" /></a>
				</p>
				<span class="name">Tony Frank</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/nany.jpg" alt="" /></a>
				</p>
				<span class="name">Nany Timberland</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/bill.jpg" alt="" /></a>
				</p>
				<span class="name">Alex Bill</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/lisa.jpg" alt="" /></a>
				</p>
				<span class="name">Amy Frances</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/smith.jpg" alt="" /></a>
				</p>
				<span class="name">Cameron Smith</span></li>
			<li class="last">
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/jane.jpg" alt="" /></a>
				</p>
				<span class="name">Jane Jerry</span></li>
			<li>
				<p class="icon">
					<a href="javascript:void(0);" class="avatar"><img src="/images/kb/2016/780/staff-images/anna.jpg" alt="" /></a>
				</p>
				<span class="name">Autumn Anton</span></li>
		</ul>
	</div>
	
	<div id="scrollbar">
		<div id="track">
			<div id="dragBar"></div>
		</div>
	</div>

	<div class="ot-separate">&nbsp;</div>

</div>

Notes

  • This makes the cursor change to a pointing hand without a real link
    <a href="javascript:void(0);" class="avatar">
Published in Packages
Thursday, 05 May 2016 14:59

Recent Projects

This code is all CSS based and can be easily changed to fit your needs. From JSN Air.


Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

  • Project1
  • Project2
  • Project3
  • Project4
  • Project5
  • Project6
  • Project7
  • Project8

View Product Tour

 

CSS

.recent-projects .row {
	float: left;
	text-align: center;
	width: 100%;
	margin-bottom: 10px;
}

.recent-projects .row ul li {
	display: inline-block;
	list-style-type: none;
	margin-bottom: 30px;
	position: relative;
	border: 10px solid #f2f2f2;
}

.recent-projects .row ul li div {
	text-align: center;
	float: left;
}

.recent-projects .row ul li div a {
	float: left;
}

.recent-projects .row ul li span.cms {
	background: #ececec url(images/modules/779/icon-cms.png) 13px 13px no-repeat;
	width: 32px;
	height: 32px;
	padding: 12px;
	border-radius: 50%;
	-webkit-border-radius: 50%;
	-moz-border-radius: 50%;
	position: absolute;
	bottom: -30px;
	z-index: 999;
	left: 50%;
	margin-left: -28px;
}

.recent-projects .row ul li span.cms.wordpress {
	background-position: 12px -139px;
}

.recent-projects .row ul li span.cms.drupal {
	background-position: 12px -296px;
}

.recent-projects .row ul li span.cms.html5 {
	background-position: 12px -451px;
}

.recent-projects span.mark {
	background: url(images/modules/779/view.png) center -40px no-repeat rgba(0,0,0,0.6);
	position: absolute;
	z-index: 99;
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	transition: all 0.3s;
	-moz-transition: all 0.3s;
	-webkit-transition: all 0.3s;
	opacity: 0;
}

.recent-projects span.mark:hover {
	opacity: 1;
	background-position:center 60px;
}

.recent-projects .rp-separate {
	background: url(images/modules/779/bg-separate.png) center center no-repeat;
	height: 20px;
	width: 100%;
	display: inline-block;
}

@media only screen and (max-width: 480px), (max-device-width: 480px) {
	.recent-projects .row ul {
		width: 100%;
		text-align: center;
	}
	.recent-projects .row ul li {
		margin: 10px 0 30px 0;
	}
}

HTML

<div class="recent-projects">
	<div class="row">
		<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex
			ea commodo consequat.</p>
	</div>
	<div class="row">
		<ul>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project1.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project1.jpg" alt="Project1" /><span class="mark"></span></a>
				</div>
				<span class="cms joomla"></span></li>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project2.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project2.jpg" alt="Project2" /><span class="mark"></span></a>
				</div>
				<span class="cms wordpress"></span></li>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project3.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project3.jpg" alt="Project3" /><span class="mark"></span></a>
				</div>
				<span class="cms drupal"></span></li>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project4.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project4.jpg" alt="Project4" /><span class="mark"></span></a>
				</div>
				<span class="cms joomla"></span></li>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project5.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project5.jpg" alt="Project5" /><span class="mark"></span></a>
				</div>
				<span class="cms html5"></span></li>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project6.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project6.jpg" alt="Project6" /><span class="mark"></span></a>
				</div>
				<span class="cms joomla"></span></li>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project7.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project7.jpg" alt="Project7" /><span class="mark"></span></a>
				</div>
				<span class="cms wordpress"></span></li>
			<li class="project">
				<div class="project-thumb">
					<a href="/images/modules/779/project-images/project8.jpg" class="img-project"><img src="/images/modules/779/project-images/thumb/project8.jpg" alt="Project8" /><span class="mark"></span></a>
				</div>
				<span class="cms html5"></span></li>
		</ul>
	</div>
	<p style="text-align: center;"><a href="http://quantumwarp.com/" class="link-button button-green" style="margin: 0 0 30px;">View Product Tour</a></p>
	<div class="rp-separate">&nbsp;</div>
</div>

 

Published in Packages
Page 25 of 95