/*! 
jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)  
Liscensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt
*/
;(function($){ // secure $ jQuery alias
/*******************************************************************************************/
// Created: 2008-06-04 | Updated: 2009-03-24
/*******************************************************************************************/
// Events: drag, dragstart, dragend
/*******************************************************************************************/

// jquery method
$.fn.drag = function( fn1, fn2, fn3 ){
	if ( fn2 ) this.bind('dragstart', fn1 ); // 2+ args
	if ( fn3 ) this.bind('dragend', fn3 ); // 3 args
	return !fn1 ? this.trigger('drag') // 0 args
		: this.bind('drag', fn2 ? fn2 : fn1 ); // 1+ args
	};

// local refs
var $event = $.event, $special = $event.special,

// special event configuration
drag = $special.drag = {
	not: ':input', // don't begin to drag on event.targets that match this selector
	distance: 0, // distance dragged before dragstart
	which: 1, // mouse button pressed to start drag sequence
	dragging: false, // hold the active target element
	setup: function( data ){
		data = $.extend({ 
			distance: drag.distance, 
			which: drag.which, 
			not: drag.not
			}, data || {});
		data.distance = squared( data.distance ); //  x� + y� = distance�
		$event.add( this, "mousedown", handler, data );
		if ( this.attachEvent ) this.attachEvent("ondragstart", dontStart ); // prevent image dragging in IE...
		},
	teardown: function(){
		$event.remove( this, "mousedown", handler );
		if ( this === drag.dragging ) drag.dragging = drag.proxy = false; // deactivate element
		selectable( this, true ); // enable text selection
		if ( this.detachEvent ) this.detachEvent("ondragstart", dontStart ); // prevent image dragging in IE...
		}
	};
	
// prevent normal event binding...
$special.dragstart = $special.dragend = { setup:function(){}, teardown:function(){} };

// handle drag-releatd DOM events
function handler ( event ){ 
	var elem = this, returned, data = event.data || {};
	// mousemove or mouseup
	if ( data.elem ){ 
		// update event properties...
		elem = event.dragTarget = data.elem; // drag source element
		event.dragProxy = drag.proxy || elem; // proxy element or source
		event.cursorOffsetX = data.pageX - data.left; // mousedown offset
		event.cursorOffsetY = data.pageY - data.top; // mousedown offset
		event.offsetX = event.pageX - event.cursorOffsetX; // element offset
		event.offsetY = event.pageY - event.cursorOffsetY; // element offset
		}
	// mousedown, check some initial props to avoid the switch statement
	else if ( drag.dragging || ( data.which>0 && event.which!=data.which ) || 
		$( event.target ).is( data.not ) ) return;
	// handle various events
	switch ( event.type ){
		// mousedown, left click, event.target is not restricted, init dragging
		case 'mousedown':
			$.extend( data, $( elem ).offset(), { 
				elem: elem, target: event.target,
				pageX: event.pageX, pageY: event.pageY
				}); // store some initial attributes
			$event.add( document, "mousemove mouseup", handler, data );
			selectable( elem, false ); // disable text selection
			drag.dragging = null; // pending state
			return false; // prevents text selection in safari 
		// mousemove, check distance, start dragging
		case !drag.dragging && 'mousemove': 
			if ( squared( event.pageX-data.pageX ) 
				+ squared( event.pageY-data.pageY ) //  x� + y� = distance�
				< data.distance ) break; // distance tolerance not reached
			event.target = data.target; // force target from "mousedown" event (fix distance issue)
			returned = hijack( event, "dragstart", elem ); // trigger "dragstart", return proxy element
			if ( returned !== false ){ // "dragstart" not rejected
				drag.dragging = elem; // activate element
				drag.proxy = event.dragProxy = $( returned || elem )[0]; // set proxy
				}
		// mousemove, dragging
		case 'mousemove': 
			if ( drag.dragging ){
				returned = hijack( event, "drag", elem ); // trigger "drag"		
				if ( $special.drop ){ // manage drop events
					$special.drop.allowed = ( returned !== false ); // prevent drop
					$special.drop.handler( event ); // "dropstart", "dropend"
					}
				if ( returned !== false ) break; // "drag" not rejected, stop		
				event.type = "mouseup"; // helps "drop" handler behave
				}
		// mouseup, stop dragging
		case 'mouseup': 
			$event.remove( document, "mousemove mouseup", handler ); // remove page events
			if ( drag.dragging ){
				if ( $special.drop ) $special.drop.handler( event ); // "drop"
				hijack( event, "dragend", elem ); // trigger "dragend"	
				}
			selectable( elem, true ); // enable text selection
			drag.dragging = drag.proxy = data.elem = false; // deactivate element
			break;
		} 
	return true;
	};

// set event type to custom value, and handle it
function hijack ( event, type, elem ){
	event.type = type; // force the event type
	var result = $.event.handle.call( elem, event );
	return result===false ? false : result || event.result;
	};
	
// return the value squared	
function squared ( value ){ return Math.pow( value, 2 ); };

// suppress default dragstart IE events...
function dontStart(){ return ( drag.dragging === false ); };	

// toggles text selection attributes	
function selectable ( elem, bool ){ 
	if ( !elem ) return; // maybe element was removed ? 
	elem.unselectable = bool ? "off" : "on"; // IE
	elem.onselectstart = function(){ return bool; }; // IE
	//if ( document.selection && document.selection.empty ) document.selection.empty(); // IE
	if ( elem.style ) elem.style.MozUserSelect = bool ? "" : "none"; // FF
	};	
	
/*******************************************************************************************/
})( jQuery ); // confine scope
//copyright zi>>
(function($){
	$.fn.navigation = function(setting, navigate){
		function memory(){}
		var pos = new memory;
		$$ = $(this);
		with(setting)
			if(typeof count == "number" && typeof now == "number" && typeof page_number){
				memory.prototype.now = now;
				function clicked(){
					if(typeof navigate == "function" && pos.now != $(this).text()  ){
						navigate($(this).text()  )
						$$.find("span.now").removeClass("now");
						$$.find("div.view span").removeClass("now");
						$(this).removeAttr("style").addClass("now");
						memory.prototype.now = $(this).text();
						$$.find("div.scroll div").css({
							left : Math.round(  (pos.now -1)*pos.page_width)
						});
					}
				}
				if(count > page_number){
					$$.append(
						'<div class="total"></div>'+
						'<div class="view"></div>'+
						'<div class="scroller">'+
							'<div>&nbsp;</div>'+
						'</div>'+
						'<div class="scroll">'+
							'<div>&nbsp;</div>'+
						'</div>'
					);
					memory.prototype.page_width = $$.find("div.scroll").width()/count;
					memory.prototype.scroller_width = Math.round(pos.page_width*page_number);
					$$.find("div.total").append("Всего страниц: "+count);
					$$.find("div.scroller").css({
						"margin-bottom" : -$$.find("div.scroller").height(),
						"z-index" : "999",
						width : pos.scroller_width+"px"
					});
					for(var i = 1; i <= page_number; i++){
						$$.find("div.view").append("<span>"+i+"</span>");
						memory.prototype.begin = i;
					}
					memory.prototype.begin = memory.prototype.begin - page_number;
					$$.find("div.view span").hover(
						function(){
							if($(this).text() != pos.now )
								$(this).addClass("navigation_hover");
						},
						function(){
							if($(this).text() != pos.now )
								$(this).removeClass("navigation_hover");
						}
					).each(function(){
						if($(this).text() == pos.now )
							$(this)
							.bind("click", clicked)
							.addClass("now");
						else
							$(this).bind("click", clicked);
					});
					$$.find("div.scroll div").css({
						width : Math.round(pos.page_width),
						left : Math.floor(  (pos.now -1)*pos.page_width)
					});
					memory.prototype.width = $$.width();
					memory.prototype.parent = {};
					memory.prototype.parent.l = $$.find("div.scroll").position().left + ($$.find("div.scroller").width()/2);
					memory.prototype.parent.w = $$.find("div.scroll").width() - $$.find("div.scroller").width();
					memory.prototype.parent.left = $$.find("div.scroll").position().left;
					function resize(){
						if($$.width() != pos.width)
							with(setting){
								memory.prototype.page_width = $$.find("div.scroll").width()/count;
								memory.prototype.scroller_width = Math.round(pos.page_width*page_number);
								memory.prototype.parent = {};
								memory.prototype.parent.l = $$.find("div.scroll").position().left + ($$.find("div.scroller").width()/2);
								memory.prototype.parent.w = $$.find("div.scroll").width() - $$.find("div.scroller").width();
								$$.find("div.scroller").css({
									width : pos.scroller_width+"px",
									left : Math.round(pos.page_width * pos.begin)
								});
								$$.find("div.scroll div").css({
									width : Math.round(pos.page_width),
									left : Math.round(  (pos.now -1)*pos.page_width)
								});
								memory.prototype.width = $$.width();
							}
						setTimeout(function(){
							resize();
						}, 500);
					}
					resize();
					var moved = function(position, in_array){
						var page = Math.round(position/pos.page_width);
						var i = 1;
						if(page !== pos.begin){
							$(  $$.find("div.view").get(in_array)  ).find("span").each(function(){
								if(i + page <= count)
									$(this).html(
										i + page
									)
								else
									$(this).html("&nbsp;")
								if($(this).text() == pos.now )
									$(this).css({
										
									})
									.addClass("now");
								else
									$(this)
									.css({
										
									})
									.removeClass("now");
								i++;
							});
							memory.prototype.begin = page;
						}
					}
					$$.find("div.scroll").click(function(e){
						var scroller_width = $$.find("div.scroller").width();
						var scroller_left = $$.find("div.scroller").position().left - $$.find("div.scroll").position().left;
						var scroller_right = scroller_left + scroller_width;
						var __position = e.pageX - $(this).position().left;
						var index = $$.find("div.scroll").index(this);
						if(__position < scroller_left){
							var position = __position;
							moved(position, index);
							$(  $$.find("div.scroller").get(index)  ).css({
								left : __position
							});
						}
						if(__position > scroller_right){
							if(  __position > $$.find("div.scroll").width()  )
								__position = $$.find("div.scroll").width() ;
							var position = __position - scroller_width;
							moved(position, index);
							$(  $$.find("div.scroller").get(index)  ).css({
								left : __position - scroller_width
							});
						}
					});
					$$.find("div.scroller div").drag(function(e){
						var index = $$.find("div.scroller div").index(this);
						var position = Math.round(e.pageX - pos.parent.l);
						if(position >= 0 && position <= pos.parent.w){
							moved(position, index);
							$(  $$.find("div.scroller").get(index)  ).css({
								left : position
							});
						}
					});
					$$.find("div.scroller").drag(function(e){
						var index = $$.find("div.scroller").index(this);
						var position = Math.round(e.pageX - pos.parent.left - pos.clicked);
						if(position >= 0 && position <= pos.parent.w){
							moved(position, index);
							$(this).css({
								left : position
							});
						}
					}).mousedown(function(e){
						memory.prototype.clicked = e.pageX - $(this).position().left
					});
				}
				else
				{
					$(this).append('<div class="total"></div><div class="view"></div>');
					$$.find("div.total").append("Страниц: "+count);
					for(var i = 1; i <= count; i++){
						$$.find("div.view").append("<span>"+i+"</span>");
						memory.prototype.begin = i;
					}
					$$.find("div.view span").hover(
						function(){
							if($(this).text() != pos.now )
								$(this).addClass("navigation_hover");
						},
						function(){
							if($(this).text() != pos.now )
								$(this).removeClass("navigation_hover");
						}
					).each(function(){
						if($(this).text() == pos.now )
							$(this)
							.bind("click", clicked)
							.addClass("now");
						else
							$(this).bind("click", clicked);
					});
				}
			}
	}
})($);