//var featureList=[ "ajax2", "dialog", "calendar" ];
bool = /^.[n,r,e]/i;

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  }
  return( '' );
} 

SDForm = {
	
	OUpOptDlog:'',
	GetOrderNo:function(){  
		var o = SDForm.Order.getElementsByTagName( 'Order' )[0];
		return(o.getAttribute( 'id' ) );
	},
	GetProcess:function(){  
		var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
		return( g.getAttribute( 'Processing' ) );
	},
	
	LoadSettings:function(){
		$( 'footerlogo' ).src = '/_sd/images/dog.gif';
		
		var options = { 
			type: OAT.AJAX.TYPE_XML,
			onerror:function( request ){ alert( "request returned " + request.getStatus() ); } 
			};
		
		var docforms = new Array();
		for( var i = 0; i < document.forms.length; ++ i ){
			docforms[i] = document.forms[i].name;
			}
		if( SDForm.addInitForms ){ docforms.push( SDForm.addInitForms ); }
		
		function ApplySettings( request ){ 
					SDForm.Settings=request;
					
					SDForm.SetDocTitle();
					SDForm.SetRequired();
					
					var vw = $( 'VisitCoWebSite' );
					if( vw ){ vw.innerHTML = 'Visit ' + SDForm.getCompanyWebSite(); }
					
					var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
					var Lg = g.getAttribute( 'MailListGroup' );

					function OnFirstUCLoad(){
						SDForm.LogActivity( "Retrieving your previous order and contact information." ); 
						SDForm.PopLgSelector();
						if( window.InitSetisReady ){ InitSetisReady(); }
						SDForm.SetDocDefaults();
						SDForm.LogActivity( "Upload client loaded!." );
						setTimeout( LoadDlog.hide, 3 * 1000 );	
						UC.InsertComplete = false;
					}	
					
					function UCUploadComplete(error){
						LoadDlog.hide();
						var o = SDForm.Order.getElementsByTagName( 'Order' )[0];		 
						$( 'OCtxt' ).innerHTML = 'Order #' + o.getAttribute( 'id' ) + ' Complete';
						if( error && $( 'UploadError') ){	
						   var MacSafari = OAT.Browser.isMac && OAT.Browser.isWebKit  && true;
						   if( ! MacSafari ){
								$( 'UploadError' ).innerHTML = error;
								}
							}
						UC.Remove();
						if( window.OIEpComplete ){
							OIEpComplete();
						}
						else{  OrdComplete.show(); }
					}
					  	
					var Up = SDForm.Settings.getElementsByTagName( 'Upload' )[0];
					if( Up ){
						new Uploader( { el: Up.getAttribute( 'Element' ), 
										optsel: Up.getAttribute( 'OptsEl' ),
										protocol: Up.getAttribute( 'Protocol' ), 
										mode: Up.getAttribute( 'Mode' ),
										password: Up.getAttribute( 'Pass' ),
										user: Up.getAttribute( 'User' ),
										host: Up.getAttribute( 'Host' ),
										basepath: Up.getAttribute( 'BasePath' ),
										process: g.getAttribute( 'Processing' ),
										messagefile: Up.getAttribute( 'MessageFile' ),
										log: SDForm.LogActivity,
										InsertComplete : OnFirstUCLoad,
										UploadComplete : UCUploadComplete
									} );
						var InsertOnLoad = bool.test( Up.getAttribute( 'InsertOnLoad' ) );
									
					}
						
					if( InsertOnLoad ){
						SDForm.LogActivity( "Loading Upload Client. <br><b>Please be patient.</b>" );
						UC.Insert();
						}	
					else{
						SDForm.LogActivity( "Retrieving your previous order and contact information." ); 
						SDForm.PopLgSelector();
						if( window.InitSetisReady ){ InitSetisReady(); }
						SDForm.SetDocDefaults();
						if( ! window.InitSetisReady ){ LoadDlog.hide(); }
						}
					
					
					$( 'footerlogo' ).src = '/_sd/images/byspinnerdog.jpg';
					}
					
		var sf = getQueryVariable( 'sf' );
		sf = sf ? '&sf=' + sf : '';
		OAT.AJAX.GET( ".", "req=initset&forms=" + docforms.join(',') + sf , ApplySettings, options );
	},
	
	PopLgSelector:function(){
		var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
		var LgSel = g.getAttribute( "LgSelect" );
			if( ! LgSel ){ return; }
			
		var frm = LgSel.replace( /:.*$/, '' );
		var ele = LgSel.replace( /^.*:/, '' );
      
     	var mlg = g.getAttribute( "MailListGroup" );
		var lg = SDForm.Settings.getElementsByTagName( mlg )[0];
      
		SDForm.popSelectElement( lg, document.forms[ frm ].elements[ ele ] );
	},
		
	LoadListGroup:function(){
		$( 'footerlogo' ).src = '/_sd/images/dog.gif';
		
		var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
		var Lg = g.getAttribute( 'MailListGroup' );
		  
		var options = { 
			type: OAT.AJAX.TYPE_XML,
			onerror:function( request ){ alert( "request returned " + request.getStatus() ); } 
			};
		
		function UseListGroup( request ){
			SDForm.ListGroup = request; 
			var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
			var LgSel = g.getAttribute( "LgSelect" );

			var frm = LgSel.replace( /:.*$/, '' );
			var ele = LgSel.replace( /^.*:/, '' );
      
			SDForm.popSelectElement( SDForm.ListGroup.childNodes[0], document.forms[ frm ].elements[ ele ] );
			}
			
		OAT.AJAX.GET( ".", "req=mlist&Lg=" + Lg, UseListGroup, options );
	},
	
	LoadSelectFromXml:function( xmlfile, frmele ){
		$( 'footerlogo' ).src = '/_sd/images/dog.gif';
		  
		var options = { 
			type: OAT.AJAX.TYPE_XML,
			onerror:function( request ){ alert( "request returned " + request.getStatus() ); } 
			};
		
		function popsel( request ){ 
			SDForm.popSelectElement( request.childNodes[0], frmele );
			}
			
		OAT.AJAX.GET( xmlfile, false, popsel, options );
	},
	
	FillFormSelOpts:function ( frm )
	{
	var frmselopts = SDForm.Settings.getElementsByTagName( 'FormSelOpts'  )[0];
	var frmxml = frmselopts.getElementsByTagName( frm.name  )[0];
	if( ! frmxml ){ return; }
	var selxml = frmxml.childNodes;
	for( var i=0; i < selxml.length; ++i ){
		var el = frm.elements[ selxml[i].tagName ];
		if( el ){
			if( el.type === "select" || el.type === "select-one" ){
				SDForm.popSelectElement( selxml[i], el );
				}
			}
		}
	},
	
	StartUploads:function(){
		//var Up = SDForm.Settings.getElementsByTagName( 'Upload' )[0];
		if( $( 'UploadError' ) ){  $( 'UploadError' ).innerHTML = '' };
		if( SDForm.Attached() ){
			SDForm.LogActivity( "Beginning File Upload" );
			UC.Begin( SDForm.GetOrderNo() );
			}
		else{
			LoadDlog.hide();
			var o = SDForm.Order.getElementsByTagName( 'Order' )[0];		 
			$( 'OCtxt' ).innerHTML = 'Order #' + o.getAttribute( 'id' ) + ' Complete';
			OrdComplete.show();
		}
	},
	
	OrderAgain:function(){
		var Up = SDForm.Settings.getElementsByTagName( 'Upload' )[0];
		if( Up ){ UC.Insert(); }
		SDForm.ClearActivity();
		OrdComplete.hide();
	},
	
	getCompanyWebSite:function(){
		var r = SDForm.Settings.getElementsByTagName( 'Registration' )[0];
		if( r ){
			return( r.getAttribute( 'WebSite' ) );
			}
		return( '' );
	},
		
	SubmitDoc:function(){
		
		if( ! SDForm.ValidReqdFields() ){ return; }
		
		if( SDForm.ReqAttachedFiles() ){
			if( ! UC.FilesAttached() ){
				alert( "No files seem to be attached to this order!" );
				return;
				}
			}
		
		SDForm.ClearActivity();
		
		$( 'footerlogo' ).src = '/_sd/images/dog.gif';
		
		var options = { 
			type: OAT.AJAX.TYPE_XML,
			onerror:function( request ){ alert( "request returned " + request.getStatus() ); } 
			};
		
		function PlaceOrder(request){
			SDForm.Order = request; 
			var o = SDForm.Order.getElementsByTagName( 'Order' )[0];
			SDForm.LogActivity( "Received Order # " + o.getAttribute( 'id' ) );
			SDForm.StartUploads();
			$( 'footerlogo' ).src = '/_sd/images/byspinnerdog.jpg';
			}	
		
		SDForm.LogActivity( 'Placing Order Request!' );
			
		OAT.AJAX.POST( "/_sd/php/PlaceOrder.php", "<opt>\n" + SDForm.FormsToXml() + "\n</opt>", PlaceOrder, options );
				
	},
	
	ReqAttachedFiles:function(){
		var Up = SDForm.Settings.getElementsByTagName( 'Upload' )[0];
		if( Up ){ return( bool.test( Up.getAttribute( 'RequireUploads' ) ) ); }
		return( false );
		},
		
	SetDocTitle:function(){
		var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
		document.title = g.getAttribute( 'DocTitle' );
	},
	
	ValidReqdFields:function(){
		
		var ff = SDForm.Settings.getElementsByTagName( 'FormFields' )[0];
		var valid = true;
		
		var els = SDForm.getElementsByClass('reqd' );
		for( var i = 0; i < els.length; ++i ){
			valid = true;
			var el = els[ i ];
			var frm = els[i].form;
			var tf = ff.getElementsByTagName( frm.name )[0].getElementsByTagName( el.name )[0];
			switch ( el.type ) { 
			case "text": case "hidden": case "password": case "textarea":
				if( el.value.replace(/^\s+|\s+$/g, "") == '' ){
					valid = false;
					}
				break; 
			case "checkbox": 
				break; 
			case "radio":
				var elist = document.getElementsByName( el.name );
				var onechecked = false;
				for( var r = 0; r < elist.length; ++ r ){
					if( elist[ r ].type == 'radio' && elist[ r ].form.name == el.form.name && elist[ r ]. name == el.name ){
						onechecked = elist[ r ].value == tf.getAttribute( el.name ) ? true : false; 
						}
					}
				if( ! onechecked ){
					valid = false;
					}
				break;
			case "SELECT": case "select-one":  
				var sv = unescape( tf.getAttribute( el.name ) );
				if( el.options.length > 1 && el.selectedIndex == 0 ){
					valid = false;
					}
				break; 
			} 
		
		if( ! valid ){
			el.className = el.className + " notvalid";
			var Mesg = tf.getAttribute( 'Mesg' );
			if( Mesg ){ alert( Mesg ); }
			return( false );
			}
		else{
			el.className = el.className.replace( 'notvalid', '' );
		 	}
		}
		
		return( true );
	},
		
	getElementsByClass:function(searchClass,node,tag) {
		var classElements = new Array();
		if ( node == null ){ node = document; }
		if ( tag == null ){ tag = '*'; }
		var els = node.getElementsByTagName(tag);
		var elsLen = els.length;
		var pattern = new RegExp("(|\\\\s)"+searchClass+"(\\\\s|)");
		for (var i = 0, j = 0; i < elsLen; i++) {
			if ( pattern.test(els[i].className) ) {
				classElements[j] = els[i];
				j++;
			}
		}
		return classElements;
	},
	
	SetFormDefaults:function( frm ){
		var ff = SDForm.Settings.getElementsByTagName( 'FormFields' )[0];
		if( ! ff ){ return; }
		for( var elctr = 0; elctr < frm.elements.length; ++ elctr ){
			var el = frm.elements[ elctr ];
			if( el.type == 'text' || el.type == 'hidden' || el.type == 'password' || el.type == 'textarea' || el.type == 'radio' || el.type == 'checkbox' || el.type == 'select' || el.type == 'select-one'  ){
				var tf = ff.getElementsByTagName( frm.name )[0];
				if( tf ){
					var xel = tf.getElementsByTagName( el.name )[0];
					if( xel ){
						if( bool.test( xel.getAttribute( 'Defaulted' ) ) ) { SDForm.SetFieldDefault( el ); } 
						}
				}
			}
		} 
	},
	
	SetDocDefaults:function(){
		var ff = SDForm.Settings.getElementsByTagName( 'FormFields' )[0];
		if( ! ff ){ return; }
		for( var frmctr = 0; frmctr < document.forms.length; ++frmctr ){
			SDForm.SetFormDefaults( document.forms[ frmctr ] );	
		}
	},
	
	SetFieldDefault:function( el ){
		var hist = SDForm.Settings.getElementsByTagName( 'History' )[0];
		var tf = hist.getElementsByTagName( el.form.name )[0];
		if( ! tf  ){ return; }
		var histval = tf.getAttribute( el.name );
		if( ! histval ){ return; }
		
		switch ( el.type ) { 
			case "text": case "hidden": case "password": 
				el.value = unescape( histval );
				break;
			case "textarea":
				el.value = histval.replace( /~_/g, "\n" );
				break;
			case "checkbox": 
				el.checked = bool.test( histval );
				break; 
			case "radio":
				var elist = document.getElementsByName( el.name );
				for( var i = 0; i < elist.length; ++ i ){
					if( elist[ i ].type == 'radio' && elist[ i ].form.name == el.form.name && elist[ i ]. name == el.name ){
						elist[i].checked = elist[ i ].value == histval ? true : false; 
						}
					}
				break;
			case "SELECT": case "select-one":  
				var sv = unescape( histval );
				for( var octr=0; octr < el.options.length; ++octr ){
					if( el.options[octr].text == sv ){ 
						el.options[octr].selectedIndex = octr; 
						el.options[octr].selected = true;
						}
					}	
				break; 
			} 
		},
		
	LoadHistory:function(){
	},
	
	ApplyHistory:function(){
	},
	
	SetRequired:function(){
  		var ff = SDForm.Settings.getElementsByTagName( 'FormFields' )[0];
  		if( ! ff ){ return; }
  		
  		for( var frmctr = 0; frmctr < document.forms.length; ++frmctr ){
	  		var currform = document.forms[ frmctr ];
	  		var xfrm = ff.getElementsByTagName( currform.name )[0];
	  		if( xfrm ){
	  			var kids = xfrm.childNodes;
		  		for( var kidctr = 0; kidctr < kids.length; ++ kidctr ){
			  		if( currform.elements[ kids[ kidctr ].tagName ] ){
				  		if( bool.test( kids[ kidctr ].getAttribute( 'Reqd' ) ) ){
				  			currform.elements[ kids[ kidctr ].tagName ].className = currform.elements[ kids[ kidctr ].tagName ].className + ' reqd';
			  				}
			  	  	}
		  		}
  	  	  }	
  		}
	},	
	
	UnSetRequired:function( field ){
		var ff = $( field );
		ff.className = ff.className.replace( /reqd/ , '');
	},
	
	RequireField:function( field ){
		var ff = $( field );
		if( ! ff.className.match( 'reqd' ) ){ ff.className += ' reqd'; }
	},
	
	getElementInput:function( element ){
		
		var elval = '';
		switch ( element.type) { 
			case "text": case "hidden": case "password": 
				elval = element.value;
				break; 
			case "textarea":
				elval = element.value.replace( /\n/g, "~_" );
				break;
			case "checkbox": 
				element.checked ? elval = 'Yes' : elval = 'No';
				break;
			case "radio":
				element.checked ? elval = element.value : elval ='';
				break;
			case "SELECT": case "select-one":  
				elval = element.options[element.selectedIndex].text; 
				break; 
		} 
	
		return( elval );
	},
	
	FormToXml:function( frm ){
		
		function mkatt( n, v ){ return( "\n\t" + n + '="' + OAT.Dom.toSafeXML( v ) + '" ' ); }
		function mkchld( n, v ){ return( '\n\t<' + n + '>' + OAT.Dom.toSafeXML( v ) + '</' + n + '>' ); }
		
		var MyXml = '<' + frm.name;
		
		for( var electr = 0; electr < frm.elements.length; ++ electr ){
					if( frm.elements[ electr ].name ){
						if( frm.elements[ electr ].type != 'radio' ){
							var ei = SDForm.getElementInput( frm.elements[ electr ] );
							MyXml += mkatt( frm.elements[ electr ].name, ei );
							}
						else{
							var radioName = frm.elements[ electr ].name;
							var radiovalue = '';
							while( electr < frm.elements.length && frm.elements[ electr ].type == 'radio' && frm.elements[ electr ].name == radioName  ){
								var v = SDForm.getElementInput( frm.elements[ electr ] );
								if( v ){ radiovalue = v; } 
								++electr;
								}
							MyXml += mkatt( radioName, escape( radiovalue ) );
							--electr; 
						}
					}
			}
			
		if( frm.LineInputs ){
			MyXml += ">\n";	MyXml += frm.LineInputs.asXML();MyXml += '</' + frm.name + ">\n";
			return( MyXml );
			}	
			
		MyXml += "/>\n";
		
		return( MyXml );
	},
	
	Getbrid:function(){
		var brid = document.cookie.replace( /^.*SDF\[brid\]=/, '' );
		brid = brid.replace( /;.*$/, '' );
		return( brid );	
	},
	
	Attached:function(){
		var Up = SDForm.Settings.getElementsByTagName( 'Upload' )[0];
		if( ! Up ){	return( false ); }
		return( UC.FilesAttached() );
	},
	
	FormsToXml:function(){
		
		var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
		var s = SDForm.Settings.getElementsByTagName( 'SysInfo' )[0];
		
		function mkatt( n, v ){ return( "\n\t" + n + '="' + v + '" ' ); }
		
		function getval( s ){
				var f = s.split( ':' );
				if( f[1] ){
					var frm = $F( f[0] );
					return( SDForm.getElementInput( frm.elements[ f[1] ] ) );
					}
					
			return( f[0] );	
			}
			
		
		//$v('SplitOrder').checked ? 'OnForm' : 'No'
		var MyXml = '<FormInput' +
									mkatt( 'FormName', g.getAttribute( 'FormName' ) ) +
									mkatt( 'Notify', g.getAttribute( 'Notify' ) ) + 
									mkatt( 'Confirm', g.getAttribute( 'Confirm' ) ) + 
									mkatt( 'To', g.getAttribute( 'Notify' ) == 'Yes' ? getval( g.getAttribute( 'To' ) ) : '' ).replace( /&/, '&amp;') +
									mkatt( 'From', g.getAttribute( 'Confirm' ) == 'Yes' ?  getval( g.getAttribute( 'From' ) ) : '' ) +
									mkatt( 'Process', g.getAttribute( 'Processing' ) ) +
									mkatt( 'MailListGroup', g.getAttribute( 'MailListGroup' ) ) + 
									mkatt( 'Access', s.getAttribute( 'Date' ) ) +
									mkatt( 'URL', document.location ) +
									mkatt( 'BRID', SDForm.Getbrid() ) +
									mkatt( 'Split', g.getAttribute( 'Split' ) ) + 
									mkatt( 'AttachedFiles', SDForm.Attached() ) + " >\n";
		
		for( var frmctr = 0; frmctr < document.forms.length; ++frmctr ){
			if( document.forms[ frmctr ].isempty ){
				if( ! document.forms[ frmctr ].isempty() ){
					MyXml += SDForm.FormToXml( document.forms[ frmctr ] );
					}
				}
			else{
				MyXml += SDForm.FormToXml( document.forms[ frmctr ] );
				}
				
			}
			
		MyXml = MyXml + "</FormInput>\n";
		return( MyXml );
		
	},
	
	ClearDoc:function(){
		for( var frmctr = 0; frmctr < document.forms.length; ++frmctr ){
		var frm = document.forms[ frmctr ];
		for( var elctr = 0; elctr < frm.elements.length; ++ elctr ){
			var el = frm.elements[ elctr ];
			switch ( el.type ) { 
			case "text": case "hidden": case "password": case "textarea":
				el.value = '';
				break; 
			case "checkbox": 
				el.checked = false;
				break; 
			case "radio":
				var elist = document.getElementsByName( el.name );
				for( var i = 0; i < elist.length; ++ i ){
					if( elist[ i ].type == 'radio' && elist[ i ].form.name == el.form.name && elist[ i ]. name == el.name ){
						elist[i].checked = false; 
						}
					}
				break;
			case "SELECT": case "select-one":  
				for( var octr=0; octr < el.options.length; ++octr ){ el.options[octr].selected = false; }	
				el.options.selectedIndex = 0; 
				break; 
			} 
			}
		} 
	
	},
		
	popSelectElement:function( xmlele, frmele ){
		var o; var n; var v;
		
		if( xmlele.childNodes.length > 1 ){ 
				o = document.createElement( "option" );
				o.text = '--select--';
				o.value = '--select--';
				o.name = '--select--';
				OAT.Browser.isIE ? frmele.add( o ) : frmele.appendChild( o );
			}
		

		for ( var i = 0; i < xmlele.childNodes.length; ++i ){
			if( xmlele.childNodes[i].tagName ){
				o = document.createElement( 'option' );
				v = xmlele.childNodes[i].getAttribute( 'Value' );
				n = xmlele.childNodes[i].getAttribute( 'Name' );
				o.text = n;
				o.value =  v ? v : n;
				o.name = n;
				OAT.Browser.isIE ? frmele.add( o ) : frmele.appendChild( o );
				}
			}	
	},
	
	LogActivity:function(s){
		if( ! LoadDlog.isVisible ){ LoadDlog.show(); }
		$( 'Activity' ).innerHTML = $( 'Activity' ).innerHTML + '<div>' + s + '</div>';
	},
	
	ClearActivity:function(){
		$( 'Activity' ).innerHTML = '';
	},
	
	AttachCalandar:function(){
		var g = SDForm.Settings.getElementsByTagName( 'General' )[0];
		var CalEl = g.getAttribute( "CalandarElement" );
		if( CalEl ){ return; }
	},
	
	GoToCoWebsite:function(){
		var g = SDForm.Settings.getElementsByTagName( 'Registration' )[0];
		var site = g.getAttribute( "WebSite" );
		document.location = "http://" + site;
	},

	GetCookieWCL:function(){
		var brid = document.cookie.replace( /^.*SDF\[wcl\]=/, '' );
		brid = brid.replace( /;.*$/, '' );
		return( brid );	
	},
	
	UpOptsDlog:function(){
		
		if( ! SDForm.OUpOptDlog ){
			SDForm.OUpOptDlog = new OAT.Dialog(  'Upload Client Options....' , 'UpOpts', {modal:1, buttons:0});
			}
		
		SDForm.OUpOptDlog.show();
			
		},
		
	init:function(){
		
		SDForm.LogActivity( "Loading Form" );
		SDForm.LoadSettings();
				
		}
	
			
};