/**
 * @author Dmitry Amroyan ( dmitry.amroyan@gmail.com )
 * @version 0.1
 */
		/**
		 * This is object that create list of entries used
		 * templates. Based on jquery and jtemplates v0.7
		 * Needed fields with '*'. If they will not difined
		 * Proccess will not start.
		 *  Default Params:
		 *  				*objName: 'list',
		 *  				*templateName: '',
		 *  				*parentName: '',
		 *					list: [],
		 *					start: 0,
		 *					step: 5,
		 *					page: 0,							
		 *					pagesBlock: '',
		 *					pagesStyle: 'listPage',
		 *					selectPageStyle: 'listSelectedPage',
		 *					prevText: '<< Previos',
		 *					nextText: ' Next >>',
		 *					showPages: true,
		 *					startElement: 'start'
		 * 
		 * @param {Object} params
		 */
		function ListTemplate ( params ){

			this.params = {
							list: [],
							objName: 'list',
							start: 0,
							step: 5,
							page: 0,
							templateName: '',
							parentName: '',
							pagesBlock: '',
							pagesStyle: 'listPage',
							selectPageStyle: 'listSelectedPage',
							prevText: '<< Previos',
							nextText: ' Next >>',
							showPages: true,
							startElement: 'start'
						};
			this.SetParams ( params );

		}
		/**
		 * Set params for object
		 * @param {Object} params
		 */
		ListTemplate.prototype.SetParams = function ( params ) {
			this.params = jQuery.extend( this.params, params );
			return;
		}	
		/**
		 * Process list
		 * @param {Object} isRewrite
		 */
		ListTemplate.prototype.Process = function ( isRewrite ){
			if (this.params.parentName=='' || this.params.templateName=='')
				alert('You don\'t set templateName or parentName values');
			
			var parent = '#'+ this.params.parentName;
			
			var start = this.params.step * this.params.page;
			var end = start + this.params.step;
			var list = this.params.list;
			var resultHtml = '';
			for ( var i = start; i < end && i < list.length; i++) {
				$(parent).setTemplateElement(this.params.templateName);
				$(parent).processTemplate( false, list[i],{num: i+1});
				resultHtml += jQuery.tmplHtml;
			}	
			
			if (isRewrite!=null && isRewrite ){
				$(parent).html(resultHtml);
			} else {
				$(parent).append(resultHtml);
			}
			if (this.params.showPages)
				this.ProcessPages();
			
			return;
		}
		/**
		 * Display pages
		 */
		ListTemplate.prototype.ProcessPages = function () {
			var allNum = this.params.list.length;
			var pagesNum = allNum / this.params.step;
				pagesNum = Math.ceil( pagesNum );
			var objName = this.params.objName;
			var page = this.params.page;
						
			var prevHtml = '';
			if ( page !=0 )
				prevHtml = '<a onClick="'+objName+'.ViewPage('+(page)+')">'+ this.params.prevText+'</a>';
				
			var nextHtml = '';
			if ( page != pagesNum-1 && pagesNum > 1 )
				nextHtml = '<a onClick="'+objName+'.ViewPage('+(page+2)+')">'+ this.params.nextText+'</a>';
			
			var pText = '';
			for ( var i=0; i<pagesNum; i++ )
			{
				var num = i+1;
				
				if (i == this.params.page)
				{
					var style = this.params.selectPageStyle;
					pText += '<span class="'+style+'">'+ num +'</span>'
				}
				else
				{
					var style = this.params.pagesStyle;
					pText += '<a class="'+style+'" onClick="'+objName+'.ViewPage('+num+');">'+ num +'</a>'
				}
					
				
				
			}
			
			var html = '<span id="pageList">'+prevHtml + pText + nextHtml+'</span>';
			
			if (this.params.pagesBlock == '')
			{
				$('#pageList').remove();
				$( html ).insertAfter( '#'+this.params.parentName );
			}				
			else	
				$('#' + this.params.pagesBlock).html( html );
				
			return;
		}
		/**
		 * View soma page
		 * 
		 * @param {Object} pageNum
		 */
		ListTemplate.prototype.ViewPage = function ( pageNum )
		{
			pageNum--; 
			var allNum = this.params.list.length;
			var pagesNum = allNum / this.params.step;
				pagesNum = Math.ceil( pagesNum );
			
			if (pageNum >= pagesNum)
				pageNum = pagesNum-1;
			
			this.params.page = pageNum;
			var location = document.location.href;
			
			document.location.href = location.replace(/#start/,'')+'#start';
						
			this.Process( true );
		}