/* SR 23-12-08 - is this needed anymore - please delete if more than a month old and has not been uncommented
function MM_preloadImages(){var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}}
function MM_swapImgRestore(){ var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;}
function MM_findObj(n, d){ var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); if(!x && d.getElementById) x=d.getElementById(n); return x;}
function MM_swapImage(){ var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}}
function MM_reloadPage(init){ if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }} else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();}
function MM_openBrWindow(theURL,winName,features){window.open(theURL,winName,features);}
function MM_callJS(jsStr){ return eval(jsStr)}
function MM_validateForm(){ var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);if (val) { nm=val.name; if ((val=val.value)!="") {if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@'); if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';} else if (test!='R') { num = parseFloat(val);if (isNaN(val)) errors+='- '+nm+' must contain a number.\n'; if (test.indexOf('inRange') != -1) { p=test.indexOf(':'); min=test.substring(8,p); max=test.substring(p+1);if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n'; } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }} if (errors) alert('The following error(s) occurred:\n'+errors);document.MM_returnValue = (errors == '');}
MM_reloadPage(true);
*/
var $ = function( id ){	return document.getElementById( id ); };
var afl = new Object();
afl.document = new Object();

/** draws dots to the end of a string for each second that passes e.g. Calling . - Calling .. - Calling ... */
var dotTimerID;
afl.document.dotTimer = function( pElementId , pMessage , pNumberOfDots ){var secs;var state;var i;var dots = "";var element;element = document.getElementById( pElementId );time = new Date();secs = time.getSeconds();for( i = 0 ; i < ( state = secs % ( pNumberOfDots + 1 ) ) ; i++ )if( state != 0 )dots += ".";	element.innerHTML = pMessage + dots; dotTimerID = setTimeout( "dotTimer('" + pElementId + "' , '" + pMessage + "' , " + pNumberOfDots + " )" , 1000 );}

/**
* method replaces the value of elements of the specified name by the passed value
* @param elementName {String} The name of the elements to replace
* @param value {String} the string to place within those nodes
* @return {Boolean} Returns true if elements where replaced false if there were no elements
* @example afl.document.replaceElementsInPage( "wallet_points_available", "hello" ); // replaces the value of all  wallet_points_available with hello
*/
afl.document.replaceElementsInPage = function replaceElementsInPage( elementName, value ){var myElementsCollection = document.getElementsByTagName( elementName );if( myElementsCollection.length ){for( var i = 0; i < myElementsCollection.length; i++ ){myElementsCollection[ i ].innerHTML = value;}return true;}return false;}
/**
* method searchs through all elements of a certain type and replaces the value of all elements that have a certain attribute
* @param elementName {String} The name of the elements to replace
* @param attributeName {String} The name of the attribute to match against
* @param attributeValue {String} The value of the attribute to match against
* @param value {String} the string to place within those nodes
* @return {Boolean} Returns true if elements where replaced false if there were no elements
* @example afl.document.replaceElementsWithAttributeValue( "div", "class", "test", "hello" ); // replaces <div class="test">fdsdfsd</div> with <div class="test">hello</hello>
*/
afl.document.replaceElementsByAttributeValue = function replaceElementsByAttributeValue( elementName, attributeName, attributeValue, value ){var myElementsCollection = document.getElementsByTagName( elementName );if( myElementsCollection.length ){for( var i = 0; i < myElementsCollection.length; i++ ){if( myElementsCollection[ i ].getAttribute( attributeName ) == attributeValue  ){myElementsCollection[ i ].innerHTML = value;}}return true;}return false;}
afl.document.in_array = function(needle, haystack, strict) {var found = false, key; strict = !!strict; for(key in haystack) {if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {found = true; break;}}return found;}
afl.document.addElementBefore = function(node,tag,id,htm){ var ne = document.createElement(tag); if(id) ne.id = id; if(htm) ne.innerHTML = htm; node.parentNode.insertBefore(ne,node); }
afl.document.addElementAfter = function(node,tag,id,htm){var ne = document.createElement(tag); if(id) ne.id = id;if(htm) ne.innerHTML = htm; node.parentNode.insertBefore(ne,node.nextSibling);}
afl.document.addElement = function(parent, elementType, elementId) {if(!document.getElementById(elementId)){var pEl = document.getElementById(parent);var nEl = document.createElement(elementType);nEl.setAttribute('id',elementId);pEl.appendChild(nEl);}}
afl.document.addAttribute = function(element, attrName, attrValue){ element.setAttribute(attrName, attrValue);}
afl.document.removeElement = function(parent,elementId) {if(document.getElementById(elementId)){var pEl = document.getElementById(parent);var nEl = document.getElementById(elementId);pEl.removeChild(nEl);}}
afl.document.removeAllChildren = function(parent){var p = document.getElementById(parent);if (p){while( p.hasChildNodes() ) { p.removeChild( p.lastChild ); }}}
afl.document.encodeHtml = function(val) {encodedHtml = escape(val); encodedHtml = encodedHtml.replace(/\//g,"%2F"); encodedHtml = encodedHtml.replace(/\?/g,"%3F"); encodedHtml = encodedHtml.replace(/=/g,"%3D"); encodedHtml = encodedHtml.replace(/&/g,"%26"); encodedHtml = encodedHtml.replace(/@/g,"%40"); return unescape(encodedHtml);}
afl.document.ieTrueBody = function(){return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body }
afl.document.argumentsToArray = function (arg){ var a = new Array ; var n = arg.length ;for (var i = 2 ; i<n ; i++) a[i-2] = arg ;return a ;}
afl.document.Delegate = function() {}
afl.document.Delegate.create = function (o, f){	return function() {f.apply(o, arguments); }}