/**********************************************

myAreaSlider.jp：左右のボタンを押すとコンテンツがするーって移動するようなやつ。

使い方：とりあえずこのjsを読み込むことから始まる。
で、どこかで↓みたいな感じで実行してね。
var sliderObject = new myAreaSlider(argument);
sliderObject.startAreaSlider();

argument：せってい
{id:string,columnNum:integer,rowNum:integer,paddingTop:integer,paddingLeft:integer,vSpace:integer,hSpace:integer,type:character,direction:character}
id：HTML上のid名。文字列。
columnNum：列数。
rowNum：行数。
paddingTop：表示エリアと中に配置するアイテムの上部の隙間。
paddingLeft：表示エリアと中に配置するアイテムの左部の隙間。
vSpace：配置アイテム同士の横方向の隙間。
hSpace：配置アイテム同士の縦方向の隙間。
type："h" or "v"。アイテムを配置する順。h：横方向。v：縦方向。
direction："h" or "v"。スクロール方向。h：横方向。v：縦方向。

※IE6だと、縦方向のスクロールがうまくいかないです！

html･css上の注意
idで指定したdiv内に、特定のクラスを作ります。で、それに役割をふります。
slidePrev：クリックすると前のページに移動するボタン的なものになる。
slideNext：クリックすると次のページに移動するボタン的なものになる。
slideArea：Divにあたえること。この中のslideContentクラスを持つDivを、ボタンが押されるたびに移動させてる。表示エリアのようなもの。
slideContent：※slideArea直下につくること！これがスライドするページの本体みたいなdiv。cssとかで装飾とか設定しないで下さい。

slideContentの直下のdivを、引数で設定した行列数とか隙間で配置していく。

slidePrev、slideNextに関しては、先頭ページ（最終ページ）のときのクラスと、それ以外のクラスを設定できる。
prev(next)ON：先頭（最終）ページじゃないとき。要は通常状態。
prev(next)OFF：先頭（最終）ページのとき。要はもうこれ以上ないよってときの状態。
上記の名前でクラスをつくっておくと、それが当たるようになる。

いじょ。
**********************************************/
var myAreaSlider = function(argument){
	this.argObj = argument;
	this.startAreaSlider = function(){
		
		var arg = this.argObj;
		var slideObj = $("#" + this.argObj.id);
		var slidePrevObj = $(slideObj.find(".slidePrev"));
		var slideNextObj = $(slideObj.find(".slideNext"));
		var slideAreaObj = $(slideObj.children(".slideArea"));
		var slideContentObj = $(slideAreaObj.children(".slideContent"));
		var slideItems = slideContentObj.children("div");
		var itemLength = slideItems.length;
		var itemWidth = $(slideItems[0]).width();
		var itemHeight = $(slideItems[0]).height();
		var areaWidth = slideAreaObj.width();
		var areaHeight = slideAreaObj.height();
		var CR = this.argObj.columnNum * this.argObj.rowNum;
		var pages = Math.ceil(itemLength / CR);
		var current = 1;

		var init = function(){
			var dist = (arg.direction === "h") ? areaWidth : areaHeight;
			var getPosition = function(argNum){
				var offsetX = (arg.direction === "h") ? Math.floor(argNum / CR) * areaWidth : 0;
				var offsetY = (arg.direction === "v") ? Math.floor(argNum / CR) * areaHeight : 0;
				var left = arg.paddingLeft + (itemWidth + arg.hSpace) * ((arg.type === "h") ? (argNum % CR) % arg.columnNum : Math.floor( (argNum % CR) / arg.rowNum)) + offsetX;
				var top = arg.paddingTop + (itemHeight + arg.vSpace) * ((arg.type === "v") ? (argNum % CR) % arg.rowNum : Math.floor( ( argNum % CR ) / arg.columnNum )) + offsetY;
				return {"top":top,"left":left};
			};
			
			var setSlideItem = function(){
				for(var i = 0;i < itemLength;i++){
					var pos = getPosition(i);
					$(slideItems[i]).css("position","absolute");
					$(slideItems[i]).css("top",pos.top);
					$(slideItems[i]).css("left",pos.left);
				}
			};
			
			var pageNext = function(){
				if(current < pages){
					(arg.direction === "h") ? slideContentObj.animate({left:"-="+ dist +"px"}) : slideContentObj.animate({top:"-="+ dist +"px"});
					current++;
					checkCurrent();
				}
			};
			
			var pagePrev = function(){
				if(current > 1){
					(arg.direction === "h") ? slideContentObj.animate({left:"+="+ dist +"px"}) : slideContentObj.animate({top:"+="+ dist +"px"});
					current--;
					checkCurrent();
				}
			};
			
			var checkCurrent = function(){
				if(pages === 1){
					slideNextObj.addClass("nextOff");
					slidePrevObj.addClass("prevOff");
				}else if(current === pages){
					slideNextObj.addClass("nextOff");
					slidePrevObj.removeClass("prevOff");
				}else if(current === 1){
					slidePrevObj.addClass("prevOff");
					slideNextObj.removeClass("nextOff");
				}else{
					slideNextObj.removeClass("nextOff");
					slidePrevObj.removeClass("prevOff");
				}
			};
			
			slideAreaObj.css("overflow","hidden");

			slideContentObj.css("position","absolute");
			
			setSlideItem();
			
			slidePrevObj.css("cursor","pointer");
			slideNextObj.css("cursor","pointer");
			
			checkCurrent();
			
			slidePrevObj.bind("click",function(e){
				pagePrev();
			});
			
			slideNextObj.bind("click",function(e){
				pageNext();
			});
		};
		
		init();
	};
};
