//Drag functionality
function hookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)
  {
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
    element.attachEvent("on" + eventName, callback);
}

function unhookEvent(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.removeEventListener)
    element.removeEventListener(eventName, callback, false);
  else if(element.detachEvent)
    element.detachEvent("on" + eventName, callback);
}

function cancelEvent(e)
{
  e = e ? e : window.event;
  if(e.stopPropagation)
    e.stopPropagation();
  if(e.preventDefault)
    e.preventDefault();
  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
}

function Position(x, y)
{
  this.X = x;
  this.Y = y;
  
  this.Add = function(val)
  {
    var newPos = new Position(this.X, this.Y);
    if(val != null)
    {
      if(!isNaN(val.X))
        newPos.X += val.X;
      if(!isNaN(val.Y))
        newPos.Y += val.Y
    }
    return newPos;
  }
  
  this.Subtract = function(val)
  {
    var newPos = new Position(this.X, this.Y);
    if(val != null)
    {
      if(!isNaN(val.X))
        newPos.X -= val.X;
      if(!isNaN(val.Y))
        newPos.Y -= val.Y
    }
    return newPos;
  }
  
  this.Min = function(val)
  {
    var newPos = new Position(this.X, this.Y)
    if(val == null)
      return newPos;
    
    if(!isNaN(val.X) && this.X> val.X)
      newPos.X = val.X;
    if(!isNaN(val.Y) && this.Y> val.Y)
      newPos.Y = val.Y;
    
    return newPos;  
  }
  
  this.Max = function(val)
  {
    var newPos = new Position(this.X, this.Y)
    if(val == null)
      return newPos;
    
    if(!isNaN(val.X) && this.X <val.X)
      newPos.X = val.X;
    if(!isNaN(val.Y) && this.Y <val.Y)
      newPos.Y = val.Y;
    
    return newPos;  
  }  
  
  this.Bound = function(lower, upper)
  {
    var newPos = this.Max(lower);
    return newPos.Min(upper);
  }
  
  this.Check = function()
  {
    var newPos = new Position(this.X, this.Y);
    if(isNaN(newPos.X))
      newPos.X = 0;
    if(isNaN(newPos.Y))
      newPos.Y = 0;
    return newPos;
  }
  
  this.Apply = function(element)
  {
    if(typeof(element) == "string")
      element = document.getElementById(element);
    if(element == null)
      return;
    if(!isNaN(this.X))
      element.style.left = this.X + 'px';
    if(!isNaN(this.Y))
      element.style.top = this.Y + 'px';  
  }
}

function absoluteCursorPostion(eventObj)
{
  eventObj = eventObj ? eventObj : window.event;
  
  if(isNaN(window.scrollX))
    return new Position(eventObj.clientX + 
              document.documentElement.scrollLeft + 
              document.body.scrollLeft, 
              eventObj.clientY + 
              document.documentElement.scrollTop + 
              document.body.scrollTop);
  else
    return new Position(eventObj.clientX + window.scrollX, 
              eventObj.clientY + window.scrollY);
}

function dragObject(element, attachElement, 
    lowerBound, upperBound, startCallback, 
    moveCallback, endCallback, attachLater)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
      return;
  
  if(lowerBound != null && upperBound != null)
  {
    var temp = lowerBound.Min(upperBound);
    upperBound = lowerBound.Max(upperBound);
    lowerBound = temp;
  }

  var cursorStartPos = null;
  var elementStartPos = null;
  var dragging = false;
  var listening = false;
  var disposed = false;
  
  function dragStart(eventObj)
  { 
    if(dragging || !listening || disposed) return;
    dragging = true;
    
    if(startCallback != null)
      startCallback(eventObj, element);
    
    cursorStartPos = absoluteCursorPostion(eventObj);
    
    elementStartPos = new Position(parseInt(element.style.left),
        parseInt(element.style.top));
   
    elementStartPos = elementStartPos.Check();
    
    hookEvent(document, "mousemove", dragGo);
    hookEvent(document, "mouseup", dragStopHook);
    
    return cancelEvent(eventObj);
  }
  
  function dragGo(eventObj)
  {
    if(!dragging || disposed) return;
    
    var newPos = absoluteCursorPostion(eventObj);
    newPos = newPos.Add(elementStartPos).Subtract(cursorStartPos);
    newPos = newPos.Bound(lowerBound, upperBound)
    newPos.Apply(element);
    if(moveCallback != null)
      moveCallback(newPos, element);
        
    return cancelEvent(eventObj); 
  }
  
  function dragStopHook(eventObj)
  {
    dragStop();
    return cancelEvent(eventObj);
  }
  
  function dragStop()
  {
    if(!dragging || disposed) return;
    unhookEvent(document, "mousemove", dragGo);
    unhookEvent(document, "mouseup", dragStopHook);
    cursorStartPos = null;
    elementStartPos = null;
    if(endCallback != null)
      endCallback(element);
    dragging = false;
  }
  
  this.Dispose = function()
  {
    if(disposed) return;
    this.StopListening(true);
    element = null;
    attachElement = null
    lowerBound = null;
    upperBound = null;
    startCallback = null;
    moveCallback = null
    endCallback = null;
    disposed = true;
  }
  
  this.StartListening = function()
  {
    if(listening || disposed) return;
    listening = true;
    hookEvent(attachElement, "mousedown", dragStart);
  }
  
  this.StopListening = function(stopCurrentDragging)
  {
    if(!listening || disposed) return;
    unhookEvent(attachElement, "mousedown", dragStart);
    listening = false;
    
    if(stopCurrentDragging && dragging)
      dragStop();
  }
  
  this.IsDragging = function(){ return dragging; }
  this.IsListening = function() { return listening; }
  this.IsDisposed = function() { return disposed; }
  
  if(typeof(attachElement) == "string")
    attachElement = document.getElementById(attachElement);
  if(attachElement == null)
    attachElement = element;
    
  if(!attachLater)
    this.StartListening();
}

/*-- счетчики --*/
$(document).ready(function(){cred_count();});// вызов


var 	a=1125284; // начальное значение кредитов  на 10.10.2007
var 	per_a_h=180; // количество кредитов в час
var   interval_a =(3600/per_a_h+1)*1000; //интервал обновления счетчика кредитов, мс

var b=38630;// начальное значение вкладов   на 4.05.2008
var 	per_b_h=12; // количество вкладов в час
var   interval_b =(3600/per_b_h+1)*1000; //интервал обновления счетчика вкладов, мс



	
/*опорная дата: 1.01.1970 года
  новая опорная дата для : 10.10.2007 года
  за период с 1.01.1970 по 10.10.2007 прошло:*/
 
 var vys_years= 366*9;//9 высокосных лет
 var norm_years = 365*28;// 28 нормальных лет
 var dob_days = 283; // 10.10.2007
 
 var date_new = (vys_years+norm_years+dob_days);
 
 
 function SeparatedNum(iNum)
{ 
var sNumSeparator='&nbsp;';
var sNum=String(iNum);
  if(Number(sNum))
  {
   var sNum=sNum;
    if(Number(sNum)<10000) return sNum;
    else
     { var sNewNum='';
       var i;
       for(i=1; i*3<sNum.length; i++)
         { sNewNum=sNumSeparator+sNum.substring((sNum.length - i*3), (sNum.length - i*3 + 3))+sNewNum;
	 }
       return sNum.substr(0, 3 - i*3 + sNum.length)+sNewNum;
     }
   }
  else
   { //преобразовать невозможно
     return sNum;
   }
}

var cred_count; 
var depos_count; 

function GetTimeTest()
{
  var d, t,s,m,z;
  var MinMilli = 1000 * 60;
  var HrMilli = MinMilli * 60;
  var DyMilli = HrMilli * 24;
  d = new Date();
  t = d.getTime();
  s = d.getHours();
  z = Math.round(t/DyMilli)-Math.round(date_new);
  m = d.getMinutes();
  cred_count=(z-Math.round(z/7))*11*per_a_h+a+(s-9)*per_a_h+m*3;
 depos_count=(z-Math.round(z/7))*11*per_b_h+b+(s-9)*per_b_h;
}
 function cred_count()
 {
  GetTimeTest();
  
  document.getElementById("credits").innerHTML= '<span class="val">'+SeparatedNum(cred_count)+'</span> '+decodeURIComponent('%E8%B4%B7%E6%AC%BE%E6%9C%8D%E5%8A%A1'); 
  document.getElementById("deposits").innerHTML= '<span class="val">'+SeparatedNum(depos_count)+'</span> '+decodeURIComponent('%E5%AD%98%E6%AC%BE%E6%9C%8D%E5%8A%A1'); 
  
  updateCred(cred_count);
  updateDepos(depos_count);
 }
 
 function depos_count()
 {
 
  document.getElementById("deposits").innerHTML= '<span class="val">'+SeparatedNum(depos_count)+'</span> '+decodeURIComponent('%E5%AD%98%E6%AC%BE%E6%9C%8D%E5%8A%A1'); 
  updateDepos(depos_count);
 }
 
   function updateCred(qwe)
  {
    
	  document.getElementById("credits").innerHTML= '<span class="val">'+SeparatedNum(qwe)+'</span> '+decodeURIComponent('%E8%B4%B7%E6%AC%BE%E6%9C%8D%E5%8A%A1');
	  date_= new Date();
	  if(date_.getDay()!=0 && date_.getDay()!=6)
	  {qwe=qwe+1;}
	  
	
	    setTimeout("updateCred("+qwe+")", interval_a);
	  
  }
  
   function updateDepos(qwe)
  {
    
	  document.getElementById("deposits").innerHTML= '<span class="val">'+SeparatedNum(qwe)+'</span> '+ decodeURIComponent('%E5%AD%98%E6%AC%BE%E6%9C%8D%E5%8A%A1');
	  date_= new Date();
	  if(date_.getDay()!=0 && date_.getDay()!=6)
	  {qwe=qwe+1;}
	  
	
	    setTimeout("updateDepos("+qwe+")", interval_b);
	  
  }
