function showDiv(divId)
{
    var elem = document.getElementById(divId);
    if (elem) {
        elem.style.display = 'block';
    } else {
        alert('Javascript error: cannot show element: ' + divId);
    }
}

function hideDiv(divId)
{
    var elem = document.getElementById(divId);
    if (elem) {
        elem.style.display = 'none';
    } else {
        alert('Javascript error: cannot hide element: ' + divId);
    }
}

function toggleDiv(divId)
{
    var elem = document.getElementById(divId);
    if (elem) {
        if (elem.style.display=='block') {
            elem.style.display = 'none';
        } else {
            elem.style.display = 'block';
        }
    } else {
        alert('Javascript error: cannot hide element: ' + divId);
    }
}

function copyDiv(sourceDivId, targetDivId)
{
    var elem1 = document.getElementById(sourceDivId);
    var elem2 = document.getElementById(targetDivId);
    if (elem1 && elem2) {
        elem2.innerHTML = elem1.innerHTML;
    } else {
        alert('Javascript error: cannot copy layer');
    }
}

function clearDiv(divId)
{
    var elem = document.getElementById(divId);
    if (elem) elem.innerHTML = '';
}

function setStyleProperty(elemID, attribute, value)
{
    var elem = document.getElementById(elemId);
    if (elem) elem.style[attribute] = value;
}

function getElementPosition(elemID)
{
    var offsetTrail = document.getElementById(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 &&
        typeof document.body.leftMargin != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
    }
    return {left:offsetLeft, top:offsetTop};
}


function rand(intMin, intMax)
{
    return intMin + Math.floor(Math.random()*(intMax+1));
}

function popupWindow(url,width,height,options)
{
    var randomName = Math.round(Math.random()*1000);
    var left = parseInt((screen.availWidth/2) - (width/2));
    var top = parseInt((screen.availHeight/2) - (height/2));
    var default_options = 'height='+height+',width='+width+',left='+left+',top='+top+',screenX='+left+',screenY='+top;
    //toolbar=no,location=no,directories=no,resizable=no,status=no,
    //alert(default_options + ',' + options);

    var new_options = default_options;
    if (options!='') { new_options = (new_options + ',' + options); }
    var winHandle = window.open(url, 'popup'+randomName, new_options);
    winHandle.focus();
}

function centerPopupWindow(url, windowName, width, height, options) {
    var windowHandle;
    var left = (screen.width-width)/2;
    var top = (screen.height-height)/3;
    if (options!='') {
        param = "," + options;
    } else {
        param = "";
    }
    windowHandle = window.open(url, windowName, "width="+width+",height="+height+",left="+left+",top="+top+param);
    windowHandle.focus();
}

/*****************************************************/

function getEventKeycode(ev)
{
    var keycode;
    if (window.event)
        keycode = window.event.keyCode;
    else
        if (ev)
            keycode = ev.which;
        else
            return null;
    return keycode;
}

function submitOnEnter(formID, ev)
{
    // onKeyPress="return submitenter(this,event)"
    var keycode = getEventKeycode(ev);

    /*
    if (window.event)
        keycode = window.event.keyCode;
    else
        if (ev)
            keycode = ev.which;
        else
            return true;
    */

    if (keycode == 13) {
       document.getElementById(formID).submit();
       return false;
    } else {
       return true;
    }
}

function isKeyPressed(ev, checkKeyCode)
{
    var keycode = getEventKeycode(ev);
    if (keycode == checkKeyCode) {
       return true;
    } else {
       return false;
    }
}

function isEnterPressed(ev)
{
    return isKeyPressed(ev, 13);
}

/*****************************************************/

function togglePlusBlock(blockId, imagePlus, imageMinus)
{
    var elem = document.getElementById(blockId);
    if (elem.style.display=='none') {
        expandPlusBlock(blockId, imageMinus);
    } else {
        collapsePlusBlock(blockId, imagePlus);
    }
}

function expandPlusBlock(blockId, imageMinus)
{
    var elem = document.getElementById(blockId);
    var switchImg = document.getElementById(blockId + '_switch');
    elem.style.display = 'block';
    switchImg.src = imageMinus;
}

function collapsePlusBlock(blockId, imagePlus)
{
    var elem = document.getElementById(blockId);
    var switchImg = document.getElementById(blockId + '_switch');
    elem.style.display = 'none';
    switchImg.src = imagePlus;
}

/***************************************************************************/

/**
 * Month: 0..11
 */
function daysInMonth(month, year)
{
	//var d = new Date(year, month, 0);
	//return d.getDate();
	return 32 - new Date(year, month, 32).getDate();

}

/***************************************************************************/

/*
Arg1: float ploint cutoff = 2 decimal places
Arg2: decimal separator = ','
Arg3: thousands separator = ''

Example: (123456789.12345).formatMoney(2, '.', ',');
         alert(new Number(value).formatMoney(2,',',' '));
*/

Number.prototype.formatMoney = function(c, d, t) {
	var n = this, c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
	return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};

/***************************************************************************/

function doubleConfirmation(text, againText)
{
    if (confirm(text) && confirm(againText)) {
        return true;
    } else {
        return false;
    }
}