function scrollingPages()
{
var targetId;
var url;
var sackObj;
var currentUrl;
var pageObjects;
var maximumNumberOfPages;
var scrollSpeed;
var currentScrollTop;
this.pageObjects=new Array();
this.currentUrl=false;
this.scrollSpeed=20;
this.currentScrollTop=0;
try{
this.sackObj=new sack();
}catch(e){
alert('You need to include the AJAX(SACK) js file');
}
}
scrollingPages.prototype={
setTargetId : function(targetId){this.targetId=targetId;},
setUrl : function(url){this.url=url;},
loadPage : function()
{
if(!this.url) {return;}
if(this.url == this.currentUrl){return;}
this.currentUrl=this.url;
this.currentScrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);
var index=this.pageObjects.length;
if(this.maximumNumberOfPages){
if(document.getElementById('scrollingPages_page' + (index - this.maximumNumberOfPages))){
var obj=document.getElementById('scrollingPages_page' + (index - this.maximumNumberOfPages));
obj.parentNode.removeChild(obj);
}
}
this.pageObjects[index]=document.createElement('DIV');
this.pageObjects[index].id='scrollingPages_page' + index;
document.getElementById(this.targetId).appendChild(this.pageObjects[index]);
window.refToScrollPageObj=this;
ajax_loadContent('scrollingPages_page' + index,this.url,'window.refToScrollPageObj.scroll(' + index + ')');
},
setMaximumNumberOfPages : function(maximumNumberOfPages)
{
this.maximumNumberOfPages=maximumNumberOfPages;
},
setScrollSpeed : function(scrollSpeed)
{
this.scrollSpeed=scrollSpeed;
},
scroll : function(index)
{
window.scrollTo(0,this.currentScrollTop);
var obj=document.getElementById('scrollingPages_page' + index);
var scrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);
var scrollTo=this.getTopPos(obj);
if(scrollTo>scrollTop) {this.__performScroll(scrollTo);}
},
__performScroll : function(scrollTo)
{
var scrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);
var initScrollTop=scrollTop;
var rest=scrollTo - scrollTop;
scrollSpeed=Math.round(rest / this.scrollSpeed);
if(scrollSpeed<1) {scrollSpeed=1;}
scrollTop=scrollTop + scrollSpeed;
window.scrollTo(0,scrollTop);
scrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);
window.refToScrollPageObj=this;
if(scrollTop < scrollTo && scrollTop!=initScrollTop) {setTimeout('window.refToScrollPageObj.__performScroll(' + scrollTo + ')',10);}
},
getTopPos : function(inputObj)
{
var returnValue=inputObj.offsetTop;
while((inputObj=inputObj.offsetParent) !== null){
if(inputObj.tagName!='HTML'){
returnValue += inputObj.offsetTop;
if(document.all) {returnValue+=inputObj.clientTop;}
}
}
return returnValue;
},
getLeftPos : function(inputObj)
{
var returnValue=inputObj.offsetLeft;
while((inputObj=inputObj.offsetParent) !== null){
if(inputObj.tagName!='HTML'){
returnValue += inputObj.offsetLeft;
if(document.all) {returnValue+=inputObj.clientLeft;}
}
}
return returnValue;
}
};
var enableCache=true;
var jsCache=new Array();
var dynamicContent_ajaxObjects=new Array();
function ajax_showContent(divId,ajaxIndex,url,functionToCall)
{
var targetObj=document.getElementById(divId);
targetObj.innerHTML=dynamicContent_ajaxObjects[ajaxIndex].response;
if(enableCache){
jsCache[url]=dynamicContent_ajaxObjects[ajaxIndex].response;
}
dynamicContent_ajaxObjects[ajaxIndex]=false;
ajax_parseJs(targetObj);
if(functionToCall) {eval(functionToCall);}
}
function ajax_loadContent(divId,url,functionToCall)
{
if(enableCache && jsCache[url]){
document.getElementById(divId).innerHTML=jsCache[url];
if(functionToCall) {eval(functionToCall);}
return;
}
var ajaxIndex=dynamicContent_ajaxObjects.length;
document.getElementById(divId).innerHTML="<img alt='Loading' src='/imgs/icons/loading4.gif' class='loading4' />";
dynamicContent_ajaxObjects[ajaxIndex]=new sack();
dynamicContent_ajaxObjects[ajaxIndex].requestFile=url;
dynamicContent_ajaxObjects[ajaxIndex].onCompletion=function(){ ajax_showContent(divId,ajaxIndex,url,functionToCall); };
dynamicContent_ajaxObjects[ajaxIndex].runAJAX();
}
function ajax_parseJs(inputObj)
{
var jsTags=inputObj.getElementsByTagName('SCRIPT');
for(var no=0;no<jsTags.length;no++){
eval(jsTags[no].innerHTML);
}
}
function sack(file) {
this.xmlhttp=null;
this.resetData=function() {
this.method="post";
this.queryStringSeparator="?";
this.argumentSeparator="&";
this.URLString="";
this.encodeURIString=true;
this.execute=false;
this.element=null;
this.elementObj=null;
this.requestFile=file;
this.vars=new Object();
this.responseStatus=new Array(2);
};
this.resetFunctions=function() {
this.onLoading=function() { };
this.onLoaded=function() { };
this.onInteractive=function() { };
this.onCompletion=function() { };
this.onError=function() { };
this.onFail=function() { };
};
this.reset=function() {
this.resetFunctions();
this.resetData();
};
this.createAJAX=function() {
try {
this.xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
this.xmlhttp=null;
}
}
if (! this.xmlhttp) {
if (typeof XMLHttpRequest != "undefined") {
this.xmlhttp=new XMLHttpRequest();
} else {
this.failed=true;
}
}
};
this.setVar=function(name, value){
this.vars[name]=Array(value, false);
};
this.encVar=function(name, value, returnvars) {
if (true === returnvars) {
return Array(encodeURIComponent(name), encodeURIComponent(value));
} else {
this.vars[encodeURIComponent(name)]=Array(encodeURIComponent(value), true);
}
};
this.processURLString=function(string, encode) {
encoded=encodeURIComponent(this.argumentSeparator);
regexp=new RegExp(this.argumentSeparator + "|" + encoded);
varArray=string.split(regexp);
for (i=0; i < varArray.length; i++){
urlVars=varArray[i].split("=");
if (true === encode){
this.encVar(urlVars[0], urlVars[1]);
} else {
this.setVar(urlVars[0], urlVars[1]);
}
}
};
this.createURLString=function(urlstring) {
if (this.encodeURIString && this.URLString.length) {
this.processURLString(this.URLString, true);
}
if (urlstring) {
if (this.URLString.length) {
this.URLString += this.argumentSeparator + urlstring;
} else {
this.URLString=urlstring;
}
}
this.setVar("rndval", new Date().getTime());
urlstringtemp=new Array();
for (key in this.vars) {
if (false === this.vars[key][1] && true === this.encodeURIString) {
encoded=this.encVar(key, this.vars[key][0], true);
delete this.vars[key];
this.vars[encoded[0]]=Array(encoded[1], true);
key=encoded[0];
}
urlstringtemp[urlstringtemp.length]=key + "=" + this.vars[key][0];
}
if (urlstring){
this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
} else {
this.URLString += urlstringtemp.join(this.argumentSeparator);
}
};
this.runResponse=function() {
eval(this.response);
};
this.runAJAX=function(urlstring) {
if (this.failed) {
this.onFail();
} else {
this.createURLString(urlstring);
if (this.element) {
this.elementObj=document.getElementById(this.element);
}
if (this.xmlhttp) {
var self=this;
if (this.method == "GET") {
totalurlstring=this.requestFile + this.queryStringSeparator + this.URLString;
this.xmlhttp.open(this.method, totalurlstring, true);
} else {
this.xmlhttp.open(this.method, this.requestFile, true);
try {
this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
} catch (e) { }
}
this.xmlhttp.onreadystatechange=function() {
switch (self.xmlhttp.readyState) {
case 1:
self.onLoading();
break;
case 2:
self.onLoaded();
break;
case 3:
self.onInteractive();
break;
case 4:
self.response=self.xmlhttp.responseText;
self.responseXML=self.xmlhttp.responseXML;
self.responseStatus[0]=self.xmlhttp.status;
self.responseStatus[1]=self.xmlhttp.statusText;
if (self.execute) {
self.runResponse();
}
if (self.elementObj) {
elemNodeName=self.elementObj.nodeName;
elemNodeName.toLowerCase();
if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea") {
self.elementObj.value=self.response;
} else {
self.elementObj.innerHTML=self.response;
}
}
if (self.responseStatus[0] == "200") {
self.onCompletion();
} else {
self.onError();
}
self.URLString="";
break; 
}
};
this.xmlhttp.send(this.URLString);
}
}
};
this.reset();
this.createAJAX();
}
