// VC-HTTP
/*

PROJECT:	JDM (Java Dynamic Machine)
PROGRAMMER:	G. Patnude
FILE:		vc-http/vc-http.js
PURPOSE:	HTTP HANDLING...

Includes functions for managing / manipulating:

	-- HTTPRequest Object
	-- HTTPResponse Object
	-- Send / receive files & templates over HTTPRequest

*/


var HTTP = {

	version : "0.000a",
	id: "HTTP",
	name: "HTTP::",
	req: new Array(),
	res: new Array(),
	
	
	httpSend: function httpSend(location, handler) {
		
		// START TRACING>...
		UTIL.error("httpRequest() for: " + location);
		
		// STORE A COPY OF THE REQUEST...
		this.req.push(location);

		// NATIVE TO Mozilla-based browsers...
		if (window.XMLHttpRequest) {

			req = new XMLHttpRequest();
			// req.onreadystatechange = handler;
			req.onreadystatechange = (handler) ? handler : HTTP.httpParseResult;
			req.open("GET", location, true);
			req.send(null);

		// INTERNET EXPLODER...
		} else if (window.ActiveXObject) {

			req = new ActiveXObject("Microsoft.XMLHTTP");
			if (req) {

				// req.onreadystatechange = handler;
				req.onreadystatechange = (handler) ? handler : HTTP.httpParseResult;
				req.open("GET", location, true);
				req.send();

			}

		}

	},
	
	httpInit: function httpInit() {
		
		if (window.XMLHttpRequest) {

			req = new XMLHttpRequest();
			req.onreadystatechange = httpReceive;
			// req.open("GET", location, true);
			// req.send(null);

		// INTERNET EXPLODER...
		} else if (window.ActiveXObject) {

			req = new ActiveXObject("Microsoft.XMLHTTP");
			if (req) {

				req.onreadystatechange = httpReceive;
				// req.open("GET", location, true);
				// req.send();

			}

		}		
		
		return req;
		
	},

	httpReceive: function httpReceive() {

		if (req.readyState != 4) {

			//UTIL.trace("req.readyState = " + req.readyState); // JWS 6-23-05
			return;

		} else {

			//if (o = UTIL.getObject('REPORTLAYER') != null) {
			if (o = UTIL.getObject('REPORTLAYER') != null) {
				//REPORTCONTAINER
				
				o.innerHTML = req.responseText;
				
			}

	 	}

		return;

	},

	// FUNCTION TO DYNAMICALLY SUBMIT A COMPLETE FORM...
	dmSubmit: function dmSubmit(FRM) {
		
		var request = apps + "";  // &" + jso;
		
		// INITIALIZE THE HTTPREQUEST OBJECT...
		req = httpInit();
		
			if ((F = UTIL.getObject(FRM)) != null) {

				// LOOP THROUGH THE FORMS COLLECTION OF OBJECTS...
				for (var i = 0; i < F.elements.length; i++) {
	
					// GET THE FORM ELEMENT...
					FE = F.elements[i];
	
					// INITIALIZE THE httpRequest OBJECT...
					try {
	
						var fname = FE.name;
						var fvalue = FE.value;
						req.setRequestHeader (fname, fvalue);
						request += "&" + fname + "=" + fvalue;
						request = request +"&" + fname + "=" + fvalue;
	
					} catch (e) {
	
						UTIL.error(e);
						//alert("error occured " + e.toString());
	
					}
	
				}
	
				// SEND THE HTTP REQUEST...
				req.onreadystatechange = httpReceive;
				req.open("GET", location, true);
				if (window.ActiveXObject) {
	
					req.send();
					return true;
		
				} else {
	
					req.send(null);
					return true;
	
				}
				
			}

	},
	
	// UPDATES THE CURRENTLY EDITED RECORD...
	update:function update(r, c) {
		
		UTIL.trace("RS.save(r, c) --> " + r + ", " + c);
		if ((o = UTIL.getObject(r + ":"+ c)) != null) {
			
			var params = new Object();
			params.table_name = SC.SCHEMA[c].table_name;
			params.id = RS.RECORDSET[r].id;
			params.column_name = SC.SCHEMA[c].column_name;
			if (SC.SCHEMA[c].lookup == true) {
				
				var sel = UTIL.getObject(SC.SCHEMA[c].column_name);
				params.value = sel[sel.selectedIndex].value;
				
			} else { 
			
				params.value = o.value;
				
			}
			
			// NOW MAKE A REQUEST OBJECT...		
			var jso = new Object("DATA=[" + JSON.stringify(params) + "]");
			var request = apps + "?q=update&" + jso;
			UTIL.trace("UPDATE PARAMS: " + request);
			httpRequest(request);
			return true;
			
		} else {
			
			UTIL.trace("RS.save(r, c) --> Can't seem to locate the object:" + r + ":" + c);
			
		}
		
		return false;
	
	},
	
	// FUNCTION TO PARSE THE RESULTING JSON OBJECT...
	httpParseResult: function httpParseResult() {
	
		// INITIALIZE THE TRACE...
		UTIL.trace(this.name + "httpParseResult(I) --> Incoming data !!!");
		// UTIL.clear("ERROR");
		// UTIL.clear("TRACE");			
	
		if (req.readyState != 4) {
			
			return;		
			
		} else {
			
			var starttime = Date(Date.UTC(new Date()));		
			response = req.responseText;
			JSDO = JSON.parse(response);		
			
			// UTIL.trace(req.responseText);		
			// UTIL.trace("HTTPRESPONSE: -->><BR>" + response);
			// UTIL.trace("JSDO:" + JSDO);
			
			for (set in JSDO) {
				
				switch (set) {
					
					case "TREE": 
					
						TREE.process(JSDO.TREE);
						break;
						
					case "LOOKUP":
	
						SC.processlookupdata(JSDO.LOOKUP);
						break;
						
					case "SCHEMA":
						
						SC.map(JSDO.SCHEMA);
						break;
					
					case 'DD' :
					
						if (d = DOM.getnode('DD')) {
						
							d.innerHTML = JRL.format(JSDO[set]);
						
						}
						
						break;
						
					default:
					
						break;
						
				}
						
			}
			
			// SECONDARY PROCESSING...
			for (set in JSDO) {
				
				switch (set) {
				
					case "RECORDSET":
					
						// UTIL.clear("DISP");
						// UTIL.clear("ADD");
						// UTIL.clear("ADDITEM");					
						// RS.format(JSDO.RECORDSET);
						// if ((obj = UTIL.getObject(JSDO.TARGET)) != null) {
						// if ((obj = UTIL.getObject("RECORDSET")) != null) {
						if ((obj = UTIL.getObject("LAYOUT")) != null) {
						
							var w = DOM.createnode('DIV', set);
										
							// CREATE A TABLE CONTAINER FOR THE CONTENTS OF THE WIZARD CONTROL...
							w.innerHTML = RS.init(JSDO.RECORDSET);
							
							// ADD THE TABLE TO THE DOM...
							DOM.addnode('LAYOUT', w); 			
							
							// NUKED::obj.innerHTML = JRL.format(JSDO.RECORDSET);
							
							if (JSDO.PAGING) {							
							        
								//alert(PAGING.init(JSDO.PAGING, DOM.getnode(set)));
								w.innerHTML += PAGING.init(JSDO.PAGING, set.toUpperCase());
								//DOM.addnode(set.toUpperCase(), PAGING.init(JSDO.PAGING, set.toUpperCase()));
						
							}
							
							
						} else {
							
							UTIL.trace("I can't seem to get a handle on the DISPLAY Object...");
							
						}
						
						
						break;
				
					case "RESPONSE":
					
						if ((obj = UTIL.getObject("TRACE")) != null) {
							
							// obj.innerHTML = JSDO.RESPONSE;
							
						}
						
						break;
						
					case "PAGING":
					
						// UTIL.warn("CONSTRUCTOR = eval (" + set + ".init(JSDO[" + set + "])");
						//PAGING.init(JSDO[set]);
						break;
	
					case "IFCONFIG":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							ifConfig(JSDO.IFCONFIG);
							
						}
						
						break;
						
					case "CLICKTRACK":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							CLICKTRACKING = eval(JSDO.CLICKTRACK);
							
						}
						
						break;
					
					case "USERNAME":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = JSDO.USERNAME;
							
						}
						
						break;
							
					case "CSS":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							var lnk = "<LINK href='/style/'" + JSDO.CSS + " rel = 'stylesheet' type = 'text/css' />";
							obj.innerHTML = lnk;
							
						}
						
						break;
					
					case "LOGO":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							var logo = loadPage(templates + "/images/" + JSDO.LOGO);						
							obj.innerHTML = JSDO.LOGO;
							
						}
						
						break;				
						
					case "SIDEBAR":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							switch (JSDO[SIDEBAR]) {
							
								case true:
								
									loadSidebar(templates + "/dvc/new-sidebar.php");
									SwitchMenu('SBAPPS');
									break;
								
								case false:
								
									obj.innerHTML = "";
									SwitchMenu('SBSEARCH');
									break;
									
								default:
		
									loadSidebar(templates + "/dvc/new-sidebar.php");
									if (UTIL.getObject("SBRELATED") != null) {
										
										SwitchMenu('SBRELATED');
										
									}
									
									break;
									
							}
							
						}
											
						break;
						
					case "SBIMAGE":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = "<a href='#' onClick = 'ifSideBarSwap();' onMouseOut = \"MM_swapImgRestore()\" onMouseOver = \"MM_swapImage('bar_switch', '', '','','/images/in_arrow_wh.png', 1)><img src='/images/in_arrow_blu.png' alt='Hide Sidebar' name='bar_switch' width='7' height='50' border='0'></a>";
							
						}
						
						break;
						
					case "SBSETTINGS":
					
						var sbsettings = "";
						for (sbs in JSDO.SBSETTINGS) {
							
							var key = JSDO.SBSETTINGS[sbs].key;
							var val = JSDO.SBSETTINGS[sbs].value;
							sbsettings += dmListItems(dmHref(apps + "?q=submenu&ITEM=" + key + "", val));
						
						}
						
						sbsettings = dmList(sbsettings);					
						if ((obj = UTIL.getObject("ERROR")) != null) {
								     
							obj.innerHTML = sbsettings;
							
						}
						
						break;
					
					case "SEARCH":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = JSDO.SEARCH;
							
						}
						
						break;
					
					case "LINKS":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = JSDO.LINKS;
							
						}
						
						break;
					
					case "RELATED":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = JSDO.RELATED;
							
						}
						
						break;
						
					case "DASHBOARD":
					
						// UTIL.trace("Response data:" + JSDO.DASHBOARD);
						// DASH.redraw(JSDO.DASHBOARD);				
						//* if ((obj = UTIL.getObject(set)) != null) {
						// if ((obj = UTIL.getObject("LAYOUT")) != null) {
						if ((obj = UTIL.getObject("PLOT")) != null) {
							
							// obj.innerHTML = JSDO.DASHBOARD;
							obj.innerHTML = DASH.redraw(JSDO.DASHBOARD);
							
						}
						
						break;				
						
									
					case "APPTITLE":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = JSDO.APPTITLE;
							
						}
						
						break;
					
					case "MODTITLE":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = JSDO.MODTITLE;
							
						}
						
						break;
					
					case "HELPLINK":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							obj.innerHTML = JSDO.HELPLINK;
						}
						
						break;
						
					case "MAINMENU":
					
						if ((obj = UTIL.getObject(set)) != null) {
							
							var mainmenu = "";
							for (lis in JSDO.MAINMENU) {
								
								var menutitle = JSDO.MAINMENU[lis].menutitle;
								var oid = JSDO.MAINMENU[lis].oid;
								mainmenu += dmListItems(dmHref(apps + "?q=submenu&ITEM=" + oid + "", menutitle));
							
							}
							
							mainmenu = dmList(mainmenu);						
							obj.innerHTML = mainmenu;
							
						}
						
						break;
						
					case "DDMENU":
					
						alert(set);
						if ((obj = UTIL.getObject(set)) != null) {
						
							// UTIL.trace(JSDO.DDMENU);
							// MENU.getsubmenu(JSDO.DDMENU);
							obj.innerHTML = MENU.init(JSDO.DDMENU);
							
							// var X = WORK.loop(JSDO.DDMENU, MENU.newMenu('MASTERMENU'));
							// print(ZZ);
							
						}
						
						break;
						
					case "VIEW":
					
						if ((o = UTIL.getObject('POP')) != null) {
							
							RS.VIEW = RS.map(JSDO.VIEW);
							o.style.visibility = 'visible';
							if ((p = UTIL.getObject('DETAIL')) != null) {
	
								p.innerHTML = GRID.init(RS.VIEW, 'DETAIL');
								// p.innerHTML = RS.format(JSDO.DETAIL);
								
							}
							
						}
					
						break;
						
					case "EDIT":
					
						if ((o = UTIL.getObject('POP')) != null) {
							
							o.style.visibility = 'visible';
							RS.EDIT = RS.map(JSDO.EDIT);
							if ((p = UTIL.getObject('DETAIL')) != null) {
	
								p.innerHTML = RS.add('EDIT');
								// p.innerHTML = RS.format(JSDO.DETAIL);
								
							}
							
						}
					
						break;
						
					case "GLUE":
					
						if ((o = UTIL.getObject('POP')) != null) {
							
							o.style.visibility = 'visible';
							RS.GLUE = RS.map(JSDO.GLUE);
							if ((p = UTIL.getObject('DETAIL')) != null) {
	
								p.innerHTML = RS.formatglue(RS.GLUE);
								// p.innerHTML = RS.format(JSDO.DETAIL);
								
							}
							
						}
					
						break;
						
					case "DATETIME":
					
						// RS.format(JSDO.RECORDSET);
						if ((obj = UTIL.getObject(set)) != null) {
						
							// UTIL.trace(JSDO.DDMENU);
							// RS.format(JSDO.RECORDSET);
							obj.innerHTML = RS.format(JSDO.DATETIME);						
							
						}
						
						break;					
						
					case "INITTAB" :
					
						// alert("Initialize the current tab ???");
						Widget.f_activate_tab(CURRENT_TAB);
						break;
					
					default:
						
						// /* 
						// ACTIVATE THE CURRENT TAB IF IT IS SOMETHING OTHER THAN THE BASE (INFO) TAB...
						// (CURRENT_TAB > 0) ? Widget.f_activate_tab(CURRENT_TAB): null;					
						if ((obj = UTIL.getObject(set.toUpperCase())) != null) {
							
							var arr = JSDO[set];	
							UTIL.trace("DEFAULT --> Generating grid control...");
							// obj.innerHTML = RS.format((arr.length > 0) ? arr : new Array(eval('JSDO.' + set)));
							obj.innerHTML = "No data...";
							var NEWGRID = GRID.init((arr.length > 0) ? arr : new Array(eval(JSDO[set])), set.toUpperCase());
							obj.innerHTML = NEWGRID;
							 
							// DID THE SERVER SPECIFY THAT WE NEED TO IMPLEMENT A PAGING SCHEME ? ? ? 
							if (JSDO.PAGING) {
							
								//alert("HTTP Called Inside Paging Conditional: Test for paging...");
								//alert(JSDO.PAGING.toString());
							        
								PAGING.init(JSDO.PAGING, set.toUpperCase());
								// obj.innerHTML += PAGING.init(JSDO.PAGING, set.toUpperCase());
								// DOM.addnode(set.toUpperCase(), PAGING.init(JSDO.PAGING, set.toUpperCase()));								
								//alert(PAGING.init(JSDO["PAGING"]));
							
							}
							
							
							//alert("HTTP Called: Test for paging...");
							
						} else if ((obj = UTIL.getObject("ERROR")) != null) {
							
							// obj.innerHTML = response;
							
						}
						
						// */
						
						// print(XX);
						break;
					
				} // ENDSWITCH...
				
					
			} // ENDFOR...
			
			
			/* 
			
			if (window.location.hostname == "webdev.datamosaics.com") {
				
				if ((obj = UTIL.getObject("ERROR")) != null) {
					
					obj.innerHTML = response;
					
				}
				
			}
			
			*/
			
		// FUNCTION CALL TO THE SCHEMA TO LOCATE AND RETRIEVE ANY SUPPORTING LOOKUP TABLE DATA...
		// SC.checkforlookuptables();
			
			
		}
		
		var stoptime = Date(Date.UTC(new Date()));
		var delta = Date.parse((stoptime)) - Date.parse((starttime));
		UTIL.trace("TOTAL INTERNAL PROCESSING  TIME:" + delta);
		
	},
	
	httpRequest: function httpRequest(location) {
		
		// CLEAR SPECIFICED PORTIONS OF THE DISPLAY...
		// UTIL.clear("DISP");
		// UTIL.clear("ERROR");
		// UTIL.clear("TRACE");
	
		// START TRACING>...
		// UTIL.error("httpRequest() for: " + location);
	
		// NATIVE TO Mozilla-based browsers...
		if (window.XMLHttpRequest) {
			
			req = new XMLHttpRequest();		
			req.onreadystatechange = HTTP.httpParseResult;
			req.open("GET", location, true);
			req.send(null);
			
		// INTERNET EXPLODER...
		} else if (window.ActiveXObject) {
			
			req = new ActiveXObject("Microsoft.XMLHTTP");		
			if (req) {
				
				req.onreadystatechange = HTTP.httpParseResult;
				req.open("GET", location, true);
				req.send();			
			
			}
			
		}
			
	}

// EOF...

}



