/**
 * @author shom
 */

/*
 * query idea
 *  uc: user contract
 *  c: cid
 *  nc: cid for no entry
 *  q: search query
 *  t: window title
 *  (as: resize parent iframe auto (for entries-p.html) : restricted on same host)
 *  lm: limit ( limit of entries in 1page )
 *  (g: geometry (<W>x<H>))
 *  ds: display style
 *   1l : 1line (entries-1line.css)
 *  dn: dispay none elements
 *   fd : feedname
 *   pd : pubdate
 *   et : entry title
 *  ed: entry display style
 *   ov : overlay (default)
 *   2p : 2pane
 *   il : inline
 *   ot : outer gadget
 *   pl : permalink
 *  es: entrybox size %
 *   default: 80 for overlay, 50 for 2pane
 *    0: outer gadget
 *   -1: permalink
 *  sf: show first entry
 *  css: outer css file
 */

var uri;
var entry_target;
var resizeparentiframe;
function init_common(){

/*
	if(G.isOpera&&!G._DEBUG){
		G.$("msg").innerHTML="Operaへの対応は準備中です"
		return;
	}
*/

	uri=G.parseUri(location.href);
	if(!G._DEBUG&&!uri.params.api){
		var ref=G.parseUri(document.referrer);
		if(ref.params&&ref.params.api){
			uri.params.api=ref.params.api;
			uri.hash="DEBUG";
			location.href=uri.toString();
			//location.reload();
			return;
		}
	}
	
	var lim=uri.params.lm||10;
	if(uri.params.c){
		if(uri.params.c.split(",").length<=1){
			G.setStyleSheet(".entries-feed-title {display:none;}");
		}
		MP.pseudoClick("#search-feed-"+uri.params.c+"-0,"+lim+"@entries");
	}else if(uri.params.q){
		MP.pseudoClick("#search-"+uri.params.q+"-0,"+lim+"@entries");
	}else{
		G.$("msg").innerHTML="フィードが指定されていません";
		return;
	}
	if (uri.params.t) {
		document.title = uri.params.t;
	} else if (uri.params.c) {
		MP.getFeedsInfo(uri.params.c.split(","), function(r){
			var titles = [];
			G.each(r, function(v){
				titles.push(v.title);
			});
			title=shorten_l(titles.join(","),100);
			document.title = "MODIPHI - Gadget - " + titles.join(",");
		});
	}else if(uri.params.q){
			document.title = "MODIPHI - Gadget - Query";
	}else{
			document.title = "MODIPHI - Gadget";
	}
	
	if(uri.params.ds){
		var ds=uri.params.ds.split(",");
		G.each(ds,function(v){
			switch(v){
				case "1l": G.requireCss("./entries-1line.css"); break;
				case "nf": G.setStyleSheet(".entries-feedname { display:none; }"); break;
				case "nt": G.setStyleSheet(".entries-pubdate { display:none; }"); break;
			}
		});
	}
	
	if(uri.params.ed){
		switch(uri.params.ed){
			case "ov": case "":
				break;
			case "2p":
				G.requireCss("./entries-2pane.css");
				show1stentry();
				var ds2p=true;
				break;
			case "il":
				G.requireCss("./entries-inline.css");
				entry_target="inline";
				break;
			case "ot":
				G.setStyleSheet("#entry { display:none; } ");
				entry_target="outer";
				break;
			case "pl":
				G.setStyleSheet("#entry { display:none; } ");
				entry_target="permalink";
		}
	}
	if(uri.params.sf){
		show1stentry();
	}
	
	if(uri.params.es){
		var size=Math.max(0,Math.min(100,100-G.atoi(uri.params.es,20)));
		G.setStyleSheet("#entry { left:"+size+"%; }");
		if(size==0){
			G.setStyleSheet("#entry-cont {border-left:none;}")
		}
		if(uri.params.ed=="2p"){
			G.setStyleSheet("#all {width:"+size+"%}");
		}
	}
	
	if(uri.params.as){
		// auto resize parent iframe
		resizeparentiframe=true;
	}
	
	if(uri.params.dn){
		var dn=uri.params.dn.split(",");
		var s=[];
		G.each(dn,function(v){
			s.push(({
				"fd":".entries-feed-title",
				"pd":".entries-pubdate",
				"et":"#entry h3"
			})[v]+" {display:none;}");
		});
		G.setStyleSheet(s.join("\n"));
	}
	
	if(uri.params.css){
		G.requireCss(uri.params.css);
	}else{
		G.requireCss("./styles/basic.css");
	}
	
	switch(uri.params.uc){
		case 2: case 3: case 4:
			G.$("bymodiphi").style.display="none";
		case 0: case 1:
		default:
			G.$("bymodiphi").style.display="block";
	}
	
	G.addEvent(document,"keypress",function(ev){
		ev=G.parseEvent(ev);
		if(ev.target.tagName){
			switch(ev.target.tagName.toLowerCase()){
				case "input": case "textarea": case "select": case "option":
					return;
			}
		}
		if(ev.shiftKey||ev.ctrlKey||ev.altKey){return;}

		//CONSOLE.log(ev.type+":"+ev.keyAsc);

		var e,b,c;
		var entryshowing=G.isClass(G.$("entry"),"showing");
		//if(G.isClass(G.$("entry"),"showing")){
			b=G.$("entry");			
			e=G.$("entry");
			c="entries";
		//}
		switch(ev.keyAsc){
			case 38: // UP
				if(entry_target=="inline"||!entryshowing){return;}
				e.scrollTop-=50;
				return G.stopBubble(ev,true);
				break;
			case 40: // DOWN
				if(entry_target=="inline"||!entryshowing){return;}
				e.scrollTop+=50;
				return G.stopBubble(ev,true);
				break;
			case 32: // SPACE
			case 34: // PgDn
				if(entry_target=="inline"||!entryshowing){return;}
				if(e.scrollTop+e.clientHeight<e.scrollHeight){
					if(false){
						clearInterval(MP._anim);
						MP._anim=G.anim(e.scrollTop,e.scrollTop+Math.floor(e.clientHeight-15),(function(v){
							this.scrollTop=v;
						}).bindThis(e),null,5,50);
					}else{
						e.scrollTop+=e.clientHeight;
					}
					return G.stopBubble(ev,true);
				}
			case 78: case 110: // n
				cursornext(c);
				return G.stopBubble(ev,true);
				break;
			case 33: // PgUp
				if(entry_target=="inline"||!entryshowing){return;}
				if(e.scrollTop>0){
					if(false){
						clearInterval(MP._anim);
						MP._anim=G.anim(e.scrollTop,Math.max(e.scrollTop-Math.floor(e.clientHeight-15)),function(v){
							e.scrollTop=v;
						},null,8,100);
					}else{
						e.scrollTop-=e.clientHeight-20;
					}
					return G.stopBubble(ev,true);
				}
			case 80: case 112: //p
			case 66: case 98: //b
				cursorprev(c);
				return G.stopBubble(ev,true);
				break;
			case 85: case 117: // u
				if(!entryshowing){return;}
				MP.pseudoClick(G.$S("a.full",b)[0]);
				//window.open(G.$S("a.full",b)[0].href);
				return G.stopBubble(ev,true);
				break;
			case 81: case 113: //q
			case 27: // ESC
				if(!entryshowing){return;}
				G.removeClassName(b,"showing");
				return G.stopBubble(ev,true);
				break;
		}
	});

	
	return uri;
}

function show1stentry(){
	MP.pseudoClick("#click-wait@body/#entries-0");
}

function cursornext(cname,e,f){
	f=f||function(e){MP.pseudoClick(e);}
	var e=e||MP.cursors[cname];
	if(!e||!e.parentNode){return;}
	e=e.nextSibling;
	while(e&&!G.isClass(e,"template-gen")){e=e.nextSibling;}
	if(!e){return;}
	if(G.isClass(e,"duplicate")){cursornext(cname,e,f);return;}
	f(G.$S(".entries-title a",e)[0]);
}

function cursorprev(cname,e){
	var e=e||MP.cursors[cname];
	if(!e||!e.parentNode){return;}
	e=e.previousSibling;
	while(e&&!G.isClass(e,"template-gen")){e=e.previousSibling;}
	if(!e){return;}
	if(G.isClass(e,"duplicate")){cursorprev(cname,e);return;}
	var n=G.$S(".entries-title a",e)[0];
	MP.pseudoClick(n);
}

function entry(id,outerf){
	if (entry_target == "outer" || outerf) {
		var uri = G.parseUri(location.href);
		uri.path = uri.path.replace(/\/[^\/]+$/, "/entry.html");
		uri.params.id = id;
		delete uri.params.c;
		window.open(uri.toString(), "mpentry", "width=800,height=600,scrollbar=yes,menubar=no,toolbar=no,location=no,status=no,statusbar=no").focus();
	}else if(entry_target=="permalink"){
		window.open(MP.entries[id].item_link,null);
	}else{
		MP.pseudoClick("#class-set-showing@body/#entry&&#entry-"+id+"@entry");
		if(entry_target=="inline"&&this.tagName&&this.tagName.toLowerCase()=="a"){
			this.parentNode.parentNode.appendChild(G.$("entry"));
			(function(){
				MP.pseudoClick("#scrollintoview-body/#entry@body/#all");
			}).poll(function(){return MP.showingEntry&&MP.tmpl.entry&&!MP.tmpl.entry.busy});
		}
	}
}

function resizeOwnerIframe(){
	if(!resizeparentiframe){return;}
	if(parent){
		var pifr;
		G.each(parent.frames,function(w,i){
			try{
				if(w==window){
					pifr=parent.document.getElementsByTagName("iframe")[i];
					return true;
				}
			}catch(ex){}
		});
		if(pifr){
			pifr.style.height=G.$("entries").offsetHeight+"px";
		}
	}
}

function checknoresult(){
	try{
		if(parent&&parent.location.pathname.match(/\/widgets\.html$/)){
			if(MP.tmpl.entries.appliedCnt==0){
				G.$("msg").innerHTML="プレビュー用ダミー内容";
				MP.pseudoClick.later(100,this,"#search-feed-"+(uri.params.nc||"10033,10036,12306")+"-0,"+G.atoi(uri.params.lm,10)+"@entries");
				G.removeElement.later(500,this);
			}
		}
	}catch(ex){}
}

function shorten_l(str,len){
	str=str.replace(/^\s+/,"").replace(/\s+/g," ");
	if(str.length+3>len){
		return str.substring(0,len)+"...";
	}
	return str;
}

