/**
* @package Helix3 Framework
* @author JoomShaper http://www.joomshaper.com
* @copyright Copyright (c) 2010 - 2015 JoomShaper
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or Later
*/

jQuery(function($) {

	$(document).ready(function(){

		$(this).find('select').each(function(){
			$(this).chosen('destroy');
		});

	});//end ready

	/* ----------   Load existing template   ------------- */
	$('.form-horizontal').on('click', '.layout-del-action', function(event) {
		event.preventDefault();

		var $that = $(this),
			layoutName = $(".layoutlist select").val(),
			data = {
				action : $that.data('action'),
				layoutName : layoutName
			};

		if ( confirm("Click Ok button to delete "+layoutName+", Cancel to leave.") != true ){
			return false;
		}

		if ( data.action != 'remove' ){
			alert('You are doing somethings wrong.');
		}

		var request = {
                'option' : 'com_ajax',
                'plugin' : 'helix3',
                'data'   : data,
                'format' : 'json'
            };

        $.ajax({
            type   : 'POST',
            data   : request,
            beforeSend: function(){
            	$('.layout-del-action .fa-spin').show();
            },
            success: function (response) {
            	var data = $.parseJSON(response.data),
            		layouts = data.layout,
            		tplHtml = '';

            	$('#jform_params_layoutlist').find('option').remove();
            	if (layouts.length) {
            		for (var i = 0; i < layouts.length; i++) {
            			tplHtml += '<option value="'+ layouts[i] +'">'+ layouts[i].replace('.json','')+'</option>';
            		}

            		$('#jform_params_layoutlist').html(tplHtml);
            	}

            	$('.layout-del-action .fa-spin').fadeOut('fast');
            },
            error: function(){
            	alert('Somethings wrong, Try again');
            	$('.layout-del-action .fa-spin').fadeOut('fast');
            }
        });
        return false;
	});

	// Save new copy of layout
	$('.form-horizontal').on('click', '.layout-save-action', function(event) {
		$('#layout-modal').find('.sp-modal-body').empty();
		$('#layout-modal .sp-modal-title').text('Save New Layout');
		$('#layout-modal #save-settings').data('flag', 'save-layout');

		var $clone = $('.save-box').clone(true);
		$('#layout-modal').find('.sp-modal-body').append( $clone );

		$('#layout-modal').spmodal();
	});

	// load layout from file

	$(".layoutlist select").chosen().change(function(){
		var $that = $(this),
			layoutName = $that.val(),
			data = {
				action : 'load',
				layoutName : layoutName
			};

		if ( layoutName == '' || layoutName == ' ' ){
			alert('You are doing somethings wrong.');
		}

		var request = {
                'option' : 'com_ajax',
                'plugin' : 'helix3',
                'data'   : data,
                'format' : 'raw'
            };

        $.ajax({
            type   : 'POST',
            data   : request,
            dataType: "html",
            beforeSend: function(){
            },
            success: function (response) {
               	$('#helix-layout-builder').empty();
				$('#helix-layout-builder').append(response).fadeIn('normal');
				jqueryUiLayout();
            }
        });
        return false;
	});

	/*********   Lyout Builder JavaScript   **********/

	jqueryUiLayout();

	function jqueryUiLayout()
	{
		$( "#helix-layout-builder" ).sortable({
			placeholder: "ui-state-highlight",
			forcePlaceholderSize: true,
			axis: 'y',
			opacity: 0.8,
			tolerance: 'pointer'

		}).disableSelection();

		$('.layoutbuilder-section').find('.row').rowSortable();
	}

	// setInputValue Callback Function
	$.fn.setInputValue = function(options){
		if (this.attr('type') == 'checkbox') {
			if (options.filed == '1') {
				this.attr('checked','checked');
			}else{
				this.removeAttr('checked');
			}
		}else if(this.hasClass('input-media')){
			if(options.filed){
				$imgParent = this.parent('.media');
				console.log($imgParent);
				$imgParent.find('img.media-preview').each(function() {
					$(this).attr('src',layoutbuilder_base+options.filed);
				});
			}
			this.val( options.filed );
		}else{
			this.val( options.filed );
		}

		if (this.data('attrname') == 'column_type'){
			if (this.val() == 'component') {
				$('.form-group.name').hide();
			}
		}
	}

	// callback function, return checkbox value
	$.fn.getInputValue = function(){
		if (this.attr('type') == 'checkbox') {
			if (this.attr("checked")) {
				return '1';
			}else{
				return '0';
			}
		}else{
			return this.val();
		}
	}

    // color picker initialize
	$.fn.initColorPicker = function(){
		this.find('.minicolors').each(function() {
			$(this).minicolors({
				control: 'hue',
				position: 'bottom',
				theme: 'bootstrap'
			});
		});
	}

	// Open Row settings Modal
	$(document).on('click', '.row-ops-set', function(event){
		event.preventDefault();

		$('.layoutbuilder-section').removeClass('row-active');
		$parent = $(this).closest('.layoutbuilder-section');
		$parent.addClass('row-active');

		$('#layout-modal').find('.sp-modal-body').empty();
		$('#layout-modal .sp-modal-title').text('Row Settings');
		$('#layout-modal #save-settings').data('flag', 'row-setting');

		var $clone = $('.row-settings').clone(true);
		$clone.find('.sppb-color').each(function(){
			$(this).addClass('minicolors');
		});

		$clone = $('#layout-modal').find('.sp-modal-body').append( $clone );

		$clone.find('.addon-input').each(function(){
			var $that = $(this),
				attrValue = $parent.data( $that.data('attrname'));
			$that.setInputValue({filed: attrValue});
		});

		$clone.initColorPicker();

		$('#layout-modal').randomIds();

		$clone.find('select').chosen({
			allow_single_deselect: true
		});

		$('#layout-modal').spmodal();
	});

	// Open Column settings Modal
	$(document).on('click','.col-ops-set',function(event) {
		event.preventDefault();

		$('.layout-column').removeClass('column-active');
		$parent = $(this).closest('.layout-column');
		$parent.addClass('column-active');

		$('#layout-modal').find('.sp-modal-body').empty();
		$('#layout-modal .sp-modal-title').text('Column Settings');
		$('#layout-modal #save-settings').data('flag', 'col-setting');

		var $clone = $('.column-settings').clone(true);
		$clone.find('.sppb-color').each(function(){
			$(this).addClass('minicolors');
		});

		$clone = $('#layout-modal').find('.sp-modal-body').append( $clone );
		var comFlug = false;
		$clone.find('.addon-input').each(function(){
			var $that = $(this),
				$attrname = $that.data('attrname'),
				attrValue = $parent.data($attrname);

				if ( $attrname == 'column_type' && attrValue == '1' ) {
					comFlug = true;
				}else if($attrname == 'name' && comFlug == true){
					$that.closest('.form-group').slideUp('fast');
				}

			$that.setInputValue({filed: attrValue});
		});

		$clone.initColorPicker();

		$clone.find('select').chosen({
			allow_single_deselect: true
		});

		$('#layout-modal').randomIds();
		$('#layout-modal').spmodal();
	});


	$('.input-column_type').change(function(event) {

		var $parent = $(this).closest('.column-settings'),
			flag = false;

		$('#helix-layout-builder').find('.layout-column').not( ".column-active" ).each(function(index, val) {
			if ($(this).data('column_type') == '1') {
				flag = true;
				return false;
			}
		});

		if (flag) {
			alert('Component Area Taken');
			$(this).prop('checked',false);
			$parent.children('.form-group.name').slideDown('400');
			return false;
		}

		if ($(this).attr("checked")) {
			$parent.children('.form-group.name').slideUp('400');
		}else{
			$parent.children('.form-group.name').slideDown('400');
		}
	});

	// Save Row Column Settings
	$(document).on('click', '#save-settings', function(event) {
		event.preventDefault();

		var flag = $(this).data('flag');

		switch(flag){
			case 'row-setting':
				$('#layout-modal').find('.addon-input').each(function(){
					var $this = $(this),
					$parent = $('.row-active'),
					$attrname = $this.data('attrname');
					$parent.removeData( $attrname );

					if ($attrname == 'name') {
						var nameVal = $this.val();

						if (nameVal  !='' || $this.val() != null) {
							$('.row-active .section-title').text($this.val());
						}else{
							$('.row-active .section-title').text('Section Header');
						}
					}

					$parent.attr('data-' + $attrname, $this.getInputValue());
				});
				break;

			case 'col-setting':
				var component = false;

				$('#layout-modal').find('.addon-input').each(function(){

					var $this = $(this),
					$parent = $('.column-active'),
					$attrname = $this.data('attrname');
					$parent.removeData( $attrname ),
					dataVal = $this.val();

					if ( $attrname == 'column_type' && $(this).attr("checked") ) {
						component = true;
						$('.column-active .col-title').text('Component');
					}else if( $attrname == 'name' && component != true ) {
						if (dataVal == '' || dataVal == undefined) {
							dataVal = 'none';
						}
						$('.column-active .col-title').text(dataVal);
					}

					$parent.attr('data-' + $attrname, $this.getInputValue());
				});
				break;

			case 'save-layout':
					var layoutName = $('#layout-modal .addon-input').val(),
						data = {
							action : 'save',
							layoutName : layoutName,
							content: JSON.stringify(getGeneratedLayout())
						};

					if (layoutName =='' || layoutName ==' ') {
						alert("Without Name Layout Can't be save");
						return false;
					}

					var request = {
						'option' : 'com_ajax',
						'plugin' : 'helix3',
						'data'   : data,
						'format' : 'json'
					};

					$.ajax({
						type   : 'POST',
						data   : request,
						beforeSend: function(){
						},
						success: function (response) {
							var data = $.parseJSON(response.data),
								layouts = data.layout,
								tplHtml = '';

							$('#jform_params_layoutlist').find('option').remove();
							if (layouts.length) {
								for (var i = 0; i < layouts.length; i++) {
									tplHtml += '<option value="'+ layouts[i] +'">'+ layouts[i].replace('.json','')+'</option>';
								}

								$('#jform_params_layoutlist').html(tplHtml);
							}
						},
						error: function(){
							alert('Somethings wrong, Try again');
						}

					});
				break;

			default:
				alert('You are doing somethings wrongs. Try again');
		}
	});

	// Column Layout Arrange
	$(document).on('click', '.column-layout', function(event) {
		event.preventDefault();

		var $that = $(this),
			colType = $that.data('type'), column;

		if ($that.hasClass('active') && colType != 'custom' ) {
			return;
		};



		if (colType == 'custom') {
			column = prompt('Enter your custom layout like 4,2,2,2,2 as total 12 grid','4,2,2,2,2');
		}

		var $parent 		= $that.closest('.column-list'),
			$gparent 		= $that.closest('.layoutbuilder-section'),
			oldLayoutData 	= $parent.find('.active').data('layout'),
			oldLayout       = ['12'],
			layoutData 		= $that.data('layout'),
			newLayout 		= ['12'];

		if (oldLayoutData !=12) {
			oldLayout = oldLayoutData.split(',');
		}

		if(layoutData != 12 ){
			newLayout = layoutData.split(',');
		}

		if ( colType == 'custom' ) {
			var error 	= true;

			if ( column != null ) {
				var colArray = column.split(',');

				var colSum = colArray.reduce(function(a, b) {
					return Number(a) + Number(b);
				});

				if ( colSum == 12 ) {
					newLayout = colArray;
					$(this).data('layout', column)
					error = false;
				}
			}

			if (error) {
				alert('Error generated. Please correct your column arragnement and try again.');
				return false;
			}
		}

		var col = [],
			colAttr = [];

		$gparent.find('.layout-column').each(function(i,val){
			col[i] = $(this).html();
			var colData = $(this).data();

			if (typeof colData == 'object') {
				colAttr[i] = $(this).data();
			}else{
				colAttr[i] = '';
			}
		});

		$parent.find('.active').removeClass('active');
		$that.addClass('active');

		var new_item = '';

		for(var i=0; i < newLayout.length; i++)
		{
			var dataAttr = '';
			if (typeof colAttr[i] == 'object') {
				$.each(colAttr[i],function(index,value){
					dataAttr += ' data-'+index+'="'+value+'"';
				});
			}

			new_item +='<div class="layout-column col-sm-'+ newLayout[i].trim() +'" '+dataAttr+'>';
			if (col[i]) {
				new_item += col[i];
			}else{
				new_item += '<div class="column"> <h6 class="col-title pull-left">None</h6> <a class="col-ops-set pull-right" href="#" ><i class="fa fa-gears"></i></a></div>';
			}
			new_item +='</div>';
		}

		$old_column = $gparent.find('.layout-column');
		$gparent.find('.row.ui-sortable').append( new_item );

		$old_column.remove();
		jqueryUiLayout();
	});

	// add row
	$(document).on('click','.add-row',function(event){
		event.preventDefault();

		var $parent = $(this).closest('.layoutbuilder-section'),
			$rowClone = $('#layoutbuilder-section').clone(true);

		$rowClone.addClass('layoutbuilder-section').removeAttr('id');
		$($rowClone).insertAfter($parent);

		jqueryUiLayout();
	});

	// Remove Row
	$(document).on('click', '.remove-row', function(event){
		event.preventDefault();

		if ( confirm("Click Ok button to delete Row, Cancel to leave.") == true )
		{
			$(this).closest('.layoutbuilder-section').slideUp(500, function(){
				$(this).remove();
			});
		}
	});

	// Remove Media
	$(document).on('click','.remove-media',function(){
		var $that = $(this),
			$imgParent = $that.parent('.media');

		$imgParent.find('img.media-preview').each(function() {
			$(this).attr('src','');
			$(this).closest('.image-preview').css('display', 'none');
		});
	});

	// Generate Layout JSON

	function getGeneratedLayout(){
		var item = [];
		$('#helix-layout-builder').find('.layoutbuilder-section').each(function(index){
			var $row 		= $(this),
				rowIndex 	= index,
				rowObj 		= $row.data();
			delete rowObj.sortableItem;

			var activeLayout 	= $row.find('.column-layout.active'),
				layoutArray 	= activeLayout.data('layout'),
				layout = 12;

			if( layoutArray != 12){
				layout = layoutArray.split(',').join('');
			}

			item[rowIndex] = {
				'type'  	: 'row',
				'layout'	: layout,
				'settings' 	: rowObj,
				'attr'		: []
			};

			// Find Column Elements
			$row.find('.layout-column').each(function(index) {

				var $column 	= $(this),
					colIndex 	= index,
					className 	= $column.attr('class'),
					colObj 		= $column.data();
				delete colObj.sortableItem;

				item[rowIndex].attr[colIndex] = {
					'type' 				: 'sp_col',
					'className' 		: className,
					'settings' 			: colObj
				};

			});
		});

		return item;
	}

	//On Submit
	document.adminForm.onsubmit = function(event){

		//Webfonts
		$('.webfont').each(function(){
			var $that = $(this),
				webfont = {
					'fontFamily' : $that.find('.list-font-families').val(),
					'fontWeight' : $that.find('.list-font-weight').val(),
					'fontSubset' : $that.find('.list-font-subset').val(),
					'fontSize'	: $that.find('.webfont-size').val()
				}

			$that.find('.input-webfont').val( JSON.stringify(webfont) )

		});

		//Generate Layout
		$('#jform_params_layout').val( JSON.stringify(getGeneratedLayout()) );
	}

});
