/*
 *	PageManager.js
 *	author:     Łukasz Lewandowski
 *	copyrights: EO Networks 
 */

function $(sId){ 
	return document.getElementById(sId); 
};

var PageManager = {

	_isIE : (new String(window.navigator.userAgent).indexOf("MSIE") > -1),
	_aConfig : {
		btn : {
			first    : { 'display' : true,  'on' : 'pmEnabled', 'off' : 'pmDisabled', 'offHide' : true  },
			previous : { 'display' : true,  'on' : 'pmEnabled', 'off' : 'pmDisabled', 'offHide' : true  },
			page     : { 'display' : true,  'on' : 'pmEnabled', 'off' : 'pmDisabled', 'offHide' : false },
			next     : { 'display' : true,  'on' : 'pmEnabled', 'off' : 'pmDisabled', 'offHide' : true  },
			last     : { 'display' : true,  'on' : 'pmEnabled', 'off' : 'pmDisabled', 'offHide' : true  }
		},
		msg : {
			ico : { first:'|<',       previous:'<',          page:'[{NUM}]', next:'>',        last:'>|'       },
			pl  : { first:'pierwsza', previous:'poprzednia', page:'[{NUM}]', next:'nastepna', last:'ostatnia' },
			en  : { first:'first',    previous:'previous',   page:'[{NUM}]', next:'next',     last:'last'     }
		}
	},

	_sDefaultLang     : 'pl',
	_sLang 		  : '',
	_sBodyClass       : false,
	_sPageClassPrefix : false,
	_aElements        : {},

	init : function(sBodyClass, sPageClassPrefix, sLang){
		this._sBodyClass = sBodyClass;
		this._sPageClassPrefix = sPageClassPrefix;
		this._sLang = (typeof sLang != "undefined" && sLang != null && sLang != '' && sLang != false ? sLang : this._sDefaultLang);
		this.setElements();
		this.setNavigation();
	},

	setElements : function(){
		var aElements = this.getDIVsByClassName(this._sBodyClass);
		for(var i=0;i<aElements.length;i++){
			this._aElements[aElements[i].id] = {};
			this._aElements[aElements[i].id]['target'] = aElements[i];
			this.setPages(aElements[i].id);
		}
	},

	setPages : function(sId){
		var aPages = this.getDIVsByClassName(this._sPageClassPrefix, sId);
		if(aPages.length > 0){
			this._aElements[sId]['pages'] = { 'count':0, 'current':1, 'pages':{} };
			for(var i=0;i<aPages.length;i++){
				this._aElements[sId]['pages']['count']++;
				this._aElements[sId]['pages']['pages'][i + 1] = aPages[i];
			}
		}
	},

	setNavigation : function(){
		for(var sId in this._aElements){
			if (this._aElements[sId].pages){
				if(this._aElements[sId].pages.count > 1){
					var oDiv = document.createElement('div');
					oDiv.id = 'jsPM_' + sId + 'nav';
					oDiv.className = 'pmNavBar';
					oDiv.innerHTML = '';
					for(var sBtn in this._aConfig['btn']){
						switch(sBtn){
							case 'page':
								for(var iPage in this._aElements[sId]['pages']['pages']){
									oDiv.innerHTML += this.createButton(sId, sBtn, iPage);
								}
							break;
							default:
								oDiv.innerHTML += this.createButton(sId, sBtn, false);
							break;
						}
					}
					$(sId).appendChild(oDiv);
					this._aElements[sId]['panel'] = $(oDiv.id);
					delete oDiv;
					this.updateButtons(sId, 'page', 1);
				}
			}
		}
	},

	doAction : function(sId, sAction, iPage){
		switch(sAction){
			case 'first':
				this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'none';
				this._aElements[sId]['pages']['current'] = 1;
				this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'block';
			break;
			case 'previous':
				if(this._aElements[sId]['pages']['current'] > 1){
					this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'none';
					this._aElements[sId]['pages']['current']--;
					this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'block';
				}
			break;
			case 'page':
				this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'none';
				this._aElements[sId]['pages']['current'] = parseInt(iPage);
				this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'block';
			break;
			case 'next':
				if(this._aElements[sId]['pages']['current'] < this._aElements[sId]['pages']['count']){
					this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'none';
					this._aElements[sId]['pages']['current']++;
					this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'block';
				}
			break;
			case 'last':
				this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'none';
				this._aElements[sId]['pages']['current'] = this._aElements[sId]['pages']['count'];
				this._aElements[sId]['pages']['pages'][this._aElements[sId]['pages']['current']].style.display = 'block';
			break;
		}
		this.updateButtons(sId, sAction, iPage);
	},

	createButton : function(sId, sAction, iPage){
		sHTML = new String();
		if(this._aConfig['btn'][sAction]['display']){
			sHTML += '<a href="/"';
			sHTML += (sAction == 'page' ? ' id="jsPM_' + sId + sAction + '_' + iPage + '"' : ' id="jsPM_' + sId + sAction + '"');
			if(sAction == 'first' || sAction == 'previous' || (sAction == 'page' && iPage == 1)){
				sHTML += ' class="' + this._aConfig['btn'][sAction]['off'] + '"';
			}
			else{
				sHTML += ' class="' + this._aConfig['btn'][sAction]['on'] + '"';
			}
			if(this._aConfig['btn'][sAction]['offHide']){
				sHTML += ' style="display:none"';
			}
			else{
				sHTML += ' style="display:inline"';
			}
			sHTML += ' onkeypress="this.onclick();"';
			sHTML += ' onclick="PageManager.doAction(\'' + sId + '\', \'' + sAction + '\', ' + iPage + '); return false;"/>';
			var sLabel = new String(this._aConfig['msg'][this._sLang][sAction]);
			sHTML += (sAction == 'page' ? sLabel.replace(/{NUM}/, iPage) : sLabel);
			sHTML += '</a>';
			return sHTML;
		}
		return sHTML;
	},

	updateButtons : function(sId, sAction, iPage){
		this.enableAllButtons(sId);
		if(this._aElements[sId]['pages']['current'] == 1){
			this.disableButton(sId, 'first', false);
			this.disableButton(sId, 'previous', false);
		}
		if(this._aElements[sId]['pages']['current'] == this._aElements[sId]['pages']['count']){
			this.disableButton(sId, 'next', false);
			this.disableButton(sId, 'last', false);
		}
		this.disableButton(sId, 'page', this._aElements[sId]['pages']['current']);
	},

	enableAllButtons : function(sId){
		for(var sAction in this._aConfig['btn']){
			switch(sAction){
				case 'page':
					for(var iPage in this._aElements[sId]['pages']['pages']){
						if(this._aConfig['btn'][sAction]['display'] == true){
							$('jsPM_' + sId + sAction + '_' + iPage).style.display = 'inline';
							$('jsPM_' + sId + sAction + '_' + iPage).className = this._aConfig['btn'][sAction]['on'];
							if($('jsPM_' + sId + sAction + '_' + iPage + '_fake')){
								this.deleteFakeButton(sId, sAction, iPage);
							}
						}
					}
				break;
				default:
					if(this._aConfig['btn'][sAction]['display'] == true){
						$('jsPM_' + sId + sAction).style.display = 'inline';
						$('jsPM_' + sId + sAction).className = this._aConfig['btn'][sAction]['on'];
						if($('jsPM_' + sId + sAction + '_fake')){
							this.deleteFakeButton(sId, sAction, iPage);
						}
					}
				break;
			}
		}
	},

	disableButton : function(sId, sAction, iPage){
		if(sAction == 'page'){
			if(this._aConfig['btn'][sAction]['display'] == true){
				$('jsPM_' + sId + sAction + '_' + iPage).style.display = 'none'; 
				if(!this._aConfig['btn'][sAction]['offHide']){
					this.createFakeButton(sId, sAction, iPage);
				}
			}
		}
		else{
			if(this._aConfig['btn'][sAction]['display'] == true){
				$('jsPM_' + sId + sAction).style.display = 'none';
				if(!this._aConfig['btn'][sAction]['offHide']){
					this.createFakeButton(sId, sAction, iPage);
				}
			}
		}
	},

	createFakeButton : function(sId, sAction, iPage){
		var oFake = document.createElement('span');
		oFake.id = 'jsPM_' + sId + sAction;
		if(sAction == 'page'){
			oFake.id += '_' + iPage;
		}
		oFake.id += '_fake';
		oFake.className = this._aConfig['btn'][sAction]['off'];
		var sInner = this._aConfig['msg'][this._sLang][sAction];
		if(sAction == 'page'){
			sInner = new String(sInner).replace(/{NUM}/, iPage);
		}
		if(this._isIE){
			oFake.innerText = sInner;
		}
		else{
			oFake.textContent = sInner;
		}
		var oReal = (sAction == 'page' ? $('jsPM_' + sId + sAction + '_' + iPage) : $('jsPM_' + sId + sAction));
		$('jsPM_' + sId + 'nav').insertBefore(oFake, oReal);
	},

	deleteFakeButton : function(sId, sAction, iPage){
		var oFake = (sAction == 'page' ? $('jsPM_' + sId + sAction + '_' + iPage + '_fake') : $('jsPM_' + sId + sAction + '_fake') );
		$('jsPM_' + sId + 'nav').removeChild(oFake);
	},

	getDIVsByClassName : function(sClass, sContainerId){
		var aAll = new Array();
		if((typeof sContainerId != "undefined") && (sContainerId)){
			aAll = $(sContainerId).getElementsByTagName('div');
		}
		else{
			aAll = document.getElementsByTagName('div');
		}
		var aElements = new Array();
		for(var i=0;i<aAll.length;i++){
			if(new String(aAll[i].className).indexOf(sClass) > -1){
				aElements.push(aAll[i]);
			}
		}
		return aElements;
	},

	genUniqId : function(sPrefix) 
	{
		iPostfix = 0;
		do { iPostfix = Math.round (Math.random () * 1000000000000000000); } 
		while (typeof $(new String(sPrefix + iPostfix)) == "undefined" && $(new String(sPrefix + iPostfix)) == null);
		return new String(sPrefix + iPostfix);
	}                
};
