if (typeof(SiteFramework) != 'function'){
	var SiteFramework = function (){};
}

SiteFramework.prototype.debugMode = true;
SiteFramework.prototype._DEBUG = {};

SiteFramework.prototype.baseUrl = '';

SiteFramework.prototype.fontMode = new Array('14px','16px','18px');
SiteFramework.prototype.currentFontMode  = 0;

SiteFramework.prototype.debug = function (data, label){
	if (this.debugMode){
		var d = new Date();
		label = d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds() + '.' + d.getMilliseconds() + ' ' + label;
		this._DEBUG[label] = data;
	}
}

SiteFramework.prototype.findNode = function (element, nodeName){
	var lim    = 0;
	while (element.nodeName != nodeName && element.nodeName != 'BODY' && lim < 1000){
		element = element.parentNode;
		lim++;
	}
	if (element.nodeName == nodeName){
		return element;
	}
	return false;
}

SiteFramework.prototype.getElement = function (element){
	if (typeof(element) == 'string'){
		element = $(element);
	} else if (typeof(element.element) == 'function'){
		element = Event.element(element);
	}
	return element;
}

SiteFramework.prototype.redirect = function (url){
	if (typeof(url) == 'undefined'){
		window.location = window.location;
	} else {
		window.location.href = url;
	}
}

SiteFramework.prototype.updateCookie = function (params){
	if (typeof(params) == 'object'){
		this.debug(params, 'UpadteCookie');
		if (typeof(params.data) == 'object'){
			for (var varKey in params.data){
				var varName = params.key+'['+varKey+']';
				this.addCookie(varName, params.data[varKey], params.expDays);
			}
		} else {
			this.addCookie(params.key, params.data, params.expDays);
		}
	}
}

SiteFramework.prototype.addCookie = function (name, value, expDays){
	if (expDays){
		var date = new Date();
		date.setTime(date.getTime()+(expDays*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	} else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

SiteFramework.prototype.readCookie = function (key, varKey){
	var nameEQ = key+'['+varKey+']'+'=';
	var ca = document.cookie.split(';');
	for (var i=0; i < ca.length; i++){
		var c = ca[i];
		while (c.charAt(0) == ' ') c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return '';
}

SiteFramework.prototype.validateEmail = function (email, checkEmpty){
	if (checkEmpty == true && email.length == 0){
		return false;
	}
	var emailRegExp = new RegExp("^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,5}\$");
	if (email.length != 0 && emailRegExp.test(email) == false){
		return false;
	}
	return true;
}

SiteFramework.prototype.getPageDimensions = 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){
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else {
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight){
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight){
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body){
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	var pageDimensions = {}
	if(yScroll < windowHeight){
		pageDimensions.height = windowHeight;
	} else {
		pageDimensions.height = yScroll;
	}

	if(xScroll < windowWidth){
		pageDimensions.width = windowWidth;
	} else {
		pageDimensions.width = xScroll;
	}
	return pageDimensions;
}

SiteFramework.prototype.getViewportDimensions = function(){
	var dimensions = {}
	if (Prototype.Browser.IE){
		dimensions.height = document.documentElement.clientHeight;
		dimensions.width = document.documentElement.clientWidth;
	} else {
		dimensions.height = window.innerHeight;
		dimensions.width = document.width || document.body.offsetWidth;
	}
	return dimensions;
}

SiteFramework.prototype.toggleFontSize = function(){
	var i = this.currentFontMode + 1;
	if (i >= this.fontMode.length){
		i = 0;
	}
	document.body.style.fontSize = this.fontMode[i];
	this.currentFontMode = i;
}

SiteFramework.prototype.submitForm = function(element){
	if (typeof(element) == 'string'){
		element = $(element);
	} else if (typeof(element.element) == 'function'){
		element = Event.element(element);
	}

	var form = this.findNode(element, 'FORM');
	if (form == false){ return false; }

	form.submit();

	return false;
}

SiteFramework.prototype.formValidationErrors = function (form, errors){
	var modelFields, fieldName, errorMessage, model, domField, domBlock;

	$j('.error', form).removeClass('error');
	$j('.error-message', form).text('');

	for (model in errors){
		modelFields = errors[model];
		for (fieldName in modelFields){
			errorMessage = modelFields[fieldName];
			fieldName = 'data['+model+']['+fieldName+']';

			domField = $j('[name="'+fieldName+'"]', form);
			domBlock = domField.parent().addClass('error');
			if ($j('> .error-message', domBlock).length == 0){
				$j('<div class="error-message"> </div>').appendTo(domBlock);
			}
			$j('> .error-message', domBlock).text(errorMessage);
		}
	}

	return false;
}


SF = new SiteFramework();
