

function Counter()
{
  this.wrappedJSObject = this;
  return this;
}

function StartCounter(func)
{
    
}

Counter.prototype = {
    
    ImgPath : "../images/counter/",
    CounterId : null,
    InitNumber : 500000,
    PaddingDigits : 15,
    bPadDigits : false,
    IntervalHandle : null,
    Rate : 4,
    InitDate : new Date(),
    CounterVar : 'counter',
    TimerFreq : 100,
    CommaImg : null,
    PrevNumber : -1,

    Start:function (CounterVar)
    {
        if (this.CounterId != null)
        {
            //alert('this.CounterId'+this.CounterId);
            document.getElementById(this.CounterId).innerHTML = 'loading';
        }
        else
        {
            document.write(this.Transform(this.Calc()+""));
        }
	this.InitWrite("0123456789");	//load images
	setTimeout(CounterVar+".StartTimer('"+CounterVar+"')",1000);
    },
    StartTimer:function (CounterVar)
    {
	this.IntervalHandle = setInterval(CounterVar+".Write();",this.TimerFreq);
    }
    ,
    Stop:function ()
    {
        if (this.IntervalHandle != null)
        {
            clearInterval(IntervalHandle);
        }
    },
    Write:function ()
    {
		var newNumber = this.Calc() + "";
		
        if (this.CounterId != null)
        {
            //alert('this.CounterId'+this.CounterId);
			if( this.PrevNumber == -1 || this.PrevNumber.length != newNumber.length )
			{
				document.getElementById(this.CounterId).innerHTML = this.Transform(newNumber);
			} 
			else 
			{
				this.Alter(newNumber);
			}
        }
        else
        {
            document.write(this.Transform(this.Calc()+""));
        }
    },
    InitWrite:function (str)
    {
        if (this.CounterId != null)
        {
            //alert('this.CounterId'+this.CounterId);
            document.getElementById(this.CounterId).innerHTML = this.Transform(str+"");
        }
        else
        {
            document.write(this.Transform(str+""));
        }
    },
    Calc:function ()     
    {
        var DateNow = new Date();
        
        DateDiff = new Date(DateNow - this.InitDate);
        
        //DateDiff
        
        secs = Math.floor((DateDiff.valueOf() * this.Rate) /1000);
        
        return this.InitNumber+ (secs);
    },
    Transform: function (str)
    {
       
        
        var buffer = "</div>";
        var len = str.length;
	
	//alert("Value: " + str);
	if (this.CommaImg != null)
	{
		var i=len-1;
		var n=0;

		for(i;i >= 0;i--)
		{
			// only update the image if the number change
		    buffer = "<img id='cimg"+n+"' src='"+this.ImgPath+"/"+str.charAt(i)+".gif' border=0/>"+buffer;
		    if (i != 0 && ((len - i) % 3) == 0)
		    {
				buffer = "<img src='"+this.ImgPath+"/"+this.CommaImg+"' border=0 />"+buffer;
		    }
			n++;
		}
	} 
	else
	{
		for(i;i<len;i++)
		{
			if( this.PrevNumber != -1 && this.PrevNumber.charAt(i) != str.charAt(i))
			{
				buffer = buffer+"<img id='cimg"+i+"' src='"+this.ImgPath+"/"+str.charAt(i)+".gif' border=0 />";
			}
		}
	}
	//alert("Buffer: " + buffer);
	this.PrevNumber = str;
	buffer = this.PadDigits(buffer);
        //add padding
        //if (this.PaddingDigits)
        return buffer;
    },
	Alter: function(str)
	{
        var len = str.length;
		var n=0;
		var i=len-1;

		for(i;i >= 0;i--)
		{
			// only update the image if the number change
			if( this.PrevNumber.charAt(i) != str.charAt(i))
			{
				document.getElementById("cimg"+n).src=this.ImgPath+"/"+str.charAt(i)+".gif";
			}
			n++;
		}
		this.PrevNumber = str;
	},
    PadDigits: function(str)
    {
        if (this.bPadDigits)
        {
            if (str.length < this.PaddingDigits)
            {
                var padLen = this.PaddingDigits  - str.length;
                var i;
                var buffer = "";
                for(i=0;i<padLen;i++)
                {
                    buffer = buffer+"0";
                }
                str = buffer+str;
            }
        }
        return str;
    },
    SetInitDate: function(InitDate)
    {
        this.InitDate = new Date(InitDate);
    },
    SetInitNumber:function(number)
    {
        this.InitNumber = number;
    },
    SetRate:function(Rate)
    {
        this.Rate = Rate;
    },
    SetCounterID: function(id)
    {
        this.CounterId = id;
    },
    SetPadDigits: function(b)
    {
        this.bPadDigits = b;
    },
    SetPaddingDigits: function(n)
    {
	this.PaddingDigits = n;
    },
    SetCommaImage: function (img)
    {
	    this.CommaImg = img;
    },
	SetPrevNumber: function (n)
	{
		this.PrevNumber = n;
	}
    
    
}

