/*	=======================================================================	*/
/// <remarks>
/// Version:
///		- number:	1.0.0
///		- build:	20060226
///		- status:	live
/// </remarks>
/*	=======================================================================	*/
/// <remarks>
/// Global Variables
/// </remarks>
	var x_debug = false;
	try {
		var x_page = new ClassSimplified(x_debug);
		var x_valid = new ClassSiteValid(x_debug);
	} catch(e) {
		alert("loading error: "+e.description);	
	}
	var Popup = x_page.Popup;
/*	=======================================================================	*/
/// <remarks>
/// Class: ClassSimplified
/// The ClassSimplified object class has the following purpose/function:
///	- 
/// </remarks>
/*	-----------------------------------------------------------------------	*/
/// <summary>
/// The ClassSimplified object class is constructed as follows:
///		var thisobj = new ClassSimplified(dbg);
/// - where:
///		- dbg:	debugging switch
/// </summary>
function ClassSimplified(dbg) {
	/*	-------------------------------------------	*/
	/// <remarks>Properties: Public</remarks>
	/*	-------------------------------------------	*/
	this.parameter = "";
	/*	-------------------------------------------	*/
	/// <remarks>Properties: Private</remarks>
	/*	-------------------------------------------	*/
	var _self = this;	// self allows for a method/property to be called internally
	var _debug = (dbg)? dbg : false;
	var _id = "ClassSimplified";
	var _doc = document;
	var _win = window;
	var _docEl = _doc.documentElement;	
	var	_imgdir = "images/simplified/";
	var _href = document.location.href;
	var _pop, _pop_name = "xPop";

	/*	-------------------------------------------	*/
	/// <remarks>Region: Accessor methods</remarks>
	/*	-------------------------------------------	*/
	this.GetID = function() { return(_id); }
	/*	-------------------------------------------	*/
	/// <remarks>Region: Public methods</remarks>
	/*	-------------------------------------------	*/
	this.Popup = _Popup;
	this.OnLoad =_OnLoad;
	this.Check = _Check;
	this.Validate = _Validate;
	/// <summary>Method:_Popup</summary>
	function _Popup(ul) {
		_popup(ul, "");
	}
	/// <summary>Method:_OnLoad</summary>
	function _OnLoad() {
		_setHover();
		// Set the rounded borders on the highlight paragraphs
		if (NiftyCheck()) {
			Rounded("div.parahigh", "all", "#FFF", "#E3E9CD", "smooth");
			Rounded("div.paraemph", "all", "#FFF", "#DEE5EB", "smooth");
		}
	}
	/// <summary>Method:_Check</summary>
	function _Check(frm, typ, func) {
		_Debug("_Check", "frm", frm);				
		if (typeof(frm) == "string") {
			_frm = _getFormByName(frm);
		} else {//assume frm is object of type form 
			_frm = frm;	
			frm = _frm.name;
		}
		_Debug("_Check", "name", _frm.name, " type", typ, " function", typeof(func));
		switch (typ) {
			case "valid":
			default:		if (typeof(func) != "function")
								_frm.submit(); 	// submit if validate function does not exist
							else {
								self.Validate = func;
								if (self.Validate(_frm, self)) {
									_Debug("_Check", "OK", true);
									_frm.submit();
								} else {
									_Debug("_Check", "OK", false);
								}
							}
							break;
		}
	}
	/// <summary>Method:_Validate</summary>
	function _Validate(frm) {
		_Debug("_Validate", "frm", frm.name);
	}
	/*	-------------------------------------------	*/
	/// <remarks>Region: Private methods</remarks>
	/*	-------------------------------------------	*/
	var _getEl = function(el) {return _doc.getElementById(el);}
	/// <summary>Method: _getFormByName - retrieves the form object based on a reference passed.
	function _getFormByName(frmName) {
		var frm = document.getElementById(frmName);
		if (!frm)	// used if the form has a name instead of id
			frm = document.forms[frmName];
		return frm;
	}
	/// <summary>Method: _pop: open a new window</summary>
	function _popup(url, setting) {
		_pop = window.open(url,_pop_name, setting);
		try { _pop.focus(); }
		catch (e) { _pop.focus(); }
	}
	/// <summary>Method:_RaiseError</summary>
	function _RaiseError(thiserr) {
		_Debug("RaiseError:", "thiserr", thiserr);
		throw (thiserr);
	}
	/// <summary>Method:_Debug - write debugging message. First param is the method label, followed by name, value pairs</summary>
	function _Debug(arg) {
		if (_debug) {
			var s = "<!-- ClassSimplified::"
			s = s.concat(arguments[0], ":");
			var argn = arguments.length;
			for(var i=1; i<argn; i=i+2)
				s = s.concat(arguments[i], ":", arguments[i+1], " ");
			alert(s.concat("-->\n"));
		}
	}
	//<li onmouseover="javascript:this.className+=' sfhover'"> the ff js adds a class name to the li element onmouseover and replace with an empty string onmouseout: 4 Sthe.
	function _setHover() {
		var mnu = _getEl("top-mnu");
		if (mnu) {
			var sfEls = mnu.getElementsByTagName("li");
			for (var i=0; i<sfEls.length; i++) {
				sfEls[i].onmouseover=function() {
					this.className+=" sfhover";
				}
				sfEls[i].onmouseout=function() {
					this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
				}
			}
		}
	}
	/*	-------------------------------------------	*/
	/// <remarks>
	/// 'Nifty' corners
	/// The following methods have been adapted from the article 
	///	- 'Nifty Corners: rounded corners without images': http://pro.html.it/esempio/nifty/
	///	- 'More Nifty Corners': http://pro.html.it/articoli/id_599/idcat_31/pag_1/pag.html
	/// </remarks>
	/*	-------------------------------------------	*/
	/// <summary>Method:NiftyCheck</summary>
	function NiftyCheck(){
		if(!document.getElementById || !document.createElement)
		    return(false);
		isXHTML=/html\:/.test(document.getElementsByTagName('body')[0].nodeName);
		if(Array.prototype.push==null){Array.prototype.push=function(){
		      this[this.length]=arguments[0]; return(this.length);}}
		return(true);
	}
	/// <summary>Method:Rounded</summary>
	function Rounded(selector,wich,bk,color,opt){
		var i,prefixt,prefixb,cn="r",ecolor="",edges=false,eclass="",b=false,t=false;
		
		if(color=="transparent"){
		    cn=cn+"x";
		    ecolor=bk;
		    bk="transparent";
		    }
		else if(opt && opt.indexOf("border")>=0){
		    var optar=opt.split(" ");
		    for(i=0;i<optar.length;i++)
		        if(optar[i].indexOf("#")>=0) ecolor=optar[i];
		    if(ecolor=="") ecolor="#666";
		    cn+="e";
		    edges=true;
		    }
		else if(opt && opt.indexOf("smooth")>=0){
		    cn+="a";
		    ecolor=Mix(bk,color);
		    }
		if(opt && opt.indexOf("small")>=0) cn+="s";
		prefixt=cn;
		prefixb=cn;
		if(wich.indexOf("all")>=0){t=true;b=true}
		else if(wich.indexOf("top")>=0) t="true";
		else if(wich.indexOf("tl")>=0){
		    t="true";
		    if(wich.indexOf("tr")<0) prefixt+="l";
		    }
		else if(wich.indexOf("tr")>=0){
		    t="true";
		    prefixt+="r";
		    }
		if(wich.indexOf("bottom")>=0) b=true;
		else if(wich.indexOf("bl")>=0){
		    b="true";
		    if(wich.indexOf("br")<0) prefixb+="l";
		    }
		else if(wich.indexOf("br")>=0){
		    b="true";
		    prefixb+="r";
		    }
		var v=getElementsBySelector(selector);
		var l=v.length;
		for(i=0;i<l;i++){
		    if(edges) AddBorder(v[i],ecolor);
		    if(t) AddTop(v[i],bk,color,ecolor,prefixt);
		    if(b) AddBottom(v[i],bk,color,ecolor,prefixb);
		    }
	}
	/// <summary>Method:AddBorder</summary>
	function AddBorder(el,bc){
		var i;
		if(!el.passed){
		    if(el.childNodes.length==1 && el.childNodes[0].nodeType==3){
		        var t=el.firstChild.nodeValue;
		        el.removeChild(el.lastChild);
		        var d=CreateEl("span");
		        d.style.display="block";
		        d.appendChild(document.createTextNode(t));
		        el.appendChild(d);
		        }
		    for(i=0;i<el.childNodes.length;i++){
		        if(el.childNodes[i].nodeType==1){
		            el.childNodes[i].style.borderLeft="1px solid "+bc;
		            el.childNodes[i].style.borderRight="1px solid "+bc;
		            }
		        }
		    }
		el.passed=true;
	}
	/// <summary>Method:AddTop</summary>
	function AddTop(el,bk,color,bc,cn){
		var i,lim=4,d=CreateEl("b");
		
		if(cn.indexOf("s")>=0) lim=2;
		if(bc) d.className="artop";
		else d.className="rtop";
		d.style.backgroundColor=bk;
		for(i=1;i<=lim;i++){
		    var x=CreateEl("b");
		    x.className=cn + i;
		    x.style.backgroundColor=color;
		    if(bc) x.style.borderColor=bc;
		    d.appendChild(x);
		    }
		el.style.paddingTop=0;
		el.insertBefore(d,el.firstChild);
	}
	/// <summary>Method:AddBottom</summary>
	function AddBottom(el,bk,color,bc,cn){
		var i,lim=4,d=CreateEl("b");
		
		if(cn.indexOf("s")>=0) lim=2;
		if(bc) d.className="artop";
		else d.className="rtop";
		d.style.backgroundColor=bk;
		for(i=lim;i>0;i--){
		    var x=CreateEl("b");
		    x.className=cn + i;
		    x.style.backgroundColor=color;
		    if(bc) x.style.borderColor=bc;
		    d.appendChild(x);
		    }
		el.style.paddingBottom=0;
		el.appendChild(d);
	}
	/// <summary>Method:CreateEl</summary>
	function CreateEl(x){
		if(isXHTML) return(document.createElementNS('http://www.w3.org/1999/xhtml',x));
		else return(document.createElement(x));
	}
	/// <summary>Method:getElementsBySelector</summary>
	function getElementsBySelector(selector){
		var i,selid="",selclass="",tag=selector,f,s=[],objlist=[];
		
		if(selector.indexOf(" ")>0){  //descendant selector like "tag#id tag"
		    s=selector.split(" ");
		    var fs=s[0].split("#");
		    if(fs.length==1) return(objlist);
		    f=document.getElementById(fs[1]);
		    if(f) return(f.getElementsByTagName(s[1]));
		    return(objlist);
		    }
		if(selector.indexOf("#")>0){ //id selector like "tag#id"
		    s=selector.split("#");
		    tag=s[0];
		    selid=s[1];
		    }
		if(selid!=""){
		    f=document.getElementById(selid);
		    if(f) objlist.push(f);
		    return(objlist);
		    }
		if(selector.indexOf(".")>0){  //class selector like "tag.class"
		    s=selector.split(".");
		    tag=s[0];
		    selclass=s[1];
		    }
		var v=document.getElementsByTagName(tag);  // tag selector like "tag"
		if(selclass=="")
		    return(v);
		for(i=0;i<v.length;i++){
		    if(v[i].className.indexOf(selclass)>=0){
				if (selclass == "paraemph")
					v[i].outerHTML = "<div class='high-out'><div class='high-em'>"+v[i].innerHTML+"</div></div>";
				else
					v[i].outerHTML = "<div class='high-out'><div class='high-in'>"+v[i].innerHTML+"</div></div>";
		        objlist.push(v[i]);
		        }
		    }
		return(objlist);
	}
	/// <summary>Method:Mix</summary>
	function Mix(c1,c2){
		var i,step1,step2,x,y,r=new Array(3);
		if(c1.length==4)step1=1;
		else step1=2;
		if(c2.length==4) step2=1;
		else step2=2;
		for(i=0;i<3;i++){
		    x=parseInt(c1.substr(1+step1*i,step1),16);
		    if(step1==1) x=16*x+x;
		    y=parseInt(c2.substr(1+step2*i,step2),16);
		    if(step2==1) y=16*y+y;
		    r[i]=Math.floor((x*50+y*50)/100);
		    }
		return("#"+r[0].toString(16)+r[1].toString(16)+r[2].toString(16));
	} 
	/*	-------------------------------------------	*/
	/// <remarks>end 'Nifty' corners</remarks>
	/*	-------------------------------------------	*/
}
/*	=======================================================================	*/
/// <remarks>
/// Class: ClassSiteValid
/// The ClassSiteValid object class has the following purpose/function:
///	- supplies client-side properties and methods for 'form' objects
/// </remarks>
/*	-----------------------------------------------------------------------	*/
/// <summary>
/// The ClassSiteValid object class is constructed as follows:
///		var thisobj = new ClassSiteValid(dbg);
/// - where:
///		- dbg:	debugging switch
/// </summary>
function ClassSiteValid(dbg) {
	/*	-------------------------------------------	*/
	/// <remarks>Properties: Private</remarks>
	/*	-------------------------------------------	*/
	var _self = this;	// self allows for a method/property to be called internally
	var _debug = (dbg)? dbg : false;
	/*	-------------------------------------------	*/
	/// <remarks>Region: Public methods</remarks>
	/*	-------------------------------------------	*/
	this.Text = _Text;
	this.Email = _Email;
	this.Drop = _Drop;
	this.Debug = _Debug;
	/// <summary>Method:_Text</summary>
	function _Text(thisfld, thishint) {
		_Debug("_Text", "thishint", thishint, "thisfld", thisfld.name);
		
		if (!thisfld.value)// || thisfld.value.length <= 0)
			return _Notify(thishint, thisfld, true);
		return true;
	}
	/// <summary>Method:_Email</summary>
	function _Email(thisfld, thishint){
		_Debug("_Email", "thisfld", thisfld.name);
		validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
		strEmail = thisfld.value;
		if (strEmail) {
			// search email text for regular exp matches
			if (strEmail.search(validRegExp) == -1)
				return _Notify(thishint, thisfld, true);
			return true; 
		}
		else alert(thishint);
	}
	/// <summary>Method:_Drop</summary>
	function _Drop(thisfld, thishint) {
		_Debug("_Drop", "thisfld", (thisfld)? thisfld.name : "select not defined");
		if (thisfld.selectedIndex==0)
			return _Notify(thishint, thisfld, true);
		return true;
	}
	/// <summary>Method:_Notify - show validation message, select, set focus.</summary>
	function _Notify(hnt, fld, sel) {
		alert(hnt);
		sel = (typeof(sel)!="undefined")? sel : true;
		if (sel && fld.style.visibility == "visible") {
			fld.select();
			fld.focus();
		}
		return false;
	}
	/// <summary>Method:_Debug - write debugging message.</summary>
	function _Debug(arg) {
		if (_debug) {
			s = "<!-- ClassSiteValid::"
			s = s.concat(arguments[0], ":");
			var argn = arguments.length;
			for(var i=1; i<argn; i=i+2)
				s = s.concat(arguments[i], ":", arguments[i+1], " ");
			alert(s.concat("-->\n"));
		}
	}
}
