var mycookiearray = document.cookie.split(";");
var mycookie = new Object();
for (var i=0;i<mycookiearray.length;i++) {
	var x = mycookiearray[i].split("=");
	if (x.length==2) {
		mycookie[$.trim(x[0])] = $.trim(x[1]);
	}
}

function setcookie(name, value) {
  mycookie[name] = value;
  var s = "";
  for (var i in mycookie) {
  	  s += i+"="+mycookie[i]+";";
  }
  s+="expires=Tue, 31-Dec-2030 23:59:59;"
  document.cookie = s;
}
function getcookie(name) {
	return mycookie[name];
}
function span(classname, text) {
  return '<span class="'+classname+'">'+text+'</span>';
}
function div(classname, text) {
	return '<div class="'+classname+'">'+text+'</div>';
}
function divid(name, text) {
	return '<div id="'+name+'">'+text+'</div>';
}
function dividcls(idname, classname, text) {
	return '<div id="'+idname+'" class="'+classname+'">'+text+'</div>';
}


function linkclass(url, unselected, selected) {
	var classname;
	if (window.location.href.match(/header\.html$/) && url==".") {
		classname = selected;		
	} else if (window.location.href == URI.resolve(url)) {
		classname = selected;
	} else {
		classname = unselected;
	}
	return classname;
}

function link(url, target, text) {
	if (target=="_blank") {
       return '<a href="'+url+'" class="popup" target="'+target+'">'+text+'</a>';
	}
   return '<a href="'+url+'" target="'+target+'">'+text+'</a>';
}
function linkdiv(url, c1, c2, target, text) {
	return div(linkclass(url, c1, c2), link(url, target, text));
}

function linkspan(url, c1, c2, target, text) {
	return span(linkclass(url, c1, c2), link(url, target, text));
}

function text(text) {
	return div("text", text);
}
function image(url, width, height) {
	return '<image width="'+width+'" height="'+height+'" src="'+url+'" border=0></image>';
}
function imagebtn(classname, url, fn) {
	return '<image class="'+classname+'" src="'+url+'" onclick="'+fn+'"></image>';
}
function iframe(url, width, height) {
	return '<iframe src="'+url+'" width="'+width+' "height="'+height+'">';
}

function frameset(rowcol, text) {
	return '<frameset '+rowcol+ ' framespacing=0 frameborder=0>'+text+ '</frameset>';
}

function frame(url, name) {
	return '<frame src="'+url+'" name="'+name+'" frameborder=0 marginwidth=0 marginheight=0>';
}

function ol(classname, list) {
	var s = '<ol class='+classname+'>';
	for (var i in list) {
		s += '<li>'+list[i]+'</li>';
	}
	return s + '</ol>';
}

function ul(classname, list) {
	var s = '<ul class='+classname+'>';
	for (var i in list) {
		s += '<li>'+list[i]+'</li>';
	}
	return s + '</ul>';
}

function dl(classname, list) {
	var s = '<dl class="'+classname+'">';
	for (var i in list) {
		s+= '<dt>'+list[i][0]+'</dt><dd>'+list[i][1]+'</dd>';
	}
	return s+'</dl>';
}

function form(cgi, body) {
	return '<form method="post" action="'+cgi+'">'+body+'</form>';
}

function formtext(name, size, value) {
	return '<input type="text" name="'+name+'" id="'+name+'" size="'+size+'" value="'+value+'" />';
}

function formradio(name, value, tvalue, checked) {
	return '<input type="radio" name="'+name+'" id="'+name+'" value="'+value+'" checked="'+(checked?"checked":"false")+'"/>'+tvalue;
}
function formcheckbox(name, value, tvalue, checked) {
	return '<input type="checkbox" name="'+name+'" id="'+name+'" value="'+value+'" '+(checked?'checked':'')+'/>'+tvalue;
}

function formsubmit(name) {
	return '<input type="submit" value="'+name+'" />';
}

function formhidden(name, value) {
	return '<input type="hidden" name="'+name+'" id="'+name+'" value="'+value+'" />';
}

function textarea(name, col, row, value) {
	return '<textarea name="'+name+'" id="'+name+'" cols="'+col+'" rows="'+row+'">'+value+'</textarea>';
}

function textareareadonly(name, col, row, value) {
	return '<textarea name="'+name+'" id="'+name+'" cols="'+col+'" rows="'+row+'" readonly>'+value+'</textarea>';
}

function formselect(name, opt) {
	var s = '<select name="'+name+'" id="'+name+'">';
	for (var i in opt) {
		var a = opt[i];
		var on, os;
		if (typeof a == "string") {
			on = os = a;
		} else {
			on = a[0];
			os = a[1];
		}
		s += '<option value="'+on+'">'+os+'</option>';
	}
	s+='</select>';
	return s;
}

function swf(name, width, height, flashvars, idx) {
	if (flashvars==undefined) {
		flashvars="";
	}
	if (idx==undefined) {
		idx="";
	}
	var str="";
	str += "<object id='external_"+name+idx+"' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab'"+
			" height='"+height+"' width='"+width+"'>"+
			"<param name='src' value='"+name+".swf' />"+
			"<param name='flashVars' value='" + flashvars+"' />"+
			"<embed name='external_"+name+idx+"' src='"+name+".swf' pluginspage='http://www.adobe.com/go/getflashplayer' height='"+height+"' width='"+width+"' flashVars='"+ flashvars +"'>"+
			"</embed>"+
			"</object>";
	return str;
}


function random(a, b) {
	return (Math.random() >0.5) ? a : b;
}


function button(name, action) {
//	return '<span><input type="button" value="'+name+'" onclick="' + action +'"></span>';
/*
	return '<a style="text-decoration:none" class="ui-state-default ui-corner-all" href="javascript:' + action +'">'
		+'<span style="padding:.5em .5em .5em .5em">'+name+'</span>'
		+'</a>';
*/
	return '<a style="text-decoration:none" class="ui-state-default ui-corner-all button" href="javascript:' + action +'">'
		+'<span style="padding:4px 8px">'+name+'</span>'
		+'</a>';


}


function minibutton(name, action) {
	return '<a style="text-decoration:none" class="ui-state-default ui-corner-all" href="javascript:' + action +'">'
		+'<span style="padding:4px 4px">'+name+'</span>'
		+'</a>';


}



/*
function buttonurl(name, url) {
//	return '<span><input type="button" value="'+name+'" onclick="' + action +'"></span>';
	return '<a style="padding: .3em .5em .3em .5em;text-decoration:none" href="'+url+'" class="ui-state-default ui-corner-all" >'+name+'</a>';
}
*/
function uifix() {
$('.ui-state-default').hover(function(){ 
	$(this).addClass('ui-state-hover'); 
}, function(){ 
	$(this).removeClass('ui-state-hover'); 
});
}

function ahref(name, url) {
	return '<a href="'+url+'">'+name+'</a>';
}


function aclass(clsname, name, url) {
	return '<a class="'+clsname+'" href="'+url+'">'+name+'</a>';
}

function p(txt) { return '<p>'+txt+'</p>'; }

function logo() {
//	return div("logo", "ビスケットワークショップ");
	return div("logo", ahref(image("logo.png", 369, 82), "index.html"));
}

function error(msg) {
	var str = 
		'<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"><p>'+
		'<span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span><strong>Alert:</strong>'+
		msg
		+'</p></div>';
	return str;
}

function gennavi(target) {
	var c = getcookie("count");
	if (c==null) {
		c = 0;
	}
	target.html(div("navilink", ahref("License","license.txt"))+ logo() /* +$("body").innerWidth() */);
	uifix();
	setcookie("count", parseInt(c)+1);
}


function genlnavi(target) {
	target.html(
//		ul("naviul",[
//		ahref("トップ", "l-index.html"),
//		ahref("ログアウト", "javascript:logout()"),
//		ahref("アカウント管理", "l-account.html"),
//		ahref("新規ワークショップ", "l-new.html"),
//		ahref("管理ワークショップ一覧", "l-mywslist.html")
//		])+
		
		accountinfo()+logo()
	);
	uifix();
//	$(".naviul").css("list-style", "none").css("margin", "0px 0px 0px 0px");
//	$(".naviul li").css("display", "inline").css("margin", "0px 10px 0px 0px");
}

function accountinfo() {

	return div("accountinfo", username);

}

function bookpath(bookid) {
	if (bookid.length >= 3) {
		var d = "book/"+bookid.substr(0, 2)+ "/b"+bookid;
		return d;
	}
	return "error";
}



var loginxml;
var publictxt;
var pageno;
var listmax;
var pagemax;



// .sidebar .main
function setresizefunc() {
	resizefunc();
	$(window).resize(function() {
		resizefunc();
	});
}


function appendwslist(bid, openfunc) {
	bookstatus(bid, function(status) {
				var xml = wslistpage(bid,status);
//				console.log("xml "+xml+" "+bid);
				if (status.search(/open/)!= -1) {
					$("#tabopen").prepend(xml);
					if (openfunc!=null) {
						openfunc(bid, status);
					}
				} else {
					$("#tabclose").prepend(xml);
				}
	});
}

var urlargs = [];
var urlargall = "";
if (document.location.search!="") {
	$.each(document.location.search.substring(1).split("&"), function (i, d) {
		var x = d.split("=");
		if (x.length==2) {
			urlargs[x[0]] = x[1];
		} else if (x.length==1) {
			urlargall = x[0];
		}
	});
}
var bookid="";
if (urlargs["bookid"]!=undefined) {
	bookid = urlargs["bookid"];
}



function checkimg(bookid, pageno, inserttarget) {
	var url = bookpath(bookid)+"/"+pageno+".jpg";
//	console.log("get "+url);

	if (!jQuery.browser["msie"]) {
		$.ajax({
			type: "GET",
			url: url,
			success: function (img) {
	//			console.log("ok  "+url);
				var str = div("indextxt", imagebtn("wsimgbtn", url, ""));
	//			console.log("insert "+str);
				$(inserttarget).append(str);
			},
			error: function (XMLHttpRequest, textStatus, errorThrown) {
	//			console.log("no  "+url);
				if (textStatus=="error") {
//					if (pageno<10) {
//						checkimg(bookid, pageno+3, inserttarget);
//					} else {
						$(inserttarget).append(image("gray.jpg", 127,95));
//					}
				}
			}
		});
	} else {
		var str = div("indextxt", imagebtn("wsimgbtn", url, ""));
		$(inserttarget).append(str);
	}
}

/*
function wsimage(bookid) {
	$.get(bookpath(bookid)+"/cnt.txt", {},
		function (cnt) {
			var rnd = Math.floor(cnt*Math.random())+1;
			checkimg(bookid, rnd, $("#wsimg"+bookid));
		}
	);
}
*/

function XMLtoString(elem){
	
	var serialized;
	
	try {
		// XMLSerializer exists in current Mozilla browsers
		serializer = new XMLSerializer();
		serialized = serializer.serializeToString(elem);
	} 
	catch (e) {
		// Internet Explorer has a different approach to serializing XML$
		serialized = elem.xml;
	}
	
	return serialized;
}

function changewstitle(ti) {
	var s="";
	s+=formtext("wstitle", 20, ti);
	s+=button("変更", "sendnewwstitle()");
	return s;
}

function sendnewwstitle() {
	$("book title", bookinfo).text($("#wstitle").val());
	$.post("savepage.php",{bookid: bookid, pageid:"info", ext:"xml",body:XMLtoString(bookinfo)},
		function(ok) {
//			$.ajax({
//				url:bookpath(bookid)+"/info.xml",
//				type:"GET",
//				cache:false,
//				success:function(h) {
//						console.log(h);
//						location.reload();
//				}
//			});
			location.reload();
		}
	);
}

var bookinfo="";

function genwsinfo(target, nextfunc) {
	if (bookid!="") {
		var dynamic = {};
		dynamic = {dummy:Math.random()};
		$.get(bookpath(bookid)+"/info.xml", dynamic,
			function (info) {
				bookinfo = info;
				var title = $("book title", info).text();
				var desc  = $("book description", info).text();
				var s = 
					span("infotitle", ahref("トップ", "index.html"))
					+span("infospace", ">")
					+span("infotitle", ahref(title, "showws.html?bookid="+bookid));
				if (username!=null) {
					s += span("infospace", changewstitle(title));
					s += span("infospace", $("book lang", info).text()+" "+$("book snapshot", info).text());
				}
				target.append(s);
				nextfunc();
//				$("#wsindex").prepend(wsshowcmd());
			}, "xml");
		target.append(span("wscode", "ワークショップコード"+bookid));
	}
}

/*
function checkimg(bookid, pageno, inserttarget, maintargetname) {
	$.get(bookpath(bookid)+"/"+pageno+".jpg", {}, function (img) {
		var str = div("indextxt", imagebtn("indeximgbtn", bookpath(bookid)+"/"+pageno+".jpg", "imgclick('"+pageno+"','" +maintargetname+"')"));
		inserttarget.append(str);
	});
}

*/

    function getMyApp(appName) {
        if (navigator.appName.indexOf ("Microsoft") !=-1) {
            return window[appName];
        } else {
            return document[appName];
        }
    }


/*
function genmywslist(target) {
	$('book', loginxml).each(function(i, d) {
		var xx = $(d).attr("bid");
		target.prepend(wslistpage(xx));
	});
	target.prepend(p("管理しているワークショップ一覧"));
}

function genswitch(target, maintargetname) {
	target.html('<input id="editswitch" type="checkbox" onchange="switchchange('+"'"+ maintargetname +"'"+')">編集する</input> ');
}

function switchchange(maintargetname) {
	if (pageid!="") {
		imgclick(pageid, maintargetname);
	}
}

*/

function ss(t) {
	return span("sss", t);
}
function bss(t) {
	return span("bsss", t);
}

function bookstatus(bid, func) {
	$.get(bookpath(bid)+"/status.txt", {dummy:Math.random()}, func);
}

function openwinstr(url, target) {
	if (target==undefined) {
		target = '_top';
	}
	return "void(window.open('"+url+"', '"+target+"'))";
}
function goindex() {
	window.open("index.html", "_top");
}



function pp(x) {
//	return div("ppp", p(x));
	return p(x);
}


function landnewurl(bid) {
	var lang = $("book lang", bookinfo).text();
	if (lang!="") {
		lang = "&lang="+lang;
	}
	var snapshot = $("book snapshot", bookinfo).text();
	if (snapshot!="") {
		snapshot = "&snapshot="+snapshot;
	}
	var clearfornew = $("book dontclearfornew", bookinfo).text();
	if (clearfornew=="true") {
		clearfornew = "&clearfornew=false";
	} else {
		clearfornew = "";
	}
	var wstype = $("book type", bookinfo).text();
	var vl="";
	if (wstype=="l2") {
		vl = "&viscuitland=true";
	}
	return "Land.html?path="+bid+"&new=on"+snapshot+lang+vl+clearfornew;
}
function landediturl(bid, magic) { 
	var pid = magictopid(magic);
	return "Land.html?path="+bid+"&name="+pid+"&magic="+magic+"&editable=on";
}
function landeditbaseurl(bid) {
	return "Land.html?path="+bid+"&name=base&editable=on";
}

function participate() {
	var bookid = $("#wscode").val();
	if (bookinfo=="") {
		$.get(bookpath(bookid)+"/info.xml", "" ,
			function (info) {
				bookinfo = info;
				if (bookinfo!="") {
					participate();
				}
			});
	} else {
		$("#message").html(error("ワークショップコードが間違っています"));
		bookstatus(bookid,
			function (status) {
				if (status.search(/open/) != -1) {
					$("#message").html("");
	//				document.location = landnewurl(bookid);
					window.open(landnewurl(bookid), "_top");
				} else {
					$("#message").html(error("そのワークショップは現在開催されいません"));
				}
			}
		);
	}
}


function myedit() {
	$("#message").html("");
	$.get("checkpageauth.php", {bookid:$("#wscode1").val(), magic:$("#pagecode1").val()},
		function (d) {
			if (d=="yes") {
//				document.location = landediturl($("#wscode1").val(), $("#pagecode1").val());
				window.open(landediturl($("#wscode1").val(), $("#pagecode1").val()), "_top");
			} else {
				$("#message").html(error("ページコードかワークショップコードが間違っています"));
			}
		}
	);
}



function magictopid(m) {
	return m.substr(0, m.length-3);
}

var username;

function logincheck(func) {
	$(document).ready(function(){
		$.get("xml.php", {}, function (x) {
			if ($("error", x).size()==0) {
				loginxml = x;
				username = $('user', loginxml).attr("name")
			} else {
				loginxml = null;
				username = null;
			}
			func();
		});
	});
}
/*
function logincheck(func) {
	$(document).ready(function(){
		$.get("xml.php", {}, function (x) {
			if ($("error", x).size()==0) {
				loginxml = x;
				username = $('user', loginxml).attr("name")	  
				func();
			} else {
				document.location = "index.html";
			}
		});
	});
}
*/

function swfwinresize() {
  var w = $("#navi").innerWidth()-10-10-$("#wsindex").width();
  var h = 600*w/800;
  $("#external_Land").attr("width",w);
  $("#external_Land embed").attr("width", w);
  $("#external_Land").attr("height",h);
  $("#external_Land embed").attr("height", h);
  $("#wsindex").css("height", h);
  $("#external_Land").css("position", "absolute");
  $("#external_Land").css("left", $("#wsindex").width()+10);
}

function loadwiki(file) {
	$.get(file, {dummy:Math.random()}, 
		function (d) {
			var wikibody = d.split("\n");
			parsewiki(wikibody);
	});
	setresizefunc();

}

function parsewiki(wikibody) {
	var re = new RegExp("^(\\*)+");
	var sre = new RegExp("^#");
	var s = "";
	var m = "";
	var m1= "";
	$.each(wikibody, function (i, d) {
		if (d.search(re) != -1) {
			d = d.replace(re, "");
			s+=p(d);
			
			m += m1+div("wikimainh", d);
			m1 = "";
		} else if (d.search(sre) != -1) {
			m1 += div("wikiimg", image(d.replace(sre, ""), 127, 95));
		} else {
			m1+= p(d);
		}
	});
	m += m1;
	$(".sidebar").html(div("sidebardiv", div("sidebardivh", "ヘルプ")+s));
	$(".main").html(div("wikimain", m));
}

function insertchar(target, insch) {
	$(target).val($(target).val()+insch);
}
function deletechar(target) {
	var s = $(target).val();
	if (s.length>0) {
		s = s.substr(0, s.length-1);
	}
	$(target).val(s);
}


function softkeyboard(target) {
	var s = "";
	var i;
	for (i=1;i<10;i++) {
		s += minibutton(""+i, "insertchar('"+target+"', '"+i+"');");
	}
	s += minibutton("0", "insertchar('"+target+"', '"+0+"');");
	s += minibutton("←", "deletechar('"+target+"');");
	
	return s;
}
