ie = (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) ? true : false;
ieV = parseFloat(navigator.appVersion.substr(navigator.appVersion.indexOf('MSIE')+5,3));

/*
	Lots of stuff below has been borrowed from 
	Lightbox v2.01
	by Lokesh Dhakar - http://www.huddletogether.com
*/


/*
	Helper functions
*/

Page = {
	/*
		getSize()
		Returns array with page width, height and window width, height
		Core code from - quirksmode.org
		Edit for Firefox by pHaez
	*/
	getSize: function(){
		
		var xScroll, yScroll;
		
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
	
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = windowWidth;
		} else {
			pageWidth = xScroll;
		}
	
	
		arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
		return arrayPageSize;
	},
	
	/*
		getScroll()
		Returns array with x,y page scroll values.
		Core code from - quirksmode.org
	*/
	getScroll: function(){
	
		var yScroll;
	
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
		} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
			yScroll = document.documentElement.scrollTop;
		} else if (document.body) {// all other Explorers
			yScroll = document.body.scrollTop;
		}
	
		arrayPageScroll = new Array('',yScroll) 
		return arrayPageScroll;
	},
	/*
		hideselects()
		Hides all selects for the sake of IE6
	*/
	hideSelects: function() {
		if (ie && ieV < 7) {
			var s = document.getElementsByTagName('select');
			for (var i=0;i<s.length;i++) {
				s[i].style.visibility = 'hidden';
			}
		}
	},
	/*
		showselects()
		Shows all selects for the sake of IE6
	*/
	showSelects: function() {
		if (ie && ieV < 7) {
			var s = document.getElementsByTagName('select');
			for (var i=0;i<s.length;i++) {
				s[i].style.visibility = 'visible';
			}
		}
	}
	
}


/*
	Additional methods for Element added by SU, Couloir
	- further additions by Lokesh Dhakar (huddletogether.com)
*/
Object.extend(Element, {
	getWidth: function(element) {
		element = $(element);
		return element.offsetWidth; 
	},
	setWidth: function(element,w) {
		element = $(element);
		element.style.width = w +"px";
	},
	setHeight: function(element,h) {
		element = $(element);
		element.style.height = h +"px";
	},
	setTop: function(element,t) {
		element = $(element);
		element.style.top = t +"px";
	},
	setSrc: function(element,src) {
		element = $(element);
		element.src = src; 
	},
	setHref: function(element,href) {
		element = $(element);
		element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

/*
	Core verification class
*/

Form = {

	mailPattern: new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-z]{2,4}$"),
	errors: Array(),
	formID: '',
	
	Init: function( sFormID ) {
		Form.errors = Array();
		Form.formID = sFormID;
		Form.firstError = '';// first error field ID
		// Let's reset all error classes
		var errorEls = document.getElementsByClassName("error");
		if (errorEls.length > 0) {
			for (var i=0;i<errorEls.length;i++) {
				Element.removeClassName(errorEls[i], "error");
			}
		}

		// Now let's check for errors
		return Form.CheckForErrors();
	},
	
	CheckForErrors: function() {
		
		for (var i=0;i<Form.errors.length;i++) {
			if (Form.errors[i].data === false) {
				Form.firstError = Form.errors[i].id;
				break;
			}
		}
		if (typeof(Form.firstError) == "string" && Form.firstError != '') {
			Form.InvokeErrorMessage();
			return false
		} else {
			return true;
		}
		
	},

	/*
		Invokes error message
	*/
	InvokeErrorMessage: function() {
		var objBody = document.getElementsByTagName("body").item(0);
		
		var objOverlay = document.createElement("div");
		objOverlay.setAttribute('id','overlay');
		objOverlay.style.display = 'none';
		objOverlay.onclick = function() { Form.ClearMessage();return false }
		objBody.appendChild(objOverlay);

		var objErrorbox = document.createElement("div");
		objErrorbox.setAttribute('id','error');
		objErrorbox.style.display = 'none';
		objBody.appendChild(objErrorbox);

		var objHeader = document.createElement("h3");
		var objHeaderInner = document.createTextNode("Error");
		var objHeaderInnerWrap = document.createElement("span");
		objHeaderInnerWrap.appendChild(objHeaderInner)
		objHeader.appendChild(objHeaderInnerWrap);
		objErrorbox.appendChild(objHeader);

		var objInfo = document.createElement("p");
		var objInfoInner = document.createTextNode("Some required fields are empty or filled incorrectly. Please correct this issue.");
		objInfo.appendChild(objInfoInner);
		objErrorbox.appendChild(objInfo);

		var objLink = document.createElement("a");
		objLink.setAttribute('href','#');
		objLink.id = 'errorConfirmLink';
		var objLinkInner = document.createTextNode("Fix Errors");
		objLink.appendChild(objLinkInner);
		objLink.onclick = function() { Form.ClearMessage();return false };
		objErrorbox.appendChild(objLink);

		// stretch overlay to fill page and fade in
		var arrayPageSize = Page.getSize();
		Element.setHeight('overlay', arrayPageSize[1]);
		new Effect.Appear('overlay', { 
			duration: 0.2, 
			from: 0.0, 
			to: 0.8,
			beforeStart: function() {
				Page.hideSelects();
			},
			afterFinish: function() {
				$('errorConfirmLink').focus();
			}
		});

		// calculate top offset for the lightbox and display 
		var arrayPageSize = Page.getSize();
		var arrayPageScroll = Page.getScroll();
		var errorboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);

		Element.setTop('error', errorboxTop );
		Element.show('error');
	},

	
	/*
		Clears error message and hides overlay
	*/
	ClearMessage: function( ) {
		Element.hide('error');
		new Effect.Fade('overlay', { 
			duration: 0.2,
			afterFinish: function() {
				Page.showSelects();
			}
		});
		$(Form.firstError).focus();
	},

	/*
		Verify input element
		returns: 
		(object) result = { 
			id (string) - element's id,
			data (boolean) - whether the element has content
		}
	*/
	VerifyInput: function( sInputName, bEmail ) {
		var result = { data: false, id: null }
		var input = eval("document.forms['" + Form.formID + "']."+sInputName);
		if (input.value != "") {
			if (bEmail && !Form.mailPattern.test(input.value)) {
				result.data = false;
				Form.MarkError(input);
			} else {
				result.data = true;
			}
		} else {
			result.data = false;
			Form.MarkError(input);
		}
		if (input.id) result.id = input.id;
		return result;
	},


	MarkError: function( oObject ) {
		/*
			HINT: here you can add appropriate classes to indicate error - ie:
			Element.addClassName(oObject.parentNode.parentNode, "error");
		*/
		if (oObject.type == "text") {
			Element.addClassName(oObject.parentNode, "error");
		} else if (oObject.type == "radio") {
			
		} else if (oObject.tagName == "TEXTAREA") {
			
		}
	}
}


