function DateFormater(expr, country){
 var wd_jpn  = [ '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' ],
  M_jpn = [  'Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.'],
  wd  = [ 'Sun.', 'Mon.', 'Tue.', 'Wed.', 'Thu.', 'Fri.', 'Sat.' ],
  M = [ 'Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.' ],
  utc = false,
  am = 'AM',
  pm = 'PM',
  y,m,j,d,h,i,s,e;
 this.expr = expr;
 var time_lag = (country=="jpn")?9:(country=="ngr")?1:0;
 this.format = function(t){
  if(!t.getTime){ return false; }
  localTime = t.getTime();
  localOffset = t.getTimezoneOffset() * 60000;
  utcTime = localTime + localOffset;
  newTime = utcTime + (3600000*time_lag);
  t = new Date(newTime);
  y  = utc?t.getUTCFullYear():t.getFullYear();
  m = utc?t.getUTCMonth():t.getMonth();
  j = utc?t.getUTCDate():t.getDate();
  d = utc?t.getUTCDay():t.getDay();
  h = utc?t.getUTCHours():t.getHours();
  i = utc?t.getUTCMinutes():t.getMinutes();
  s = utc?t.getUTCSeconds():t.getSeconds();
  e = utc?t.getUTCMilliseconds():t.getMilliseconds();
  a = ((h==12 && (m+s+e>0))||h>12)?pm:am;
  return expr.replace(/\/0?[YyMmjDdHhisea\/]{1}/g, function(){
   for(var x=0,l=arguments.length; x<l; x++){
    switch(arguments[x]){
     case '/Y':  return ''+y;
     case '/y':  return (''+y).replace(/\d*(\d{2})/,'$1');
     case '/0m': return ''+((m<9?'0'+(m+1): (m+1)));
     case '/m':  return ''+(m+1);
     case '/M': return (country=="jpn")?M_jpn[m]:M[m];
     case '/0j': return ''+(j<10?'0'+j: j);
     case '/j': return ''+j;
     case '/d':  return ''+d;
     case '/D': return (country=="jpn")?wd_jpn[d]:wd[d];
     case '/0H': return ''+(h<10?'0'+h: h);
     case '/H': return ''+h;
     case '/0h': h=h>12?h-12:h; return ''+(h<10?'0'+h: h);
     case '/h':   return ''+h>12?h-12:h;
     case '/0i': return ''+(i<10?'0'+i: i);
     case '/i':  return ''+i;
     case '/0s': return ''+(s<10?'0'+s: s);
     case '/s':  return ''+s;
     case '/0e': return ''+(e<10?'00'+e: (e<100?'0'+e: e));
     case '/e':  return ''+e;
     case '/a': return ''+a;
     case '//':  return '/';
     default: return arguments[x];
    }
   }
  });
 };
 this.isUTC = function(u){ return typeof(u)=='boolean'? (utc=u): utc; };
 this.AM = function(a){ return am = typeof(a)=='string'? a: am; };
 this.PM = function(p){ return pm = typeof(p)=='string'? p: pm; };
 this.weekdays = function(){ return _confg(arguments, 'wd', 7); };
 this.months = function(){ return _confg(arguments, 'M', 12); }
 function _confg(args, vrb, s){
  var a1 = args[0], a2 = args[1];
  if(args.length>2){ return false; }
  switch( typeof(a1) ){
   case 'undefined': return eval(vrb);
   case 'object':
    if( a1.length!=s || typeof(a1[0])=='undefined' ){ return false;}
    for(var i=0,l=a1.length; i<l; i++){
     eval(vrb+'[i] = a1[i];');
    }
    break;
   case 'number': return ( typeof(a2)!='undefined'? false:eval(vrb+'[a1]') );
   case 'string':
    if( typeof(a2)!='number' || typeof(eval(vrb+'[a2]'))=='undefined' ) { return false; }
    eval(vrb+'[a2] = a1;');
  }
  return  true;
 }
}
var df_jpn = new DateFormater('/0H:/0i:/0s /0j /M /Y','jpn');
var df_ngr = new DateFormater('/0H:/0i:/0s /0j /M /Y','ngr');
setInterval("document.getElementById('time_jpn').innerHTML= df_jpn.format( new Date());",1000);
setInterval("document.getElementById('time_ngr').innerHTML= df_ngr.format( new Date());",1000);
