const WEBROOT = DOCROOT + 'webroot/';

$(document).ready(function() {
	
	Array.prototype.indexOf = function(s) {
		for (var x=0;x<this.length;x++) if(this[x] == s) return x;		
		return false;
	}
	
	function ActionDialog() {
		var element = $(this);
		
		var remotePath = $(this).attr('href');
		var href = $(this).attr('href').split('/');

		var index = parseInt(href.indexOf('admin'));
		var controller = href[index + 1];
		var action = href[index + 2];
		
		var reload = $(this).hasClass('action-reload');
		var remove = $(this).hasClass('action-remove');
		
		CloseDialog();
		
		var transparentDiv = $('<div>')
			.attr({ className: 'bgTransparent', id: 'bgTransparent' })
			.css('width', $(window).width())
			.css('height', $(window).height());
			
		var dialogDiv = $('<div>').attr({ className: 'bgDialog', id: 'bgDialog' });
		var closeDialogDiv = $('<div>').attr({ className: 'close', id: 'closeDialog' });
		var closeDialogEvent = ((action == 'view') || (action == 'delete')) ? 'CloseDialog' : 'PreventCloseDialog';
		var cancelButton = $('.closeDialog');
		
		$('body').append(transparentDiv).append(dialogDiv);
		
        dialogDiv.load(remotePath, function() {
        
			transparentDiv.unbind('click').bind('click', CloseDialog);
	    	closeDialogDiv.unbind('click').bind('click', CloseDialog);
	    	cancelButton.die('click').live('click', CloseDialog);
	    	
	    	if (closeDialogEvent == 'PreventCloseDialog') {
	        	dialogDiv.find('form input').keydown(function() {
	        		transparentDiv.unbind('click').bind('click', FlashBackground);
	        		closeDialogDiv.unbind('click').bind('click', eval(closeDialogEvent));
	        		cancelButton.die('click').live('click', eval(closeDialogEvent));
	        	});
	    	}
        	
        	dialogDiv.append(closeDialogDiv);

			dialogDiv.find('form').ajaxForm(function() {
        		if (reload) {
        			LocationReload();
        		} else if (remove) {
        			CloseDialog();
        			element.parent().parent().slideUp(function() { $(this).remove() });
        		} else {
        			CloseDialog();

					var loader = $('<div>').attr({ id: 'loader' });

        			$('#result-container').animate({ opacity: .6 }, 200, function() {
        				loader.css({ 'margin-left': (($(this).width() - 32) / 2), 'margin-top': (0 - (($(this).height() - 32) / 2)) });
						$(this).append(loader);
        				$(this).load(controller, function(){ $(this).animate({ opacity: 1 }, 200) });
        			});

	        		HandleActionDialog();
	        		HandleActionRefresh();
        		}
			});
        	
        	transparentDiv.fadeIn(200);
        	dialogDiv.fadeIn(200).draggable({ handle: 'h2', opacity: 0.6 });
        	InitializeCheckboxes();
        	$(window).resize();
        });
        
        return false;
	}
	
	/**
	* ActionRefresh
	*/
	
	function ActionRefresh() {
		var remotePath = $(this).attr('href');
		var href = $(this).attr('href').split('/');
		
		var index = parseInt(href.indexOf('admin'));
		var controller = href[index + 1];
		var action = href[index + 2];
		
		var loader = $('<div>').attr({ id: 'loader' });
		
		$.post(remotePath, function() {
			$('#result-container').animate({ opacity: .3 }, 200, function() {
				loader.css({ 'margin-left': (($(this).width() - 32) / 2), 'margin-top': (0 - (($(this).height() - 32) / 2)) });
				$(this).append(loader);
				$(this).load(controller, function(){ $(this).animate({ opacity: 1 }, 200); $('#loader').remove(); });
			});
		});
		
		HandleActionDialog();
		HandleActionRefresh();
		
        return false;
	}
	
	/**
	* CloseDialog
	*/
	
	function CloseDialog() {
        $('#bgDialog').remove();
        $('#bgTransparent').remove();
        
        return false;
	}
	
	/**
	* PreventCloseDialog
	*/
	
	function PreventCloseDialog() {
		if (confirm('Está a punto de perder los cambios realizados, ¿Desea continuar?')) {
			CloseDialog();
		}
	}
	
	/**
	* FlashBackground
	*/
	
	function FlashBackground() {
		$('#bgTransparent').animate({ opacity: .2 }, 50).animate({ opacity: .4 }, 400);
	}
	
	/**
	* InitializeSmallButtons
	*/
	
	function InitializeSmallButtons() {
		$('.index table tr').hover(
			function () {
				$(this).children('td').find('.small-button').css('opacity', 1);
			},
			function () {
				$(this).children('td').find('.small-button').css('opacity', .4);
			}
		);
	}

	/**
	* InitializeCheckBoxes
	*/
	
	function InitializeCheckboxes() {
		$('.checkbox').each(function() {
			if (!$(this).hasClass('initialized-checkbox')) {
				$(this).children('input, label').hide();
				var input = $(this).children(':checkbox');
				var name = $(this).attr('name');
				var label = $(this).children('label').html();
				var checkboxButton = $('<div>').attr({ className: 'action-button checkbox-button', id: name });
				var clearDiv = $('<div>').attr({ className: 'clear' });
				
				checkboxButton.addClass(input.attr('class'));
				
				if (input.is(':checked')) {
					checkboxButton.addClass('checkbox-on');
				}
				
				checkboxButton.html(label);
				$(this).append(checkboxButton).append(clearDiv);
				$(this).addClass('initialized-checkbox');
			}
		});
		
		$('.checkbox-button').click(function() {
			var checked = $(this).parent().children(':checkbox').attr('checked');
			if ($(this).hasClass('main-image-selector')) {
				$('input.main-image-selector').attr('checked', false);
				$('div.main-image-selector').removeClass('checkbox-on');
			}
			
			$(this).toggleClass('checkbox-on').parent().children(':checkbox').attr('checked', !checked);
		});
	}
	
	/**
	* InitializeAjaxUpload
	*/
	
	function InitializeAjaxUpload() {
		$('#inputAjaxUpload').uploadify({
			'uploader': WEBROOT + 'flash/uploadify.swf',
			'script': WEBROOT + 'scripts/uploadify.php',
			// 'checkScript': WEBROOT + 'scripts/check.php',
			'folder': WEBROOT + 'img/tmp',
			'cancelImg': WEBROOT + 'img/btn/cancel.png',
			'queueID': 'queueAjaxUpload',
			'multi': true,
			'auto': true,
			'fileDesc': 'jpg',
			'fileExt': '*.jpg',
			'sizeLimit': MAXUPLOADSIZE,
			'buttonText': 'Examinar...',
			'onError': function(event, queueID, fileObj, errorObj) {
				var message = 'Error: ';
				switch (errorObj.type) {
					case 'File Size': message += 'El tamaño máximo de la imagen es de ' + (errorObj.info/1048576) + 'MB'; break;
					default: message += errorObj.type; break;
				}
				
				alert (message);
			},
			'onComplete': function (event, queueID, fileObj, response, data) {
				if (response != '1') {
					alert (response);
				} else {
					$.post(WEBROOT + 'scripts/firstcrop.php', { src: fileObj.filePath }, function(data) {
						var count = ($('.image-crop-container').size());
						var img = $('<img>').attr({ className: 'image-thumb-maxsize', src: fileObj.filePath });
						var src = $('<input>').attr({ type: 'hidden', name: 'src_' + (count+1), value: fileObj.filePath });
						
						var imageTitle = $('<div>')
											.append('Título')
											.append($('<input>').attr({ className: 'title', type: 'text', name: 'title_' + (count+1) }));
											
							
						var imageDescription = $('<div>')
											.append('Descripción')
											.append($('<textarea>').attr({ className: 'description', name: 'description_' + (count+1) }));
											
						var imageData = $('<div>').attr({ className: 'image-data' }).append(imageTitle).append(imageDescription);

						var title = $('<div>').html($('<strong>').html(fileObj.name));
						var imagedelete = $('<div>').attr({ className: 'image-delete action-button cancel-button' }).html('Eliminar');
						var clear = $('<div>').attr({ className: 'clear', marginBottom: '20px' });
						var myContainer = $('#queueAjaxResponse');
						
						var divimg = $('<div>')
							.attr({ className: 'image-crop-container' })
							.append(title)
							.append(imagedelete)
							.append(clear)
							.append(img)
							.append(imageData)
							.append(src)
							.append(clear);
						
						myContainer.append(divimg);
						
						HandleImageDelete();
					});
				}
			},
		});
	}
	
	function HandleImageDelete() {
		var count = ($('.image-crop-container').size());
		var imageCount = $('#ImageCount');
		imageCount.val(count);
		
		$('.image-delete').click(function() {
			$(this).parent('.image-crop-container').slideUp(function() {
				$(this).remove();
				count = ($('.image-crop-container').size());
				imageCount.val(count);
			})			
		});
	}

	function HandleImageCropSubmit() {
		$('.imgCropSubmit').click(function() {
			var parent = $(this).parent();
			var src = parent.children('.src').html();
			var x = parent.children('.x').html();
			var y = parent.children('.y').html();
			var w = parent.children('.w').html();
			var h = parent.children('.h').html();
			var category = parent.children('.categoryParent').children('.category').is(':checked');
			var imageMain = parent.children('.mainParent').children('.main').is(':checked');
			var imageTitle = parent.children('.titleParent').children('.title').val();
			var imageDescription = parent.children('.descriptionParent').children('.description').val();
			
			$.post(WEBROOT + 'scripts/crop.php', { src: src, x: x, y: y, w: w, h: h }, function(src_thumb) {
				var img = $('<img>').attr({ src: src_thumb });
				
				$.post(DOCROOT + 'admin/images/add_ajax', { src: src, src_thumb: src_thumb, product_id: $('#ImageProductId').val(), category: category, imageTitle: imageTitle, imageDescription: imageDescription, imageMain: imageMain }, function(callback) {
					if (callback) {
						var imageId = callback;
						var imageDelete = $('<div>')
							.attr({ className: 'imgCropSubmit action-button cancel-button' });
							
						var imageDeleteLink = $('<a>')
							.html('Cancelar')
							.bind('click', function() {
								$.post(DOCROOT + 'admin/images/delete_ajax', { id: callback }, function() { parent.remove() });
							});
							
						parent.empty().append(img).append(imageDelete.append(imageDeleteLink));
					}
				});
			});
		});
	}
	
	$(window).resize(function() {
        var windowWidth = $(window).width();
        var windowHeight = $(window).height();
        
        var leftAdjustment = (windowWidth - $('#bgDialog').width()) / 2;
        var topAdjustment = (windowHeight - $('#bgDialog').height()) / 2;

        $('#bgTransparent').css({ "width": windowWidth, "height": windowHeight });
        $('#bgDialog').css({ "left": leftAdjustment + 'px', 'top': topAdjustment + 'px' });
	});
	
	/**
	* Event Handlers
	*/
	
	function HandleActionDialog() {
		$('a.action-dialog').die('click').live('click', ActionDialog);
	}
	
	function HandleActionRefresh() {
		$('a.action-refresh').die('click').live('click', ActionRefresh);
	}
	
	/**
	* Initialize
	*/
	
	function Initialize() {
		HandleActionDialog();
		HandleActionRefresh();
		InitializeSmallButtons();
		InitializeCheckboxes();
		InitializeAjaxUpload();
	}
	
	/*
	* Utils
	*/
	
	function LocationReload() {
		window.location.reload(true);
	}
	
	/**
	* Ready
	*/
	
	Initialize();
	
});
