var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0, length = iterable.length; i < length; i++)
      results.push(iterable[i]);
    return results;
  }
}
Function.prototype.mptbp_bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}


var bp_server = "http://pixie.blogdeco.jp/";
//var bp_server = "http://pixie.o/";
var Mypicturetown_server = bp_server;
function Mypicturetownbp_onContent(f){
	if(!window.__ADLE){
		var n=function(){
			if(arguments.callee.d)
				return;
			arguments.callee.d=true;
			if(window.__ADLET){
				clearInterval(window.__ADLET);
				window.__ADLET=null
			}
			for(var i=0;i<window.__ADLE.length;i++){
				window.__ADLE[i]()
			}
			window.__ADLE=null
		};
		if(document.addEventListener)document.addEventListener("DOMContentLoaded",n,false);
		// forget IE, __ie_onload defer doesnt work
		if(/WebKit/i.test(navigator.userAgent)){
			window.__ADLET=setInterval(function(){
				if(/loaded|complete/.test(document.readyState)){
					n()
				}
			},10)
		}
		window.onload=n;
		window.__ADLE=[]
	}
	window.__ADLE.push(f)
}
var Mypicturetownbp_index = typeof(Mypicturetownbp_index)=='undefined' ? 0 : Mypicturetownbp_index+1;
Mypicturetownbp_onContent( Mypicturetownbp_onDomLoaded.mptbp_bind(null,[Mypicturetownbp_index]) );
function Mypicturetownbp_onDomLoaded( index ){
	if( typeof(bp_common_loaded)!='undefined' ){
		Mypicturetownbp.load( index );
	}else{
		setTimeout(Mypicturetownbp_onDomLoaded.mptbp_bind(null,[index]),20);
	}
}

var Mypicturetownbp = typeof(Mypicturetownbp)!='undefined' ? Mypicturetownbp : function(){
	// config
	var bpName              = "Mypicturetownbp";
	var idFloatingWrapper   = bpName+"_floatingDiv";
	var idFloatingSwf       = "external_"+bpName+"_floatingSwf";
	var idSidebarWrapper    = bpName+"_sidebarWrapper";
	var idSidebarSwf        = "external_"+bpName+"_sidebarSwf";
	var elFloatingSwf       = new Array();
	var elFloatingContainer = new Array();
	var lib                 = "js/bp_common.js";
	var swfFloating         = "swf/npt2008_floating.swf";
    var swf_file_of = {
        sidebar: "swf/npt2008_sidebar.swf",
        entry:   "swf/npt2008_entry.swf",
        type03:  "swf/type03.swf"
    };
    var swf_size_of = {
        sidebar: [ 170, 210 ],
        entry:   [ 334, 289 ],
        type03:  [ 165, 215 ]
    };
    var swf
	var album_url           = Mypicturetown_server + "static/album/";

	// internals
	var aWindowSize;
	var aScrollSize;
	var aScrollPos;
	var swf_index = 0;
	var loaded = 0;		// change to 1 onload
	var b=null;	// bp_common
	var shownFromBlogparts = false;
	var active = false;	// true when showing fullscreen, false when 1x1[px]
	var nowactive_index = 0;

	var params = new Array();

	var _load_library = function() {
		// sidebar
		document.write("<script type='text/javascript' charset='utf-8' src='"+Mypicturetown_server+lib+"'></script>");
		(new Image).src = 'http://log.kayac.com/cl/?rs=i&cm=nkpv00001&ln=1';
	}
	var _get_id = function( default_id, index ) {
		return default_id+"_"+index;
	}

	var _render_sidebar = function( index ) {
		if ( typeof(params[index])=='undefined' ) { params[index] = {}; }
		var getparam = function(){
			var scripts = document.getElementsByTagName('script');
			var s = scripts[scripts.length-1];
			var pair = s.src.match(/(style|color|uid|background)=([a-zA-Z0-9,_%]*)/g);	// uidからxmlのurlを作る
			if( !pair ){ return; }
			for( var i=0; i<pair.length; i++ ){
				var a = pair[i].split("=");
				params[index][a[0]] = a[1].split(",");
			}
		};
		getparam();
		if( params[index]['sidebar']!='none' ){
			document.write("<div id='"+_get_id(idSidebarWrapper,index)+"'></div>");
		}
	}

	var createStage = function( index ) {
		if( typeof(bp_common)=='undefined' ){ throw "needs bp_common framework"; return; }
		b = bp_common;
		//b.hideScrollBars();

		var swfobject = b.SWFObject;
		if ( b.el(_get_id(idSidebarWrapper,index)) ) {
            var size = swf_size_of[ params[index]["style"] ];
            var swf  = swf_file_of[ params[index]["style"] ];
			var so = new swfobject(Mypicturetown_server+swf, _get_id(idSidebarSwf,index), size[0], size[1], "9.0.0", "#000000");
			so.addParam("wmode",            "transparent");
			so.addParam("quality",          "high");
			so.addParam("align",            "middle");
			so.addParam("allowScriptAccess","always");
			so.addVariable("color", params[index]["color"]);
			so.addVariable("style", params[index]["style"]);
			//so.addVariable("xml",   encodeURIComponent( album_url + params[index]["uid"] + ".xml" ));
			so.addVariable("xml",   ( album_url + params[index]["uid"] + ".xml" ));
			so.addVariable("index", index);
			so.write( _get_id(idSidebarWrapper,index) );
		}
		if( ! elFloatingContainer[index] ){
			elFloatingContainer[index] = document.createElement("div");
			elFloatingContainer[index].id = _get_id( idFloatingWrapper, index );
			elFloatingContainer[index].style.width    = "1px";
			elFloatingContainer[index].style.height   = "1px";
			elFloatingContainer[index].style.position = "absolute";
			document.body.appendChild( elFloatingContainer[index] );
            var swf = (params[index]["style"] == "type03") ? ( "swf/type03_floating_"+params[index]["background"]+".swf" ) : swfFloating;
			var so = new swfobject( Mypicturetown_server + swf, _get_id(idFloatingSwf,index),  "100%", "100%", "9.0.0", "#000000");
			//so.addParam("wmode","transparent");
			so.addParam("quality",          "high");
			so.addParam("align",            "middle");
			so.addParam("allowScriptAccess","always");
			so.addParam("allowFullScreen",  "true");
			so.addVariable("color", params[index]["color"]);
			so.addVariable("style", params[index]["style"]);
			//so.addVariable("xml",   encodeURIComponent( album_url + params[index]["uid"] + ".xml" ));
			so.addVariable("xml",   ( album_url + params[index]["uid"] + ".xml" ));
			so.addVariable("index", index);
            if ( params[index]["style"] == "type03" ) {
			    so.addVariable("background",params[index]["background"]);
            }
			so.write( _get_id(idFloatingWrapper,index) );
			elFloatingSwf[index] = navigator.userAgent.match(/MSIE/) ? window[_get_id(idFloatingSwf,index)] : document[_get_id(idFloatingSwf,index)];
		}
	}

	var updatePosition = function( index ){
		aWindowSize = b.getWindowSize();
		aScrollSize = b.getScrollSize();
		aScrollPos	= b.getScrollPosition();
		if( active ){
			elFloatingContainer[index].style.width  = "100%";
			elFloatingContainer[index].style.height = aWindowSize[1]+"px";
			elFloatingContainer[index].style.left   = aScrollPos[0]+"px";
			elFloatingContainer[index].style.top    = aScrollPos[1]+"px";
		}else{
			elFloatingContainer[index].style.width  = "1px";
			elFloatingContainer[index].style.height = "1px";
			elFloatingContainer[index].style.left   = aScrollPos[0]+"px";
			elFloatingContainer[index].style.top    = aScrollPos[1]+"px";
		}
	}

	var showStage = function( index ) {
		b.deleteObstacles();
		updatePosition( index );
		if( navigator.userAgent.match( "MSIE" ) ){
			document.onmousewheel = Mypicturetownbp.onMouseWheel;
		}else if( navigator.userAgent.match( "Safari" ) ){
			window.onmousewheel = Mypicturetownbp.onMouseWheel;
		}else if(window.opera){
			window.attachEvent("onmousewheel",Mypicturetownbp.onMouseWheel);
		}else if(window.addEventListener){
			window.addEventListener( "DOMMouseScroll", Mypicturetownbp.onMouseWheel, false );
		}
	}

	return {
		timer : null,
		render_sidebar : function( index ) {
			_render_sidebar( index );
			_load_library();
		},
		load : function( index ){
			createStage( index );
			updatePosition( index );
			b.addListener("DisplayArea","change",updatePosition.mptbp_bind( null, [index] ),false);
			b.addListener( window,      "load",  updatePosition.mptbp_bind( null, [index] ),false);
		},
		show : function( focusindex, index ) {
			index  = typeof(index)=='undefined' ? 0 : index;
			active = true;
			nowactive_index = index;
			showStage( index );
			setTimeout( function(){
				elFloatingSwf[index].xi_show( focusindex );
			},100);
		},
		end : function( index ){
			index  = typeof(index)=='undefined' ? 0 : index;
			//b.removeListener("DisplayArea","change",updatePosition,false);
			active = false;
			if( navigator.userAgent.match( "MSIE" ) ){
				document.onmousewheel = null;
			}else if( navigator.userAgent.match( "Safari" ) ){
				window.onmousewheel   = null;
			}else if(window.opera){
				window.detachEvent("onmousewheel",Mypicturetownbp.onMouseWheel);
			}else if(window.addEventListener){
				window.removeEventListener( "DOMMouseScroll", Mypicturetownbp.onMouseWheel, false );
			}
			setTimeout( function(){
				updatePosition( index );
				b.revivalObstacles();
			},0);
		},
		onMouseWheel : function(e){
			var delta;
			if( navigator.userAgent.match( "MSIE" ) ){
				e = window.event;
				delta = e.wheelDelta; e.returnValue = false;
			}else if( navigator.userAgent.match( "Gecko" ) ){
				delta = e.detail * -1; e.preventDefault();
			}else if( window.opera ){
				delta = e.detail * -1; e.preventDefault();
			}else if( navigator.userAgent.match( "Safari" ) ){
				delta = e.wheelDelta; e.returnValue = false;
			}
			delta = ( delta < 0 ) ? -1 : 1;
			if ( typeof(elFloatingSwf[nowactive_index])!="undefined" ) {
				elFloatingSwf[nowactive_index].xi_zoom(delta);
			}
			if (e.preventDefault) {
				e.preventDefault();
			}
			e.returnValue = false;
		}
	};
}();
Mypicturetownbp.render_sidebar( Mypicturetownbp_index );
