Archive for July, 2010

Scrolling Images with JavaScript

Friday, July 30th, 2010

You see many websites bombarded with flash, which is fine for complex animations and video, but what about a good old fashioned approach to animate your site without flash. When redesigning our website, we wanted to have some images that would scroll, but also function as a hyper-link to a page the image was advertising. My attempt to avoid reinventing the wheel led me to several hours of searching the interweb on how to do this using JavaScript. True there were many code examples where people we doing just this with JavaScript, but they were all complex and not very scalable. After about an hour of coding, I came up with a simple, scalable solution that met our needs perfectly.

This JavaScript is very re-useable, in that multiple pages, or multiple scrolling images can use this same code without any modification:

The JavaScript

var unit = “px”; //the unit of measure when moving each image up

var keepScrolling = true; //default to true so the images continue to scroll

var moveAmount = 2; //number of units to move each picture

/*

The main function that sets up the images

*/

function scrollImages(groupID, imageHeight, scrollDelay, imageDelay){

/*

Each image lives in its own div with a common id and numerical suffix (ex: pic1, pic2, ect.)

*/

var counter = 1;

var images = new Array();

//if the element exists, add it to the array

while(document.getElementById(groupID + counter) != null){

images[counter - 1] = document.getElementById(groupID + counter);

counter++;

}

//the first image should be at the very top

images[0].style.top = 0 + unit;

images[0].style.display = “block”;

//place the rest of the images directly under the first image

for(counter = 1; counter < images.length; counter++){

images[counter].style.top = imageHeight + unit;

images[counter].style.display = “block”;

}

setTimeout(function(){scroll(images, 0, imageHeight, scrollDelay, imageDelay)}, imageDelay);

}

//this funciton actually does the scrolling

function scroll(images, firstImage, imageHeight, scrollDelay, imageDelay){

var image1 = images[firstImage];

var secondImage = 0;

var thirdImage = 0; //if you only have 2 images, then the third image will always be the first

var image2 = null;

//because this function is called repeadily, the first image is not always the first image in teh array

//so the second image is simply the next image after the curent one being displayed

if(firstImage + 1 < images.length){

secondImage = firstImage + 1;

}

image2 = images[secondImage];

//scroll each image up the number of units

if(keepScrolling){

image1.style.top = (image1.style.top.replace(unit,”") – moveAmount) + unit;

image2.style.top = (image2.style.top.replace(unit,”") – moveAmount) + unit;

}

//if the second image isn’t at the very top yet, keep scrolling.

if(image2.style.top != “0px” && image2.style.top.indexOf(“-”) < 0){

setTimeout(function(){scroll(images, firstImage, imageHeight, scrollDelay, imageDelay)}, scrollDelay);

}

//if the second image is at the very top, get the next image and scroll

if(image2.style.top == “0px” || image2.style.top.indexOf(“-”) > -1){

if(secondImage + 1 < images.length){

thirdImage = secondImage + 1;

}

image1 = images[thirdImage];

image1.style.top = (image2.style.top.replace(unit,”") + imageHeight) + unit;

setTimeout(function(){scroll(images, secondImage, imageHeight, scrollDelay, imageDelay)}, imageDelay);

}

}

// the div that contains the image divs calls these funcitons on mouseover(pause) and mouseout(unPause)

function pause(){

keepScrolling = false;

}

function unPause(){

keepScrolling = true;

}

The CSS:

/*the main div that contains each images div*/

.flash {

background-image: url(“../images/flashspacer.png”);

clear: both;

position: relative;

width: 980px;

height: 240px;

overflow: hidden; /*this is very important because it keeps the images that are outside the div hidden*/

}

/*each image div uses this css class*/

.hero-image {

padding-left: 19px;

clear: both;

position: absolute;

width: 942px;

display: none;

top: 0px;

}

The HTML:

<div class=’flash’ onmouseover=’pause()’ onmouseout=’unPause()’>

<div id=”hero-image1″>

<a href=’page1.html’><img src=’img1.png’></a>

</div>

<div id=”hero-image2″>

<a href=’page2.html’><img src=’img2.png’></a>

</div>

<div id=”hero-image3″>

<a href=’page3.html’ ><img src=’img3.png’></a>

</div>

<div id=”hero-image4″>

<a href=’page4.html’><img src=’img4.png’></a>

</div>

</div>

If you want to add another image to the mix, all you need to do is add another image div and increment the numerical suffix by 1.

www.kraftenterprise.com

Adaptive Planning 7.0 System Upgrade Notification & Webinar Registration Information

Wednesday, July 28th, 2010

SYSTEM Upgrade: August 13th 6:00PM PDT to August 14th 2:00AM PDT

Adaptive Planning will be unavailable due to a software release upgrade from Friday August 13th at 6:00PM PDT to Saturday August 14th at 2:00AM PDT.
The upcoming release of Adaptive Planning, version 7.0, contains many exciting enhancements to several areas of the application including new and expanded capabilities for reporting, admin, export, and formula building. These new features are briefly described below:

Reports

  • Reports Parameters- Report authors can create reports that allow the report users to filter the report based on specific dimensions without having to modify the report in the report builder. Parameters can be specified to prompt the user either when the report is run or on the face of the report once it has been run.
  • Report Segments – Report authors can now specify more than one set of dimension element combinations for each axis (creating “segments” on each axis). This allows the report author significantly more control over which rows and columns will appear or not appear on a report.
  • Element Search – Report authors can quickly search for elements in the different element trees to make report building more efficient.

Import / Export

  • Filtering control – Users can now filter exported data based on accounts, plans, dimensions and time specifications.
  • Currency control – Users can specify whether to export data in corporate or local currency.
  • Data security – Export now respects a user’s Plan access rights and therefore limits the data which they can export.

Additional Enhancements

  • Drag and Drop administration of Account, Plan, and Dimension Trees – Eases the task of ordering elements in a tree by utilizing simple drag and drop capabilities.
  • Validate Formulas – A new administration feature that shows the user a listing of any accounts that have formula errors to speed the validation and error checking process.
  • Formula Enhancements – Net Present Value (NPV) and Internal Rate of Return (IRR) functions have been added as standard functions.

New APIs

  • New Export API created for Standard, Modeled, and Cube sheets.
  • Import API extended to include Modeled and Cube sheet data.

These features will be available to all Corporate and Enterprise edition subscribers as part of your annual subscription.
Release notes will be available on Saturday, August 14th, in conjunction with the release on our customer documentation page:

http://www.adaptiveplanning.com/customer_documentation.shtml

Webinars
Adaptive Planning will conduct several live training webinars beginning Thursday, July 29th, You may register for and attend these webinars by visiting their training page at: http://www.adaptiveplanning.com/services/online_training.php

Why Clearing the Jungle, Dynamics GP-Style, Means Implementing Daily Tasks

Thursday, July 22nd, 2010

BY Mark Polino, Principal Consultant, I.B.I.S., Inc.

PUBLISHED: July 7, 2010

  • Accounting
  • Data Management
  • Dynamics GP
  • Tax Management
  • Workflow Management

Executive coach and blogger Michael Wade recently made the important point that a base camp in the jungle requires regularly chopping back the jungle to keep from overwhelming the camp.

His key points were that:

1.       You can’t chop back the entire jungle.
2.       It makes no sense to chop back more than is operationally required because you’d be wasting energy and time.
3.       Daily chopping is easier than chopping every two or three days but it may provide a sense of less accomplishment since the growth would be smaller.

The illustration resonated with me because almost every time I walk into a client that is having ongoing difficulties with Dynamics GP, I see it is doing a poor job of chopping back the jungle. Some companies are unwilling to do the hard work. Others can’ t bring themselves to change their routine. Like creeping jungles, maintaining Dynamics GP is simpler and easier with small processes done daily.

An awful lot of accountants are still stuck in a routine that is focused on a monthly time frame, even as the volume of transactions grows exponentially around them. You can’t cut back the jungle once a month. In a month, the camp will be overgrown. If you’re behind, you may have to take some drastic steps to get caught up-for example, using temporary workers, delegating work and focusing on fixing a specific process.

Now is the time to hack away at the jungle. The closer we get to year-end, the faster the jungle seems to grow. Grab your machete and tame the Dynamics GP jungle on a much more frequent basis via such steps as:

  • Backing up daily
  • Balancing the bank account daily
  • Balancing subledgers to the GL daily
  • Reviewing cash daily
  • Using cycle counts to manage inventory
  • Gathering vendor 1099 and W-9 information at vendor creation, not year end
  • Moving items like depreciation out of month end
  • Invoicing more often
  • Proactively collecting from customers
  • Leveraging time savers like correcting and copying transactions
  • Forcing transactions through subledgers to minimize journal entries
  • Implementing other modules to save time
  • Adjusting processes to quit making more work for yourself

Learn more about Microsoft Dynamics GP on the Kraft Enterprise Systems site.

Dynamics GP 10.0 Overview

Tuesday, July 13th, 2010

Here’s a handy overview of the newest version of GP, released this year.

Kraft Enterprise Systems
www.kraftenterprise.com

Gartner debunks SaaS CRM myths

Friday, July 9th, 2010

According to Barney Beal, News Director for SearchCRM.com, Software as a Service is not for everyone and some organizations that invested in SaaS are now looking for a way to move their CRM projects on-premise.

Read the whole article.