$(function(){
	
	/* --------------------- dzgnGrid --------------------------*/
	
	$.fn.dzgnGrid = function(options){
		var defaults = {
			expandImg: "",
			delUrl: "",
			rowDelPopupMsg: "",
			rowDelPopupTitle: "",
			selectedRowsDelPopupMsg: "",
			selectedRowsDelPopupTitle: ""
		};
		
		var $this = $(this);
		var opts = $.extend(defaults, options);
		
		$this.find("a.gridRowDel").click(function(e){
			e.preventDefault();
			
			var $this = $(this);
			
			displayConfirmPopup(opts.rowDelPopupTitle, opts.rowDelPopupMsg, 
				function(){
					deleteRows($this);
			});
		});
		
		$this.find(".selectedDelBtn").click(function(e){
			e.preventDefault();
			
			var rows = $('.dzgn-table tbody input:checked');

			if (rows.length) {
				displayConfirmPopup(opts.selectedRowsDelPopupTitle, opts.selectedRowsDelPopupMsg, 
					function(){
						deleteRows(rows);
						$('.dzgn-table thead input:checked').val("");
				});
			}
		});
		
		$this.find('table thead input:checkbox').click(function(){
			$('.dzgn-table input:checkbox').attr('checked', this.checked);
		});
		
		function deleteRows(items) {
			
			var idArr = [];
			
			$.each(items, function(i, item){
				var row = $(this).parents("tr");
				row.slideUp(300, function(){
					row.remove();
				});

				idArr.push(row.attr("id"));
			});
			
			var cct = $('input[name=csrf_test_name]').val();
			
			$.post(opts.delUrl, {id: idArr, csrf_test_name: cct});
		}
		
		return false;
	}
	
	/* ------------------------------------------------------------*/
	
	/* ----------------------- dzgnFileInput --------------------------*/
	
	$.fn.dzgnFileInput = function(options){
		var defaults = {
			name: "file",
			numberOfFile: 1
		};
		
		var $this = $(this);
		var opts = $.extend(defaults, options);
		
		for (var i=1; i<=opts.numberOfFile; ++i) {
			$this.append(
					'<div class="file-upload">' +
						'<input type="text" name="" class="fakeFileUpload" disabled="disabled"/>' +
						'<label class="file-browse">' +
							'<input type="file" name="'+ opts.name + i +'" class="file-input" />' +
						'</label>' +
					'</div>');
			
			$this.find('.file-input').change(function(e){
				var filename = $(this).val().split('\\');
				filename ? (filename = filename[filename.length-1]) : filename;
				$(this).parent().prev().val(filename);
			});
		}
		
		return false;
	}
	
	/* ------------------------------------------------------------*/
	
	$.fn.mLightBox = function(options) {
		var defaults = {
			imageLoading:			options.imgPath+'lightbox-ico-loading.gif',
			imageBtnPrev:			options.imgPath+'lightbox-btn-prev.gif',
			imageBtnNext:			options.imgPath+'lightbox-btn-next.gif',
			imageBtnClose:			options.imgPath+'lightbox-btn-close.gif'
		};
		
		var $this = $(this);
		var opts = $.extend(defaults, options);
		
		return this.each(function(e){
			$this.lightBox(opts);
		});
	}
	
	/* -------------- m custom popup inheritance from ui.dialog ---- */
	
	$.fn.mPopup = function(options){
		var defaults = {
	    	autoOpen: true,
	    	resizable: false,
	    	modal: true,
	    	width: 520,
	    	hide: 'slide',
	    	show: 'slide',
			buttons: {
				ok: {
					text: "",
					operation: {
						extraData: {},
						response: null,
						job: function(){
						},
						success: {
							reload: false,
							msg: ""
						},
						fail: {
							msg: ""
						},
						loadingText: "",
						clearForm: true
					}
				},
				cancel: {
					relaod: false,
					text: ""
				}
			}
		};
		
		var $this = this;
		var that = $(this);
		var opts = $.extend(defaults, options);
		var okBtn = opts.buttons.ok;
		var cancelBtn = opts.buttons.cancel;
		var response = okBtn.operation.response;
		
		if (response != null)
		{
			that.validate({
				errorPlacement: function(error, element) {
					response.addClass('response-false').html(error);
				},
				success: function(){
					response.removeClass('response-false').empty();
				}
			});
			
			return this.each(function(e){
				$this.dialog($.extend(opts, {
					close: function(){
						that.find('input[name!=csrf_test_name], input[name!=br_person], textarea, select').removeClass('error');
						that.children('.response-true').removeClass('response-true').empty();
						that.children('.response-false').removeClass('response-false').empty();
					},
					buttons: [{
						text: okBtn.text,
						click: function(){
							if (that.valid()) {
								that.ajaxSubmit({
									success: function(responseText, statusText, xhr, $form) {
										console.log(responseText);
										if (responseText != "success") {
											$(".ui-dialog-buttonset").show();
											response.removeClass('response-true').removeClass('ajax_loading').empty();
											if (responseText == "fail")
												response.addClass('response-false').html(okBtn.operation.fail.msg);
											else
												response.addClass('response-false').html(responseText);
										}
										else {
											response.removeClass('response-false').removeClass('ajax_loading').empty();
											response.addClass('response-true').html(okBtn.operation.success.msg);
											
											setTimeout(function(){
												response.removeClass('response-true').empty();
												
												okBtn.operation.job && okBtn.operation.job.call();
												
												if (okBtn.operation.success.reload) {
													that.dialog("destroy");
													location.reload();
												}
												else
													that.dialog("close");
											}, 2000);
										}
									},
									beforeSubmit: function(formData, jqForm, options){
										console.log(formData);
										response.removeClass('response-false').empty();
										response.addClass('ajax_loading').html(okBtn.operation.loadingText);
										$(".ui-dialog-buttonset").hide();
									},
									data: $.extend({csrf_test_name: $('input[name=csrf_test_name]').val()}, okBtn.operation.extraData),
									clearForm: okBtn.operation.clearForm
								});
							}
						}
					},{
						text: cancelBtn.text,
						click: function(){							
							if (cancelBtn.reload) {
								that.dialog("destroy");
								location.reload();
							}
							else
								that.dialog("close");
						}
					}
					]
				}));
			});
		}
		
		return false;
	}
	
	/* --------------------------------------------------------------------------------- */
	
	/* --------------------------- post JSON custom method ----------------------------- */
	
    $.extend({
        postJSON: function (url, jsonData, success, options) {
        	
        	var data = jsonData ? JSON.stringify(jsonData) : null;
        	var a = [];
        	var cct = $('input[name=csrf_test_name]').val();
        	
        	JSON.parse(data, function(key, value){
        		if (typeof value !== "object")
        			a.push(key+"="+(value == "" ? "" : value));
        	});
        	
        	a.push("csrf_test_name="+cct);
        	
			var data = a.join("&");
			
            var config = {
                url: url,
                type: "POST",
                data: data,
                dataType: "json",
                success: success
            };
            
            $.ajax($.extend(options, config));
        }
    });
});

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

	$.fn.createPopupResponse = function(responseObj, msg, type) {
		if (type == "success") {
			responseObj.removeClass('response-false').empty();
			responseObj.addClass('response-true').html(msg);
			
			var popup = $(this);
			
			setTimeout(function(){
				popup.dialog("close");
				popup.find('input, textarea').val('');
				responseObj.removeClass('response-true').empty();
			}, 2000);
			
		} else if (type == "fail") {
			responseObj.removeClass('response-true');
			responseObj.addClass('response-false').html(msg);
		} if (type == "warning") {
			responseObj.addClass('response-warning').html(msg);
		}
		
		return false;
	}

	$.fn.expandText = function(options){
		var defaults = {
			slicePoint: 200,
			expandText: '<img src="'+options.arrowImg+'expander_arrow_right.png" width="16" height="16" style="position:relative; top:5px;"/>',
			userCollapseText: '<img src="'+options.arrowImg+'expander_arrow_left.png" width="16" height="16" style="position:relative; top:5px;"/>'
		};
		
		var opt = $.extend(defaults, options);
		
		return this.expander(opt);
	}
	
	function displayConfirmPopup(title, content, operation) {
		$('<div>'+content+'</div>').dialog({
	    	autoOpen: true,
	    	resizable: false,
	    	modal: true,
	    	width: "auto",
	    	hide: 'slide',
	    	show: 'slide',
	    	title: title,
	    	buttons: {
	    		"Evet": function(){
	    			operation.call();
	    			$(this).dialog("close");
	    			
	    		},
	    		"HayÄ±r": function(){
	    			$(this).dialog("close");
	    		}
	    	}
		});
	}
	
	function displayInfoPopup(title, content) {
		$('<div>'+content+'</div>').dialog({
	    	autoOpen: true,
	    	resizable: false,
	    	modal: true,
	    	width: 300,
	    	hide: 'slide',
	    	show: 'slide',
	    	title: title,
	    	zIndex: 3999,
	    	buttons: {
	    		"Tamam": function(){
	    			$(this).dialog("close");
	    			
	    		}
	    	}
		});
	}
	
	$.validator.setDefaults({
		errorElement: "span",
		errorClass: 'error',
		onfocusout: false
	});
	
	function validate(formBox, responseBox){
		formBox.validate({
			errorPlacement: function(error, element) {
				responseBox.addClass('response-false').html(error);
			},
			success: function(){
				responseBox.removeClass('response-false').empty();
			}
		});
	}
	
	function createResponse(type, msg) {
		if (type == "success") {
			$('html, body').animate({ scrollTop: $('#response').offset().top }, 'slow');
			$('#response').removeClass('response-false');
			$('#response').addClass('response-true').html(msg).fadeIn('slow').delay(5000).fadeOut('slow');
		} else if (type == "fail") {
			$('html, body').animate({ scrollTop: $('#response').offset().top }, 'slow');
			$('#response').removeClass('response-true');
			$('#response').addClass('response-false').html(msg).fadeIn('slow').delay(5000).fadeOut('slow');
		} else if (type == "warning") {
			$('html, body').animate({ scrollTop: $('#response').offset().top }, 'slow');
			$('#response').addClass('response-warning').html(msg).fadeIn('slow').delay(5000).fadeOut('slow');
		}
	}
