/* 
  @(#)$Id: cleopcms.js,v 1.5 2011/05/24 15:21:38 leo Exp $

  $Source: /Users/leo/ARCHIVE/CVS/core/src/net/cleop/lib/cms3/cleopcms.js,v $

  Cleop Code
  Copyright (c) 2007-2010 by Christian Parczen, Germany
  mailto:info@cleop.net
  
  All rights reserved.

  @author  Christian Parczen
  @version $Revision: 1.5 $ $Date: 2011/05/24 15:21:38 $
 */

var currentPopup   = null;
var selectionStart = null;

var CONTINUE = true;
var DONE     = false;

/** hide termDate Element */
function removeAfter( id, date)
{
    var term = parseISODate( date);
    if (beforeNow( term)){
        var elem = elemId( id);
        if (elem){
            elem.style.display = "none";
        }
    }
}

/** call onmousedown */
function handleRangeSelection( e, name, ctrlId)
{
    var event = window.event || e;
    //alert( "event:" + event + ";shiftKey:" + event.shiftKey + "; modifiers:" + event.modifiers + ";type:" + event.type);
    var start = selectionStart;
    var elem  = elemId( ctrlId);
    if (   !event.shiftKey 
        || !start
        || start.name != name
        || start == elem
    ){
        selectionStart = elem;
        return CONTINUE;
    }
    if (start != null && start.name != name){
        selectionStart = elem;
        return CONTINUE;
    }
    var checked = !elem.checked;
    //alert( "range:" + start.id + ":" + elem.id + ":" + checked);
    var elems  = window.document.getElementsByName( name);
    var count  = elems.length;
    var iStart = -1;
    var i;
    for (i = 0; i < count; ++i){
        if (elems[i] == start){
            iStart = i;
          break;
        }
    }
    if (iStart < 0){
        //alert( "start not found:" + start.id + " in " + count);
        selectionStart = elem;
        return CONTINUE;
    }
    var iEnd = -1;
    for (i = 0; i < count; ++i){
        if (elems[i] == elem){
            iEnd = i;
          break;
        }
    }
    //selectionStart = null;
    if (iEnd < 0){
        return CONTINUE;
    }
    if (start.checked != checked){
        if (iEnd > iStart){
            ++iStart;
        }else{
            --iStart;
        }
    }
    count = checkRangeEExcl( elems, iStart, iEnd, checked);
    //alert( "range done: " + count);
    return true; //cancelEvent( event);
}

function checkAll( name, checked)
{
    var elems = window.document.getElementsByName( name);
    var count = elems.length;
    for (var i = 0; i < count; ++i){
        elems[i].checked = checked;
    }
    return count;
}

/** call onmouseup */
function handleMouseUpSelectAll( ctrlId, name)
{
    var ctrl     = elemId( ctrlId);
    if (ctrl){
        var checked  = !ctrl.checked;
        //alert( "checkall " + checked);
        //ctrl.checked = checked;
        checkAll( name, checked);
        return DONE;
    }
    //alert( "nicht gefunden: " + ctrlId);
    return CONTINUE;
}

/** call onchange */
function handleSelectAll( ctrlId, name)
{
    var ctrl     = elemId( ctrlId);
    if (ctrl){
        var checked  = ctrl.checked;
        //alert( "checkall " + checked);
        checkAll( name, checked);
        return DONE;
    }
    //alert( "nicht gefunden: " + ctrlId);
    return CONTINUE;
}

function checkRangeEExcl( elems, iStart, iEnd, checked)
{
    //elems[iEnd].checked = !checked;
    if (iStart > iEnd){
        var ii = iStart;
        iStart = iEnd + 1;
        iEnd   = ii;
    }else{
        --iEnd;
    }
    for (var i = iStart; i <= iEnd; ++i){
        elems[i].checked = checked;
    }
    return iEnd + 1 - iStart;
}

function cancelEvent( event)
{
    if (event.preventDefault){
        event.preventDefault();
    }
    return DONE;    
}

function alertLoaded(){
    alert( "cleopcms.js wurde geladen");
}

function showPopupById( popupId)
{
    var node = elemId( popupId);
    return showPopupByNode( node);
}

function showPopupByNode( node)
{
    var cur = currentPopup;
    hidePopup();
    if (!node || node == cur){
        return true;
    }
    node.style.visibility = "visible";
    node.onmouseout       = leavePopup;
    currentPopup          = node;
    return false;
}

function hidePopup()
{
    var node = currentPopup;
    // find active links
    if (!node){
        return true;
    }
    currentPopup = null;
    node.style.visibility = "hidden";
    node.onmouseout       = null;
    return false;
}

function leavePopup( evt)
{
    var event = evt || window.event;
    var node  = currentPopup;
    if (!node || !event){
        return true;
    }
    var target = event.relatedTarget || event.toElement;
    if (!target || target.nodeName == "A"|| target.nodeName == "IMG"){
        return true;
    }
    do{
        if (target == node){
            return true;
        }
        target = target.parentNode;
    } while (target && target.nodeName != "BODY");
    return hidePopup();
}

function movePictureY( controlId, name, min, max, height, stored)
{
    var control = elemId( controlId);
    var image   = elemId( name + "Viewport" + id);
    var y = parseInt( control.value);
    if (max < y){
        y             = max;
        control.value = y;
    }else if (y < min){
        y             = min;
        control.value = y;
    }else if (!(min <= y && y <= max)){
        y = stored;
        if (control.value.length > 0){
            control.value = "";
        }
    }
    image.style.top    = -y + "px";
    image.style.height = (height + y) + "px";
}

function spin( id, inc, min, max)
{
	var element = elemId( id);
	var oldVal  = -1;
	if (element && element.value){
		try{
			oldVal  = parseInt( element.value);
		}catch (exception){
		}
	}
	if (oldVal < 0){
		return false;
	}
    var newVal  = oldVal + inc;
	if (newVal < min){
		element.value = min;
	}else if (newVal > max){
		element.value = max;
	}else if (min <= newVal && newVal <= max){
		element.value = newVal;
	}else if (inc < 0){
		element.value = max;
	}else{
		element.value = min;
	}
	//alert( "spin(" + id + "," + inc + "," + min + "," + max + "):" + oldVal + "->" + element.value);
	return true;
}

function spinSizeY( id, name, inc, height)
{
    var ctrlId = name + "SizeY" + id;
	spin( ctrlId, inc, 1, height);
}

function spinPosY( id, name, inc, height)
{
	var sizeY = -1, posY = -1;
	var sizeCtrl = elemId( name + "SizeY" + id);
	if (sizeCtrl && sizeCtrl.value){
		try{
			sizeY = parseInt( sizeCtrl.value);
		}catch (exception){
		}
	}
	if (sizeY <= 0 || height < sizeY){
	    sizeY = height;
		sizeCtrl.value = sizeY;
	}
	spin( name + "PosY" + id, inc, 0, height - sizeY);
}

function pictureSizePosY( id, name, maxHeight, defaultHeight, storedSizeY, storedPosY)
{
    var sizeCtrl = elemId( name + "SizeY"     + id);
    var posCtrl  = elemId( name + "PosY"      + id);
    var diffFld	 = elemId( name + "DiffY"     + id);
    var image	 = elemId( name + "Viewport"  + id);
    var frame	 = elemId( name + "Frame"     + id);
    var sizeY = -1, posY = -1;
    if (sizeCtrl.value){
        try{
                sizeY = parseInt( sizeCtrl.value);
        }catch (exception){
        }
    }
    if (sizeY <= 0 || maxHeight < sizeY){
            if (0 < storedSizeY){
                    sizeY = storedSizeY;			
            }
            if (sizeY <= 0 || maxHeight < sizeY){
                    sizeY = defaultHeight;
            }
            sizeCtrl.value = sizeY;
    } 
    var moveMax = maxHeight - sizeY;
    if (diffFld){
            diffFld.firstChild.data = moveMax;
    }
    if (posCtrl.value){
            try{
                    posY = parseInt( posCtrl.value);
            }catch (exception){
            }
    }
    if (posY < 0){
            if (0 <= storedPosY){
                    posY = storedPosY;
            }else{
                    posY = 0;
            }
            if (moveMax < posY){
                    posY = moveMax;
            }
            posCtrl.value = posY;
    }else if (moveMax < posY){
            posY = moveMax;
            posCtrl.value = posY;
    }
    frame.style.height = sizeY + "px";
    image.style.top    = -posY + "px";
    image.style.height = (sizeY + posY) + "px";
	return true;
}

function eraseValueCtrl( ctrl)
{
    if (ctrl.value.length > 0){
        ctrl.value = "";
    }
}

function elemId( id)
{
    return window.document.getElementById( id);
}

function parseISODate( text)
{
    return new Date( text.substring(0,4), text.substring(5,7) - 1, text.substring(8,10));
}

function now(){
    return new Date();
}

function beforeNow( date){
    return before( date, now());
}

function before( date1, date2)
{
    var result = date1 && date2 && (date1.getTime() < date2.getTime());
    //alert( date1 + " < " + date2 + " | " + date1.getTime() + " < " + date2.getTime() + " | " + result);
    return result;
}

/**/
