//requires yahoo, yahoo-utils, calendar, connection, dom, yui-ext-core

DocList = function(docsslot, pager, statusline, datasource, docid, showasmedia, date, filter){
	this.docsslot=docsslot;
	this.pager=pager;
	this.statusline=statusline;
	this.datasource=datasource;
	this.docid=docid;
	this.showasmedia=showasmedia;
	this.current = date;


	this.now = new Date();
	this.currangestart=YAHOO.widget.DateMath.subtract(this.current, "D", this.current.getDate()-1);
	this.currangeend=YAHOO.widget.DateMath.add(this.currangestart, "M", 1);

	this.months = new Array('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');
	this.months_ = new Array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');

	this.filterby=filter;
	
	switch(this.filterby){
		case "month":
			this.currangestart=YAHOO.widget.DateMath.subtract(this.currangestart, "D", this.currangestart.getDate()-1);
			this.currangeend=YAHOO.widget.DateMath.add(this.currangestart, "M", 1);
			break;
		case "day":
			if(YAHOO.widget.DateMath.between(this.current, this.currangestart, this.currangeend)){
				this.currangestart=this.current;
			}
			this.currangeend=YAHOO.widget.DateMath.add(this.currangestart, "D", 1);
			break;
	}
	
	
	this.listlenght=0;

	this.halfpagewindow=5;
	this.page=1;
	this.docsperpage=15;
}


DocList.prototype = {

	el : null,
	datasource : null,
	docid : null,

	now : null,
	currangestart : null,
	currangeend : null,
	months : null,
	months_ : null,
	filterby : null,
	listlenght : null,

	halfpagewindow : null,
	page : null,
	docsperpage : null,

	renderDocs : function (o){

		YAHOO.util.Dom.get(this.statusline).style.display="none";
		YAHOO.util.Dom.removeClass(this.statusline, 'loading');

		YAHOO.util.Dom.get(this.docsslot).innerHTML=o.responseText;
		this.listlenght=parseInt(YAHOO.util.Dom.get('curlenght').value);
		this.buildPager();
	},

	getDocs : function (){

		YAHOO.util.Dom.get(this.statusline).style.display="block";
		YAHOO.util.Dom.get(this.statusline).innerHTML="Загрузка...";
		YAHOO.util.Dom.addClass(this.statusline, 'loading');

		callback={
			success: this.renderDocs,
			//failure: this.handleFailure,
			scope: this
		}

		var start=this.currangestart.getFullYear()+'-'+((this.currangestart.getMonth()+1<10)?'0'+(this.currangestart.getMonth()+1):(this.currangestart.getMonth()+1))+'-'+((this.currangestart.getDate()<10)?'0'+(this.currangestart.getDate()):(this.currangestart.getDate()));
		var end=this.currangeend.getFullYear()+'-'+((this.currangeend.getMonth()+1<10)?'0'+(this.currangeend.getMonth()+1):(this.currangeend.getMonth()+1))+'-'+((this.currangeend.getDate()<10)?'0'+(this.currangeend.getDate()):(this.currangeend.getDate()));
		transaction = YAHOO.util.Connect.asyncRequest('GET', this.datasource+'?operation=getdocs&docid='+this.docid+'&showasmedia='+this.showasmedia+'&startdate='+start+'&enddate='+end+'&page='+this.page+'&chunksize='+this.docsperpage+'&rand='+Math.random(), callback, null);
	},

	setRangeType : function (type){
		switch(type){
			case "month":
			this.currangestart=YAHOO.widget.DateMath.subtract(this.currangestart, "D", this.currangestart.getDate()-1);
			this.currangeend=YAHOO.widget.DateMath.add(this.currangestart, "M", 1);
			this.filterby='month';

			break;
			case "week":

			if(YAHOO.widget.DateMath.between(this.current, this.currangestart, this.currangeend)){
				this.currangestart=YAHOO.widget.DateMath.subtract(this.current, "D", this.current.getDay()-1);
			}else{
				this.currangestart=YAHOO.widget.DateMath.subtract(this.currangestart, "D", this.currangestart.getDay()-1);
			}

			this.currangeend=YAHOO.widget.DateMath.add(this.currangestart, "D", 6);
			this.filterby='week';

			break;
			case "day":

			if(YAHOO.widget.DateMath.between(this.current, this.currangestart, this.currangeend)){
				this.currangestart=this.current;
			}
			this.currangeend=YAHOO.widget.DateMath.add(this.currangestart, "D", 1);

			this.filterby='day';

			break;

		}

		this.page=1;
		this.getDocs();
	},


	setPage : function (pagenum){
		this.page=pagenum;
		this.getDocs();
	},

	setMonth : function (offset){
		this.currangestart=YAHOO.widget.DateMath.add(this.currangestart, "M", offset);
		this.currangeend=YAHOO.widget.DateMath.add(this.currangeend, "M", offset);
		this.page=1;
		this.getDocs();
	},

	setWeek : function (offset){
		this.currangestart=YAHOO.widget.DateMath.add(this.currangestart, "W", offset);
		this.currangeend=YAHOO.widget.DateMath.add(this.currangeend, "W", offset);
		this.page=1;
		this.getDocs();
	},
	setDay : function (offset){
		this.currangestart=YAHOO.widget.DateMath.add(this.currangestart, "D", offset);
		this.currangeend=YAHOO.widget.DateMath.add(this.currangeend, "D", offset);
		this.page=1;
		this.getDocs();
	},


	buildPager : function (){
		switch(this.filterby){
			case "month":
			stateblock='<p>Отсортировано: &nbsp; <strong>по месяцам</strong> &nbsp; <a href="#" onclick="list.setRangeType(\'week\'); return false;">по неделям</a> &nbsp; <a href="#" onclick="list.setRangeType(\'day\'); return false;">по дням</a></p>';

			middleblock='<ul class="month-p">';

			prevmonthstart=YAHOO.widget.DateMath.subtract(this.currangestart, "M", 1);

			middleblock+='<li><a href="#" onclick="list.setMonth(-1); return false;"><img src="/webroot/delivery/pic/ar-l.gif" width="4" height="7" alt="" style="margin-right:2px" /> <span> '+(this.months[prevmonthstart.getMonth()])+' '+(prevmonthstart.getFullYear())+'</span></a></li>';
			middleblock+='<li class="hr"><strong> '+(this.months[this.currangestart.getMonth()])+' '+(this.currangestart.getFullYear())+'</strong></li>';

			nextmonthstart=YAHOO.widget.DateMath.add(this.currangestart, "M", 1);

			if(YAHOO.widget.DateMath.after(nextmonthstart, this.now)){
				middleblock+='<li><span style="color: gray"> '+(this.months[nextmonthstart.getMonth()])+' '+(nextmonthstart.getFullYear())+'</span> <img src="/webroot/delivery/pic/ar-r.gif" width="4" height="7" alt="" style="margin-left:2px" /></li>';
			}else{
				middleblock+='<li><a href="#" onclick="list.setMonth(+1); return false;"> <span>'+(this.months[nextmonthstart.getMonth()])+' '+(nextmonthstart.getFullYear())+' </span> <img src="/webroot/delivery/pic/ar-r.gif" width="4" height="7" alt="" style="margin-left:2px" /></a></li>';
			}

			middleblock+='</ul>';


			break
			case "week":

			stateblock='<p>Отсортировано: &nbsp; <a href="#" onclick="list.setRangeType(\'month\'); return false;">по месяцам</a> &nbsp; <strong>по неделям</strong> &nbsp; <a href="#" onclick="list.setRangeType(\'day\'); return false;">по дням</a></p>';
			middleblock='<ul class="month-p">';


			prevweekstart=YAHOO.widget.DateMath.subtract(this.currangestart, "D", this.currangestart.getDay()+7);
			prevweekend=YAHOO.widget.DateMath.add(prevweekstart, "W", 1);
			middleblock+='<li><a href="#" onclick="list.setWeek(-1); return false;"><img src="/webroot/delivery/pic/ar-l.gif" width="4" height="7" alt="" style="margin-right:2px" /> <span>'+(prevweekstart.getDate())+'&mdash;'+(prevweekend.getDate())+' '+(this.months_[prevweekstart.getMonth()])+'</span></a></li>';

			curweekstart=YAHOO.widget.DateMath.subtract(this.currangestart, "D", this.currangestart.getDay()-1);
			curweekend=YAHOO.widget.DateMath.add(curweekstart, "D", 6);
			middleblock+='<li class="hr"><strong>'+(curweekstart.getDate())+'&mdash;'+(curweekend.getDate())+' '+(this.months_[curweekstart.getMonth()])+'</strong></li>';

			nextweekstart=YAHOO.widget.DateMath.add(curweekstart, "W", 1);
			nextweekend=YAHOO.widget.DateMath.add(nextweekstart, "W", 1);

			if(YAHOO.widget.DateMath.after(nextweekstart, this.now)){
				middleblock+='<li><span style="color: gray">'+(nextweekstart.getDate())+'&mdash;'+(nextweekend.getDate())+' '+(this.months_[nextweekstart.getMonth()])+' </span> <img src="/webroot/delivery/pic/ar-r.gif" width="4" height="7" alt="" style="margin-left:2px" /></li>';
			}else{
				middleblock+='<li><a href="#" onclick="list.setWeek(+1); return false;"> <span>'+(nextweekstart.getDate())+'&mdash;'+(nextweekend.getDate())+' '+(this.months_[nextweekstart.getMonth()])+' </span> <img src="/webroot/delivery/pic/ar-r.gif" width="4" height="7" alt="" style="margin-left:2px" /></a></li>';
			}

			middleblock+='</ul>';

			break
			case "day":
			stateblock='<p>Отсортировано: &nbsp; <a href="#" onclick="list.setRangeType(\'month\'); return false;" >по месяцам</a> &nbsp; <a href="#" onclick="list.setRangeType(\'week\'); return false;">по неделям</a> &nbsp; <strong>по дням</strong></p>';

			middleblock='<ul class="month-p">';

			prevday=YAHOO.widget.DateMath.subtract(this.currangestart, "D", 1);

			middleblock+='<li><a href="#" onclick="list.setDay(-1); return false;"><img src="/webroot/delivery/pic/ar-l.gif" width="4" height="7" alt="" style="margin-right:2px" /> <span> '+prevday.getDate()+' '+(this.months[prevday.getMonth()])+' '+(prevday.getFullYear())+'</span></a></li>';
			middleblock+='<li class="hr"><strong> '+this.currangestart.getDate()+' '+(this.months_[this.currangestart.getMonth()])+' '+(this.currangestart.getFullYear())+'</strong></li>';

			nextday=YAHOO.widget.DateMath.add(this.currangestart, "D", 1);

			if(YAHOO.widget.DateMath.after(nextday, this.now)){
				middleblock+='<li><span style="color: gray"> '+nextday.getDate()+' '+(this.months_[nextday.getMonth()])+' '+(nextday.getFullYear())+'</span> <img src="/webroot/delivery/pic/ar-r.gif" width="4" height="7" alt="" style="margin-left:2px" /></li>';
			}else{
				middleblock+='<li><a href="#" onclick="list.setDay(+1); return false;"> <span>'+nextday.getDate()+' '+ (this.months_[nextday.getMonth()])+' '+(nextday.getFullYear())+' </span> <img src="/webroot/delivery/pic/ar-r.gif" width="4" height="7" alt="" style="margin-left:2px" /></a></li>';
			}

			middleblock+='</ul>';
			break
		}


		numpages=Math.ceil(this.listlenght/this.docsperpage);
		if(this.page-this.halfpagewindow<=0) leftedge=1; else leftedge=this.page-this.halfpagewindow;
		if(leftedge+this.halfpagewindow*2>numpages) rightedge=numpages; else rightedge=leftedge+this.halfpagewindow*2;
		pagesblock='<ul class="pages-num">';
		if(leftedge!=1) pagesblock+='<li><a href="#" onclick="list.setPage('+(1)+'); return false;">..</a></li>';

		for(i=leftedge; i<=rightedge; i++){
			if(i!=this.page) pagesblock+='<li><a href="#" onclick="list.setPage('+i+'); return false;">'+i+'</a></li>'; else pagesblock+='<li class="hr"><strong>'+i+'</strong></li>';
		}
		if(rightedge!=numpages) pagesblock+='<li><a href="#" onclick="list.setPage('+(numpages)+'); return false;">..</a></li>';
		pagesblock+='</ul>';

		YAHOO.util.Dom.get(this.pager).innerHTML=stateblock+middleblock+pagesblock;
	}
}

