
var _privateBrowserDetectObject = {

	detected : 0,
	ie : 0, ie4 : 0, ie5 : 0, ie6 : 0, ie7 : 0,
	ns : 0, ns4 : 0, ns6 : 0, ns7 : 0, ns8 : 0, ns9 : 0,
	op : 0, op5 : 0, op6 : 0, op7 : 0, op8 : 0, op9 : 0,
	mz7 : 0, saf : 0,
	firefox : 0,
	win : 0, mac : 0, unix : 0,

	init : function()
	{
		var agent = navigator.userAgent.toLowerCase();
		if (agent.indexOf('win') != -1)
			{ this.win = 1; }
		else if (agent.indexOf('mac') != -1)
			{ this.mac = 1; }
		else { this.unix = 1; }
		if (typeof window.opera != "undefined")
		{
			this.detected = 1; this.op = 1;
			if(/opera[\/ ][5]/.test(agent)){ this.op5 = 1; }
			if(/opera[\/ ][6]/.test(agent)){ this.op6 = 1; }
			if(/opera[\/ ][7]/.test(agent)){ this.op7 = 1; }
			if(/opera[\/ ][8]/.test(agent)){ this.op8 = 1; }
			if(/opera[\/ ][9]/.test(agent)){ this.op9 = 1; }
		}
		else if ( (agent.indexOf('firefox') != -1 ) )
		{
			this.detected = 1; this.firefox = 1;
		}
		else if (typeof document.all != "undefined")
		{
			this.detected = 1; this.ie = 1;
			if (typeof document.getElementById != "undefined")
			{
				this.ie5 = 1;
				if (agent.indexOf("msie 6") != -1)
				{
					this.ie6 = 1;
				}
				else if (agent.indexOf("msie 7") != -1)
				{
					this.ie7 = 1;
				}
			}
			else { this.ie4 = 1; }
		}
		else if (typeof document.getElementById != "undefined")
		{
			this.detected = 1; this.ns = 1;
			if(agent.indexOf("netscape/6") != -1 || agent.indexOf("netscape6") != -1)
			{ this.ns6 = 1; }
			else if(agent.indexOf("netscape/7") != -1 || agent.indexOf("netscape7") != -1)
			{ this.ns7 = 1;}
			else if(agent.indexOf("netscape/8") != -1 || agent.indexOf("netscape8") != -1)
			{ this.ns8 = 1;}
			else if(agent.indexOf("netscape/9") != -1 || agent.indexOf("netscape9") != -1)
			{ this.ns9 = 1;}
			else if(agent.indexOf("gecko")!=-1)
			{ this.ns6 = 1; this.mz7 = 1;}
			if(agent.indexOf("safari") != -1 || (typeof document.childNodes != "undefined" && typeof document.all=="undefined" && typeof navigator.taintEnabled=="undefined"))
			{ this.mz7 = 0; this.ns6 = 1; this.saf = 1;}
		}		
		else if((agent.indexOf('mozilla') != -1) && (parseInt(navigator.appVersion) >= 4))
		{
			if (typeof navigator.mimeTypes['*'] != "undefined")
			{
				this.detected = 1; this.ns4 = 1;
			}
		}
		return this;
	},
	isNS    	: function() { return this.ns; },
	isIE    	: function() { return this.ie; },
	isOpera 	: function() { return this.op; },
	isSafari	: function() { return this.saf; },
	isFireFox	: function() { return this.firefox; },

	isNS9   	: function(v) { return this.ns9; },
	isNS8   	: function(v) { return this.ns8 || (v ? this.isNS9() : false); },
	isNS7   	: function(v) { return this.ns7 || (v ? this.isNS8() : false); },
	isNS6   	: function(v) { return this.ns6 || (v ? this.isNS7() : false); },
	isNS4   	: function(v) { return this.ns4 || (v ? this.isNS6() : false); },

	isIE7   	: function(v) { return this.ie7; },
	isIE6   	: function(v) { return this.ie6 || (v ? this.isIE7() : false); },
	isIE5   	: function(v) { return this.ie5 || (v ? this.isIE6() : false); },
	isIE4   	: function(v) { return this.ie4 || (v ? this.isIE5() : false); },

	isOP9		: function(v) { return this.op9 },
	isOP8		: function(v) { return this.op8 || (v ? this.isOP9() : false); },
	isOP7		: function(v) { return this.op7 || (v ? this.isOP8() : false); },
	isOP6		: function(v) { return this.op6 || (v ? this.isOP7() : false); },
	isOP5		: function(v) { return this.op5 || (v ? this.isOP6() : false); },	
	
	isMac		: function() { return this.mac; },
	isWin		: function() { return this.win; },
	isLinux		: function() { return this.lin; }
};

var _privateUtilMethods = {

	toInt : function(v)
	{
		return isNaN(v = parseInt(v))? 0 : v;
	}
};

var _privateElementMethods = {

	getByID : function(elementName, doc)
	{
		if (undefined == doc) doc = document;
		if (doc.getElementById)
		{
			var e = doc.getElementById(elementName);
			if (undefined == e) return null;
			return e;
		}
		else if (doc.all)
		{
			if (undefined == doc.all[elementName]) return null;
			return doc.all[elementName];
		}
		else if (doc.layers)
		{
			if (undefined == doc.layers[elementName]) return null;
			return doc.layers[elementName];
		}
		return null;
	},
	getCoordinates : function(elementName, doc)
	{
		var res = new Object();
		res.x = 0; res.y = 0; res.width = 0; res.height = 0;
		var o = jvl.element.getByID(elementName, doc);
		if (o != null)
		{
			res.x = jvl.util.toInt(o.style.left);
			res.y = jvl.util.toInt(o.style.top);
			res.width = jvl.util.toInt(o.style.width);
			res.height = jvl.util.toInt(o.style.height);
		}
		return res;
	},
	hide : function(elementName, doc)
	{
		var d = doc != null && undefined != doc ? doc : document;
		if (d.getElementById)
		{
			if (undefined == d.getElementById([elementName])) return;
			var style = d.getElementById([elementName]).style;
			style.visibility = "hidden";
			style.display = "none";
		}
		else if (d.all)
		{
			if (undefined == d.all[elementName]) return;
			var style = d.all[elementName].style;
			style.visibility = "hidden";
			style.display = "none";
		}
		else if (d.layers)
		{
			if (undefined == d.layers[elementName]) return;
			d.layers[elementName].visibility = "hide";
		}
	},
	show : function(elementName, doc, disp)
	{
		var d = doc != null && undefined != doc ? doc : document;
		if (d.getElementById)
		{
			if (undefined == d.getElementById([elementName])) return;
			var style = d.getElementById([elementName]).style;

			if (undefined == disp)
			{
				style.display = "block";
			}
			else
			{
				style.display = disp;
			}
			style.visibility = "visible";
		}
		else if (d.all)
		{
			if (undefined == d.all[elementName]) return;
			var style = d.all[elementName].style;
			style.visibility = "visible";
			style.display = "inline";
		}
		else if (d.layers)
		{
			if (undefined == d.layers[elementName]) return;
			d.layers[elementName].visibility = "show";
		}
	},
	isVisible : function(elementName, doc)
	{
		var d = doc != null && undefined != doc ? doc : document;
		if (d.getElementById)
		{
			if (undefined == d.getElementById([elementName])) return;		
			var style = d.getElementById([elementName]).style;
			if (style.display == '' && style.visibility == '')
				return true;
			if (style.display == 'block' && (style.visibility == 'visible' || style.visibility == '' ))
				return true;
		}
		else if (d.all) 
		{
			visibilityState = d.all[elementName].style.visibility;
		}
		return false;
	},
	toggle : function(elementName, doc)
	{
		if (undefined == doc) doc = document;
		var visible = jvl.element.isVisible(elementName, doc);
		if (visible == true) 
		{	
			jvl.element.hide(elementName, doc);	
		}
		else if (visible == false)
		{	
			jvl.element.show(elementName, doc);	
		}
	},
	disable : function(el, dis, doc)
	{
		if (undefined == doc) doc = document;
		if (undefined == dis) dis = true;
		if (undefined != el && undefined != el.disabled)
		{
			el.disabled = dis;
		}
	},
	enable : function(el, en, doc)
	{
		if (undefined == en) en = true;
		this.disable(el, !en);
	},
	isChecked : function(el)
	{
		if (undefined != el && undefined != el.checked)
			return el.checked;
		if (undefined != el && undefined != el.selected)
			return el.selected;
		return false;
	},
	move : function(elementName, x, y, doc)
	{
		if (undefined == doc) doc = document;
		var el = jvl.element.getByID(elementName, doc);
		if (el != null)
		{
			var s = el.style;
			s.left = x + "px";
			s.top = y + "px";
		}
	},
	setX : function(elementName, x, doc)
	{
		if (undefined == doc) doc = document;
		var el = jvl.element.getByID(elementName, doc);
		if (el != null)
		{
			el.style.left = x + "px";
		}
	},
	setY : function(elementName, y, doc)
	{
		if (undefined == doc) doc = document;
		var el = jvl.element.getByID(elementName, doc);
		if (el != null)
		{
			el.style.top = y + "px";
		}
	},
	setWidth : function(elementName, width, doc)
	{
		if (undefined == doc) doc = document;
		var el = jvl.element.getByID(elementName, doc);
		if (el != null)
		{
				el.style.width = width + "px";
		}
	},
	setHeight : function(elementName, height, doc)
	{
		if (undefined == doc) doc = document;
		var el = jvl.element.getByID(elementName, doc);
		if (el != null)
		{
			el.style.height = height + "px";
		}
	},
	resize : function(elementName, x, y, width, height, doc)
	{
		if (undefined == doc) doc = document;
		var el = jvl.element.getByID(elementName, doc);
		if (el != null)
		{
			var s = el.style;
			s.left = x + "px";
			s.top = y + "px";
			if( isNaN(  width  ) )
			{
				s.width = width;
				s.height = height;			
			}
			else
			{
				s.width = width + "px";
				s.height = height + "px";
			}
		}
	}
};

var _privateFormMethods = {

	getSelectedOption : function(selectElement)
	{
		if (undefined == selectElement || selectElement == null) return null;
		
		var sIndex = selectElement.selectedIndex;
		return selectElement.options[sIndex];
	},
	getSelectedRadioButton : function(selected)
	{
		if (undefined == selected || selected == null) return null;
		for (var i = 0; i < selected.length; i++)
		{
			if (selected[i].checked) return selected[i];
		}
		return null;
	},
	disableForm : function(form, dis)
	{
		if (undefined == dis) dis = true;

		for (var i = 0; i < form.elements.length; i++)
		{
			if ((undefined == form.elements[i].disabled) == false)
			{
				//var type = form.elements[i].getAttribute('type');
				//if (type == 'select-one' || type == 'radio' || type == 'text' || type == 'checkbox')
				{
					jvl.element.disable(form.elements[i], dis);
				}
			}
		}
	}
};

var _privateValidationMethods = {
	isEmpty : function(str)
	{
		return undefined == str || str == null || str == "" || (undefined != str.length && str.length == 0);
	},
	notEmpty : function(str)
	{
		return !isEmpty(str);
	},
	isEmailAddress : function(emailAddress)
	{
		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
		return filter.test(emailAddress);
	}
};
var _privateCookieMethods = {
/**
 * Sets a Cookie with the given name and value.
 *
 * name       Name of the cookie
 * value      Value of the cookie
 * [expires]  Expiration date of the cookie (default: end of current session)
 * [path]     Path where the cookie is valid (default: path of calling document)
 * [domain]   Domain where the cookie is valid
 *              (default: domain of calling document)
 * [secure]   Boolean value indicating if the cookie transmission requires a
 *              secure transmission
**/
	setCookie : function (name, value, expires, path, domain, secure)
	{
	    document.cookie = name + "=" + escape(value) +
	        ((expires) ? "; expires=" + expires.toGMTString() : "") +
	        ((path) ? "; path=" + path : "") +
	        ((domain) ? "; domain=" + domain : "") +
	        ((secure) ? "; secure" : "");
	},

	/**
	 * Returns a string containing value of specified cookie,
	 *   or null if cookie does not exist.
	**/
	getCookie : function(name)
	{
	    var dc = document.cookie;
	    var prefix = name + "=";
	    var begin = dc.indexOf("; " + prefix);
	    if (begin == -1)
	    {
	        begin = dc.indexOf(prefix);
	        if (begin != 0) return null;
	    }
	    else begin += 2;
	    var end = document.cookie.indexOf(";", begin);
	    if (end == -1)
	    {
	        end = dc.length;
	    }
	    return unescape(dc.substring(begin + prefix.length, end));
	},
	deleteCookie : function(name, path, domain)
	{
	    if (this.getCookie(name))
	    {
	        document.cookie = name + "=" + 
	            ((path) ? "; path=" + path : "") +
	            ((domain) ? "; domain=" + domain : "") +
	            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
	    }
	}
}

var jvl = {
	version : 1.0,
	browser : null,
	util :
	{
		toInt : function(val) { return _privateUtilMethods.toInt(val); }
	},
	validation :
	{
		isEmpty : function(str) { return _privateValidationMethods.isEmpty(str); },
		notEmpty : function(str) { return _privateValidationMethods.notEmpty(str); },
		isEmailAddress : function(emailAddress) { return _privateValidationMethods.isEmailAddress(emailAddress); }
	},
	element :
	{
		getByID        : function(elementName, doc) { return _privateElementMethods.getByID(elementName, doc); },
		getCoordinates : function(elementName, doc) { return _privateElementMethods.getCoordinates(elementName, doc); },
		hide           : function(elementName, doc) { return _privateElementMethods.hide(elementName, doc); },
		show           : function(elementName, doc, disp) { return _privateElementMethods.show(elementName, doc, disp); },
		isVisible      : function(elementName, doc) { return _privateElementMethods.isVisible(elementName, doc); },
		toggle         : function(elementName, doc) { return _privateElementMethods.toggle(elementName, doc); },
		disable        : function(element, d, doc) { return _privateElementMethods.disable(element, d, doc); },
		enable         : function(element, e, doc) { return _privateElementMethods.enable(element, e, doc); },
		isChecked      : function(element) { return _privateElementMethods.isChecked(element); },
		setX           : function(elementName, x, doc) { return _privateElementMethods.setX(elementName, x, doc); },
		setY           : function(elementName, y, doc) { return _privateElementMethods.setY(elementName, y, doc); },
		setHeight      : function(elementName, h, doc) { return _privateElementMethods.setHeight(elementName, h, doc); },
		setWidth       : function(elementName, w, doc) { return _privateElementMethods.setWidth(elementName, w, doc); },
		move           : function(elementName, x, y, doc) { return _privateElementMethods.move(elementName, x, y, doc); },
		resize         : function(elementName, x, y, width, height, doc) { return _privateElementMethods.resize(elementName, x, y, width, height, doc); }
	},
	form :
	{
		getSelectedOption : function(selectElement) { return _privateFormMethods.getSelectedOption(selectElement); },
		disableForm : function(form, disable) { return _privateFormMethods.disableForm(form, disable); },
		getSelectedRadioButton : function(form, selected) { return _privateFormMethods.getSelectedRadioButton(form, selected); }
	},
	cookie :
	{
		getCookie : function(name) { return _privateCookieMethods.getCookie(name); },
		setCookie : function(name, value, expires, path, domain, secure) { _privateCookieMethods.setCookie(name, value, expires, path, domain, secure); },
		deleteCookie : function(name, path, domain) { _privateCookieMethods.deleteCookie(name, path, domain); }
	},
	ajax :
	{
		RequestorObject : function() { return eval("new _privateAJAXObject();"); }
	}
};
jvl.browser = _privateBrowserDetectObject;
jvl.browser.init();

