/* --------------------------------------------------------------------

  Peafowl js
  http://www.chevereto.com/

  @version	1.0
  @author	Rodolfo Berríos <http://rodolfoberrios.com/>
  @url		<http://godlikestudio.com>

  <inbox@rodolfoberrios.com>

  --------------------------------------------------------------------- */

// Shake fx
jQuery.fn.shake = function(){ 
     this.each(function(init){ 
          var jqNode = $(this); 
          jqNode.css({position: 'relative'}); 
          for (var x=1; x<=2; x++){ 
               jqNode.animate({ left: -10 },0) 
               .animate({ left: 0 },30) 
               .animate({ left: 10 },30) 
               .animate({ left: 0 },30); 
          } 
     }); 
	return this; 
}
  

$(function (){
	
	/*** vars ***/
	var uploadID				= "#upload";
	var active_class 			= "active";
	var error_box 				= "#error-box";
	var error_boxID				= error_box.substring(1); // Don't edit
	/*** upload selector ***/	
	var select_remote 			= "#select-remote";
	var select_local 			= "#select-local";
	var upload_local 			= "#upload-local";
	var upload_remote			= "#upload-remote";
	/*** tools ***/
	var preferences 			= "#preferences";
	var preferences_box			= "#preferences-box";
	var upload_button 			= "#upload-button";
	var pref_shorturl			= "#pref-shorturl";
	/*** inputs ***/
	var url_input 				= "#url";
	var resize_input 			= "#resize";
	var preferences_box_input	= preferences_box + " input";
	/*** boxes ***/
	var upload_remote			= "#upload-remote";
	var resizing				= "#resizing";
	/*** resize switch ***/
	var resizing_switch			= "#resizing-switch";
	var resizing_box			= "#resizing-box";
	/*** uploadify ***/
	var UploadifyID				= "#uploadify";
	var fileQueue				= "#fileQueue";
	/*** messages ***/
	var cancel_upload_msg		= "Do you really want to cancel the process?";
	var empty_form_msg			= "You must complete part of the form in order to continue";
	var local_error_msg			= "No image has been uploaded";
    /*** txt ***/
    var just_uploaded_txt		= "Just uploaded";
    var images_txt				= "images";
	/*** misc ***/
	var cancel_upload			= "#cancel-upload";
	var empty_upload_class		= "empty-upload";
	var error_class				= "error";
	var show_upload_class		= "show_upload";
	var hide_upload_class		= "hide_upload";
	var uploading_class			= "uploading";
    /*** uploaded_list ***/
    var content					= "#content";
    var uploaded_list			= "#uploaded_list";
    var viewing					= "#viewing";
    var imgWeight				= "#imgWeight";
    var imgDimentions			= "#imgDimentions"
    var view_full_image			= "#view-full-image";
    var img_full_image			= "img#full_image";
    var socialize				= "#socialize";
    var short_url				= "#short-url";
    var loading_changeID		= "loading";


	/*** sticky footer ***/
	var footer_height = $('#in-foot').outerHeight(true)+1;
	$("#wrap").css('margin-bottom', -footer_height);
	$("#wrap").append('<div id="push"></div>');
	$("#push").css('height', footer_height);
	$(footer_height).css('height', footer_height);	


	/*** reset form */
	$(uploadID).each(function() {
		this.reset();
	});
    
    
    /*** popups ***/
    $("a[rel='pop-up']").click(function () {
    	var pop_w = '650';
        var pop_h = '350';
        var pop_left = (screen.width/2)-(pop_w/2);
		var pop_top = (screen.height/2)-(pop_h/2);
        var settings = "height="+pop_h+", width="+pop_w+", scrollTo, resizable=1, scrollbars=1, location=0, top="+pop_top+", left="+pop_left;  
        window.open(this.href, 'Popup', settings);  
        return false;  
    });
	
	
	/*** error show fx ***/
	// This prepend + slide the error boxes.
	function errorShow(errorMsg, errorClass) {
		$(uploadID).prepend('<div id="'+ error_boxID +'" class="'+ errorClass +'"><a id="error"><span>'+ errorMsg +'</span></a></div>');
		$(error_box).slideDown();
	}
	
	
	/*** reactivate upload fx ***/
	// When the upload has failed, this re-activates the form.
	function reactivateUpload() {
		$(upload_button).html('<span>Upload</span>').removeClass(uploading_class);
		$(cancel_upload).css('display', 'none');
		$(preferences_box_input + "," + resize_input + "," + url_input).removeAttr('disabled');
	}
	
	
	/*** error click fx ***/	
	function errorClick() {
		$(error_box).slideUp(250, function() { $(error_box).remove() });
	}
	/*** onlive do the fx... ***/
	$(error_box).live('click', function() {
		errorClick();
	});
	
	
	/*** focus source ***/
	// I know that is fast/easy/pretty to use hide()/show() or fade but that will break the Flash queue.
	// And it's just a weird flash issue.
	function focusSource(toActive, toRest, toHide, toShow) {
		$(toActive).addClass(active_class);
		$(toRest).removeClass(active_class);
		$(toHide).addClass(hide_upload_class).removeClass(show_upload_class);
		$(toShow).addClass(show_upload_class).removeClass(hide_upload_class);
	}
	function focusRemote() {
		focusSource(select_remote, select_local, upload_local, upload_remote);
	}
	function focusLocal() {
		focusSource(select_local, select_remote, upload_remote, upload_local);
	}
	
	
	/*** function isuploading ***/
	function isUploading() {
		return $(upload_button).hasClass(uploading_class);
	}


	/*** upload selector magic ***/
	$(select_remote).click(function () {
		if($(upload_remote).hasClass(hide_upload_class) && !isUploading()) focusRemote();			
	});
	$(select_local).click(function () {
		if($(upload_local).hasClass(hide_upload_class) && !isUploading()) focusLocal();
	});
	
	
	/*** preferences ***/
	$(preferences).click(function () {
		if(!isUploading()) {
			$(preferences_box).slideToggle("normal", "easeOutBounce");
			$(this).toggleClass(active_class);
		}
	});
	
	
	/*** pref-shorturl ***/
    	$(pref_shorturl).removeAttr('checked');    
	$(pref_shorturl).change(function(){
		var checked = $(this).is(':checked') ? '1':'0';			
		var doShort = '/content/system/js/pref.php?doShort='+checked;
		$.ajax({url: doShort});
	});

	
	
	/*** resizing ***/
	$(resizing_switch+" a").click(function () {
		if(!isUploading()) {
			$(resizing_box).slideToggle("normal");
			$(this).toggleClass(active_class);
		}
	});
	
	
	/*** validate input fields ***/	
	$(uploadID).validate({
		rules: {
			url : {
				required: false,
				url: true
			},
			resize: {
				required: false,
				digits: true,
				min: 16,
				max: 1280                
			}
		},
		messages: {
			url: false,
			resize: false
		}
	});
		
	
	/*** upload ***/
	$(upload_button).click(function () {
		
		// Do something...
		if($(fileQueue).text()!=='' || $(url_input).val()!=='') {

			// Remove class error in #url and Focus in
			if($(fileQueue).text()!=='') {
				$(url_input).removeClass(error_class)
				focusLocal();
			} else {
				focusRemote();
			}
			
			if($(this).hasClass(uploading_class)==false && $(resize_input).hasClass(error_class)==false && $(url_input).hasClass(error_class)==false) {
				// No errors... Do the upload.
				errorClick();
				$(this).addClass(uploading_class);
				$(this).html('<span class="'+uploading_class+'"><b>Uploading</b></span>');
				$(cancel_upload).fadeIn();	
				$(preferences_box_input + "," + resize_input + "," + url_input).attr('disabled', 'disabled');
				
				// Call the upload...
				if($(fileQueue).text()!=='') {
					$(UploadifyID).uploadifyUpload();
				} else {
					$.post("/upload.php", { url: $(url_input).val(), resize: $(resize_input).val()},
					function(data) {
						eval("var response="+data);
						if (response.error == "true") {
							errorShow("Error: "+response.errorMsg);
							reactivateUpload();
						} else {
							// Redirect url upload
							window.location = "/?v="+response.ImgName;
						}
					});
				}
			} else { // erros... Shake it.
				if($(resize_input).hasClass(error_class)) {
					$(resizing).shake();
				}
				if($(url_input).hasClass(error_class)) {
					$(upload_remote).shake();
				}
			}
			
		} else { // Do something
			if($(error_box).hasClass(empty_upload_class)) {
				$(error_box).shake();
			} else {
				// No error box.. Start a new one or just replace text?
				if($(error_box).text()=='') {
					errorShow(empty_form_msg, empty_upload_class);
				} else {
					$(error_box+" span").html(empty_form_msg);
					$(error_box).addClass(empty_upload_class);
				}
				
			}
		}
	});
	
	
	/*** cancel upload ***/
	$(cancel_upload).click(function () {
		if(confirm(cancel_upload_msg)) {
			window.location.reload(true);
		}
	});   
   
    
    /*** change functions ***/
    function change_html_txt(selector, search, replace) {
    	$(selector).html($(selector).html().replace(search, replace));
    }
    
    function change_attr(selector, attr, search, replace) {
    	$(selector).attr(attr,$(selector).attr(attr).replace(search, replace));
    }
    
            
    
	/*** uploadify ***/
	// Catch the images
	ImagesUp = '';
	$(UploadifyID).uploadify({
		'uploader'			: '/content/system/js/uploadify.swf',
        'expressInstall'	: '/content/system/js/expressInstall.swf',
		'fileDataName'		: 'ImageUp',
		'script'			: '/upload.php',
		'fileExt'			: '*.jpg;*.jpeg;*.png;*.gif;*.bmp',
		'fileDesc'			: 'Image Files (.JPG, .PNG, .GIF, .BMP)',
		'scriptData'		: {'sID': '2222bc49cd06628aee6ae184d7cad836'},
		'sizeLimit'			: 5242880, // Bytes
		'queueID'			: 'fileQueue',
        	'queueSizeLimit'	:  10,        
		'simUploadLimit'	: 1,
		'auto'				: false,
		'multi'				: true,
		'removeCompleted'	: false,
		'scriptAccess'		: 'always',
		'buttonText'		: 'SELECT FILES',
		'onComplete'		: function(event, queueID, fileObj, response, data) {
								eval("var response="+response);
								if (response.error == "true") { // SERVER SIDE ERROR
									$(UploadifyID+queueID).addClass("uploadifyError")
									.find('.byteSize').remove()
									.find('.status').remove();
									$(UploadifyID+queueID+" span.percentage").html(response.errorMsg);
									return false;
								} else { // SERVER SIDE OK
									ImagesUp += response.ImgName;
								}
							  },
		'onAllComplete'		: function(event, data) {
								if(ImagesUp!=='') { // One or more images uploaded
									if(data.filesUploaded==1) {
										window.location = "/?v="+ImagesUp;
									} else {
										window.location = "/?uploaded";
									}
								} else {
									errorShow(local_error_msg)
									reactivateUpload();
									$(UploadifyID).uploadifyClearQueue();
								}
							  }
	});

});
