ajium.jquery = {};

(function($) {
	  $.fn.disableTextSelect = function() {
	      return this.each(function(){
	        if($.browser.mozilla){//Firefox
	          $(this).css('MozUserSelect','none');
	        }else if($.browser.msie){//IE
	          $(this).bind('selectstart',function(){return false;});
	        }else{//Opera, etc.
	          $(this).mousedown(function(){return false;});
	        }
	      });
	  };
	  $(function($){
	      $('.noSelect').disableTextSelect();//No text selection on elements with a class of ‘noSelect’
	  });
})(jQuery); 

(function($) {
	  $.fn.enableBlur = function() {
		  return this.each(function(){
			  if( $.browser.msie){//IE
		          $(this).bind('click',function(){ $(this).blur();});
			  }
		  });
	  };
	  $(function($){
	      $('.blur').enableBlur();//No text selection on elements with a class of ‘noSelect’
	  });
})(jQuery);
	  
jQuery.fn.extend({
    scrollTo : function(speed, easing, val) {
        return this.each(function() {
            var targetOffset = $(this).scrollTop() + val;
            /*alert( $(this).scrollTop() );
            alert( val );
            alert( targetOffset );*/
            $(this).animate({
                scrollTop: targetOffset + 'px'
            }, speed, easing);
        });
    }
});

Array.prototype.removeByValue = function(val) {
    for(var i=0; i<this.length; i++) {
        if(this[i] == val) {
            this.splice(i, 1);
            break;
        }
    }
};

ajium.jquery.imageDelete = function()
{
	$('div.form-field img.input-image').each(
		function()
		{
			$(this.parentNode).hover(
				function()
				{
					var n = $(this).find('.input-image-wrap').queue("fx");
					if(!n || !n.length)
					{
						$(this).find('.input-image-wrap').animate({bottom:'0'});
					}
				},
				function()
				{
					$(this).find('.input-image-wrap').animate({bottom:'-25px'});
				}
			);
		}
	);
};

ajium.jquery.renderdFields = new Array();

ajium.jquery.renderList = function( sListId )
{
	//console.log(sListId);
	
	var oHead			= '.grid-header';
	var aChildren		= $('#' + sListId ).find(oHead).children();
	var sListDisplay 	= $('#' + sListId ).css('display');
	
	if( 'none' == sListDisplay )
	{
		$('#' + sListId ).css('display', 'block');
	}
	
	var iWidth			= new Array();
	var fixedWidth		= new Array();
	
	$('#' + sListId ).find('.grid').addClass('grid-loading'); 
	
	for ( var i = 0; i < aChildren.length; i++)
	{
		var aElements = $(aChildren[i]).find('.grid-cell:not(.grid-cell-ignore)');
		
		for ( var j = 0; j <= aElements.length; j++ )
		{
			iWidth[ j ] = iWidth[ j ] ? iWidth[ j ] : 0;
			
			if ( 'object' == typeof aElements[ j ] )
			{
				iWidth[ j ] = iWidth[ j ] < $(aElements[j]).innerWidth() ? $(aElements[j]).innerWidth() : iWidth[ j ];
				
				if ( $(aElements[j]).hasClass('grid-column-fixed') )
				{
					fixedWidth[ j ] = $(aElements[j]).width();
				}
				else
				{
					fixedWidth[ j ] = null;
				}
			}
		}
	}
	
	var oObj 			= '.grid-body'; 
	var aChildren 		= $('#' + sListId ).find(oObj).children();
	var iWidthTable		= $('#' + sListId ).find(oObj).width();
	
	if ( $('#' + sListId ).find(oObj).children().length > 0 )
	{
		iWidthTable = parseInt($('#' + sListId + " .grid-body > .grid-row").width()) 
					+ parseInt($('#' + sListId + " .grid-body > .grid-row").css("border-right-width").replace(/px/,''))
					+ parseInt($('#' + sListId + " .grid-body > .grid-row").css("border-left-width").replace(/px/,''));	
	}
	
	var iChildCount		= aChildren.length;
	var iSum			= 0; 
	
	for ( var i = 0; i < iChildCount; i++)
	{
		var aElements = $(aChildren[i]).find('.grid-cell:not(.grid-cell-ignore)');
		
		for ( var j = 0; j <= aElements.length; j++ )
		{
			iWidth[ j ] = iWidth[ j ] ? iWidth[ j ] : 0;
			
			if ( 'object' == typeof aElements[ j ] )
			{
				iWidth[ j ] = iWidth[ j ] < aElements[j].clientWidth ? aElements[j].clientWidth : iWidth[ j ];
			}
		}
	}
	
	var iWidthTableSave = iWidthTable;
	
	for ( j = 0; j < iWidth.length; j++ )
	{
		if ( iWidth[ j ] >= 50 )
		{
			iSum += iWidth[ j ];
		}
		else
		{
			iWidthTableSave -= iWidth[ j ];
		}
	}
	
	if ( undefined != $('#' + sListId ).find(oObj)[0] && $('#' + sListId ).find(oObj)[0].clientWidth < $('#' + sListId ).find(oObj).width() )
	{
		iWidthTable -= 17;
		iWidthTableSave -= 17;
	}
	
	var bAuto = false;
	
	for ( var i = 0; i <= iWidth.length; i++)
	{
		iW = iWidth[i];
		
		if ( iW <= 50 || null != fixedWidth[i] )
		{
			if ( null != fixedWidth[i] )
			{
				iW = fixedWidth[i];
			}
			
			iW = iW < 20 ? 20 : iW;
			
			 $('#' + sListId ).find(".grid-cell-td-" + ( i + 1 ) ).css('width', iW + 'px');
		}
		else
		{
			if ( false == bAuto )
			{
				bAuto = true;
			}
			else
			{
				iW = ( iW * iWidthTableSave ) / iSum;
				
				$('#' + sListId ).find(".grid-cell-td-" + ( i + 1 ) ).css('width', iW + 'px');
			}
		}
	}
	
	$('#' + sListId ).find(".grid-table").css('width', iWidthTable + 'px');
	
	$('#' + sListId ).find(".grid-table").css('table-layout', 'fixed');
	
	$('.' + sListId + '-grid-pagination-pagejump').click(
		function(event)
		{
			event.stopPropagation();
			
			var iTop = 0;
			
			iTop += $('#' + sListId).find('.grid-pagination').position().top; 
			
			iTop -= $('#' + sListId + '-grid-action-page').height();
			
			iTop -= parseInt($('#' + sListId + '-grid-action-page').css('border-top-width').replace(/px/,''));
			iTop -= parseInt($('#' + sListId + '-grid-action-page').css('border-bottom-width').replace(/px/,''));
			iTop -= parseInt($('#' + sListId + '-grid-action-page').css('padding-top').replace(/px/,''));
			iTop -= parseInt($('#' + sListId + '-grid-action-page').css('padding-bottom').replace(/px/,''));
			
			
			$('#' + sListId + '-grid-action-page').css('top', iTop + 'px');
			$('#' + sListId + '-grid-action-page').css('left', $(this).css('margin-left'));
			
			$('#' + sListId + '-grid-action-page').show();
		}
	);
	
	$('#' + sListId + '-grid-action-page').click(
		function(event)
		{
			event.stopPropagation();
		}
	);
	 
	/**
	 * SetUp hover Effect for the header-fields
	 */
	ajium.jquery.renderHeaderCells('.grid-header', sListId);
	
	$('#' + sListId ).find('.grid').removeClass('grid-loading');
	
	if( 'none' == sListDisplay )
	{
		$('#' + sListId ).css({'display': ''});
	}
};

ajium.jquery.listParams = {};
ajium.jquery.aFields = {};

	function clone(obj){
	    if(obj == null || typeof(obj) != 'object')
	        return obj;

	    var temp = {}; // changed

	    for(var key in obj)
	        temp[key] = clone(obj[key]);
	    return temp;
	}

	
ajium.jquery.renderListActions = function( req, param )
{
	ajium.jquery.listParams[ param.parameters[0].target ] = {};
		ajium.jquery.aFields[ param.parameters[0].target ] = {};
	
	$('#' + param.parameters[0].target + '-grid-action-page-jump').each(
		function()
		{
			ajium.jquery.listParams[param.parameters[0].target]['grid-action-page-jump'] = {};
			ajium.jquery.listParams[param.parameters[0].target]['grid-action-page-jump'] = jQuery.extend(true, {}, param);

			$(this).click(function(){
					
					iPage = $('#' + param.parameters[0].target + '-grid-page-value').attr('value');
					
					if ( iPage > 0 )
					{
						iPage--;
						ajium.jquery.listParams[param.parameters[0].target]['grid-action-page-jump']['parameters'][0]['st'] = iPage * ajium.jquery.listParams[param.parameters[0].target]['grid-action-page-jump']['parameters'][0]['results'];
					}
					
					xajax.request(req, ajium.jquery.listParams[param.parameters[0].target]['grid-action-page-jump'] );
			});
		}
	);
	
	$('#' + param.parameters[0].target + '-actions').find('.grid-action-layer').each(
		function()
		{
			sId = $(this).attr('id');
			
			aId = sId.split("-");
			
			sField = aId[aId.length - 1];
			
			ajium.jquery.aFields[ param.parameters[0].target ][sField] = req;
		
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ] = {};
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc'] =  jQuery.extend(true, {}, param);
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc'] = jQuery.extend(true, {}, param);
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc']['parameters'][0]['sort'] = {};
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc']['parameters'][0]['sort'][sField] = 'asc';		
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc']['parameters'][0]['sort'] = {};
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc']['parameters'][0]['sort'][sField] = 'desc';

			//--------------------------------------------------------------------------------
			// adding multisort support 
			//--------------------------------------------------------------------------------
			
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc_add'] = jQuery.extend(true, {}, param);
			ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc_add'] = jQuery.extend(true, {}, param);
			
			var asc_sort = ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc_add']['parameters'][0]['sort'][sField];
	
			if ( undefined != asc_sort )
			{
				var oSort = ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc_add']['parameters'][0]['sort'];
				
				var i = 0;
				
				for ( key in oSort )
				{
					i++;
				}
				
				if ( 1 == i )
				{
					//--------------------------------------------------------------------------------
					// doing the same linke in normal up/down sort
					//--------------------------------------------------------------------------------
					ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc_add']['parameters'][0]['sort'] = ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc']['parameters'][0]['sort'];
					ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc_add']['parameters'][0]['sort'] = ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc']['parameters'][0]['sort'];
				}
				else
				{
					//--------------------------------------------------------------------------------
					// overwriting the given field sorting
					//--------------------------------------------------------------------------------
					ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc_add']['parameters'][0]['sort'][ sField ] = 'asc';
					ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc_add']['parameters'][0]['sort'][ sField ] = 'desc';
				}
			}
			else
			{
				//--------------------------------------------------------------------------------
				// setup the field sorting
				//--------------------------------------------------------------------------------
				ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc_add']['parameters'][0]['sort'][ sField ] = 'asc';
				ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc_add']['parameters'][0]['sort'][ sField ] = 'desc';
			}
		}
	);
	
	$('#' + param.parameters[0].target).find('.grid-header-value').each(
		function()
		{
			$(this).click(
				function()
				{
					sId = $(this).attr('id');
				
					aId = sId.split("-");
				
					sField = aId[aId.length - 1];
				
					var oParam;
					
					if ( $(this).hasClass('asc') )
					{
						oParam = ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['desc'];
					}
					else
					{
						oParam = ajium.jquery.listParams[ param.parameters[0].target ][ sField ]['asc'];
					}
					
					xajax.request(req, oParam );
				}
			);
		}
	);	
	
	for( sField in ajium.jquery.aFields[ param.parameters[0].target ] )
	{
		ajium.jquery.renderListAction(sField,ajium.jquery.aFields[ param.parameters[0].target ][sField], param.parameters[0].target );
	}	
};

ajium.jquery.renderListAction = function ( sField, req, sTarget )
{
	$('#layer-action-'+ sTarget + '-' + sField + '-asc').click(function(){xajax.request(req, ajium.jquery.listParams[sTarget][ sField ]['asc'] ); } );
	$('#layer-action-'+ sTarget + '-' + sField + '-desc').click(function(){xajax.request(req, ajium.jquery.listParams[sTarget][ sField ]['desc'] ); } );
	
	//--------------------------------------------------------------------------------
	// adding multisort support 
	//--------------------------------------------------------------------------------

	if (  $('#layer-action-'+ sTarget + '-' + sField + '-asc-add').length > 0 )
	{
		$('#layer-action-'+ sTarget + '-' + sField + '-asc-add').click(function(){xajax.request(req, ajium.jquery.listParams[sTarget][ sField ]['asc_add'] ); } );
	}
	if (  $('#layer-action-'+ sTarget + '-' + sField + '-desc-add').length > 0 )
	{
		$('#layer-action-'+ sTarget + '-' + sField + '-desc-add').click(function(){xajax.request(req, ajium.jquery.listParams[sTarget][ sField ]['desc_add'] ); } );
	}
};

 var ob;
 var over = false;

ajium.jquery.resize_C = null;

ajium.jquery.renderHeaderCells = function( oObj, sListId )
{
	var children 		= $('#' + sListId ).find(oObj).children();
	var aCells			= $('#' + sListId ).find( oObj + ' table td'); 
	
//	$('#' + sListId).find('.grid').append('<div class="grid-marker" style="background: #000000 none repeat scroll 0% 0%; width: 2px; position: absolute; left:0px;display:none"></div>');
	
	for ( var i = 0; i < aCells.length; i++ )
	{
		//alert(oObj + ' table td');
		oCell = $( aCells[ i ] );
		
		if ( oCell.html().length > 0 )
		{
			oCell.mouseover(function(e){
				$(this).focus().addClass('grid-header-hover');
					})
					.mouseout( function(e){
						$(this).removeClass('grid-header-hover');
					});

			var btn  = oCell.find('.grid-btn');
			
			ajium.jquery.renderHeaderCell( btn, sListId );
		}
		
		/*$('#' + sListId ).find( '.grid-cell-td-' + ( i + 1 ) )
		.mousedown(
			function( e )
			{
				ajium.jquery.resize_C = e.target;
				
				$('#' + sListId).find('.grid-marker')
				.css("left",$(this).offset().left - $(this).parents('.grid').offset().left+"px")
				.css("top",$(this).offset().top - $(this).parents('.grid').offset().top + $(this).height()+"px")
				.height( $('#' + sListId ).find('.grid-body').height() + 'px' )
				.css("display","block");
				
				over = true;
			}
		);*/

		

		
	}

/*	$('#' + sListId ).find('.grid-header tr td').mousemove(
			function( e )
			{
				 var left = (e.clientX - $(this).parents('.grid').offset().left);
				
				
				if ( true == over )
				{
					$(e.target).parent().css("cursor",'col-resize');

					$('#' + sListId).find('.grid-marker').css("left",e.clientX - $(this).parents('.grid').offset().left+"px");
				}
				else
				{
					$(e.target).parent().css("cursor",
			                    (left-($(this).offset().left-$(this).parents('.grid').offset().left) > $(this).width()-4)
			                    ? "col-resize" : "");
				}
			}
	);	
	
	$('#' + sListId ).mouseup(
			function( e )
			{
				var sClass = $(ajium.jquery.resize_C).attr('className').replace(/grid-cell/,'').replace(/grid-header-hover/, '').replace(/ /, '');
				
				if ( sClass.match(/grid-cell-td-/) )
				{
					//alert( $(this).parents('.grid').offset().left);
					
					sClass = sClass.replace(/grid-cell-td-/, '');
					
					iW = e.clientX - $('#' + sListId ).find('.grid').offset().left;
					
					//alert('.grid-cell-td-' + sClass);
					
					$('#' + sListId ).find( '.grid-cell-td-' + sClass ).css('width', iW + 'px');
					
					//alert(sListId + ' ' + iW + ' ' + sClass );
					//$('#' + sListId ).find('.' + sClass ).css('width',e.clientX - $('#' + sListId ).find('.grid').offset().left+"px");
					//alert( $( '#' + sListId ).find( '.' + sClass ) );
				}
					
				$('#' + sListId).find('.grid-header tr').css("cursor",'default');
				$('#' + sListId).find('.grid-marker').css("display","none");
				over = false;
			}
	);	*/
	
	
	$(document).click(
			function( event )
			{
				$(".grid-action-layer").hide();
				$('#' + sListId + '-grid-action-page').hide();
				$('.grid-header-active').removeClass('grid-header-active');
			}
	);					

	$(".menu-item").mouseover(function(e){
		$(this).focus().addClass('menu-item-hover');
			})
			.mouseout( function(e){
				$(this).removeClass('menu-item-hover');
			});	
	
	
	
	//$(oObj).mouseout( function(){$(oObj).removeClass('grid-header-hover')});
};

ajium.jquery.renderHeaderCell = function( btn, sListId )
{
	btn.click(
			function(event)
			{
				$('.grid-action-layer').hide();
				$('#' + sListId + '-grid-action-page').hide();
				$('.grid-header-active').removeClass('grid-header-active');

				event.stopPropagation();
				
				var oLayer =  ajium.$('layer-' + this.id );
				var iLeft = $(this).position().left +
							+ parseInt($( this ).css('border-right-width').replace(/px/,'')) 
							+ parseInt($( this ).css('border-left-width').replace(/px/,''));
				
				var iTop = $(this).height() + $('#' + sListId ).position().top;

				var iLayerWidth = $( oLayer ).width();
				var iLayerWidthParent = $( oLayer.parentNode ).width();
				
				if ( ( iLayerWidth + iLeft ) > iLayerWidthParent )
				{
					iRight = iLayerWidthParent - iLeft - $(this).width() - parseInt($( this.parentNode ).css('border-left-width').replace(/px/,''))
																		 - parseInt($( this.parentNode ).css('border-right-width').replace(/px/,'')) 
																		 - parseInt($( oLayer ).css('border-right-width').replace(/px/,'')) 
																		 - parseInt($( oLayer ).css('border-left-width').replace(/px/,'')); 

					if ( ( $( this.parentNode ).width() - iRight - iLayerWidth ) > 0 )
					{
						$('#layer-' + btn.attr('id') ).css('right',  iRight + 'px' );
					}
					else
					{
						iLayerWidth = 	iLayerWidth
									+ parseInt($( oLayer ).css('padding-left').replace(/px/,''))
						 			+ parseInt($( oLayer ).css('padding-right').replace(/px/,'')) 
						 			+ parseInt($( oLayer ).css('border-right-width').replace(/px/,'')) 
						 			+ parseInt($( oLayer ).css('border-left-width').replace(/px/,''));
						
						if ( iLayerWidthParent - iLayerWidth > 0 )
						{
							
							
							$('#layer-' + btn.attr('id') ).css('left',  (iLayerWidthParent - iLayerWidth) + 'px' );
						}
					}
				}
				else
				{
					$('#layer-' + btn.attr('id') ).css('left',  iLeft + 'px' );
				}
				
				$('#layer-' + btn.attr('id') ).css('top', iTop + 'px');
				$('#layer-' + btn.attr('id') ).show();
			}
		);	
};

ajium.jquery.renderForm = function( oForm )
{
	ajium.jquery.renderdFields = new Array();

	ajium.jquery.doRenderForm( oForm );
};

ajium.jquery.doRenderForm = function( oForm )
{
	var oFormLayer			= $(oForm).find('.form-layer');
	var aPanel				= $(oFormLayer).find('.form-panel-body');
	var aFieldSets			= new Array();
	var aFieldItems			= new Array();
	var aFieldItemsMargin	= new Array();
	var aFieldSetsMargin	= new Array();	
	var aRowHeight			= new Array();
	var aRowHeightRows		= new Array();
	var aRowHeightDesc		= new Array();

	//--------------------------------------------------------------------------------
	// show hidden slides
	//--------------------------------------------------------------------------------
	$(oForm).find('.box_slide.closed').find( '.form-row.box_form_content').show();
	//$(oForm).find('.box-slide.closed > .box_content').show();
	
	iFormLayerWidth = oFormLayer.outerWidth();

	for( var i=0; i < aPanel.length; i++ )
	{
		if ( i == 0 )
		{
			iFormLayerWidth  = 	iFormLayerWidth
								- ( Math.ceil( parseInt( $(aPanel[i]).css('border-left-width').replace(/px/,'') ) ) + Math.ceil( parseInt( $(aPanel[i]).css('border-right-width').replace(/px/,'') ) ) )
								- ( Math.ceil( parseInt( $(aPanel[i]).css('padding-left').replace(/px/,'') ) ) + Math.ceil( parseInt( $(aPanel[i]).css('padding-right').replace(/px/,'') ) ) );
 
		}
		
		var aRows = $(aPanel[i]).children();
		
		for( var j=0; j < aRows.length; j++ )
		{
			var aFieldSet = $(aRows[j]).children('.form-item');
			
			aRowHeight[j] = 0;
			
			for ( var k=0; k < aFieldSet.length; k++ )
			{
				if ( aFieldSet[k].id.length > 0 )
				{
					aFieldSets[ k ] 		= aFieldSets[ k ] ? aFieldSets[ k ] : 0;
					aFieldItems[ k ]		= aFieldItems[ k ] ? aFieldItems[ k ] : 0;
					aFieldItemsMargin[ k ]	= aFieldItemsMargin[ k ] ? aFieldItemsMargin[ k ] : 0;
					aFieldSetsMargin[ k ]	= aFieldSetsMargin[ k ] ? aFieldSetsMargin[ k ] : 0;

					var iInput 			= $( '#input-' + aFieldSet[k].id ).innerWidth();
					var iInputMargin 	= $( '#input-' + aFieldSet[k].id ).outerWidth();
					var iFieldMargin	= $( '#desc-' + aFieldSet[k].id ).outerWidth();
					var iFieldDesc		= $( '#desc-' + aFieldSet[k].id).width();
					
					aFieldSets[ k ] 		= aFieldSets[ k ] < iFieldDesc ? iFieldDesc : aFieldSets[ k ];
					aFieldSetsMargin[ k ] 	= aFieldSetsMargin[ k ] < iFieldMargin ? iFieldMargin : aFieldSetsMargin[ k ];
					aFieldItems[ k ]		= aFieldItems[ k ] < iInput ? iInput : aFieldItems[ k ];
					aFieldItemsMargin[ k ]	= aFieldItemsMargin[ k ] < iInputMargin ? iInputMargin : aFieldItemsMargin[ k ];
				}
			}
		}
	}
	
	var iTotal = 0;
	
	/**
	 * max 3 Fieldsets, so use the place fairly!
	 */
	
	iFieldSetWidth = parseInt( iFormLayerWidth / aFieldSets.length ); 
	
	for (i=0; i < aFieldSets.length; i++ )
	{
		iW 	= aFieldSets[i];
		iWM = aFieldSetsMargin[i];

		var iDiff = 0;
		
		if ( iWM < 100 )
		{
			iDiff = 100 - iWM;
			
			iW = iW + iDiff;
			iWM = 100;
		}
		
		iWF = aFieldItems[i];
		
		iWF = iFieldSetWidth - iWM;
		
		var iDiffWF = aFieldItemsMargin[i] - aFieldItems[i];
		
		iDiffWF += ( Math.ceil( parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) ).css('border-left-width').replace(/px/,'') ) ) + Math.ceil( parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) ).css('border-right-width').replace(/px/,'') ) ) )
		+ ( Math.ceil( parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) + ' > .form-field' ).css('border-left-width').replace(/px/,'') ) ) + Math.ceil( parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) + ' > .form-field' ).css('border-right-width').replace(/px/,'') ) ) )
		+ ( parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) + ' > .form-field' ).css('padding-left').replace(/px/,'')) + parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) + ' > .form-field' ).css('padding-right').replace(/px/,'')) )
		+ 0;
		
		if ( aFieldSets.length == i + 1 )
		{
			iX = iFormLayerWidth - iTotal - 1;
			
			iWF = iX - iWM - iDiffWF;
		}
		else
		{
			iWF = iWF - iDiffWF; 
		}
		
		if ( false == $(oFormLayer).find(".form-item-" + ( i + 1 ) ).hasClass('ignore-renderering') )
		{
			oDesc  = $(oFormLayer).find(".form-item-" + ( i + 1 ) + ' > .form-field-description' );
			oField = $(oFormLayer).find(".form-item-" + ( i + 1 ) + ' > .form-field' );
			
			oDesc.width(iW);
			
			oDesc.each(
				function()	
				{
					if ( $(this).innerWidth() < iWM )
					{
						$(this).width(  ( iWM - ( $(this).innerWidth() - $(this).width() ) )  );
					}
				}
			);
			
			if ($.browser.msie == undefined ) // margin in ie results in something like "padding" for formfield, so drop that property in ie
			{
				oField.css('marginLeft', iWM + 'px');
			}
			
			oField.outerWidth( iWF );
		}
		
		iTotal += $(oFormLayer).find(".form-item-" + ( i + 1 ) ).width() + Math.ceil( parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) ).css('border-left-width').replace(/px/,'') ) ) + Math.ceil( parseInt( $(oFormLayer).find(".form-item-" + ( i + 1 ) ).css('border-right-width').replace(/px/,'') ) );
	}
	
	iFieldSetCount = aFieldSets.length;
	
	for( var i=0; i < aPanel.length; i++ )
	{
		var aRows = $(aPanel[i]).children();
		
		for( var j=0; j < aRows.length; j++ )
		{
			var aFieldSet = $(aRows[j]).children();
			
			$(aRows[j]).css('visibility', 'hidden');
			$(aRows[j]).css('display', 'block');
			
			aRowHeight[j] 		= 0;
			aRowHeightDesc[j]	= 0;
			aRowHeightRows[j]	= 0;
			var x = 0;
			var iCount = 0;
			var iWidth = 0;
			
			for ( var k=0; k < aFieldSet.length; k++ )
			{
				if ( aFieldSet[k].id.length > 0 )
				{
					x = k;
					iCount++;
					iWidth += $( aFieldSet[k] ).width();

					var iHField		= $(oFormLayer).find( '#input-' + aFieldSet[k].id + ' > .input').outerHeight(true);
					
					if ( $(oFormLayer).find( '#input-' + aFieldSet[k].id + ' > .input').hasClass('.input-area') )
					{
						/*console.log( $( '#input-' + aFieldSet[k].id + ' > .input').outerHeight(true) );
						console.log( $( '#input-' + aFieldSet[k].id + ' > .input').outerHeight() );
						console.log( $( '#input-' + aFieldSet[k].id + ' > .input').innerHeight() );
						console.log( $( '#input-' + aFieldSet[k].id + ' > .input').height() );*/
					}
					
					var iHFieldDesc = $(oFormLayer).find( '#desc-' + aFieldSet[k].id ).height();
					var iHFRowDesc 	= $(oFormLayer).find( '#desc-' + aFieldSet[k].id ).outerHeight(true)
									  + ( parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('border-bottom-width').replace(/px/,'')) + parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('border-top-width').replace(/px/,'')) )
									  + ( parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('padding-bottom').replace(/px/,'')) + parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('padding-top').replace(/px/,'')) );
					var iHFRow		= $(oFormLayer).find( '#input-' + aFieldSet[k].id ).outerHeight(true)
									  + ( parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('border-bottom-width').replace(/px/,'')) + parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('border-top-width').replace(/px/,'')) )
									  + ( parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('padding-bottom').replace(/px/,'')) + parseInt( $(oFormLayer).find( '#' + aFieldSet[k].id ).css('padding-top').replace(/px/,'')) );
					
					var iHInput		= $(oFormLayer).find( '#input-' + aFieldSet[k].id ).height();

					/*					console.log($( '#input-' + aFieldSet[k].id ).height());
					console.log(iHFRow);*/
					
					aRowHeight[j]		= aRowHeight[j] < iHField ? iHField : aRowHeight[j];
					aRowHeight[j]		= aRowHeight[j] < iHFieldDesc ? iHFieldDesc : aRowHeight[j];
					aRowHeightDesc[j]	= aRowHeightDesc[j] < iHFieldDesc ? iHFieldDesc : aRowHeightDesc[j];
					aRowHeightDesc[j]	= aRowHeightDesc[j] < iHInput ? iHInput : aRowHeightDesc[j];
					aRowHeightRows[j]	= aRowHeightRows[j] < iHFRow ? iHFRow : aRowHeightRows[j];
					aRowHeightRows[j]	= aRowHeightRows[j] < iHFRowDesc ? iHFRowDesc : aRowHeightRows[j];
				}
			}
			
			if (  undefined != aFieldSet[x] && iCount < iFieldSetCount && undefined != $(oFormLayer).find( '#input-' + aFieldSet[x].id + ' > div.input > .expand-input').attr('id') )
			{
				iDiff = iFormLayerWidth - iWidth + $(oFormLayer).find( '#input-' + aFieldSet[x].id).width() - (iFieldSetCount - iCount);
				$(oFormLayer).find( '#input-' + aFieldSet[x].id).css('width', iDiff + 'px');
			}
			
			$(aRows[j]).find('.form-field-description' ).css('min-height', aRowHeightDesc[j] + 'px');
			$(aRows[j]).find('.form-field > div' ).not('.select-combobox').not('.form-field > div.input').css('min-height', aRowHeight[j] + 'px');
			$(aRows[j]).find('.form-field' ).css('min-height', aRowHeight[j] + 'px');
			$(aRows[j]).css('min-height', aRowHeightRows[j] + 'px');
			
			ajium.jquery.renderFields( $(oForm).map(function(){ return $.makeArray(this.elements); }) );
			
			$(aRows[j]).css('visibility', '');
			$(aRows[j]).css('display', '' );
		}
	}
	
	$(oForm).find('.form-layer').removeClass('form-loading');
};

ajium.jquery.renderFields = function( children )
{
	//console.log( children );
	
	var iLen = children.length;
	
	for (var i = 0; i < iLen; ++i)
	{
		ajium.jquery.renderField(children[i]);
	}
};

ajium.jquery.renderField = function( child )
{
	if (!child.name)
	{
		return;
	}
	
	if ( child.id in ajium.jquery.renderdFields )
	{
		if ( !$(child).hasClass('expand-input') )
		{
			return;
		}
	}
	
	oParent = child.parentNode;
	
	iWidth = $(oParent).width();

	var iBrowser = $.browser.msie ? 2 : 3;
	
	var iDiff = 0;
	
	iDiff += parseInt($(child).css('margin-left').replace(/px/,''));
	iDiff += parseInt($(child).css('margin-right').replace(/px/,''));
	iDiff += parseInt($(child).css('padding-left').replace(/px/,''));
	iDiff += parseInt($(child).css('padding-right').replace(/px/,''));

	switch( child.type )
	{
		case 'hidden':
		case 'checkbox':
		case 'radio':
		case 'file':
						return;
						break;
		default:
						if ( $(child).hasClass('input-50') )
						{
							ajium.jquery.setFieldLayerWidth( child );
							break;
							//--------------------------------------------------------------------------------
							// getting the form-field item count
							// and calculate the width of the input layer
							//--------------------------------------------------------------------------------	
						}
						if ( child.type == 'select-one')
						{
							iWidth += iBrowser;
						}
						if ( iWidth > 0 )
						{
							iWidth = iWidth - iDiff;
							$(child).css('width', iWidth + 'px');
						}
						break;
		case 'text':
		case 'textarea':
						iWidth = iWidth - iDiff;
						
						if ( child.type == 'text')
						{
							iWidth += iBrowser;
						}
						
						if ( iWidth > 0 )
						{
							iWidth = iWidth - iDiff;
							$(child).css('width', iWidth + 'px');
							//console.log('test');
						}
						
						if ( $(child).hasClass('input-file') )
						{
							iWidth = iWidth - $(oParent).find('label.input-unit').width();
							
							if ( iWidth > 0 )
							{
								$(child).css('width', iWidth + 'px');
								
								//
							}

							//--------------------------------------------------------------------------------
							// stretch the fileinput to the cell
							//--------------------------------------------------------------------------------							
							
							sId = $(child).attr('name').replace(/fake/,'');

							$(child).parent().find('#it' + sId).css('width', iWidth + 'px' );
							
							break;
						}
						
						ajium.jquery.setFieldLayerWidth( child );
						break;
	}
	
	ajium.jquery.renderdFields[ child.id ] = child.id;
};

ajium.jquery.setFieldLayerWidth = function( children )
{
	
	child			= $(children);
	
	//console.log(children.id + child.width());
	oParentLayer 	= child.parent().parent();
	oInputLayer 	= child.parent();
	
	iParentLayerWidth 	= oParentLayer.width() 
						+ parseInt(oParentLayer.css('padding-left').replace(/px/,'') )
						+ parseInt(oParentLayer.css('padding-right').replace(/px/,'') )
						+ parseInt(oParentLayer.css('border-right-width').replace(/px/,'') )
						+ parseInt(oParentLayer.css('border-left-width').replace(/px/,'') );
	
	iInputLayerDiff		= parseInt(oInputLayer.css('padding-left').replace(/px/,'') )
						+ parseInt(oInputLayer.css('padding-right').replace(/px/,'') )
						+ parseInt(oInputLayer.css('margin-right').replace(/px/,'') )
						+ parseInt(oInputLayer.css('margin-left').replace(/px/,'') )
						+ parseInt(oInputLayer.css('border-right-width').replace(/px/,'') )
						+ parseInt(oInputLayer.css('border-left-width').replace(/px/,'') );
	
	iInputDiff			= parseInt(child.css('padding-left').replace(/px/,'') )
						+ parseInt(child.css('padding-right').replace(/px/,'') )
						+ parseInt(child.css('margin-right').replace(/px/,'') )
						+ parseInt(child.css('margin-left').replace(/px/,'') );
	
	if ( false == $.browser.msie || ( true == $.browser.msie && '7.0' != $.browser.version ) )
	{
		iInputDiff	   += parseInt(child.css('border-right-width').replace(/px/,'') )
						+ parseInt(child.css('border-left-width').replace(/px/,'') );
	}
	
	//--------------------------------------------------------------------------------
	// find the input-control object
	//--------------------------------------------------------------------------------	

	oControl = oParentLayer.find('div.input-control');
	
	iControlWidth = oControl.width(); 
	
	iControlWidth = null == iControlWidth ? 0 : iControlWidth;
	
	iChildCount = 0;
	
	iInputLayerExtraDiff = 0;
	
	iInputLabelDiff = 0;
	
	oParentLayer.children().each(
		function()
		{
			if ( $(this).hasClass('input') )
			{
				iChildCount++;
			}
			else
			{
				iInputLayerExtraDiff += $(this).outerWidth();
			}
		}
	);
	
	iLayerWidth = ( oParentLayer.width() / iChildCount ) - iInputLayerDiff;
	
	oControl = oInputLayer.find('div.input-control');
	
	iControlWidth = oControl.width(); 
	
	iControlWidth = null == iControlWidth ? 0 : iControlWidth;	
	
	child.each(
		function()
		{
			iInputLabelDiff = 0;
			
			if ( $(this).attr('id') != child.attr('id') && ( $(this).hasClass('.input-unit') ) )
			{
				iInputLabelDiff += $(this).outerWidth();
			}

			$(this).width( ( iLayerWidth - iInputDiff - iControlWidth - iInputLayerExtraDiff - iInputLabelDiff  ) + 'px' );
		}
	);
			//css('width', ( iLayerWidth - iInputDiff - iControlWidth - iInputLayerExtraDiff - iInputLabelDiff  ) + 'px');
	
	if ( null != oInputLayer )
	{
		if ( undefined != iInputLayerExtraDiff )
		{
			oInputLayer.css('width', iLayerWidth - iInputLayerExtraDiff + 'px').css('float', 'left');
		}
	}	
	
};

ajium.jquery.initListEditor = function()
{
	$("#form-elements, #list-elements").sortable({
		connectWith	:	['.le-list'],
		placeholder	:	'le-list-placeholder',
		items		:	'.le-list-sort'
	});
};

ajium.jquery.getListEditorSort = function()
{
	return $("#list-elements").sortable('toArray');
}; 	

ajium.jquery.initViewEditor = function()
{
	$('.view-layer').sortable({
		items		:	'.ve-panel'
	});
	
	$(".ve-panel").sortable({
		connectWith	:	['.ve-panel'],
		items		:	'.ve-row'
	});
	
	$('.form-items > .ve-fields').draggable({
		connectToSortable: '.ve-column',
		helper: 'clone',
		revert: 'invalid'

	});
	
	$(".ve-column").sortable({
		connectWith				:	['.ve-column, .form-items'],
		placeholder				:	've-cell-placeholder',
		items					:	'.ve-fields',
		beforeStop				: 	function( e, ui )
									{
										var self=this;
										$('.ve-column').not(this).each(
											function()
											{
												if ( $(this).children().length > 2 )
												{
													$(self).sortable('cancel');
												}
											}	
										);
									},	
		stop					: 	function( e, ui)
									{
										$('.ve-column').sortable('enable');
									}
	});
	
	$(".form-items").sortable({
		connectWith				:	['.ve-column'],
		placeholder				:	've-cell-placeholder',
		items					:	'.ve-fields',
		forcePlaceholderSize	:	true,
		beforeStop				: 	function( e, ui )
									{
										var self=this;
										$('.ve-column').not(this).each(
											function()
											{
												if ( $(this).children().length > 2 )
												{
													$(self).sortable('cancel');
												}
											}	
										);
									},	
		stop					: 	function( e, ui)
									{
										$('.ve-column').sortable('enable');
									}		
		
	});
	
	$(".ve-trash").droppable({
		accept				:	'.ve-fields',
		drop					: 	function( e, ui)
									{
		//alert(ui.draggable);
										ui.draggable.remove();
										return false;
									}
	});
};

/**
 * Returns array-structure of 
 * panels > rows > columns > fields
 * of a view
 * @todo: cleanup id´s for direct php-actions
 */

ajium.jquery.getViewEditorSort = function()
{
	var aStructure = {};
	
	var aPanel = $(".view-layer").sortable('toArray');
	
	// loop Panels
	
	for ( var i = 0; i < aPanel.length; i++)
	{
		var aRows = $( '#' + aPanel[i] ).sortable('toArray');
		
		aStructure[ aPanel[i] ] = {};
		
		// loop Rows
		
		for ( var j = 0; j < aRows.length; j++ )
		{
			aStructure[ aPanel[i] ][ aRows[j] ] = {};
			
			var aColumns =  $( '#' + aRows[j] ).children();
			
			// loop Cells
			
			for ( var k = 0; k < aColumns.length; k++ )
			{
				if ( $( aColumns[k] ).hasClass('ui-sortable') )
				{
					aStructure[ aPanel[i] ][ aRows[j] ][k] =  $( aColumns[k] ).sortable('toArray');	// get nested fields
				}
			}
		}
	}
	
	//console.log( aStructure );
	
	return aStructure;
};

/**
 * accordion
 */

ajium.jquery.toggle = function(oObj)
{
	oSlide = oObj.parentNode;
	
	var is_open = $(oSlide).hasClass('open');
	
	var arr = $('.box_slide');
	
	arr.each( 
		function()
		{
			$(this).addClass('closed');
			$(this).removeClass('open');
		}
	);
	
	if ( false == is_open )
	{
		$(oSlide).addClass('open');
		$(oSlide).removeClass('closed');
		/*my_setcookie('open-slide', oObj.id);*/
	}
	else
	{
		/*my_setcookie('open-slide', null);*/
	}
};

/**
 * Fakefile replace ment for fileinputs
 */

ajium.jquery.fakefile = function( sId )
{
	var oFake = $('#fake' + sId );
	
	if ( oFake.length == 0)
	{
		return;
	}
	
	var oParent = $('#fake' + sId ).parent();
	
	var iLeft = 0;
	
	if ( oParent.length > 0 )
	{
		iLeft	= parseInt( oParent.css("padding-left").replace(/px/,'') );
	}
	
	oFake.css('position', 'absolute');

	var iWidth	= oFake.width() - parseInt( oFake.css("padding-left").replace(/px/,'') ) - parseInt( oFake.css("padding-right").replace(/px/,'') ); 
	
	//console.log(iLeft);
	
	oFake.css('left', iLeft );
	oFake.width( iWidth );
	
	oFake.select(
		function()
		{
			$('#it' + sId ).select();
		}
	);
	oFake.click(
		function()
		{
			$('#it' + sId ).click();
		}
	);
	
	$('#it' + sId ).change(
		function()
		{
			oFake.val($('#it' + sId ).val().replace(/C:\\fakepath\\/,""));
		}
	);
	$('#it' + sId ).mouseout(
		function()
		{
			oFake.val($('#it' + sId ).val().replace(/C:\\fakepath\\/,""));
		}
	);
};

/**
 * Multi DropDown button Function
 */

ajium.jquery.ddb = function( oLink )
{
	oLayer = $('#layer-' + oLink.attr('id') );
	
	oList  = $('#layer-' + oLink.attr('id') ).find('ul');
	
	iLayerWidth = oLayer.width() -  parseInt(oLink.css("padding-left").replace(/px/,'')) - parseInt(oLink.css("padding-right").replace(/px/,''));
	
	iButtonWidth = oLink.width( ) + parseInt(oLink.css("padding-left").replace(/px/,'')) + parseInt(oLink.css("padding-right").replace(/px/,'')); 
	
	if ( iLayerWidth > iButtonWidth )
	{
		oLink.width( iLayerWidth  );
	}
	else
	{
		oLayer.width( iButtonWidth  );
	}
	
	oLayer.css('left', oLink.position().left + parseInt(oLink.css("margin-left").replace(/px/,'')))
		  .css('top', '-' + (oLayer.height() - parseInt(oLayer.css("padding-top").replace(/px/,'')) ) + 'px' );
	
	oLink.mouseover(
		function()
		{
			oLayer.css('left', oLink.position().left + parseInt(oLink.css("margin-left").replace(/px/,'')))
			  	  .css('top', '-' + (oLayer.height() - parseInt(oLayer.css("padding-top").replace(/px/,''))  ) + 'px' );
			oLayer.show();
		}
	);
	
	oLayer.mouseover(
		function()
		{
			oLayer.show();
		}
	);
	
	$(document).click
	(
		function(e)
		{
			$(e.target).parents().andSelf().each
			(
				function ()
				{
					if (this == oLayer )
					{
						return false;
					}
						
					oLayer.hide();
				}
			);
		}
	);	
	
	oLink.mouseout(
		function()
		{
			var parents = $(this).parents().get();
			
			for ( var j=0; j < parents.length; j++ )
			{
				if ( $( parents[j] ) == oLayer )
				{
					return false;
				}
			}
			
			oLayer.hide();
		}
	);
};

//$('.button-dropdown').live()

//--------------------------------------------------------------------------------
// Password Field type change for displaying Password 
//--------------------------------------------------------------------------------

ajium.jquery.password = function( sId, type )
{
	var newO=document.createElement('input');

	var input = xajax.$( sId );
	
	$(input).each(
		function()
		{
			//console.log(this.attributes.length);
			
			for( var k = 0; k < this.attributes.length; k++ )
			{
				//console.log(k);
				
				var attr = this.attributes[k];
				
				//console.log(attr);
				
				switch( attr.name )
				{
					case 'type':
								newO.setAttribute(attr.name, type);
								break;
					case 'class':
								if ( true == $.browser.msie && ('6.0' == $.browser.version || '7.0' == $.browser.version ) )
								{
									newO.setAttribute('className', attr.value);
								}
								else
								{
									newO.setAttribute(attr.name, attr.value);
								}
								break;
					case 'style':
								if ( true == $.browser.msie && ('6.0' == $.browser.version || '7.0' == $.browser.version ) )
								{
									newO.style = attr.value;
								}
								else
								{
									newO.setAttribute(attr.name, attr.value);
								}
								break;
					
					default:
								newO.setAttribute(attr.name, attr.value);
								break;
				}
			}
			
			newO.value = input.value;
		}
	);
    try
    {
        input.parentNode.replaceChild(newO,input);
    }
    catch(e)
    {
        window.status = e.message;
    }
};




