//global js functionality required throughout site

/*
 * USE THIS function prototype $('name'); instead of document.getElementId('name');
 *
 * much shorter much better.
 */
var $ = function( id ) 
{
	return document.getElementById( id );
};

var afl = new Object(); // create a new global namespace where we can hold methods without clashing
afl.document = new Object(); // create the document subnamespace

function MM_preloadImages() { //v3.0
  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() { //v3.0
  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) { //v4.01
  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() { //v3.0
  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) {  //reloads the window if Nav4 resized
  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) { //v2.0
  window.open(theURL,winName,features);
}

function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}

function MM_validateForm() { //v4.0
  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);

function ismaxlength(obj){
var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
if (obj.getAttribute && obj.value.length>mlength)
obj.value=obj.value.substring(0,mlength)
}

/* draws dots to the end of a string for each second that passes e.g. Calling . - Calling .. - Calling ... */

var dotTimerID;

function dotTimer( 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 ) // if there are any elements to replace relace them
	{
		for( var i = 0; i < myElementsCollection.length; i++ )
		{
			myElementsCollection[ i ].innerHTML = value;
		}
		
		return true; // elements were replaced send back a true
	}
	
	return false; // no elements were replaced send back a 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 ) // if there are any elements to replace relace them
	{
		for( var i = 0; i < myElementsCollection.length; i++ )
		{
			if( myElementsCollection[ i ].getAttribute( attributeName ) == attributeValue  )
			{
			    myElementsCollection[ i ].innerHTML = value;
			}
		}
		
		return true; // elements were replaced send back a true
	}
	
	return false; // no elements were replaced send back a false
}
