// DTECH's site library scripts for www.kathrynBrunner.com
// Programmed by Darrell Rapier 8/16/2006
// To inquire business with the programmer of this site please email drapier@gmail.com
// -----------------------------------------------------------------------------------
/*
	Table of Contents
	-----------------
	Configuration
	Global Variables

	Ajax.Responders.register

	fnLib Class Declaration
	- initialize()
	- run_ajax()
	- checkUrlParam()
	- loadPg()
	- linkInPg()
	- failedAjax()
	- clearMargins()
	- showResponseFromFlash()
	- showResponseFromPage()
	
	Miscellaneous Functions
	- LoadPage()
	- LinkTo()
	- FlashBtn()
	- callInProgress
	- showFailureMessage
	- MM_preloadImages
	- popUpWindow
	
	Form Functions
	- SendInfo()
	- ResetInfo()
	- clearField()
	- SendFormInfo()
	
	Function Calls
	- addLoadEvent(init)
*/
// -----------------------------------------------------------------------------------

var currentpage, returntopage, winWidth, pagename, pageurl;
var LoadingImage = "images/ajaxload.gif", SiteFolder = "site", Imagedir = "images"
var pagenum = 0, ajaxerr = 0, flashloaded = 0, popUpWin = 0;

Ajax.Responders.register({
    onCreate: function(request) {
		if($('loader') && Ajax.activeRequestCount > 0) Effect.Appear('loader',{duration:0.5,queue:'end'});
        request['timeoutId'] = window.setTimeout(
            function() {
                // warning timeout while ajax is active
                if (callInProgress(request.transport)) {
                    request.transport.abort();
                    showFailureMessage();
                    if (request.options['onFailure']) {
                        request.options['onFailure'](request.transport, request.json);
                    }
                }
            },
            30000 // Thirty seconds
        );
    },
    onComplete: function(request) {
        if($('loader') && Ajax.activeRequestCount == 0) Effect.Fade('loader',{duration:1.5,queue:'end'});
        window.clearTimeout(request['timeoutId']);
    }
});

// My AJAX PageActions object
var fnLib = Class.create(); //invokes the initialize() method
fnLib.prototype = {
	initialize: function() {
		var winWidth = (document.all)?document.body.clientWidth:window.innerWidth;
		//var winHeight = (document.all)?document.body.clientHeight:window.innerHeight;
		winWidth = Math.round(winWidth/2) + 'px';	
		
		var objBody = document.getElementsByTagName("body").item(0);
		
		var objLoading = document.createElement("div");
		objLoading.setAttribute('id','loader');
		objLoading.style.display = 'none';
		objLoading.style.position = 'absolute';
		objLoading.style.top = '375px';
		objLoading.style.left = winWidth;
		objBody.appendChild(objLoading);
		
		var objLoadingImage = document.createElement("img");
		objLoadingImage.setAttribute('src', LoadingImage);
		objLoading.appendChild(objLoadingImage);
		
		//var objHolder = document.createElement("div");
		//objHolder.setAttribute('id','holder');
		//objBody.appendChild(objHolder);
		
		if (!this.checkUrlParam(pagenum)) {
			$('contentarea').innerHTML = $('home').innerHTML;
			currentpage = 'home';
			returntopage = currentpage;
			new Effect.Parallel(
				[ new Effect.SlideDown('contentdiv', {sync: true, duration:1.0 }), 
		  		new Effect.Appear('contentdiv', { sync: true, duration: 0.5 }) ], 
				{ duration: 1.5 } 
			);
		}
	},
	run_ajax: function (u,inpage) {
		var page = SiteFolder + "/" + u;
		var rand = Math.random();
		var pars = "ajax=1&rand=" + rand;
		if (!inpage) {
			returntopage = currentpage;
			var ajax = new Ajax.Updater(
				{success: 'contentarea'},
				page,
				 { asynchronous:true,
				   onSuccess: this.showResponseFromFlash,
				   onFailure: this.failedAjax,
				   method: 'get',
				   parameters: pars
				 }
			);
		} else {
			var ajax = new Ajax.Updater(
				{success: 'contentarea'},
				page,
				 { asynchronous:true,
				   onSuccess: this.showResponseFromPage,
				   onFailure: this.failedAjax,
				   method: 'get',
				   parameters: pars
				 }
			);
		}
	},
	checkUrlParam: function (p) {
		if (p != 0) {
			currentpage = pageurl;
			pageTracker._trackPageview(SiteFolder + "/" + pageurl);
			this.run_ajax(pageurl);
			return true;
		}
	return false;
	},
	loadPg: function (url) {
		if (currentpage != url) {
			new Effect.Parallel(
				[ new Effect.SlideUp('contentdiv', {sync: true, duration: 1.0 }),
				  new Effect.Fade('contentdiv', { sync: true, duration: 1.0 }) ], 
				{ duration: 2.0, afterFinish: function() {
						PageActions.run_ajax(url);
						PageActions.clearMargins();
					}
				} 
			);
			currentpage = url;
		}
	},
	linkInPg: function (url) {
		if (currentpage != url) {
			new Effect.Parallel(
				[ new Effect.Fade('contentdiv', { sync: true, duration: 1.0 }) ], 
					{ duration: 1.0, afterFinish: function() {
							if (url == 'home') {
								$('contentarea').innerHTML = $('home').innerHTML;
								PageActions.showResponseFromPage();
							} else {	
								PageActions.run_ajax(url,1);
							}
							PageActions.clearMargins();
						}	
					} 
				);
			currentpage = url;
		}
	},
	failedAjax: function (r) {
			$('contentarea').innerHTML = "<h4>" + r.statusText + "</h4><br>" + r.responseText;
			//alert(r.statusText);
			$('contentarea').style.paddingLeft = '30px';
			$('contentarea').style.paddingTop = '20px';
			$('contentarea').style.fontWeight = 'bold';
			new Effect.Appear('contentdiv');
			ajaxerr = 1;
	},
	clearMargins: function () {
		if (ajaxerr == 1) {
			$('contentarea').inherit = 'none';
			$('contentarea').style.fontWeight = 'normal';
			$('contentarea').style.paddingLeft = '0';
			$('contentarea').style.paddingTop = '0';
			ajaxerr = 0;
		}
	},
	showResponseFromFlash: function (r) {
		new Effect.Parallel(
			[ new Effect.SlideDown('contentdiv', { sync: true, duration: 1.5 }), 
			  new Effect.Appear('contentdiv', { sync: true, duration: 1.5 }) ], 
			{ duration: 1.5 } 
		);
	},
	showResponseFromPage: function (r) {
		new Effect.Parallel(
			[ new Effect.Appear('contentdiv', { sync: true, duration: 1.5 }) ], 
			{ duration: 1.5 } 
		);
	}

}
// Miscellaneous Functions
function LoadPage(pageNum,url,inpage) {
	PageActions.loadPg(url);
	if(inpage) FlashBtn(pageNum);
	pageTracker._trackPageview(SiteFolder + "/" + url);
}
function LinkTo(pageNum,url) {
	PageActions.linkInPg(url);
	if(pageNum <= 5) FlashBtn(pageNum);
	pageTracker._trackPageview(SiteFolder + "/" + url);
}
function FlashBtn(p) {
	if (flashloaded = 1) {
		$("Header").LoadBtn(p);
	}
}
function callInProgress (xmlhttp) {
    switch (xmlhttp.readyState) {
        case 1: case 2: case 3:
            return true;
        break;
        // Case 4 and 0
        default:
            return false;
        break;
    }
}
function showFailureMessage() {
	$('contentarea').style.paddingLeft = '30px';
	$('contentarea').style.paddingTop = '20px';
	$('contentarea').style.fontWeight = 'bold';
	$('contentarea').innerHTML = "<br />Connection cannot be established or has been lost. Try again later!<br />";
	ajaxerr = 1;
    //alert('Internet connection has been lost. Try again shortly');
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments;for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image;d.MM_p[j++].src=Imagedir+"/"+a[i];}}
}
function popUpWindow(URLStr, left, top, width, height) {
  if(popUpWin)  {
    if(!popUpWin.closed) popUpWin.close();
  }
  popUpWin = open(URLStr, 'popUpWin', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
}
// Form Functions
function SendInfo(url) {
	var err = 0,errlist = '',bgcolor = '#FFB3B3';
	var email = $F('email');
	var phone = $F('phone');
	var from = $F('from');
	var content = $F('content');
	var stripFrom = from.replace(/[\(\)\.\-\ ]/g, '');
	var stripPhone = phone.replace(/[\(\)\.\-\ ]/g, '');
	var emailFilter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; // /^.+@.+\..{2,3}$/; 
	if (stripFrom.length < 4) {
		$('from').style.backgroundColor = bgcolor; errlist += '[Name Field] '; err++;
	} else {
		clearField('from');
	}
	if ((phone.length > 0) && (isNaN(parseInt(stripPhone)) || !(stripPhone.length == 10))) {
	    $('phone').style.backgroundColor = bgcolor; errlist += '[Phone Field] '; err++;
	} else {
		clearField('phone');
	}
	if (!emailFilter.test(email)) {
		$('email').style.backgroundColor = bgcolor; errlist += '[E-mail Field] '; err++;
	} else {
		clearField('email');
	}
	if (content.length < 10) {
	    $('content').style.backgroundColor = bgcolor; errlist += '[Message Field] '; err++;
	} else {
		clearField('content');
	}
	if (err == 0 && currentpage != url) {
		new Effect.Parallel(
			[ new Effect.Fade('contentdiv', { sync: true, duration: 1.0 }) ], 
			{ duration: 1.0, afterFinish: function() { SendFormInfo(url); } } 
		);
		currentpage = url;
	} else {
		$('formerror').innerHTML = 'The following field are invalid: ' + errlist;
		$('formerror').style.visibility = 'visible';	
	}
}

function ResetInfo(form) {
	var i = form.elements.length;
	for (var j=0; j < i; j++) {
		if (form.elements[j].type == 'textarea' || form.elements[j].type == 'text') {
			var ele = form.elements[j].name;
			$(ele).style.backgroundColor = "#FFF";
		}
	}
	$('formerror').style.visibility = 'hidden';
	form.reset();
}

function clearField(f) {
	$(f).style.backgroundColor = "#FFF";
}

function SendFormInfo(u) {
	var page = SiteFolder + "/" + u;
	var pars = '"ajax=1&from=' + escape($F('from'));
	pars += '&phone=' + escape($F('phone'));
	pars += '&email=' +  escape($F('email'));
	pars += '&content=' + escape($F('content'));
	pars += '&registration=' + escape($F('registration'));
	var ajax = new Ajax.Updater(
		 {success: 'contentarea'},
		 page,
		 { asynchronous:true,
		   onSuccess: PageActions.showResponseFromPage,
		   onFailure: PageActions.failedAjax,
		   method: 'get',
		   parameters: pars
		 }
	);
}
// Function Calls
function init() {
	PageActions = new fnLib();
	MM_preloadImages('1title2.jpg','1title3.jpg','1title4.jpg','1title5.jpg','2title1.jpg','2title2.jpg','2title3.jpg','2title4.jpg','3title1.jpg','3title2.jpg','3title3.jpg','4title1.jpg','4title2.jpg','4title3.jpg','4title4.jpg','4title5.jpg','5title1.jpg','5title2.jpg','5title3.jpg','5title4.jpg','6title1.jpg','6title2.jpg','BioTitle.jpg','contact_form.jpg','kathrynBio.jpg','StudioTitle.jpg','MusikgartenTitle.jpg','largeMusikgarten.jpg','t1.jpg','t1a.jpg','t2.jpg','t2a.jpg','t3a.jpg','t4a.jpg','t_bgr.jpg','w_bgr.jpg','w_bot.jpg','w_top.jpg','e1.jpg','e2.jpg');
}
Event.observe(window, "load", function() { init() });