/******************************************************************************
* dformJSKernel.js
*******************************************************************************

*******************************************************************************
*
* Copyright 2005-2007
*
******************************************************************************/

var functionsMap = new Array() ;
var fieldsEventMap = new Array() ;
var actionsEventMap = new Array() ;
var objectsMap = new Array() ;
var searchFunctionsMap = new Array() ;

/// MAP pour les contrôles de saisie
var checkControlsMap = new Array() ;

function actionsRegister( fieldModify, modifyResultFCT, functionGID, fct, e )
{
///	alert( "Register Action (fields=" + e.length + ")") ;
	if ( functionsMap[ functionGID ] == null ) {
		functionsMap[ functionGID ] = new Array() ;
		functionsMap[ functionGID ][ "function" ] = fct ;
		functionsMap[ functionGID ][ "returns" ] = new Array() ;
	}
	var len = functionsMap[ functionGID ][ "returns" ].length ;
	functionsMap[ functionGID ][ "returns" ][ len ] = new Array() ;
	functionsMap[ functionGID ][ "returns" ][ len ][ "function" ] = modifyResultFCT ;
	functionsMap[ functionGID ][ "returns" ][ len ][ "field" ] = fieldModify ;
	for( var i = 0; i < e.length; i++ ) {
		var fName = e[ i ] ;
		if ( fieldsEventMap[ fName ] == null ) fieldsEventMap[ fName ] = new Array() ;
		fieldsEventMap[ fName ][ fieldsEventMap[ fName ].length ] = functionGID ;
	}
}

function field_onChange( fieldName, map )
{
	///alert( "field_onChange : " + fieldName ) ;
	if ( map == null ) map = new Array() ;
	var err ;
	if ( fieldsEventMap[ fieldName ] != null ) {
		for( var i=0; i < fieldsEventMap[ fieldName ].length; i++ ) {
			var functionGID = fieldsEventMap[ fieldName ][ i ] ;
			if ( functionsMap[ functionGID ] != null ) {
				var fct = functionsMap[ functionGID ][ "function" ] ;
				for( j = 0; j < functionsMap[ functionGID ][ "returns" ].length; j++ ) {
					var modifyFCT = functionsMap[ functionGID ][ "returns" ][ j ][ "function" ] ;
					try {
						modifyFCT( fct() ) ;
					}
					catch (err ) {}
					///map[ fieldName ] = true ;
					///if ( map[ functionsMap[ functionGID ][ "returns" ][ j ][ "field" ] ] == null ) field_onChange( functionsMap[ functionGID ][ "returns" ][ j ][ "field" ], map ) ;
				}
			}
		}
		for( var i=0; i < fieldsEventMap[ fieldName ].length; i++ ) {
			var functionGID = fieldsEventMap[ fieldName ][ i ] ;
			if ( functionsMap[ functionGID ] != null ) {
				for( j = 0; j < functionsMap[ functionGID ][ "returns" ].length; j++ ) {
					map[ fieldName ] = true ;
					if ( map[ functionsMap[ functionGID ][ "returns" ][ j ][ "field" ] ] == null ) field_onChange( functionsMap[ functionGID ][ "returns" ][ j ][ "field" ], map ) ;
				}
			}
		}
	}
}

function validationRegister( actionGID, fct, msg )
{
	if ( actionsEventMap[ actionGID ] == null ) {
		actionsEventMap[ actionGID ] = new Array() ;
		actionsEventMap[ actionGID ][ "function" ] = fct ;
		actionsEventMap[ actionGID ][ "message" ] = msg ;
	}
}

function validationRequest( actionGID )
{
	var ret = true ;
	if ( actionsEventMap[ actionGID ] != null ) {
		var fct = actionsEventMap[ actionGID ][ "function" ] ;
		ret = fct() ;
		if ( ! ret ) alert(actionsEventMap[ actionGID ][ "message" ]) ;
	}
	return ret ;
}

function roundValue( value, dec, type )
{
	var v = new Number( value ).valueOf() ;
	var d = new Number( dec ).valueOf() ;
	var p = ( d > 0 )?Math.pow(10,d):1 ;
	var vv = 0 ;
	if ( type == "max" ) vv = Math.ceil( v * p ) / p ;
	else if ( type == "inf" ) vv = Math.floor( v * p ) / p ;
	else if ( type == "normal" ) vv = Math.round( v * p ) / p ;
	///alert(v + " " + d + " " + p + " " + vv) ;
	return vv ;
}

function checkControlRegister( formGID, fct )
///function checkControlRegister( formGID, fct, msg )
{
	if ( checkControlsMap[formGID] == null ) checkControlsMap[ formGID ] = new Array() ;
	var item = checkControlsMap[formGID].length ;
	checkControlsMap[formGID][ item ] = new Array() ;
	checkControlsMap[formGID][ item ][ "function" ] = fct ;
///	checkControlsMap[formGID][ item ][ "message" ] = msg ;
}

function checkControlsRequest( formGID )
{
	var ret = true ;
	if ( checkControlsMap[formGID] != null ) {
		for( var i = 0; i < checkControlsMap[formGID].length; i++ ) {
			var fct = checkControlsMap[formGID][ i ][ "function" ] ;
			ret = fct() ;
			if ( ! ret ) break ;
		}
	}
	return ret ;
}

function registerDFormObject( formGID, eleGID, obj )
{
	if ( objectsMap[formGID] == null ) objectsMap[formGID] = new Array() ;
	objectsMap[formGID][eleGID] = obj ;
}

function computeSearchObject( formGID, form )
{
	var err ;
	if ( objectsMap[formGID] == null ) {
		return null ;
	}
	var m = new Array() ;
	for( var i = 0; i < form.elements.length; i++) {
		m[ form.elements[ i ][ "name" ] ] = form.elements[ i ] ;
	}
	var str = "" ;
	for( var key in objectsMap[formGID] ) {
		var o = objectsMap[formGID][key] ;
		var type = "" ;
		try {
			type = form[ o.paramName ].type ;
		}
		catch ( err ) {}
		switch( type )
		{
			case "hidden":
			case "text":
				var v = form[ o.paramName ]["value"] ;
				break ;
			case "select-one":
				var v = form[ o.paramName ]["options"][ form[ o.paramName ]["selectedIndex"] ].value ;
				break ;
		}
		str += "fieldSearchGID=" + o.gid + "|" + "fieldGID=" + o.targetField + "|" + "typeFieldSearch=" + o.type + "|" + "fieldOperator=" + o.operator + "|" + "paramName=" + o.paramName + "|" + "value=" + escape(v) + "#" ;
	}
	return str ;
}

function registerSearchFunction( searchGID, gid, fct )
{
	if ( searchFunctionsMap[ searchGID ] == null ) searchFunctionsMap[ searchGID ] = new Array() ;
	searchFunctionsMap[ searchGID ][ gid ] = fct ;
}

function executeSearchFunctions(searchGID) 
{
	if ( searchFunctionsMap[ searchGID ] != null ) {
		for( var key in searchFunctionsMap[ searchGID ] ) {
			var fct = searchFunctionsMap[ searchGID ][ key ] ;
			fct() ;
		}
	}
}
function dFormTabClick(a)
{
	var srcLi = a.parentNode;
	var ul = srcLi.parentNode;
	for(var i=0;i < ul.childNodes.length;i++) {
		var li = ul.childNodes.item(i);
		if(li.nodeName != "LI") continue;
		var id = li.id;
		var tabBody = document.getElementById("tab" + id);
		if(li.tagName != "LI" || tabBody == null) {
			alert("no li " + li.tagName + " " + id);
			continue;
		}
		if(li == srcLi) {
			tabBody.className = "dFormTabBodySelected";
			li.className = "dFormTabButtonSelected";
		} else {
			tabBody.className = "dFormTabBody";
			li.className = "dFormTabButton";
		}
	}
	return false;
}


function openLink( url, opt )
{
	var win = window.open( url, '_blank', opt ) ;
	win.focus ;
}
function linkTo( openW, url, opt, internal )
{
	if ( internal ) var u = rootPath + url ;
	else var u = url ;
	if ( openW ) openLink( u, opt ) ;
	else document.location.href = u ;
}
