var open_speed  = 30;
var close_speed = 40;
var open_timer_speed  = 20;
var close_timer_speed = 20;
var enable_flg = 0;
var target_h = 0;
var timer = null;
var close_timer = null;

/* -----------------------------------------------------------------------*/
document.getElementsByClassName = function (className) {
    var i, j, eltClass;
//    var AllObj   = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
    var AllObj   = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all;
    var ClassObj = new Array();
    for (i = 0; i < AllObj.length; i++) {
        eltClass = AllObj[i].className.split(/\s+/);
        for (j = 0; j < eltClass.length; j++) {
            if (eltClass[j] == className) {
                ClassObj.push(AllObj[i]);
                break;
            }
        }
    }
    return ClassObj;
}
/* -----------------------------------------------------------------------*/
function AddEvent(targetObj, eventName, eventHandler) {
    if (document.addEventListener){
        targetObj.addEventListener(eventName, eventHandler, false);
        return false;
    }
    if (document.attachEvent){
        targetObj.attachEvent("on"+eventName, eventHandler);
    }
}


/* -----------------------------------------------------------------------*/
AddEvent(window, "load", function() {
    var targetObj = document.getElementsByClassName('slidemenu');
    for (var i=0; i<targetObj.length; i++) {
        AddEvent(targetObj[i], "click", function(){
            if (enable_flg == 1) return false;
            enable_flg = 1;
            if (window.createPopup){
                target_id = event.srcElement.id.substr(5,event.srcElement.id.length);
            }else{
                target_id = this.id.substr(5,this.id.length);
            }
            var MenuObj = document.getElementsByClassName('slidemenu');
            for (var i=0; i<MenuObj.length; i++) {
                var menu_id = MenuObj[i].id.substr(5,MenuObj[i].id.length);
                if (menu_id != target_id){
                   var Obj = document.getElementById(menu_id);
                   if (Obj) {
                       if(Obj.offsetHeight > 0) {
                          if (target_h == 0){
                             var Menu_size = getElementSize(Obj);
                             target_h = Menu_size.oh;
                          }
                          Obj.style.display = 'none';
                          Obj.style.height = target_h + 'px';
                          clearTimeout(timer);
                          timer = null;
                          /*
                          if(timer == null) {
                              menu_close(Obj, Menu_size.oh, Menu_size.oh, close_speed);
                          }
                          */
                       }
                   }
                }
            }
            var targetObj = document.getElementById(target_id);
            if (targetObj){
                targetObj.style.overflow = 'hidden';
                var targetObj_size = getElementSize(targetObj);
                if(targetObj.offsetHeight == 0) {
                    targetObj.style.height = '1px';
                    targetObj.style.display = 'block';
                    target_h = targetObj_size.oh;
                    if(timer == null) {
                        menu_down(targetObj, targetObj_size.oh, 1, open_speed);
                    }
                }else{
                    if(timer == null) {
                        menu_up(targetObj, targetObj_size.oh, targetObj_size.oh, close_speed);
                    }
                }
            }
            enable_flg = 0;
            return false;
        });
        target_id = targetObj[i].id.substr(5,targetObj[i].id.length);
        var Obj = document.getElementById(target_id);
        if (Obj) {
            Obj.style.display = 'none';
            var targetClass = targetObj[i].className.split(/\s+/);
            for (j=0; j<targetClass.length; j++) {
                if (targetClass[j] == 'open') {
                    Obj.style.display = 'block';
                }
            }
        }
    }
});


/* -----------------------------------------------------------------------*/
function getElementSize(elm) {
    var oSize = new Object();
    var elm2 = elm.cloneNode(true);

    if(-1 == navigator.userAgent.indexOf('MSIE 5')){
        elm2.style.padding = '0';
        elm2.style.border = '0';
    }
    elm2.style.display = 'block';
//    elm2.style.position = 'absolute';

    elm.parentNode.appendChild(elm2);
    oSize.oh = elm2.clientHeight;
    oSize.ow = elm2.clientWidth;
    elm.parentNode.removeChild(elm2);

    return oSize;
}

/* -----------------------------------------------------------------------*/
function menu_up (obj,ori,now_h,speed) {
    var moveValue = speed + 3;
    now_h = now_h - moveValue;
    if(now_h > 0) {
        obj.style.height = now_h + 'px';
        timer = window.setTimeout(function(){ menu_up(obj,ori,now_h,speed) }, close_timer_speed);
    } else {
        obj.style.height = ori + 'px';
        obj.style.display = 'none';
        target_h = 0;
        clearTimeout(timer);
        timer = null;
    };
    return false;
}

/* -----------------------------------------------------------------------*/
function menu_down (obj,limit, now_h, slow) {
    var distance = limit-now_h;
    var moveValue = Math.max(Math.floor(distance / slow),slow);
    now_h = (now_h+moveValue);
    if(now_h < limit) {
        obj.style.height = now_h + 'px';
        clearTimeout(timer);
        timer = setTimeout(function(){ menu_down(obj,limit, now_h, slow) }, open_timer_speed);
    } else {
        obj.style.height = limit + 'px';
        clearTimeout(timer);
        timer = null;
    };
    return false;
}

/* -----------------------------------------------------------------------*/
function menu_close (obj,ori,now_h, speed) {
    var moveValue = speed + 3;
    now_h = now_h-moveValue;
    if(now_h > 0) {
        obj.style.height = now_h + 'px';
        clearTimeout(timer);
        close_timer = window.setTimeout(function(){ menu_up(obj,ori,now_h, close_timer_speed) }, 10);
    } else {
        obj.style.height = ori + 'px';
        obj.style.display = 'none';
        clearTimeout(close_timer);
        close_timer = null;
    };
    return false;
}
