/* DHTML Color Picker v1.0.3, Programming by Ulyses, ColorJack.com */
/* Updated August 24th, 2007 */
 
function $(v) { return(document.getElementById(v)); }
function $S(v) { return(document.getElementById(v).style); }
function absPos(o) { var r={x:o.offsetLeft,y:o.offsetTop}; if(o.offsetParent) { var v=absPos(o.offsetParent); r.x+=v.x; r.y+=v.y; } return(r); }  
function agent(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); }
function toggle(v) { $S(v).display=($S(v).display=='none'?'block':'none'); }
function within(v,a,z) { return((v>=a && v<=z)?true:false); }
function XY(e,v) { var z=agent('msie')?[event.clientX+document.body.scrollLeft,event.clientY+document.documentElement.scrollTop]:[e.pageX,e.pageY]; return(z[zero(v)]); }
function XYwin(v) { var z=agent('msie')?[document.body.clientHeight,document.body.clientWidth]:[window.innerHeight,window.innerWidth]; return(!isNaN(v)?z[v]:z); }
function zero(v) { v=parseInt(v); return(!isNaN(v)?v:0); }
 
/* PLUGIN */
 
var maxValue={'h':360,'s':100,'v':100}, HSV={0:360,1:100,2:100};
var hSV=165, wSV=162, hH=163, slideHSV={0:360,1:100,2:100}, zINDEX=15, stop=1;
var column   = '';
var imageObj = '';
if (!document.all) {
 (function(){
  var events = ["mousedown", "mouseover", "mouseout", "mousemove",
                "mousedrag", "click", "dblclick"];  
  for (var i = 0; i < events.length; i++){
   window.addEventListener(events[i], function(e){
    window.event = e;
   }, true);
  }
 }());
}

function HSVslide(d,o,e) {
 
	function tXY(e) { tY=XY(e,1)-ab.y; tX=XY(e)-ab.x; }
	function mkHSV(a,b,c) { return(Math.min(a,Math.max(0,Math.ceil((parseInt(c)/b)*a)))); }
	function ckHSV(a,b) { if(within(a,0,b)) return(a); else if(a>b) return(b); else if(a<0) return('-'+oo); }
	function drag(e) { if(!stop) { if(d!='drag') tXY(e);
	
		if(d=='SVslide') { ds.left=ckHSV(tX-oo,wSV)+'px'; ds.top=(ckHSV(tY-oo,wSV)-5)+'px';
		
			slideHSV[1]=mkHSV(100,wSV,ds.left); slideHSV[2]=100-mkHSV(100,wSV,ds.top); HSVupdate();
 
		}
		else if(d=='Hslide') { var ck=ckHSV(tY-oo,hH), j, r='hsv', z={};
		
			ds.top=(ck-10)+'px'; slideHSV[0]=mkHSV(360,hH,ck);
 
			for(var i=0; i<=r.length-1; i++) { j=r.substr(i,1); z[i]=(j=='h')?maxValue[j]-mkHSV(maxValue[j],hH,ck):HSV[i]; }
 
			HSVupdate(z); $S('SV').backgroundColor='#'+hsv2hex([HSV[0],100,100]);
 
		}
		else if(d=='drag') { ds.left=XY(e)+oX-eX+'px'; ds.top=XY(e,1)+oY-eY+'px'; }
 
	}}
 
	if(stop) { stop=''; var ds=$S(d!='drag'?d:o);
 
		if(d=='drag') { var oX=parseInt(ds.left), oY=parseInt(ds.top), eX=XY(e), eY=XY(e,1); $S(o).zIndex=zINDEX++; }
		else { var ab=absPos($(o)), tX, tY, oo=(d=='Hslide')?2:4; ab.x+=10; ab.y+=22; if(d=='SVslide') slideHSV[0]=HSV[0]; }
 
		document.onmousemove=drag; document.onmouseup=function(){ stop=1; document.onmousemove=''; document.onmouseup=''; }; drag(e);
 
	}
}
 
function HSVupdate(v) {	v=hsv2hex(HSV=v?v:slideHSV);
	$('plugHEX').innerHTML=v;
	$S('plugCUR').background='#'+v;
	$S(column).background='#'+v;
	imageObj.value= v;
	vvv = rgb2hsv(str2intRGB(v));
	if (vvv[2] < 50) {
		$S(column).color = '#fff';
	} else {
		$S(column).color = '#000';
	}
	return(v);
}
 
function loadSV() { var z='';
 
	for(var i=hSV; i>=0; i--) z+="<div style=\"BACKGROUND: #"+hsv2hex([Math.round((360/hSV)*i),100,100])+";\"><br /><\/div>";
	
	$('Hmodel').innerHTML=z;
	
}
 
/* CONVERSIONS */
 
function toHex(v) { v=Math.round(Math.min(Math.max(0,v),255)); return("0123456789ABCDEF".charAt((v-v%16)/16)+"0123456789ABCDEF".charAt(v%16)); }
function rgb2hex(r) { return(toHex(r[0])+toHex(r[1])+toHex(r[2])); }
function hsv2hex(h) { return(rgb2hex(hsv2rgb(h))); }	
function hsv2rgb(r) { // easyrgb.com/math.php?MATH=M21#text21
 
    var R,B,G,S=r[1]/100,V=r[2]/100,H=r[0]/360;
 
    if(S>0) { if(H>=1) H=0;
 
        H=6*H; F=H-Math.floor(H);
        A=Math.round(255*V*(1.0-S));
        B=Math.round(255*V*(1.0-(S*F)));
        C=Math.round(255*V*(1.0-(S*(1.0-F))));
        V=Math.round(255*V); 
 
        switch(Math.floor(H)) {
 
            case 0: R=V; G=C; B=A; break;
            case 1: R=B; G=V; B=A; break;
            case 2: R=A; G=V; B=C; break;
            case 3: R=A; G=B; B=V; break;
            case 4: R=C; G=A; B=V; break;
            case 5: R=V; G=A; B=B; break;
 
        }
 
        return([R?R:0,G?G:0,B?B:0]);
 
    }
    else return([(V=Math.round(V*255)),V,V]);
 
}
function rgb2hsv(CC)
{
    var r=CC[0];
	var g=CC[1];
	var b=CC[2];

	h = s = v = 0;
	if ( r >= g)   cmax = r; else cmax = g;
	if ( b > cmax) cmax = b;
	if ( r <= g)   cmin = r; else cmin = g;
	if ( b < cmin) cmin = b;
	v = cmax;
	c = cmax - cmin;
	if (cmax == 0) s = 0; else s = Math.round(c/cmax * 255);
	if (s != 0)
	{
		if (r == cmax)
		{
			h = (g - b)/c;
		}else{
			if (g == cmax)
			{
				h = 2 + (b - r)/c;
			}else{
				if (b == cmax) h = 4 + ( r - g)/c;
			}
		}
		h = h * 60;
		if (h < 0) h = h + 360;
	}
	return ([Math.round(h/100*100),Math.round(s/255*100),Math.round(v/255*100)]);
}
function str2intRGB(str) {
var strRGB = (str == '') ? "0" : str;
	strRGB = strReserv(strRGB,6,16,true);
	intR = parseInt(strRGB.substr(0,2),16);
	intG = parseInt(strRGB.substr(2,2),16);
	intB = parseInt(strRGB.substr(4,2),16);
	return ([intR,intG,intB]);
}
function strReserv(str,keta,tp,comp) {
var ret = '';
var i = 0;
	/* 数値文字列以外 除去 */
	for (i = 0; str.length > i; i++) {
		if (!isNaN(parseInt(str.charAt(i),tp))) ret += str.charAt(i);
	}

	if (ret.length == 0) { ret = '0';}
	if (ret.length > keta) {
		ret = ret.substr(0,keta);
	} else if (keta > ret.length && comp) {
		for (i = ret.length; keta > i; i++) { ret = "0" + ret;}
	}
	return ret;
}

function picker(id) {

	var vstr;
	var str = '<div class="container"><div id="plugin" onmousedown="HSVslide(\'drag\',\'plugin\',event)" style="TOP: 37px; LEFT: 25px; Z-INDEX: 20;"><div id="plugCUR"></div><div id="plugHEX" onmousedown="stop=0; setTimeout(\'stop=1\',100);">333333</div><div id="plugCLOSE" onmousedown="toggle(\'plugin\')">X</div><br><div id="SV" onmousedown="HSVslide(\'SVslide\',\'plugin\',event)" title="Saturation + Value"><div id="SVslide" style="TOP: -4px; LEFT: -4px;"><br /></div></div><form id="H" onmousedown="HSVslide(\'Hslide\',\'plugin\',event)" title="Hue"><div id="Hslide" style="TOP: -7px; LEFT: -8px;"><br /></div><div id="Hmodel"></div></form><div id="plugOK" onmousedown="toggle(\'plugin\')">OK</div></div>';
	var obj = document.getElementById('showPicker');
	obj.innerHTML = str;

	if (imageObj.value) {
		vstr = imageObj.value;
	} else {
		vstr = '333333';
	}
	vvv = rgb2hsv(str2intRGB(vstr));
	loadSV();
	$S('plugin').display='block';
	$S('plugin').top  = (XY(event,1)-10) + 'px';
	$S('plugin').left = (XY(event)+80) + 'px';
	$S('SVslide').top=((100-vvv[2])/100*166-5)+'px';
	$S('SVslide').left=(vvv[1]/100*166-5)+'px';
	if (vvv[0] == 0) {vvv[0] = 360;}
	$S('Hslide').top=((100-vvv[0]/3.6)/100*166-7)+'px';
	$S('SV').backgroundColor='#'+hsv2hex([vvv[0],100,100]);
	column = id;
	HSVupdate(vvv);

}


function formIndexMv(obj, clmname, mode)
{
	//選択された項目番号
	var okBit  = 0;
	var chobj  = obj[clmname];
	var hidObj = document.getElementById(clmname + '_hiddens');
	var index  = chobj.selectedIndex;
	//前の項目番号
	if (mode == 'up')  {
		var indexBefore = index - 1;
		if (index > 0) {
			okBit = 1;
		}
	} else {
		var indexBefore = index + 1;
		if (index < (chobj.options.length - 1)) {
			okBit = 1;
		}
	}
	if (okBit) {
		//表示されているテキスト
		var str1 = chobj.options[index].text;
		var str2 = chobj.options[indexBefore].text;
		var val1 = chobj.options[index].value;
		var val2 = chobj.options[indexBefore].value;
		chobj.options[index].text = str2;
		chobj.options[indexBefore].text = str1;
		chobj.options[index].value = val2;
		chobj.options[indexBefore].value = val1;
		chobj.selectedIndex = indexBefore;
		hidObj.childNodes[index].name = clmname + '_chid_' + val2;
		hidObj.childNodes[indexBefore].name = clmname + '_chid_' + val1;
	}
}

function showIndex(obj)
{
	for (var i = 1; i <= obj.options.length; i++) {
		alert(obj.options[(i - 1)].value + ': ' + obj.options[(i - 1)].text);
	}
}
function formChangeSelect(obj, clmname, clmnameBase, mode)
{
	if (mode == 'up')  {
		var chobj      = obj[clmname];
		var chobjAfter = obj[clmnameBase];
	} else {
		var chobj      = obj[clmnameBase];
		var chobjAfter = obj[clmname];
	}
	if (chobj.selectedIndex >= 0) {
		//表示されているテキスト
		var index  = chobj.selectedIndex;
		var str    = document.createTextNode(chobj.options[index].text);
		var val    = chobj.options[index].value;
		var hidObj = document.getElementById(clmnameBase + '_hiddens');
		var ele    = document.createElement('option');
		ele.appendChild(str);
		ele.value = val;
		chobjAfter.appendChild(ele);
		var index2 = chobjAfter.options.length;
		chobj.removeChild(chobj.options[index]);
		var index3 = chobj.options.length;
		if (mode == 'up')  {
			var ele2 = document.createElement('input');
			ele2.type = 'hidden';
			ele2.name = clmnameBase + '_chid_' + val;
			ele2.value = index2;
			hidObj.appendChild(ele2);
		} else {
			for (var i = 0;i <= (hidObj.childNodes.length - 1); i++) {
				if (hidObj.childNodes[i].name == clmnameBase + '_chid_' + val) {
					var remIndex = i;
				}
			}
			hidObj.removeChild(hidObj.childNodes[remIndex]);
			for (var i = 0;i < hidObj.childNodes.length; i++) {
				hidObj.childNodes[i].value = i + 1;
			}
		}
		chobjAfter.size = index2;
		chobj.size      = index3;
	}
}

function getTag(obj, clmname, type, option)
{
	var chobj = obj[clmname];
	chobj.focus();
	var t  = '';
	var at = '';
	if (!document.all) {
		var s = chobj.selectionStart;
		if (s != 0 || s == '0') {
			e = chobj.selectionEnd;
			var t = chobj.value.substring(s,e);
		}
		var st = chobj.value.substring(0,s)
		var et = chobj.value.substring(e,chobj.value.length);
	} else {
		if (type != 'image') {
			documentobj = document;
		} else {
			documentobj = window.opener.document;
		}
		var t = documentobj.selection.createRange().text;
	}
	if (t) {
		if (type == 'bold') {
			at = '<b>' + t + '</b>';
		} else if (type == 'italic') {
			at = '<i>' + t + '</i>';
		} else if (type == 'strike') {
			at = '<s>' + t + '</s>';
		} else if (type == 'under') {
			at = '<u>' + t + '</u>';
		} else if (type == 'size') {
			at = '<span style="font-size: ' + option + ';">' + t + '</span>';
		} else if (type == 'align') {
			at = '<div style="text-align: ' + option + '">' + t + '</div>';
		} else if (type == 'anchor') {
			var url = prompt('url入力','http://');
			if (url) {
				at = '<a href="' + url + '" target="_blank">' + t + '</a>';
			} else {
				at = t;
			}
		} else if (type == 'color') {
			at = '<span style="color:' + option + ';">' + t + '</span>';
		} else if (type == 'image') {
			at = '<img src="' + option + '" alt="' + t + '" />';
		}
		if (!document.all) {
			chobj.value = st + at + et;
		} else {
			documentobj.selection.createRange().text = at;
		}
	} else if (type == 'image') {
		at = '<img src="' + option + '" alt="" />';
		if (!document.all) {
			chobj.value = st + at + et;
		} else {
			documentobj.selection.createRange().text = at;
		}
	} else if (type == 'emoji') {
		at = '[emoji' + option + ']';
		if (!document.all) {
			chobj.value = st + at + et;
		} else {
			documentobj.selection.createRange().text = at;
		}
	}
}



