
// set the selector name
var selector = '#frame_dynamic_menu';
var isDrag = false;
var animationTime = 400;
var deflection = 20;

$(document).ready(function ()
{
		$( selector + ' div.item div.content').hide();
		
		//mechanizm do przenoszenia
		//Sortable();
		//onClickInItem();
		
		$kids = $(selector).children();
		$kids.each(function () {
			if ($(this).hasClass( 'item' )) {
				var itemId = this.id;
				if	( $(selector + ' div.item #header_' + itemId.split( '_' )[1]).hasClass('open_frame') ){
					$( selector + ' div.item #content_' + itemId.split('_')[1] ).slideDown("slow");
					$(selector + ' div.item .header .btn_drop_down' ).addClass   ( 'down' );
				}
			}
		    	//alert(this.id);
		});
		
		onClickDropDownButtons();
		onClickInMovePlaceButtons();
		
		//$( selector + ' .item:first .header .move_up' ).hide();
		//$( selector + ' .item:last .header .move_down' ).hide();
		
//		if ($.cookie ('selected_style')) {{
//			ClearLayoutInCookie();
//			ChangeStyle ($.cookie ('selected_style'));
//		}}
//		else
//			GetLayoutFromCookie();
//		Sortable();
//	}}
});

//$('$' + selector + 'div.item div.content').hide();

//$('$' + selector + 'div.item').click (function (){
//	if ($(this).attr('type_view') == 'hide') {
//		$(this).show();
//		$(this).attr('type_view', 'show');
//	} else {
//		$(this).hide();
//		$(this).attr('type_view', 'hide');
//	}
//});


function onClickInMovePlaceButtons() {

	$( selector + ' .item .header .move_down' ).click( function () {
		onClickMoveDown( this );
	});
	
	$( selector + ' .item .header .move_up' ).click( function () {
		onClickMoveUp( this );			
	});
}

function onClickDropDownButtons() {
	
	$( selector + ' div.item div.header .btn_drop_down').click( function () {
		DropDownDynamicMenu( this.id.split('_')[3] );		
	});
	
	$( selector + ' div.item div.header .title h4').click( function () {
		DropDownDynamicMenu( this.id.split('_')[2] );	
	});
}

function DropDownDynamicMenu( itemNumb) {
	
	if ( $(selector + ' div.item #header_' + itemNumb  ).hasClass('open_frame') ) {
		$(selector + ' div.item #header_' + itemNumb  ).removeClass('open_frame');
		
		var downMargPx = $(selector +  ' div.item #header_' + itemNumb ).height();
		
		$(selector + ' div.item #content_' + itemNumb ).slideUp("slow", function () { 
			
			$( selector +  ' div.item #header_' + itemNumb ).css( 'height', $( selector +  ' div.item #header_' + itemNumb ).height() + 'px' );
			$kids = $(selector +  ' div.item #header_' + itemNumb ).nextAll();
			$kids.each( 
					function () { 
									var headerNumb = this.id.split('_')[1];
									$( selector +  ' div.item #header_' + headerNumb ).css( 'height', $( selector +  ' div.item #header_' + headerNumb ).height() + 'px' ); 
								}); 
		});
				
		$(selector + ' div.item .header #btn_drop_down_' + itemNumb ).removeClass( 'down' );
		$(selector + ' div.item .header #btn_drop_down_' + itemNumb ).addClass   ( 'drop' );
		
	}
	else {	
		$(selector + ' div.item #header_' + itemNumb  ).addClass('open_frame');

		$(selector + ' div.item #content_' + itemNumb ).slideDown( 'slow', function () { $(selector +  ' div.item .header' ).css( 'height', 'auto' ); });
		
		$(selector + ' div.item .header #btn_drop_down_' + itemNumb ).removeClass( 'drop' );
		$(selector + ' div.item .header #btn_drop_down_' + itemNumb ).addClass   ( 'down' );
	}
	SaveLayoutToCookie(selector);	
}

function BrowserVersionIE() {
	var nAgt = navigator.userAgent;
	var verOffset = 0;
	
	if ( ( verOffset = nAgt.indexOf( "MSIE" ) ) != -1 ) {
		 var fullVersion = nAgt.substring(verOffset+5);
		 verOffset = fullVersion.indexOf( ";" );
		 fullVersion = fullVersion.substring(0, verOffset );
		 return fullVersion;
	}
	return '';
}

function SaveLayoutToCookie(object)
{	
	var objectId 	= $(object).attr('id');
	var objNamesArr = new Array();
	var isOpenArr	= new Array();
	
	//alert(object);
	$kids = $('#'+objectId).children();
	$kids.each(function () {
		if ($(this).hasClass( 'item' )) {
			var itemId = this.id;
			objNamesArr.push( itemId.split( '_' )[1] );
			isOpenArr.push	( $(selector + ' div.item #header_' + itemId.split( '_' )[1]).hasClass('open_frame') );
		}
	    	//alert(this.id);
	});
	
	$.cookie(cookObjNamesList, StringFromArrayLayout(objNamesArr), { expires: cookExpiry, path: "/" });
	$.cookie(cookObjTypesList, StringFromArrayLayout(isOpenArr), { expires: cookExpiry, path: "/" });
	noticeUserLayoutChanged(cookObjNamesList);
	noticeUserLayoutChanged(cookObjTypesList);
}
function StringFromArrayLayout(array) {
	var helpString = '';
	if (array.length > 0) {
		helpString += array[0];
		for (var i = 1 ; i < array.length; i++) 
			helpString += separator + array[i];
	}
	return helpString;
}

function IsObjInArray (arr, obj) {
	var isObject = false;
	for (var i = 0 ; i < arr.length; i++) 
		if (arr[i] == obj) isObject = true;
	return isObject;
}

function IndObjInArray (arr, obj) {
	for (var i = 0 ; i < arr.length; i++) 
		if (arr[i] == obj) return i;
	return -1;
}

function ClearLayoutInCookie()
{
//	var objNamesStr = $.cookie(cookObjList);
//	var objNamesArr	= new Array()	
//	
//	if (objNamesStr) 
//		objNamesArr = objNamesStr.split(separator);
//	
//	for (var i = 0 ; i < objNamesArr.length; i++) {{
//		var dataHtml = $.cookie(cookObjNamePre + objNamesArr[i])
//		if (dataHtml) $('#' + objNamesArr[i]).html(dataHtml);
//		$.cookie(cookObjNamePre + objectId, "", {{ expires: cookExpiry, path: "/" }});
//	}}
//	$.cookie(cookObjList, "", {{ expires: cookExpiry, path: "/" }});
}

function Sortable()
{
	$(selector).sortable({
				opacity: 0.6,
				revert: true,
				handle: '.header',
				forceHelperSize: true,
				helper: 'orginal',
				items: '.item',
				//containment: 'frame_dynamic_menu',
				forcePlaceholderSize: true,
				tolerance: 'pointer',
				//connectWith: $(selector),
				scroll: true,
		        scrollSensitivity: 2,
		        scrollSpeed: 6,
		        placeholder: 'empty_place',

		        start : function(event, ui) {
		        	var isFirstEl = true;
		        	$kids = $(ui.item).children();
		        	$kids.each(function() {
		        		if (isFirstEl) {
		        			isFirstEl = false
		        		} else {
		        			//$(this).hide("fast");
		        		}
		        	});
		        },
		        stop : function(event, ui) {
		        	var isFirstEl = true;
		        	$kids = $(ui.item).children();
		        	$kids.each(function() {
		        		if (isFirstEl) {
		        			isFirstEl = false
		        		} else {
		        			//$(this).show("fast");
		        		}
		        	});
		        },
				update : function(event, ui)
				{
					SaveLayoutToCookie(this);
				},
				change : function(event, ui)
				{
					isDrag = true;
				}
				
			
	});
}

function onClickInItem() {
	
	$( selector + ' div.item div.header').mouseup( function () {
		if (!isDrag) {
			if ( $(this).hasClass('open_frame') ) {
				$(this).removeClass('open_frame');
				$( selector + ' div.item #content_' + this.id.split('_')[1] ).slideUp("slow");
			}
			else {
				$( selector + ' div.item #content_' + this.id.split('_')[1] ).slideDown("slow");
				$(this).addClass('open_frame');
			}
			SaveLayoutToCookie(selector);
		} 
		isDrag = false;
		
	});
}

function onClickMoveUp($thisFrame) {
	
	var itemNumb = $thisFrame.id.split( '_' )[3]; 
	
	//$( selector + ' #item_' + itemNumb ).slideUp( 400 );
	$movedItem = $( selector + ' #item_' + itemNumb );
	$prevItem  = $movedItem.prev();
	//jezeli nie ma następcy nie przerzucamy
	if ( $prevItem.length != 0) {
		
		$( selector + ' .item .header .move_down' ).unbind('click');
		$( selector + ' .item .header .move_up' ).unbind('click');
		
		var marg = 0;
		var browser = BrowserVersionIE();
		if( browser == '8.0' || browser == '' ) marg = parseInt( $( selector + ' .item' ).css( 'margin-bottom' ) );
		$( selector ).css( 'height', $( selector ).height() + marg + 'px' );
		
		//$( selector + ' .item:first .header .move_up' ).show();
		//$( selector + ' .item .header .move_down' ).click( function () { });
		
		var posPrevItem 	= $prevItem.position();			
		var heightPrevItem  = $prevItem.height() + parseInt( $( $prevItem ).css( 'margin-bottom' ) ) ;
		var heightMoveItem  = $movedItem.height() + parseInt( $( $prevItem ).css( 'margin-bottom' ) ) + 1;
		
		var $prevWhileItem = $( selector + ' .item:last' );
		do  {
			var itemPoz = $prevWhileItem.position();
			$prevWhileItem.css( 'position', 'absolute' ).css( 'top', itemPoz.top + 'px' );
		} 
		while (	( $prevWhileItem = $prevWhileItem.prev() )[0].id != $prevItem[0].id )
			
		$prevItem.css( 'position', 'absolute' );
		$prevItem.css( 'top', posPrevItem.top + 'px' );
		//$movedItem.css( 'vertical-align', 'top' ); 
		
		//animacja
		$prevItem.animate ( {top:  '+=' + heightMoveItem/2 + 'px',
							 left: '+=' + deflection + 'px'}, animationTime/2 );
		$movedItem.animate( {top:  '-=' + heightPrevItem/2 + 'px',
							 left: '-=' + deflection + 'px'}, animationTime/2 );
		
		$movedItem.oneTime( animationTime/2 + "ms", function() {
			$prevItem.animate ( {top:  '+=' + heightMoveItem/2 + 'px',
								 left: '-=' + deflection + 'px'}, animationTime/2 );
			$movedItem.animate( {top:  '-=' + heightPrevItem/2 + 'px',
								 left: '+=' + deflection + 'px'}, animationTime/2 );
		});
		
		//powrót do stanu z przed animacji
		$movedItem.oneTime( animationTime+"ms", function() {
			
			$movedItem.stop();
			$prevItem .stop();
			
			$movedItem .insertBefore( $prevItem );
	
			$kids = $( selector ).children();
			$kids.each( function() { 
				$( this ).css( 'top', '0px' );
				$( this ).css( 'left', '0px' );
				$( this ).css( 'position', 'relative' );
			});
			$( selector + ' .item .header .move_down' ).bind('click', function () {
				onClickMoveDown( this );
			});
			$( selector + ' .item .header .move_up' ).bind('click', function () {
				onClickMoveUp( this );
			});
			
			$( selector ).css( 'height', 'auto' );
			
			SaveLayoutToCookie(selector);
		});
		//$( selector + ' .item:first .header .move_up' ).hide();
		//onClickInMovePlaceButtons();
	} //koniec if z warunkiem czy jes
}
function onClickMoveDown($thisFrame) {
	
	var itemNumb = $thisFrame.id.split( '_' )[3];
	
	//$( selector + ' #item_' + itemNumb ).slideUp( 400 );
	$movedItem = $( selector + ' #item_' + itemNumb );
	
	//jezeli nie ma następcy nie przerzucamy
	if ( $movedItem.next().length != 0) {
		
		$( selector + ' .item .header .move_down' ).unbind('click');
		$( selector + ' .item .header .move_up' ).unbind('click');
		
		//$( selector + ' .item:last .header .move_down' ).show();
		//$( selector + ' .item .header .move_down' ).click( function () { });
		
		var marg = 0;
		var browser = BrowserVersionIE();
		if( browser == '8.0' || browser == '' ) marg = parseInt( $( selector + ' .item' ).css( 'margin-bottom' ) );
		$( selector ).css( 'height', $( selector ).height() + marg + 'px' );
		
		var posMovedItem = $movedItem.position( );
		var heightMovedItem = $movedItem.height( ) + parseInt( $( $movedItem ).css( 'margin-bottom' ) );
		var heightNextItem  = $movedItem.next().height( ) + parseInt( $( $movedItem.next() ).css( 'margin-bottom' ) ) ;
		
		var $prevItem = $( selector + ' .item:last' );
		do  {
			var itemPoz = $prevItem.position();
			$prevItem.css( 'position', 'absolute' ).css( 'top', itemPoz.top + 'px' );
		} 
		while (	( $prevItem = $prevItem.prev() )[0].id != $movedItem[0].id )
			
		$movedItem.css( 'position', 'absolute' );
		$movedItem.css( 'top', posMovedItem.top + 'px' );
		//$movedItem.css( 'vertical-align', 'top' ); 
		
		//animacja
		$movedItem	     .animate( {top:  '+=' + heightNextItem/2 + 'px',
								    left: '+=' + deflection + 'px'}, animationTime/2 );
		$movedItem.next().animate( {top:  '-=' + heightMovedItem/2 + 'px',
								    left: '-=' + deflection + 'px'}, animationTime/2 );
		
		$movedItem.oneTime( animationTime/2 + "ms", function() {
			$movedItem	     .animate( {top:  '+=' + heightNextItem/2 + 'px',
				   					    left: '-=' + deflection + 'px'}, animationTime/2 );
			$movedItem.next().animate( {top:  '-=' + heightMovedItem/2 + 'px',
				   					    left: '+=' + deflection + 'px'}, animationTime/2 );
		});
		
		//powrót do stanu z przed animacji
		$movedItem.oneTime( animationTime+"ms", function() {
			
			$movedItem.stop();
			$movedItem.next().stop();
			
			$movedItem.next().insertBefore( $movedItem );
	
			$kids = $( selector ).children();
			$kids.each( function() { 
				$( this ).css( 'top', '0px' );
				$( this ).css( 'left', '0px' );
				$( this ).css( 'position', 'relative' );
			});
			$( selector + ' .item .header .move_down' ).bind('click', function () {
				onClickMoveDown( this );
			});
			$( selector + ' .item .header .move_up' ).bind('click', function () {
				onClickMoveUp( this );
			});
			$( selector ).css( 'height', 'auto' );
			SaveLayoutToCookie(selector);
		});
		
		//$( selector + ' .item:last .header .move_down' ).hide();
		
		//onClickInMovePlaceButtons();		
	} //koniec if z warunkiem czy jes
}
