// wForms - a javascript extension to web forms.
// Form Paging Component
// v2.0 beta - Feb.14th 2006
// This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
    
    
   if(wFORMS) {
		// Component properties 
		wFORMS.className_paging				= "wfPage";
		wFORMS.className_pagingCurrent		= "wfCurrentPage";
		wFORMS.className_pagingButtons		= "wfPageButton";
		wFORMS.className_hideSubmit			= "wfHideSubmit";
		wFORMS.idPrefix_pageIndex			= "wfPgIndex-";
		wFORMS.runValidationOnPageNext   	= true;
		
		if(!wFORMS.arrMsg) wFORMS.arrMsg 	= new Array();
		wFORMS.arrMsg[4] 					= "Next Page";
		wFORMS.arrMsg[5] 					= "Previous Page";	


		wFORMS.behaviors['paging'] = {

			// ------------------------------------------------------------------------------------------
			// evaluate: check if the behavior applies to the given node. Adds event handlers if appropriate
			// ------------------------------------------------------------------------------------------
			evaluate: function(node) {
				if (wFORMS.helpers.hasClass(node,wFORMS.className_paging)) {
					
					var currentPageIndex = parseInt(node.id.replace(/[\D]*/,""));
					if(currentPageIndex > 1) {
						// add previous page button			
						var actionNode = document.createElement("input"); 
						actionNode.setAttribute('value',wFORMS.arrMsg[5]);	
						actionNode.setAttribute('type',"button");	
						actionNode.className = wFORMS.className_pagingButtons;
						node.appendChild(actionNode);
						// Add event handler			
						wFORMS.helpers.addEvent(actionNode,'click',wFORMS.behaviors['paging'].pagingPrevious);			
					} else {
						// set current page class
						node.className += ' ' + wFORMS.className_pagingCurrent;
						
						// get the corresponding form element
						var form = node.parentNode;
						while(form && form.tagName.toUpperCase() != "FORM")
							form = form.parentNode;
							
						// hide submit button until the last page of the form is reached
						var buttons = form.getElementsByTagName('input');
						for (var i=0;i<buttons.length;i++) {
							if(buttons[i].type && buttons[i].type.toLowerCase() == 'submit') {
								buttons[i].className += ' ' + wFORMS.className_hideSubmit; 
							}
						}
												
						// prevent submission of form with enter key.
						wFORMS.helpers.addEvent(form,'submit', function(e) { var element = wFORMS.helpers.getSourceElement(e);
																			 if(element.type && element.type.toLowerCase()=='text') 
																				return wFORMS.preventEvent(e); } );
						wFORMS.preventSubmissionOnEnter = true; // for input validation behavior
						
					}
					if(document.getElementById(wFORMS.idPrefix_pageIndex+(currentPageIndex+1).toString())) {
						// add next page button			
						var actionNode = document.createElement("input"); 
						actionNode.setAttribute('value',wFORMS.arrMsg[4]);	
						actionNode.setAttribute('type',"button");	
						actionNode.className = wFORMS.className_pagingButtons;
						node.appendChild(actionNode);
						// Add event handler			
						wFORMS.helpers.addEvent(actionNode,'click',wFORMS.behaviors['paging'].pagingNext);			
					}
				}
			  
			},

			// ------------------------------------------------------------------------------------------
			// pagingNext
			// ------------------------------------------------------------------------------------------
			pagingNext: function(e) {
				var element  = wFORMS.helpers.getSourceElement(e);
				if(!element) element = e
				
				var pageElement     = element.parentNode;
				var pageIndex       = parseInt(pageElement.id.replace(/[\D]*/,"")) + 1;
				var nextPageElement = document.getElementById(wFORMS.idPrefix_pageIndex+pageIndex.toString());
				if(nextPageElement) {
					if(!wFORMS.hasBehavior('validation') ||
					   (wFORMS.hasBehavior('validation') && !wFORMS.runValidationOnPageNext) || 
					   (wFORMS.hasBehavior('validation') &&  wFORMS.runValidationOnPageNext && wFORMS.functionName_formValidation(e))) {
						 						  
						pageElement.className      = pageElement.className.replace(wFORMS.className_pagingCurrent,"");
						nextPageElement.className += ' ' + wFORMS.className_pagingCurrent;
						// show submit button if the last page of the form is reached
						pageIndex++;
						nextPageElement = document.getElementById(wFORMS.idPrefix_pageIndex+pageIndex.toString());			
						if(!nextPageElement) {		
							// get the corresponding form element
							var form = pageElement.parentNode;
							while(form && form.tagName.toUpperCase() != "FORM")
								form = form.parentNode;
						
							var buttons = form.getElementsByTagName('input');
							for (var i=0;i<buttons.length;i++) {
								if(buttons[i].type && buttons[i].type.toLowerCase() == 'submit') {
									buttons[i].className = buttons[i].className.replace(wFORMS.className_hideSubmit,"");
									wFORMS.debug('submit class ' + buttons[i].className);
								}
							}
						}
					}
				}
			},
			
			// ------------------------------------------------------------------------------------------
			// pagingPrevious
			// ------------------------------------------------------------------------------------------				
			pagingPrevious: function(e) {
				var element  = wFORMS.helpers.getSourceElement(e);
				if(!element) element = e
 
				var pageElement         = element.parentNode;
				var pageIndex           = parseInt(pageElement.id.replace(/[\D]*/,"")) - 1;
				var previousPageElement = document.getElementById(wFORMS.idPrefix_pageIndex+pageIndex.toString());
				if(previousPageElement) {
					pageElement.className          = pageElement.className.replace(wFORMS.className_pagingCurrent,"");
					previousPageElement.className += ' ' + wFORMS.className_pagingCurrent;										
					// get the corresponding form element
					var form = pageElement.parentNode;
					while(form && form.tagName.toUpperCase() != "FORM")
						form = form.parentNode;
					// hide submit button if necessary
					var buttons = form.getElementsByTagName('input');
					for (var i=0;i<buttons.length;i++) {
						if(buttons[i].type && buttons[i].type.toLowerCase() == 'submit' && !wFORMS.helpers.hasClass(buttons[i],wFORMS.className_hideSubmit)) {
							buttons[i].className += ' ' + wFORMS.className_hideSubmit; 
						}
					}
				}
			}
			
       } // End wFORMS.behaviors
	   
   }
   
   
   
