//browser
var g_ua=(function(){
	var o={};
	var ua=navigator.userAgent;
	var apn=navigator.appName;
	var apv=navigator.appVersion;
	o.Win9X = (apv.search(/windows 98/i)>-1);
	o.IE = (apn.search(/internet explorer/i)>-1);
	o.Opera = (ua.search(/opera/i)>-1);
	if(o.Opera)o.IE=false;
	o.Safari = (apv.search(/safari/i)>-1);
	o.iPhone = (apv.search(/iphone/i)>-1);
	o.iPod = (apv.search(/ipod/i)>-1);
	o.iPad = (apv.search(/ipad/i)>-1);
	o.Android = (apv.search(/android/i)>-1);
	o.BlackBerry = (ua.search(/blackberry/i)>-1);
	o.SmartPhone = (ua.search(/webkit/i)>-1&&ua.search(/mobile/i)>-1);
	if(o.iPad)o.SmartPhone=false;
	o.iev=-1;
	if(o.IE){
		var re=new RegExp('MSIE ([0-9]{1,}[\.0-9]{0,})');
		if(re.exec(ua)!=null)o.iev=parseFloat(RegExp.$1);
	}
	return o;
})();
//scroll
function smoothScroll(_spd){
	if(!_spd)_spd=400;
	$('a[href*=#]').live('click',function(){
		if($(this).attr('href').replace(/[#?].*/gi,'')==location.href.replace(/[#?].*/gi,'')){
			var $target=$( this.hash );
			$target=$target.length&&$target||$('[name='+this.hash.slice(1)+']');
			if($target.length){
				var targetOffset=$target.offset().top;
				$('html,body').animate({
					scrollTop: targetOffset
				},_spd);
			}
			return false;
		}
	});
}
//nhk onlinetop
var nol={
	 key:'nol'
	,data:{}
	,hasData:function(){
		for(i in this.data){
			return true;
		}
		return false;
	}
	,save:function(){
		if(this.hasData()){
			nol.reset();
			cookF.set( this.key, json.toStr(this.data), {expires:90,domain:'.nhk.or.jp',path:'/'} );
			//cookF.set( this.key, json.toStr(this.data), {expires:90} );
		}
	}
	,load:function(){
		this.save();
		delete this.data;
		var str=decodeURIComponent( cookF.get(this.key) );
		if(!str)str='{};';
		eval( 'var obj='+str );
		this.data=obj;
	}
	,reset:function(){
		cookF.del(this.key);
	}
};
//SmartPhone
var smaPho={
	 key:'topsm'
	,data:{}
	,save:function(){
		cookF.set( this.key, json.toStr(this.data), {expires:365} );
	}
	,convert:function(){
		this.load();
		if(this.data.layout){nol.data.smp=this.data.layout;}
		if(this.data.noa){nol.data.noa=this.data.noa;}
		this.reset();
		this.c2nol('NHKonlinetopFontSize','fsz');
		this.c2nol('NHKonlinetopNews','ngenre');
		this.c2nol('NLS','ngenre');
		nol.save();
	}
	,c2nol:function(k,nk){
		var ck=cookF.get(k);
		if(ck){
			if(k=='NHKonlinetopFontSize'){
				if(ck.search(/(small|medium|large)/)>-1){
					ck=RegExp.$1;
				}
			}
			nol.data[nk]=ck;
		}
		cookF.del(k);
	}
	,load:function(){
		delete this.data;
		var str=decodeURIComponent( cookF.get(this.key) );
		if(!str)str='{}';
		eval( 'var obj='+str );
		this.data=obj;
	}
	,reset:function(){
		cookF.del(this.key);
	}
};
//cookie
var cookF={
	set:function(key, val, opt){
		var t='';
		t+= key+'=';
		t+= encodeURIComponent(val)+';';
		if(val==''){opt.expires=-365;}
		if(opt.expires){t+='expires='+this.getGMT(opt.expires)+';';}
		if(opt.domain){t+='domain='+opt.domain+';';}
		if(opt.path){t+='path='+opt.path+';';}else{t+='path=/;';}
		if(opt.secure){t+='secure';}
		document.cookie=t;
	}
	,get:function(key){
		var t=document.cookie.split(';');
		var u;
		for(var i=0;i<t.length;i++){
			u=t[i].split('=');
			if(this.trim(u[0])==key){
				if(u.length==2){
					return decodeURIComponent(this.trim(u[1]));
				}
				else if(u.length==1){
					this.del(key);
					return '';
				}
			}
		}
		return '';
	}
	,del:function(key){
		this.set(key, '', {expires:-365});
	}
	,getGMT:function(d){
		var exp=new Date();
		exp.setTime(exp.getTime()+1000*60*60*24*d);
		return exp.toGMTString();
	}
	,trim:function(s){
		return s.replace(/^\s+|\s+$/g, '');
	}
	,check:function(){
		//return navigator.cookieEnabled;
		var chk='checkstring';
		var ck='cookiecheck';
		this.set(ck,chk,{});
		if( this.get(ck) === chk ){
			this.del(ck);
			return true;
		}
		return false;
	}
};
//hash
var hashF={
	setStr:function(ar){
		for(var i=0; i<ar.length; i++){
			ar[i] = encodeURIComponent(ar[i]);
		}
		return '#/'+ar.join('/')+'/';
	},
	getObj:function(conf){
		var str=location.hash.slice(1);
		if(!str)return null;
		var dt=str.split('/');
		var o={};
		if(dt.length!=conf.length+2){return null;}
		for(var i=0;i<conf.length;i++){
			o[conf[i]] = decodeURIComponent(dt[i+1]);
		}
		return o;
	}
};
//query
var queryF={
	setStr:function(o){
		var tmp=new Array();
		for(var i in o){
			tmp.push( i + '=' + encodeURIComponent(o[i]) );
		}
		tmp.sort();
		var str=tmp.join('&');
		if(str){str='?'+str;}
		return str;
	},
	getObj:function(o){
		var t=location.search;
		var p=o;
		if(t.charAt(0)!='?')return p;
		t=t.slice(1).split('&');
		var u;
		for(var i=0; i<t.length; i++){
			u=t[i].split('=');
			if(u[0]!='' && u[1]){
				p[u[0]] = decodeURIComponent(u[1]);
			}
		}
		return p;
	},
	getValue:function(key){
		var o=this.getObj({});
		return (o[key])?o[key]:'';
	}
};
//JSON
var json={
	toStr:function(js){
		var ret;
		if(js.constructor===Array){
			ret = this.parseArr( js );
		}
		else if(js.constructor===Object){
			ret = this.parseObj( js );
		}
		else{
			ret = '"'+js+'"';
		}
		return ret;
		//return this.escapeIE(ret);
	}
	,parseObj:function(o){
		var ret=[];
		for(var i in o){
			if(o[i].constructor===Array){
				ret.push( '"' + i + '":' + this.parseArr( o[i] ) );
			}
			else if(o[i].constructor===Object){
				ret.push( '"' + i + '":' + this.parseObj( o[i] ) );
			}
			else{
				ret.push( '"' + i + '":"' + this.parseString( o[i].toString() ) + '"' );
			}
		}
		return ( '{' + ret.join(',')+'}' );
	}
	,parseArr:function(ar){
		var ret=[];
		for(var i=0;i<ar.length;i++){
			if( ar[i].constructor===Array ){
				ret.push( this.parseArr(ar[i]) );
			}
			else if( ar[i].constructor===Object ){
				ret.push( this.parseObj(ar[i]) );
			}
			else if( ar[i].constructor===Number ){
				ret.push( ar[i].toString() );
			}
			else if( ar[i].constructor===String ){
				ret.push( '"' + this.parseString( ar[i].toString() ) + '"' );
			}
		}
		var rets = '['+ ret.join(',') +']';
		return rets;
	}
	,parseString:function(str){
		return str;
		//return str.replace(/"/g,'&quot;').replace(/;/g,'%3B');
	}
	,escapeIE:function(str){
		if('\v'=='v'){
			return str.replace(/"/g,'&quot;');
		}
		return str;
	}
};
//Date I/F
var DateIF={
	yobi:'日 月 火 水 木 金 土'.split(' '),
	yobiE:'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '),
	tukiE:'January February March April May June July August September October November December'.split(' '),
	parse:function(str){
		var ret=false;
		if(!str)return false;
		if(str.match(/(\d{4})(\d{2})(\d{2})/)){
			ret = new Date( parseInt(RegExp.$1,10), parseInt(RegExp.$2,10)-1, parseInt(RegExp.$3,10) );
		}
		else if(str.match( /(\d{4})\D(\d{1,2})\D(\d{1,2})\D(\d{1,2})\D(\d{1,2})\D(\d{1,2})/ )){
			ret = new Date( parseInt(RegExp.$1,10), parseInt(RegExp.$2,10)-1, parseInt(RegExp.$3,10), parseInt(RegExp.$4,10), parseInt(RegExp.$5,10), parseInt(RegExp.$6,10) );
		}
		else if(str.match( /(\d{4})\D(\d{1,2})\D(\d{1,2})\D(\d{1,2})\D(\d{1,2})/ )){
			ret = new Date( parseInt(RegExp.$1,10), parseInt(RegExp.$2,10)-1, parseInt(RegExp.$3,10), parseInt(RegExp.$4,10), parseInt(RegExp.$5,10) );
		}
		else if(str.match( /(\d{4})\D(\d{1,2})\D(\d{1,2})/ )){
			ret = new Date( parseInt(RegExp.$1,10), parseInt(RegExp.$2,10)-1, parseInt(RegExp.$3,10) );
		}
		return ret;
	},
	format:function(fmt, d){
		var t={};
		t.Y = fmt.match(/Y+/);
		if(t.Y)fmt = fmt.replace( /Y+/g, d.getFullYear().toString().slice(4-t.Y[0].length) );
		t.M = fmt.match(/M+/);
		if(t.M)fmt = fmt.replace( /M+/g, this.zeroPad(d.getMonth()+1, t.M[0].length) );
		t.D = fmt.match(/D+/);
		if(t.D)fmt = fmt.replace( /D+/g, this.zeroPad(d.getDate(), t.D[0].length) );
		fmt = fmt.replace( /a+/g, this.yobi[d.getDay()] );
		var hh=d.getHours();
		var hf=((hh-12)>=0)?1:0;
		fmt = fmt.replace( /A+/g, Array('AM','PM')[hf] );
		fmt = fmt.replace( /G+/g, Array('午前','午後')[hf] );
		t.h = fmt.match(/h+/);
		if(t.h)fmt = fmt.replace( /h+/g, this.zeroPad(hh, t.h[0].length) );
		t.n = fmt.match(/n+/);
		if(t.n)fmt = fmt.replace( /n+/g, this.zeroPad( Array(hh,hh-12)[hf], t.n[0].length) );
		t.m = fmt.match(/m+/);
		if(t.m)fmt = fmt.replace( /m+/g, this.zeroPad(d.getMinutes(), t.m[0].length) );
		t.s = fmt.match(/s+/);
		if(t.s)fmt = fmt.replace( /s+/g, this.zeroPad(d.getSeconds(), t.s[0].length) );
		fmt = fmt.replace( /K+/g, this.tukiE[d.getMonth()] );
		fmt = fmt.replace( /k+/g, this.tukiE[d.getMonth()].substring(0,3) );
		fmt = fmt.replace( /X+/g, this.yobiE[d.getDay()] );
		fmt = fmt.replace( /x+/g, this.yobiE[d.getDay()].substring(0,3) );
		return fmt;
	},
	reformat:function(fmt,dstr){
		var dt=this.parse(dstr);
		if(dt){
			return this.format(fmt, dt);
		}
		else return false;
	},
	getFirstDay:function(d){
		return this.parse( this.format('YYYY/MM/01',d) );
	},
	zeroPad:function(s,l){
		s=s.toString();
		while(s.length<l){
			s='0'+s;
		}
		return s;
	},
	addDate:function(d, add){
		var ad={Y:0,M:0,D:0,h:0,m:0,s:0};
		for(var i in add){
			ad[i]=add[i];
		}
		return (new Date(d.getFullYear()+ad.Y, d.getMonth()+ad.M, d.getDate()+ad.D, d.getHours()+ad.h, d.getMinutes()+ad.m, d.getSeconds()+ad.s));
	},
	setDate:function(d, set){
		var se={Y:d.getFullYear(),M:d.getMonth(),D:d.getDate(),h:d.getHours(),m:d.getMinutes(),s:d.getSeconds()};
		for(var i in set){
			if(i=='M'){se[i]=set[i]+1;}
			else se[i]=set[i];
		}
		return new Date(se.Y, se.M, se.D, se.h, se.d, se.s);
	},
	timeDelete:function(d){
		return this.parse(this.format('YYYY/MM/DD',d));
	},
	diffDate:function(d1,d2){
		return (this.timeDelete(d1)-this.timeDelete(d2))/86400000;
	}
};
//debug
var g_DebugFLG=0;
function debug(str){
	if(!g_DebugFLG)return;
	makeDebug();
	var txt=$('p#debug').html();
	$('p#debug').html(txt+'<br />'+str);
}
function makeDebug(){
	if(!document.getElementById('debug')){
		//$('body').prepend('<p id="debug" style="background-color:red">DEBUG...</p>');
		$('body').append('<p id="debug" style="background-color:#eec8c8;text-align:left;">DEBUG...</p>');
	}
}
function debugObj(o){
	var cd='';
	for(var i in o){
		cd='<b>'+i+'</b>';
		cd+=' : ';
		cd+=o[i];
		cd+='\n';
		debug(cd);
	}
}
//find Namespace extend beta
jQuery.fn.extend({
	findNS: function(tag,nsurl){
		var el=this;
		var ret=[];
		if(document.getElementsByTagNameNS){
			tag=tag.replace(/.*:/,'');
			var els;
			for(var i=0;i<el.length;i++){
				els=el.get(i).getElementsByTagNameNS(nsurl,tag);
				for(var ii=0;ii<els.length;ii++){
					ret[ret.length]=$(els[ii]);
				}
			}
		}
		else{
			for(var i=0;i<el.length;i++){
				els=el.get(i).getElementsByTagName(tag);
				for(var ii=0;ii<els.length;ii++){
					ret[ret.length]=$(els[ii]);
				}
			}
		}
		return ret;
	}
});
//ticker
var jTicker={
	 target:null
	,strArr:[]
	,current:0
	,padding:0
	,pid:'tickCont'
	,dur:4000
	,tid1:NaN
	,tid2:NaN
	,tickSpeed:100
	,init:function(obj){
		var o=this;
		if(obj.dur)o.dur=obj.dur;
		o.target=obj.tgt;
		o.strArr=obj.ar;
		o.current=0;
		o.refrechCB=obj.refrechCB;
		o.refreshTM=obj.refreshTM;
		if(obj.pid)o.pid=obj.pid;
		if(!isNaN(o.tid1)){clearTimeout(o.tid1);o.tid1=NaN;}
		if(!isNaN(o.tid2)){clearTimeout(o.tid2);o.tid2=NaN;}
		o.padding=$(obj.tgt).width();
		$(o.target).html('<p id="'+o.pid+'" style="white-space:nowrap;position:absolute;"></p>　');
		o.setP();
		if(o.refrechCB){
			o.tid2=setTimeout(function(){
				if(!isNaN(o.tid1)){clearTimeout(o.tid1);o.tid1=NaN;}
				$(o.target+' *:animated').stop();
				o.refrechCB();
			},obj.refreshTM*60*1000);
		}
	}
	,setP:function(){
		var o=this;
		$('#'+o.pid)
			.css('paddingLeft',o.padding)
			.html(o.strArr[o.current])
			.show()
			.css('left',0)
			.animate({paddingLeft:4}
				,{
					 duration:'normal'
					,easing:'linear'
					,complete:function(){
						var w=$('#'+o.pid).width();
						//alert(w +' '+ o.padding);
						if( w > o.padding ){
							if(!isNaN(o.tid1)){clearTimeout(o.tid1);o.tid1=NaN;}
							o.tid1=setTimeout(function(){o.tick(w)},o.dur);
						}
						else{
							if(o.strArr.length==1){return false;}
							o.next(1);
						}
					}
				}
			);
	}
	,tick:function(w){
		var o=this;
		$('#'+o.pid)
			.css({left:'0px'})
			.animate(
				 {left:'-'+w+'px'}
				,{
					 duration:o.strArr[o.current].length*jTicker.tickSpeed
					,easing:'linear'
					,complete:function(){
						o.next(0);
					}
				}
			);
	}
	,next:function(wait){
		var o=this;
		o.current++;
		if(o.current==o.strArr.length)o.current=0;
		if(wait){
			if(!isNaN(o.tid1)){clearTimeout(o.tid1);o.tid1=NaN;}
			o.tid1=setTimeout(function(){o.setP();},o.dur);
		}
		else{
			o.setP();
		}
	}
};
