function format_date(date)
{
  if (date == 0) { return '-'; }
  D=new Date(date*1000);
  return D.toLocaleDateString();
}

function days_in_month(month, year)
{
  arr=new Array(31, ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 !=0))) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  return arr[month-1];
}

function format_utc_date(date)
{
  if (date == 0) { return '-'; }
  D=new Date(date*1000);
  return (D.getUTCDate() < 10?'0':'')+D.getUTCDate()+'.'+(D.getUTCMonth()+1<10?'0':'')+(D.getUTCMonth()+1)+'.'+D.getUTCFullYear();
}

function format_size(size)
{
  return parseFloat(parseInt(size)/(1024*1024)).toFixed(2)+' Mb';
}

var signupObj={

 errorMessages :
 {
   'emailIncorrect' : '<b>E-mail</b> is incorrect.',
   'emailExists' : '<b>E-mail</b> exists. Try <a href="">password reminder</a>.',
   'icqIncorrect' : '<b>ICQ</b> is incorrect.',
   'payoutIncorrect' : '<b>Payout details</b> is incorrect.',
   'trafficIncorrect' : '<b>Traffic sources</b> are incorrect.',
   'passwordIncorrect' : '<b>Password</b> is incorrect (must be at least 5 chars long).',
   'passwordNotMatch' : '<b>Password</b> do not match.'
 },

 errorReport : function(errors) 
 {
   errormsg='';
   for (i=0;i<errors.length;i++)
   {
     errormsg+=(errormsg == ''?'':"<br />")+eval('this.errorMessages.'+errors[i]);
   }
   $('#frmSignUp div[msg=true]').addClass('msgError').html(errormsg);
   return;
 },

 processResponse : function(data)
 {
   if (data.code == 500) { signupObj.errorReport(data.errorFields); }
   if (data.code == 200)
     {
       if (data.state == "new")
         {
           $('#beforeSignUp').hide();
           $('#frmSignUp').hide();
           $('#afterSignUp').show();
         }
       else if (data.state == "active") { location='stats.html'; }
     }

   return;
 }

};

var authObj={

 errorMessages :
 {
   'loginIncorrect' : 'Incorrect e-mail or password.',
   'accountStateNew' : 'Account is not activated yet.',
   'accountStateBlocked' : 'Account is <b>blocked</b>!'
 },

 errorReport : function(errors) 
 {
   errormsg='';
   for (i=0;i<errors.length;i++)
   {
     errormsg+=(errormsg == ''?'':"<br />")+eval('this.errorMessages.'+errors[i]);
   }
   $('#frmAuth div[msg=true]').addClass('msgError').html(errormsg);
   return;
 },

 processResponse : function(data)
 {
   if (data.code == 500)
     {
       authObj.errorReport(data.errorFields);
     }
   if (data.code == 200)
     {
       if (data.state == "active") { location='stats.html'; }
       else if (data.state == "new") { authObj.errorReport(['accountStateNew']); }
       else if (data.state == "blocked") { authObj.errorReport(['accountStateBlocked']); }
     }

   return;
 }

};

var accountObj={

 errorMessages :
 {
   'emailIncorrect' : '<b>E-mail</b> is incorrect.',
   'emailExists' : '<b>E-mail</b> exists. Try <a href="">password reminder</a>.',
   'icqIncorrect' : '<b>ICQ</b> is incorrect.',
   'payoutIncorrect' : '<b>Payout details</b> is incorrect.',
   'trafficIncorrect' : '<b>Traffic sources</b> are incorrect.',
   'passwordIncorrect' : '<b>Password</b> incorrect (must be at last 5 chars long).',
   'passwordNotMatch' : '<b>Password</b> do not match.',
   'passwordActiveNotMatch' : '<b>Active Password</b> is incorrect.',
   'okData' : 'Account data updated.',
   'okPassword' : 'Password updated.'
 },

 errorReport : function(errors) 
 {
   errormsg='';
   for (i=0;i<errors.length;i++)
   {
     errormsg+=(errormsg == ''?'':"<br />")+eval('accountObj.errorMessages.'+errors[i]);
   }
   $('#frmAccountData div[msg=true]').addClass('msg-error').html(errormsg);
   return;
 },

 processResponse : function(data)
 {
   if (data.code == 500) { accountObj.errorReport(data.errorFields); }
   if (data.code == 200)
     {
       $('#frmAccountData div[msg=true]').addClass('msg-notice').html(eval('accountObj.errorMessages.okData'));
       $('#frmAccountData :input').each(function(){
         if (this.tagName.toLowerCase() == "input" && this.type == "password") { this.value=''; }
       });
     }

   return;
 },

 errorReportPassword : function(errors) 
 {
   errormsg='';
   for (i=0;i<errors.length;i++)
   {
     errormsg+=(errormsg == ''?'':"<br />")+eval('accountObj.errorMessages.'+errors[i]);
   }
   $('#frmAccountPassword div[msg=true]').addClass('msg-error').html(errormsg);
   return;
 },

 processResponsePassword : function(data)
 {
   if (data.code == 500) { accountObj.errorReportPassword(data.errorFields); }
   if (data.code == 200)
     {
       $('#frmAccountPassword div[msg=true]').addClass('msg-notice').html(eval('accountObj.errorMessages.okPassword'));
       $('#frmAccountPassword :input').each(function(){
         if (this.tagName.toLowerCase() == "input" && this.type == "password") { this.value=''; }
       });
     }

   return;
 }

};

var statsObj={

 json : '',

 subIds : [],

 filterBy : 'date',
 filterValue : '',

 processResponse :  function(req)
 {
   json='';
   if (req.status == 200)
     {
       json=eval('('+req.responseText+')');

       for (i=0;i<json.items.length;i++)
       {
         index=-1;
         for (j=0;j<statsObj.subIds.length;j++)
         {
           if (statsObj.subIds[j] == json.items[i].subid)
             {
               index=i;
               break
             }
         }

         if (index < 0) { statsObj.subIds.push(json.items[i].subid); }
       }

       $('#statsFilter td:contains("SubID")').closest('tr').hide();
       if (statsObj.subIds.length > 0)
         {
           select=$('#statsFilter td:contains("SubID")').closest('tr').find(':input[name=subid]');
           $(select).find('option').each(function(){ $(this).remove(); });
           html='';
           for (i=0;i<statsObj.subIds.length;i++)
           {
             html+='<option value="'+statsObj.subIds[i]+'">'+(statsObj.subIds[i] == 0?'all':statsObj.subIds[i])+'</option>';
           }
           $(select).html(html);

           $('#statsFilter td:contains("SubID")').closest('tr').show(); 
         }
     }

   if ($('#statsFilter input[name=date_from]').val() == "")
     {
       now = new Date();
       date_from='';
       date_to='';
       if (now.getDate() < 16)
         {
           date_from='01.'+(now.getUTCMonth()+1 > 9?now.getUTCMonth()+1:'0'+(now.getUTCMonth()+1))+'.'+now.getUTCFullYear();
           date_to='15.'+(now.getUTCMonth()+1 > 9?now.getUTCMonth()+1:'0'+(now.getUTCMonth()+1))+'.'+now.getUTCFullYear();
         }
       else
         {
           date_from='16.'+(now.getUTCMonth()+1 > 9?now.getUTCMonth()+1:'0'+(now.getUTCMonth()+1))+'.'+now.getUTCFullYear();
           date_to=days_in_month(now.getUTCMonth()+1, now.getUTCFullYear())+'.'+(now.getUTCMonth()+1 > 9?now.getUTCMonth()+1:'0'+(now.getUTCMonth()+1))+'.'+now.getUTCFullYear();
         }

       $('#statsFilter input[name=date_from]').val(date_from);
       $('#statsFilter input[name=date_to]').val(date_to);

       statsObj.applyFilter();
     }

   statsObj.drawItems(json); 

   return;
 },

 applyFilter : function()
 {
   select=$('#statsFilter td:contains("SubID")').closest('tr').find(':input[name=subid]');
   if (parseInt($(select).val()) != 0)
     {
       statsObj.filterValue=$(select).val();
       statsObj.filterBy='subid';
       $('#statsItems thead th:contains("SubID")').show();
     }
   else
     {
       statsObj.filterValue='';
       statsObj.filterBy='date';
       $('#statsItems thead th:contains("SubID")').hide();
     }

   statsObj.drawItems();
   return false;
 },

 drawItems : function(json)
 {
   if (typeof(json)=="undefined") { json=statsObj.json; }
   if (typeof(json.items) == "undefined") { return; }

   $('#statsItems tbody tr').each(function(){
     $(this).remove();
   });

   date_from=$('#statsFilter input[name=date_from]').val();
   res=date_from.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/);
   date_from=Date.UTC(res[3],res[2]-1,res[1])/1000;

   date_to=$('#statsFilter input[name=date_to]').val();
   res=date_to.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/);
   date_to=Date.UTC(res[3],res[2]-1,res[1])/1000;

   total={money:0, visitors:0};
   for (date=date_to;date>=date_from;date-=(60*60*24))
   {
     pItem=undefined;
     for (i=0;i<json.items.length;i++)
     {
       if (json.items[i].date < date || json.items[i].date > date+24*60*60-1) { continue; }
       if (json.items[i].subid != statsObj.filterValue && statsObj.filterBy == 'subid') { continue; }
       if (typeof(pItem) == 'undefined')
         {
           pItem={};
           for (k in json.items[i]) { eval('pItem.'+k+'=json.items['+i+'].'+k); }
         }
       else
         {
           pItem.visitors=parseInt(pItem.visitors)+parseInt(json.items[i].visitors);
           pItem.presales=parseInt(pItem.presales)+parseInt(json.items[i].presales);
           pItem.sales=parseInt(pItem.sales)+parseInt(json.items[i].sales);
           pItem.rebills=parseInt(pItem.rebills)+parseInt(json.items[i].rebills);
           pItem.cbacks=parseInt(pItem.cbacks)+parseInt(json.items[i].cbacks);
           pItem.refunds=parseInt(pItem.refunds)+parseInt(json.items[i].refunds);
           pItem.money=parseFloat(pItem.money)+parseFloat(json.items[i].money);
         }
     }
     if (typeof(pItem) != 'undefined')
       {
         html='<td class="tc">'+format_utc_date(pItem.date)+'</td>'+
              (statsObj.filterBy == "subid"?'<td class="tr">'+pItem.subid+'</td>':'')+
              '<td class="tr">'+pItem.visitors+'</td>'+
              '<td class="tr">'+pItem.sales+'</td>'+
              '<td class="tr">'+pItem.rebills+'</td>'+
              '<td class="tr">'+(parseInt(pItem.cbacks)+parseInt(pItem.refunds))+'</td>'+
              '<td class="tr">'+(pItem.money/(pItem.visitors/1000)).toFixed(2)+'</td>'+
              '<td class="tr">'+(pItem.money/1).toFixed(2)+'</td>';
     
         row=$('<tr />').html(html);
         $('#statsItems tbody').append(row);

         total.money+=parseFloat(pItem.money);
         total.visitors+=parseInt(pItem.visitors);
       }
   }

   $('#statsItems tbody').append($('<tr />').html(
     '<td class="tr bold" colspan="'+(statsObj.filterBy == "subid"?6:5)+'">Total:</td>'+
     '<td class="tr bold">'+(total.money/(total.visitors/1000)).toFixed(2)+'</td>'+
     '<td class="tr bold">'+total.money.toFixed(2)+'</td>'
   ));
 
   statsObj.json=json;
   return;
 }

};

var payoutsObj={

 json : '',

 processResponse :  function(req)
 {
   json='';
   if (req.status == 200)
     {
       json=eval('('+req.responseText+')');
     }

   payoutsObj.drawItems(json); 

   return;
 },

 drawItems : function(json)
 {
   if (typeof(json)=="undefined") { json=statsObj.json; }
   if (typeof(json.items) == "undefined") { return; }

   $('#payoutsItems tbody tr').each(function(){
     $(this).remove();
   });

   total={amount:0};
   for (i=0;i<json.items.length;i++)
   {
     html='<td class="tc">'+format_utc_date(json.items[i].date)+'</td>'+
          '<td class="tr">'+(json.items[i].amount/1).toFixed(2)+'</td>';
     
     row=$('<tr />').html(html);
     $('#payoutsItems tbody').append(row);

     total.amount+=parseFloat(json.items[i].amount/1);
   }
   $('#payoutsItems tbody').append($('<tr />').html(
     '<td class="tr bold">Total:</td>'+
     '<td class="tr bold">'+total.amount.toFixed(2)+'</td>'
   ));

   if (total.amount > 0) { $('#payoutsItems').show(); $('p.noPayouts').hide(); }
 
   payoutsObj.json=json;
   return;
 }

};


