//Ajax Pagination Script- Author: Dynamic Drive (http://www.dynamicdrive.com)
//Created Sept 14th, 07'
//Last Updated Oct 31st, 07'- Fixed bug when book only contains 1 page
var steps = 10;
var ajaxpageclass=new Object()
//1) HTML to show while requested page is being fetched:
ajaxpageclass.loadstatustext="<img src='./i/loading.gif' /> Requesting content..."

//2) Bust cache when fetching pages?
ajaxpageclass.ajaxbustcache=false

ajaxpageclass.connect=function(pageurl, divId){
	var page_request = false
	var bustcacheparameter=""
	if (window.XMLHttpRequest) // if Mozilla, IE7, Safari etc
		page_request = new XMLHttpRequest()
	else if (window.ActiveXObject){ // if IE6 or below
		try {
		page_request = new ActiveXObject("Msxml2.XMLHTTP")
		} 
		catch (e){
			try{
			page_request = new ActiveXObject("Microsoft.XMLHTTP")
			}
			catch (e){}
		}
	}
	else
		return false
	page_request.onreadystatechange=function(){ajaxpageclass.loadpage(page_request, divId)}
	if (this.ajaxbustcache) //if bust caching of external page
		bustcacheparameter=(pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
	page_request.open('GET', pageurl+bustcacheparameter, true)
	page_request.send(null)
}

ajaxpageclass.loadpage=function(page_request, divId){
	document.getElementById(divId).innerHTML=this.loadstatustext //Display "fetching page message"
	if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
		document.getElementById(divId).innerHTML=page_request.responseText
	}
}

ajaxpageclass.bindpages=function(pageinfo, divId, paginateIds){ //Main Constructor function
	this.pageinfo=pageinfo //store object containing URLs of pages to fetch, selected page number etc
	this.divId=divId
	this.paginateIds=paginateIds //array of ids corresponding to the pagination DIVs defined for this pageinstance
	var initialpage=(pageinfo.selectedpage<pageinfo.page.length)? pageinfo.selectedpage : 0 //set initial page shown
	this.buildpagination(initialpage)
	this.selectpage(initialpage)
	//slide(100,1);
}

ajaxpageclass.bindpages.prototype={

	buildpagination:function(selectedpage){
		if (this.pageinfo.page.length==1)
		{
			var paginatediv=document.getElementById(this.paginateIds[0])
			var paginateHTML=''
			paginatediv.innerHTML=paginateHTML
			return
		}
		else{ //construct pagimation interface
			if(this.pageinfo.page=='ct/contact.html'){
				getXMLHttpRequestObject();
				intitializeEmailClient();
			}

			var paginateHTML='<div>\n'
			paginateHTML+='<a href="#previous" class="prev" rel="'+(selectedpage-1)+'">\n'
// 			paginateHTML+='<img src="./images/prev.png"/>\n'
			paginateHTML+='&lt;&lt;PREV'
			paginateHTML+='</a> | \n'
			paginateHTML+='<a href="#next" class="next" rel="'+(selectedpage+1)+'">\n'
// 			paginateHTML+='<img src="./images/next.png"/>\n'
			paginateHTML+='NEXT&gt;&gt;'
			paginateHTML+='</a>\n'
			paginateHTML+='</div>\n'
		}// end construction
		for (var i=0; i<this.paginateIds.length; i++){ //loop through # of pagination DIVs specified
			var paginatediv=document.getElementById(this.paginateIds[i]) //reference pagination DIV
			paginatediv._currentpage=selectedpage //remember current page selected (which will become previous page selected after each page turn)
			paginatediv.innerHTML=paginateHTML
			
			var pageinstance=this
			paginatediv.onclick=function(e){
				var targetobj=window.event? window.event.srcElement : e.target
				if (targetobj.tagName=="A" && targetobj.getAttribute("rel")!=""){
					if (!/disabled/i.test(targetobj.className)){ //if this pagination link isn't disabled (CSS classname "disabled")
						pageinstance.selectpage(parseInt(targetobj.getAttribute("rel")))
					}
				}
				return false
			}
		}
	},

	selectpage:function(selectedpage){
		//replace URL's root domain with dynamic root domain (with or without "www"), for ajax security sake:
		var modifiedurl=this.pageinfo.page[selectedpage].replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
		ajaxpageclass.connect(modifiedurl, this.divId) //fetch requested page and display it inside DIV
		if (this.pageinfo.page.length==1) //if this book only containe 1 page
			return
		var prevlinkoffset=1
		for (var i=0; i<this.paginateIds.length; i++){ //loop through # of pagination DIVs specified
			var paginatediv=document.getElementById(this.paginateIds[i])
			var paginatelinks=paginatediv.getElementsByTagName("a")
			paginatelinks[0].className=(selectedpage==0)? "prev disabled" : "prev" //if current page is 1st page, disable "prev" button
			paginatelinks[0].setAttribute("rel", selectedpage-1) //update rel attr of "prev" button with page # to go to when clicked on
			paginatelinks[paginatelinks.length-1].className=(selectedpage==this.pageinfo.page.length-1)? "next disabled" : "next"
			paginatelinks[paginatelinks.length-1].setAttribute("rel", selectedpage+1)
/*			paginatelinks[paginatediv._currentpage+prevlinkoffset].className="" //deselect last clicked on pagination link (previous)
			paginatelinks[selectedpage+prevlinkoffset].className="currentpage" //select current pagination link*/
			paginatediv._currentpage=selectedpage //Update last clicked on link
			
		}
	},

	refresh:function(pageinfo){
	this.pageinfo=pageinfo
	var initialpage=(pageinfo.selectedpage<pageinfo.page.length)? pageinfo.selectedpage : 0
	this.buildpagination(initialpage)
	this.selectpage(initialpage)
	}
}



function slide(opacity,tally_steps)
{
	if (tally_steps != steps) {
		tally_steps++;
		setOpacity(opacity)
		opacity -= 100/steps;
		window.setTimeout("slide("+opacity+","+tally_steps+")", 50);
	} else {
		display.style.backgroundImage = 'url(slideshow/1.jpg)';
		setOpacity(0);
		display.src = 'slideshow/'+counter+'.jpg';
		fadeIn(10);
	}
}

function setOpacity(opacity) 
{
	opacity = (opacity == 100)?99.999:opacity;
 
	// IE/Win
	display.style.filter = "alpha(opacity:"+opacity+")";
 
	// Safari<1.2, Konqueror
	display.style.KHTMLOpacity = opacity/100;
 
	// Older Mozilla and Firefox
	display.style.MozOpacity = opacity/100;
  
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	display.style.opacity = opacity/100;
}

function fadeIn(opacity) 
{
	if (opacity <= 100) 
	{
		setOpacity(opacity);
		opacity += 5;
		window.setTimeout("fadeIn("+opacity+")", 50);
	}
}

function fadeOut(opacity) 
{
	if (opacity <= 100) 
	{
		setOpacity(opacity);
		opacity -= 5;
		window.setTimeout("fadeOut("+opacity+")", 50);
	}
}





//
//SendMail client
//




function getXMLHttpRequestObject(){
    var xmlobj;
    // check for existing requests
    if(xmlobj!=null&&xmlobj.readyState!=0&&xmlobj.readyState!=4){
        xmlobj.abort();
    }
    try{
        // instantiate object for Mozilla, Nestcape, etc.
        xmlobj=new XMLHttpRequest();
    }
    catch(e){
        try{
            // instantiate object for Internet Explorer
            xmlobj=new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e){
            // Ajax is not supported by the browser
            xmlobj=null;
            return false;
        }
    }
            return xmlobj;
}
// request 'sendmail.php' file - sends email message
function sendEmailRequest(){
	document.getElementsByTagName('h5')[0].firstChild.data='Status: SENDING MESSAGE...';
    var message=document.getElementsByTagName('form')[0].elements['message'].value;
    if(message.length>1000){message=message.substring(0,1000)};
    // open socket connection
    emailXMLHttpObj.open('POST','../sp/sendmail.php',true);
    // set form http header
    emailXMLHttpObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
    // get form values and send http request
    emailXMLHttpObj.send(getFormValues(document.getElementsByTagName('form')[0]));
    emailXMLHttpObj.onreadystatechange=emailStatusChecker;
}
// check status of email requester object
function emailStatusChecker(){
    // if mail request is completed
    if(emailXMLHttpObj.readyState==4){
        if(emailXMLHttpObj.status==200){
            // if status == 200 display server response
            displayServerResponse();
        }
        else{
            alert('Failed to contact server :'+emailXMLHttpObj.statusText);
        }
    }
}
// display server response
function displayServerResponse(){
    var status=document.getElementsByTagName('h5')[0].firstChild;
    if(!status){return};
    // display messages by <h1> header
    status.data=emailXMLHttpObj.responseText; 
}
// get form values
function getFormValues(fobj){
    var str='';
    for(var i=0;i< fobj.elements.length;i++){
        str+=fobj.elements[i].name+'='+ escape(fobj.elements[i].value)+'&';
    }
    str=str.substr(0,(str.length-1));
    return str;
}          




// initialize email client
function intitializeEmailClient(){
    if(document.getElementById&&document.getElementsByTagName){
        var sendbtn=document.getElementsByTagName('form')[0].elements['send'];
	var clearbtn=document.getElementsByTagName('form')[0].elements['clear'];
	sendEmailRequest();
    }
}
// instantiate email XMLHttpRequest object
var emailXMLHttpObj=getXMLHttpRequestObject();

