// -----------------------
// private functions
function isShowElementByObject(elm)
{
	if (!elm) return false;
	return ((elm.style.display == "") || (elm.style.display == "block"));
}

function showHideElementByObject(elm)
{
	if (!elm) return;
	elm.style.display = (isShowElementByObject(elm)) ? "none" : "block";
}

function showHideElementByObject2(elm)
{
	if (!elm) return;
	elm.style.display = (isShowElementByObject(elm)) ? "none" : "";
}

function checkBoxDisable(chk, checked)
{
    if (!chk) return;
    chk.disabled = checked;
    chk.parentElement.disabled = checked;
}
// -----------------------

// -----------------------
// public functions
function SwitchWindowPane2(id)
{
	var closeID = id + '_Close';
	var openID = id + '_Open';
	var conditionID = id + '_Condition';
	var isShow = isShowElement(openID);

	var elm = getElement(id);
	elm.className = ((!isShow) ? "open" : "close");
	showHideElement(openID);
	showHideElement(closeID);
	
	elm = getElement(conditionID);
	elm.value = ((!isShow) ? "true" : "false");
}

function SwitchHintPane(id)
{
	var closeID = id + '_Close';
	var openID = id + '_Open';
	var isShow = !isShowElement(closeID);

	if (isShow) {
		hideElement(openID);
		showElement(closeID);
	} else {
		hideElement(closeID);
		showElement(openID);
	}
}

function SwitchGraph(id)
{
	var graph = getElement(id + "_graph");
	if (graph)
	{
        if (graph.length)
        {
            for (i=0; i<graph.length; i++)
            {
                showHideElementByObject2(graph[i]);
            }
        }
        else
        {
            showHideElementByObject2(graph);
        }
    }
    var lbl = getElement(id + "_graph_lbl");
    if (lbl)
    {
        if (lbl.length)
        {
            for (i=0; i<lbl.length; i++)
            {
                ShowHideGraphLabel(lbl[i]);
            }
        }
        else
        {
            ShowHideGraphLabel(lbl);
        }
    }
}

function ShowHideGraphLabel(elm)
{
	if (!elm) return;
	var visible = isShowElementByObject(elm);
	if (visible) {
		elm.style.display = "none";
	} else {
		elm.style.display = "";
	}
	// check if all visible elements has value?
	// get parent's children, that is all number nodes.
	var hasValue = false;
	var children = elm.parentNode.childNodes;
	var i;
	for (i = 0; i < children.length; i++) {
		var child = children[i];
		if (!child.id) continue;
		if (BlogUtil_EndsWith(child.id, '_graph_lbl')) {
		    if (child.style.display == "none") continue;
		    if (!child.firstChild) continue;
			var s = child.firstChild.nodeValue;
			s = BlogUtil_TrimBlanks(s);
			
			if (s && s !== '' && s !== '0') {
			    hasValue = true;
			    break;
			}
		}
	}
	
	// toggle label
	for (i = 0; i < children.length; i++) {
		var child = children[i];
		if (!child.id) continue;
		if (BlogUtil_EndsWith(child.id, '_graph_lbl')) {
		    if (child.style.display == "none") continue;
		    if (!child.firstChild) continue;
		    child.style.visibility = hasValue ? 'visible' : 'hidden';
		}
	}
}

function BlogUtil_TrimBlanks(s) {
	s = BlogUtil_TrimStart(s, '&nbsp;');
	s = BlogUtil_TrimStart(s, ' ');
	s = BlogUtil_TrimStart(s, String.fromCharCode(0xA0));
	s = BlogUtil_TrimStart(s, '\t');
	s = BlogUtil_TrimStart(s, '\r');
	s = BlogUtil_TrimStart(s, '\n');

	s = BlogUtil_TrimEnd(s, '&nbsp;');
	s = BlogUtil_TrimEnd(s, ' ');
	s = BlogUtil_TrimEnd(s, String.fromCharCode(0xA0));
	s = BlogUtil_TrimEnd(s, '\t');
	s = BlogUtil_TrimEnd(s, '\r');
	s = BlogUtil_TrimEnd(s, '\n');
	
	return s;
}

function BlogUtil_StartsWith(s, test) {
	return (s.substring(0, test.length) == test);
}

function BlogUtil_EndsWith(s, test) {
	return (s.substring(s.length-test.length) == test);
}

function BlogUtil_TrimStart(s, remove) {
    if (!s) return false;
	while (s.length >= remove.length) {
		if (!BlogUtil_StartsWith(s, remove)) break;
		s = s.substring(remove.length);
	}
	return s;
}
function BlogUtil_TrimEnd(s, remove) {
    if (!s) return false;
	while (s.length >= remove.length) {
		if (!BlogUtil_EndsWith(s, remove)) break;
		s = s.substring(0, s.length-remove.length);
	}
	return s;
}

function RolePermissionEnable(chk, ctrlName)
{
    var name = chk.id;
    var prefix = name.substring(0, name.length - ctrlName.length);
    var selected = "inSelected";
    var enableLogin = "inEnableLogin";
    var enableSection = "inEnableSection";
    var enableStatistics = "inEnableStatistics";
    var enableSystem = "inEnableSystem";
    var enableUser = "inEnableUser";

    var chkSelected = getElement(prefix + selected);
    if (chkSelected != null) chkSelected.checked = true;
 
    if (ctrlName != enableLogin) return false;
    var chkSection = getElement(prefix + enableSection);
    var chkStatistics = getElement(prefix + enableStatistics);
    var chkSystem = getElement(prefix + enableSystem);
    var chkUser = getElement(prefix + enableUser);
    
    checkBoxDisable(chkSection, !chk.checked);
    checkBoxDisable(chkStatistics, !chk.checked);
    checkBoxDisable(chkSystem, !chk.checked);
    checkBoxDisable(chkUser, !chk.checked);

    if (chk.checked) return false;
    chkSection.checked = false;
    chkStatistics.checked = false;
    chkSystem.checked = false;
    chkUser.checked = false;
}

function BlogPermissionEnable(chk, ctrlName)
{
    var name = chk.id;
    var prefix = name.substring(0, name.length - ctrlName.length);
    var selected = "inSelected";
    var enableEntryView = "inEnableEntryView";
    var enableEntryPost = "inEnableEntryPost";
    var enableCommentPost = "inEnableCommentPost";
    var enableCommentEdit = "inEnableCommentEdit";
    var enableTrackbackEdit = "inEnableTrackbackEdit";
    var enableModerate = "inEnableModerate";
   
    var chkSelected = getElement(prefix + selected);
    if (chkSelected != null) chkSelected.checked = true;
 
    var chkEntryView = getElement(prefix + enableEntryView);
    var chkEntryPost = getElement(prefix + enableEntryPost);
    var chkCommentPost = getElement(prefix + enableCommentPost);
    var chkCommentEdit = getElement(prefix + enableCommentEdit);
    var chkTrackbackEdit = getElement(prefix + enableTrackbackEdit);
    var chkModerate = getElement(prefix + enableModerate);

    //記事の閲覧
    if (ctrlName == enableEntryView)
    {
        checkBoxDisable(chkEntryPost, !chk.checked);
        checkBoxDisable(chkCommentPost, !chk.checked);
        checkBoxDisable(chkCommentEdit, true);
        checkBoxDisable(chkTrackbackEdit, true);
        checkBoxDisable(chkModerate, true);
        if (!chk.checked)
        {
            chkEntryPost.checked = false;
            chkCommentPost.checked = false;
            chkCommentEdit.checked = false;
            chkTrackbackEdit.checked = false;
            chkModerate.checked = false;
        }
    }
    
    //記事の投稿
    if (ctrlName == enableEntryPost)
    {
        checkBoxDisable(chkCommentEdit, !chk.checked);
        checkBoxDisable(chkTrackbackEdit, !chk.checked);
        checkBoxDisable(chkModerate, true);
        if (!chk.checked)
        {
            chkCommentEdit.checked = false;
            chkTrackbackEdit.checked = false;
            chkModerate.checked = false;
        }
    }
    
    //コメント編集
    if (ctrlName == enableCommentEdit)
    {
        if (chk.checked)
        {
            if (chkTrackbackEdit.checked) checkBoxDisable(chkModerate, false);
        }
        else
        {
            checkBoxDisable(chkModerate, true);
            chkModerate.checked = false;
        }
    }
    
    //トラックバック編集
    if (ctrlName == enableTrackbackEdit)
    {
        if (chk.checked)
        {
            if (chkCommentEdit.checked) checkBoxDisable(chkModerate, false);
        }
        else
        {
            checkBoxDisable(chkModerate, true);
            chkModerate.checked = false;
        }
    }
}

function BlogAnonymousPermissionEnable(chk, ctrlName)
{
    var name = chk.id;    
    var prefix = name.substring(0, name.length - ctrlName.length);
    var enableEntryView = "inEnableEntryView";
    var enableCommentPost = "inEnableCommentPost";
    var selected = "inSelected";
    
    getElement(prefix + selected).checked = true;
    
    if (ctrlName != enableEntryView) return false;
        
    var chkCommentPost = getElement(prefix + enableCommentPost);
    checkBoxDisable(chkCommentPost, !chk.checked);
    if (!chk.checked) chkCommentPost.checked = false;
}

function ForumPermissionEnable(chk, ctrlName)
{
    var name = chk.id;
    var prefix = name.substring(0, name.length - ctrlName.length);
    var enableEntryView = "inEnableEntryView";
    var enableEntryPost = "inEnableEntryPost";
    var enableTrackbackEdit = "inEnableTrackbackEdit";
    var enableModerate = "inEnableModerate";
    var selected = "inSelected";
    
    var chkSelected = getElement(prefix + selected);
    if (chkSelected != null) chkSelected.checked = true;
 
    var chkEntryView = getElement(prefix + enableEntryView);
    var chkEntryPost = getElement(prefix + enableEntryPost);
    var chkTrackbackEdit = getElement(prefix + enableTrackbackEdit);
    var chkModerate = getElement(prefix + enableModerate);
 
    //記事の閲覧
    if (ctrlName == enableEntryView)
    {
        checkBoxDisable(chkEntryPost, !chk.checked);
        checkBoxDisable(chkTrackbackEdit, true);
        checkBoxDisable(chkModerate, true);
        if (!chk.checked)
        {
            chkEntryPost.checked = false;
            chkTrackbackEdit.checked = false;
            chkModerate.checked = false;
        }
    }
    
    //記事の投稿
    if (ctrlName == enableEntryPost)
    {
        checkBoxDisable(chkTrackbackEdit, !chk.checked);
        checkBoxDisable(chkModerate, true);
        if (!chk.checked)
        {
            chkTrackbackEdit.checked = false;
            chkModerate.checked = false;
        }
    }

    //トラックバック編集
    if (ctrlName == enableTrackbackEdit)
    {
        checkBoxDisable(chkModerate, !chk.checked);
        if (!chk.checked) chkModerate.checked = false;
    }
}

function ForumAnonymousPermissionEnable(chk, ctrlName)
{
    var name = chk.id;    
    var enableEntryView = "inEnableEntryView";
    var enableEntryPost = "inEnableEntryPost";
    var prefix = name.substring(0, name.length - ctrlName.length);
    var selected = "inSelected";
    
    getElement(prefix + selected).checked = true;
    
    if (ctrlName != enableEntryView) return false;
        
    var chkEntryPost = getElement(prefix + enableEntryPost);
    checkBoxDisable(chkEntryPost, !chk.checked);
    if (!chk.checked) chkEntryPost.checked = false;
}

function SelectAllItem(chk)
{
    SelectAllItem("_inSelected");
}

function SelectAllItem(chk, suffix)
{
    var name = chk.id;
    
    var exists = true;
    var index = 1;
    while (exists)
    {
        var id = name.substring(0, name.length - suffix.length - 1) + index + suffix;
        var chkItem = getElement(id);
        if (chkItem == null)
        {
            id = "item" + index + suffix;
            chkItem = getElement(id);
            if (chkItem == null)
            {
                return false;
            }
        }
        if (!chkItem.disabled)
        {
            chkItem.checked = chk.checked;
        }
        index = index + 1;
    }
}

function SelectItem2(obj, ctrlName)
{
    if (event && event.keyCode) {
        if (event.keyCode == 9) return;
    }
    SelectItem(obj, ctrlName);
}

function SelectItem(obj, ctrlName)
{
    var name = obj.id;
    var prefix = name.substring(0, name.length - ctrlName.length);
    var selected = "inSelected";
    var chkSelected = getElement(prefix + selected);
    if (chkSelected == null) return false;
    chkSelected.checked = true;
}

function ChangeTextBoxEnable(check, id)
{
    var elm = getElement(id);
    if (elm == null) return;
    elm.disabled = !check;
    elm.style.backgroundColor = check ? '#FFFFFF' : '#D4D0C8';
}

function ChangeEnable(check, id)
{
    var elm = getElement(id);
    if (elm == null) return;
    elm.disabled = !check;
    if (elm.parentElement != null) elm.parentElement.disabled = false;
}

function LayoutChanged(rdoID, imgID)
{
    var rdo = getElement(rdoID);
    if (rdo == null) return;
	var selected = null;

	if (rdo.length)
	{
		for (i = 0; i < rdo.length; i++)
		{
			if (rdo[i].checked) selected = rdo[i].value;
		}
	} 
	else 
	{
		if (rdo.checked) selected = rdo.value;
	}
	if (selected != null)
	{
		getElement(imgID).src = preloadImages[selected].src;
    }

	return (selected != null);
}

function LayoutPreview(rdoID)
{
    var rdo = getElement(rdoID);
    if (rdo == null) return;
    for (i=0; i<rdo.length; i++)
    {
        if (rdo[i].checked) 
        {
            value = rdo[i].value;
            break;
        }
    }
    return escape(value);
}

// -----------------------