//Textbox hint
$.fn.tbHinter = function(options) {
	var defaults = {
		text: 'Enter a text ...',
		hclass: 'tbHinter',
	}
	var options = $.extend(defaults, options)
	$(this).each(function(){
		var parent=$(this).parent()
		$(this).focus(function(){
			$('.'+options.hclass,parent).remove()
		})
		$(this).blur(function(){
			if($(this).val() == ''){
				parent.prepend("<span class='"+options.hclass+"'>"+options.text+"</span>")
			}
		})
		$(this).blur();
	})
}

//Add AjaxFade effect to TABS
$.tools.tabs.addEffect("ajaxFade", function(tabIndex, done) {
	var fadeInSpeed=this.getConf().fadeInSpeed
	var fadeOutSpeed=this.getConf().fadeOutSpeed
	var href=this.getTabs().eq(tabIndex).attr('href')
	var pane=this.getPanes()
	pane.fadeOut(fadeOutSpeed,function(){})
	$.ajax({
		url: href,
		success: function(data){
			pane.html(data).fadeIn(fadeInSpeed,function(){
				//Dynamic elements
				$('.dynamic',pane).each(function(){
					var parentClass=$(this).attr('parent')
					var wrapType=$(this).attr('wrap')
					$(this).dynamicBox({
						parentClass: parentClass,
						wrapType: wrapType,
						success: function(wrapper,elem){
							wrapper.css('display','inline-block')
						}
					})
				})
			})
		}
	})
	done.call()
})

//Localize dateInput plugin
$.tools.dateinput.localize("bg", {
	months:			'Януари,Февруари,Март,Април,Май,Юни,Юли,Август,Септември,Октомври,Ноември,Декември',
	shortMonths:	'Ян,Фев,Мар,Апр,Май,Юни,Юли,Авг,Сеп,Окт,Ное,Дек',
	days:			'Неделя,Понеделник,Вторник,Сряда,Четвъртък,Петък,Събота',
	shortDays:		'Нед,Пон,Вт,Ср,Чет,Пет,Съб'
})

//Set overlay
$.fn.setOverlayRel=function(options){
	var def={
		fixed: false,
		color: '#000000',
		opacity: 0.75,
		top: '10%',
		effect: 'apple',
		onBeforeLoad: function(){},
		onLoad: function(){},
		onBeforeClose: function(){},
		onClose: function(){},
	}
	var settings=$.extend(def,options)
	$(this).overlay({
		mask: {
			color: settings.color,
			opacity: settings.opacity,
		},
		effect: settings.effect,
		onBeforeLoad: function() {
			var wrap=this.getOverlay()
			wrap.load(this.getTrigger().attr('href'),function(){})
			settings.onBeforeLoad()
		},
		onLoad: function(){
			$('img:last').hide()
			var api=this
			$('.close').click(function(){
				api.close()
			})
			settings.onLoad()
		},
		onBeforeClose: function(){
			var wrap=this.getOverlay()
			wrap.html('')
			settings.onBeforeClose()
		},
		onClose: function(){
			settings.onClose()
		},
		fixed: settings.fixed,
		oneInstance: false,
		top: settings.top,
	})
}

$.fn.ajaxLink=function(options) {
	var def={
		speed: 200,
		getUrlFrom: 'href',
		success: function(data){}
	}
	var settings=$.extend(def,options)
	return this.each(function(i){
		var url=$(this).attr(settings.getUrlFrom)
		$(this).click(function(){
			if(url){
				$(settings.target).fadeOut(settings.speed,function(){
					$.ajax({
						url: url,
						success: function(data){
							$(settings.target).html(data).fadeIn(settings.speed)
							settings.success(data)
						}
					})
				})
			}
			return false
		})
	})
}

//Validate Data-equals
$.tools.validator.fn('[data-equals]', "Value not equal with the $1 field!", function(input) {
	var name=input.attr('data-equals'),
	field=this.getInputs().filter('[name=' + name + ']')
	return input.val()==field.val() ? true : [name]
})

//Validate Check old Pass
$.tools.validator.fn('[check-oldpass]', 'Wrong old password!',function(input) {
	var oldpass=input.attr('check-oldpass')
	$.ajax({
		url: 'includes/actions/getCryptPass.php?pass='+input.val(),
		async: false,
		success: function(data){
			if(data==oldpass){
				$result=true
			}else{
				$result=false
			}
		}
	})
	return $result ? true : false
})

//Validate Login
$.tools.validator.fn('[login]', 'The $1 is invalid!',function(input) {
	var type=input.attr('login')
	var username=this.getInputs().filter('[name=username]').val()
	var password=this.getInputs().filter('[name=password]').val()
	$.ajax({
		url: 'includes/actions/chkLogin.php?type='+type+'&username='+username+'&password='+password,
		async: false,
		success: function(data){
			$result=data
		}
	})
	return $result=='true' ? true : [type]
})

//Localize Form Validator
$.tools.validator.localize("bg", {
	'*'				: 'Моля, попълнете полето коректно!',
	':email'  		: 'Моля, въведете валиден E-mail!',
	'[required]' 	: 'Моля, попълнете задължителното поле!',
	'[check-oldpass]': 'Грешна стара парола!',
	'[login]'		: 'Грешка в $1!',
})

//Select Area
$.fn.selectArea=function(options){
	var pane=$(this)
	var def={
		leyarClass: 'selectArea',
		grid: 1,
		start: function(){},
		stop: function(){},
		onSelect: function(){},
	}
	var settings=$.extend(def,options)
	pane.mousedown(function(e){
		var relX=e.pageX-pane.offset().left
		var relY=e.pageY-pane.offset().top
		$startX=Math.floor(relX/settings.grid)*settings.grid
		$startY=Math.floor(relY/settings.grid)*settings.grid
		
		//start Custom
			//Refresh grid
			if(!$.saveGrid){$('.'+settings.leyarClass,pane).remove()}
			//Get occupied items
			$occItems=[]
			$('.occupied',pane).each(function(){
				//Get items
				var startRow=$(this).position().top/settings.grid+1
				var endRow=($(this).position().top+$(this).outerHeight())/settings.grid
				var startCol=$(this).position().left/settings.grid+1
				var endCol=($(this).position().left+$(this).outerWidth())/settings.grid
				for(var r=startRow;r<=endRow;r++){
					for(var c=startCol;c<=endCol;c++){
						$occItems.push(r+'_'+c)
					}
				}
			})
			var checkStartOcc=true
			var row=$startY/settings.grid+1
			var col=$startX/settings.grid+1
			var startItem=row+'_'+col
			if($.inArray(startItem,$occItems)>-1){checkStartOcc=false}
		//end Custom
		if(checkStartOcc){
			pane.append("<div class='"+settings.leyarClass+" active' style='top: "+$startY+"px; left: "+$startX+"px;'></div>")
		}
		
		settings.start($('.'+settings.leyarClass+'.active',pane))
	})
	pane.mousemove(function(e){
		var target=$('.'+settings.leyarClass+'.active',pane)
		if(target.length>0){
			var newTop,newRight,newBottom,newLeft
			var relX=e.pageX-pane.offset().left
			var relY=e.pageY-pane.offset().top
			if(relX<$startX){
				newLeft=Math.floor(relX/settings.grid)*settings.grid
				newRight=Math.ceil((pane.width()-$startX)/settings.grid)*settings.grid-settings.grid
			}else{
				newLeft=Math.ceil($startX/settings.grid)*settings.grid
				newRight=Math.floor((pane.width()-relX)/settings.grid)*settings.grid
			}
			if(relY<$startY){
				newTop=Math.floor(relY/settings.grid)*settings.grid
				newBottom=Math.ceil((pane.height()-$startY)/settings.grid)*settings.grid-settings.grid
			}else{
				newTop=Math.ceil($startY/settings.grid)*settings.grid
				newBottom=Math.floor((pane.height()-relY)/settings.grid)*settings.grid
			}

			//Start Custom
				//Get items
				var startRow=newTop/settings.grid+1
				var endRow=(pane.height()-newBottom)/settings.grid
				var startCol=newLeft/settings.grid+1
				var endCol=(pane.width()-newRight)/settings.grid
				$checkOcc=true
				var newItems=[]
				for(var r=startRow;r<=endRow;r++){
					for(var c=startCol;c<=endCol;c++){
						newItems.push(r+'_'+c)
					}
				}
				var newItems_l=newItems.length-1
				$.map(newItems,function(v,i){
					if($.inArray(v,$occItems)>-1){$checkOcc=false;return false}
					if(i==newItems_l&&$checkOcc){
						target.css({'top':newTop+'px','left':newLeft+'px','bottom':newBottom+'px','right':newRight+'px'})
					}
				})
				$('.'+settings.leyarClass,pane).mouseout()
			//End Custom
			//target.css({'top':newTop+'px','left':newLeft+'px','bottom':newBottom+'px','right':newRight+'px'})
			settings.onSelect(target)
		}
		
	})
	$(document).mouseup(function(e){
		var target=$('.'+settings.leyarClass+'.active',pane)
		$('.'+settings.leyarClass+'.active').removeClass('active').addClass('occupied').mousedown(function(e){
			e.stopPropagation()
		})
		$.saveGrid=false
		settings.stop(target)
	})
}

