/**
* Arie Nugraha 2007
* this file need prototype. js
* library to works
* 
* UI related functions
*/

/* change the style of submenu link */
var setSubmenuClass = function(strMenuID, strClassName)
{
    var defaultClass = 'subMenuItem';
    var elementObj = $(strMenuID);
    // get current element class name
    previousClass = elementObj.className;

    // get other element that already have name 'strClassName'
    var prevElemnts = $$('.' + strClassName);
    // iterate
    prevElemnts.each(function(elmnt) {
        elmnt.className = defaultClass;
        });

    // change the class name specified in function argument
    elementObj.className = strClassName;
}

/* change the style of circulation tab */
var setTabClass = function(objTab)
{
    var defaultClass = 'tab';
    var tabSelectedClass = 'tabSelected';
    var elementObj = $(objTab);
    // remove selected class from other tabs
    var otherTab = $('mainContent').select('input.tab');
    otherTab.each( function (tb) {
            tb.removeClassName(tabSelectedClass);
        });
    // add class to current tab object
    elementObj.addClassName(tabSelectedClass);
}

/* color of highlighted row */
var strRowColor = '#64ff64';
/* color of highlighted row based on checkbox */
var strRowSelColor = '#ffb865';

/* highlight the selected row */
var highlightRow = function(strRowID)
{
    // get the descendants TD of row
    var descElmnt = $(strRowID).immediateDescendants();
    // iterate TD and set style for each of it
    descElmnt.each(function(elmnt) {
        if (elmnt.hasClassName('cbChecked')) {
            return;
        }

        elmnt.setStyle({
            backgroundColor: strRowColor
        });
    });
}

/* unhighlight the selected row */
var unHighlightRow = function(strRowID)
{
    // get the descendants TD of row
    var descElmnt = $(strRowID).immediateDescendants();
    // iterate TD and set style for each of it
    descElmnt.each(function(elmnt) {
        if (elmnt.hasClassName('cbChecked')) {
            return;
        }
        // reset the background color property
        elmnt.setStyle({
            backgroundColor: ''
        });
    });
}

/* highlight the selected row based on checkbox */
var firstChecked = 0;
var secondChecked = 0;
var cbHighlightRow = function(cbObj, strRowID, event)
{
    // color buffer
    var clr = '';
    // check is the checkbox is in checked state
    isChecked = cbObj.checked;
    // get the descendants TD of row
    var descElmnt = $(strRowID).immediateDescendants();

    if (isChecked) {
        clr = strRowSelColor;
        var isShift = event.shiftKey;
        // get cbObj id string
        var idStr = $(cbObj).readAttribute('id');
        // get number from idStr
        var chboxNum = idStr.replace(/[a-z]+/i, '');
        chboxNum = parseInt(chboxNum);
        if (!isShift) {
            firstChecked = chboxNum;
        } else {
            if (firstChecked > 0) {
                secondChecked = chboxNum;
            }
        }
        // check if shift key is pressed
        if (isShift && (firstChecked > 0) && (secondChecked > 0)) {
            var start = Math.min(firstChecked, secondChecked);
            var end = Math.max(firstChecked, secondChecked);
            for (c = start+1; c <= end-1; c++) {
                $('cbRow' + c).click();
            }
            // reset
            firstChecked = 0;
            secondChecked = 0;
        }
        // iterate TD and set style for each of it
        descElmnt.each(function(elmnt) {
            elmnt.addClassName('cbChecked');
            elmnt.setStyle({
                backgroundColor: clr
            });
        });
    } else {
        descElmnt.each(function(elmnt) {
            elmnt.removeClassName('cbChecked');
            elmnt.setStyle({
                backgroundColor: ''
            });
        });
    }
}

/* Javasript function to open new window  */
var openWin = function(strURL, strWinName, intWidth, intHeight, boolScroll)
{
    // variables to determine the center position of window
    var xPos = (screen.width - intWidth)/2;
    var yPos = (screen.height - intHeight)/2;

    var withScrollbar = 'no';

    // if scrollbar allowed
    if (boolScroll) {
        withScrollbar = 'yes';
    }

    window.open(strURL, strWinName, "height=" + intHeight + ",width=" + intWidth +
    ",menubar=no, scrollbars=" + withScrollbar + ", location=no, toolbar=no," +
    "directories=no,resizable=no,screenY=" + yPos + ",screenX=" + xPos + ",top=" + yPos + ",left=" + xPos);
}

/* set iframe content */
var setIframeContent = function(strIframeID, strUrl)
{
    var iframeObj = $(strIframeID);
    if (iframeObj != undefined) {
        iframeObj.src = strUrl;
    }
}

/*
// show object
function showObject(strObjID, intCurrHeight)
{
    var obj = $(strObjID);
    obj.setStyle({height: intCurrHeight + 'px'});
}

// hide object
function hideObject(strObjID)
{
    var obj = $(strObjID);
    obj.setStyle({display: 'none'});
}

var currHeight = 0;
var intervalID = false;
// animated show object
function animateShowObject(strObjID)
{
    currHeight = 0;
    var obj = $(strObjID);
    // get object height
    objHeight = obj.getHeight();
    // set object height
    obj.setStyle({height: '0px'});
    obj.setStyle({display: 'block'});
    intervalID = setInterval("if (currHeight <= objHeight) { showObject('" + strObjID + "', currHeight); currHeight += 10; } " +
        "else { clearInterval(intervalID); }", 30);
}
*/

/* register event for dragger */
/* coding all night just to get this thing works :D */
var resizedObj = new Object();
var dragger = new Object();
var resizedObjHeight = 0;
var offSet = 0;
var evtHandler = {
    mouseMove: function(evt) {
            resizedObj.setStyle( {height: Math.max(100, offSet + Event.pointerY(evt)) + 'px'} );
            return false;
        }
}

var registerDraggerEvent = function(str_dragger_id, str_resized_obj_id)
{
    resizedObj = $(str_resized_obj_id);
    dragger = $(str_dragger_id);
    Event.observe(dragger, 'mousedown', function(evt) {
        offSet = resizedObj.getHeight()-Event.pointerY(evt);
        mouseMoveHandler = evtHandler.mouseMove.bindAsEventListener(evtHandler);
        // register the mouse up event handler
        Event.observe(dragger, 'mouseup', function() {
            // unregister mouse move event handler
            Event.stopObserving(dragger, 'mousemove', mouseMoveHandler);
        });
        // register the mouse out event handler
        Event.observe(dragger, 'mouseout', function() {
            // unregister mouse move event handler
            Event.stopObserving(dragger, 'mousemove', mouseMoveHandler);
        });
        // register the mouse move event handler
        Event.observe(dragger, 'mousemove', mouseMoveHandler);
    });
}

var iframes = [];
/* remove iframe content blocker */
var removeBlockers = function()
{
    // get all iframe in document
    iframes.each(function(iframeObj) {
        if (iframeObj) {
            var iframeURL = iframeObj.src;
            // replace block query param
            iframeURL = iframeURL.sub(/\&block=[^\&]+/, '');
            iframeObj.src = iframeURL;
        }
    });
}

/* blocked iframes registerer */
var registerBlockedIframes = function(arr_iframe_id)
{
    arr_iframe_id.each(function(str_iframe_id) {
        var iframeObj = $(str_iframe_id);
        if (iframeObj) {
            var iframesNum = iframes.length;
            if (iframesNum < 1) {
                iframes[0] = iframeObj;
            } else { iframes[iframes.length] = iframeObj; }
            // block iframes
            iframeObj.src = iframeObj.src + '&block=true';
        }
    });
}

