// JavaScript Document
var Deco; 
if (!Deco) Deco = {};
if (!Deco.Forms) Deco.Forms = {};
if (!Deco.Layers) Deco.Layers = {};
if (!Deco.Ajax) Deco.Ajax = {};
if (!Deco.Utils) Deco.Utils = {};



//Deco.Forms
Deco.Forms.renderSelectMaxMin = function(_object, _min, _max) 
{
	for (var i = _min; i <= _max; i++) 
	{
		var elOptNew = document.createElement('option');
		elOptNew.text = i;
		elOptNew.value = i;
		
		try {
			_object.add(elOptNew, null); 
		}
		catch(ex) {
			_object.add(elOptNew); // IE only
		}
	}
}

Deco.Forms.checkFieldsUtil = function (obj) {	
	obj.value = (obj.value != "") ? ((isNaN(obj.value.replaceSubString(",", "."))) ? "" : obj.value.replaceSubString(",", ".")) : "";	
}
Deco.Forms.formDataToQueryString = function(form) {
	var f = document.forms[form];
  var submitContent = '';
  var formElem;
  var lastElemName = '';
  
  for (i = 0; i < f.elements.length; i++) {
    
    formElem = f.elements[i];
    switch (formElem.type) {
      // Text fields, hidden form elements
      case 'text':
      case 'hidden':
      case 'password':
      case 'textarea':
      case 'select-one':
        submitContent += formElem.name + '=' + (formElem.value) + '&'
        break;
        
      // Radio buttons
      case 'radio':
        if (formElem.checked) {
          submitContent += formElem.name + '=' + (formElem.value) + '&'
        }
        break;
        
      // Checkboxes
      case 'checkbox':
        if (formElem.checked) {
          // Continuing multiple, same-name checkboxes
          if (formElem.name == lastElemName) {
            // Strip of end ampersand if there is one
            if (submitContent.lastIndexOf('&') == submitContent.length-1) {
              submitContent = submitContent.substr(0, submitContent.length - 1);
            }
            // Append value as comma-delimited string
            submitContent += ',' + escape(formElem.value);
          }
          else {
            submitContent += formElem.name + '=' + escape(formElem.value);
          }
          submitContent += '&';
          lastElemName = formElem.name;
        }
        break;
        
    }
  }
  // Remove trailing separator
  submitContent = submitContent.substr(0, submitContent.length - 1);
  return submitContent;
}

Deco.Forms.formDataToXml = function (form)
{
	var f = document.forms[form];
  var submitContent = '';
  var formElem;
  var lastElemName = '';
  
  for (i = 0; i < f.elements.length; i++) {
    
    formElem = f.elements[i];
    switch (formElem.type) {
      // Text fields, hidden form elements
      case 'text':
      case 'hidden':
      case 'password':
      case 'textarea':
      case 'select-one':
		submitContent += '<'+ formElem.name + '><![CDATA[' + (formElem.value) + ']]></'+ formElem.name + '>' + '\n';
        break;        
      // Radio buttons
      case 'radio':
        if (formElem.checked) {
          submitContent += '<'+ formElem.name + '>'  + (formElem.value) + '</'+ formElem.name + '>' + '\n';
        }
		else {
			submitContent += '<'+ formElem.name + '>'  + '</'+ formElem.name + '>' + '\n';
		}
        break;
        
      // Checkboxes
      case 'checkbox':
        if (formElem.checked) {
          // Continuing multiple, same-name checkboxes
          if (formElem.name == lastElemName) {
            // Strip of end ampersand if there is one
            if (submitContent.lastIndexOf('&') == submitContent.length-1) {
              submitContent = submitContent.substr(0, submitContent.length - 1);
            }
            // Append value as comma-delimited string
            submitContent += ',' + formElem.value;
          }
          else {
            submitContent += '<'+ formElem.name + '>'  + formElem.value + '</'+ formElem.name + '>' + '\n';
          }
          //submitContent += '&';
          lastElemName = formElem.name;
        }
        break;        
    }
  }
  return submitContent;
}
Deco.Forms.saveFormData = function(url, formName, responseMsg) {
	w = Deco.Utils.Ajax.create();
	if (w != null) 
	{
		w.open('GET', url, true);
		w.onreadystatechange = function() {
			if (w.readyState == 4 && w.status == 200) 
			{
				
				
				
				
				var r = Deco.Layers.parseDivContent("decoajax", w.responseText, "CalculationSaveInputsCheckDivForm");
				Deco.Layers.addContentToNewDiv(r,"CalculationSaveInputsCheckDivForm");
				
				var f = document.forms["CalculationSaveInputs"];
				f.src.value = Deco.Utils.getSrcFromQueryString();
				f.label.value = escape(document.title);
				f.inputxml.value = "<inputdata>"+Deco.Forms.formDataToXml(document.forms[formName])+"</inputdata>";
				var qs = Deco.Forms.formDataToQueryString(document.forms["CalculationSaveInputs"]);
				
				x = Deco.Ajax.create();
				if (x != null) 
				{
					x.open('POST', url, true);
					x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
					x.setRequestHeader("Content-length", qs.length);
					x.setRequestHeader("Connection", "close");
					x.send(qs);
					x.onreadystatechange = function() {
						if (x.readyState == 4 && x.status == 200) 
						{
							if (responseMsg != '') 
							{
								return responseMsg;
							}
							else if (responseMsg != "" && responseMsg == "response")
							{
								return x.responseText;
							}
						}
					}							
				}								
			}
		}
		w.send(null)
	}				
}

//Deco.Layers
Deco.Layers.toggleBox = function (szDivID, iState) // 1 visible, 0 hidden
{	
	if(document.layers)	   //NN4+
    {
       document.layers[szDivID].style.display = iState ? "block" : "none";
    }
    else if(document.getElementById) //gecko(NN6) + IE 5+
    {
        var obj = document.getElementById(szDivID);
        obj.style.display = iState ? "block" : "none";
    }
    else if(document.all)	// IE 4
    {
        document.all[szDivID].style.display = iState ? "block" : "none";
    }
}

Deco.Layers.parseDivContent = function (tag, s, id) {
	var a = '<'+tag+' id="'+id+'">';
	var b = '</'+tag+'>';
	u = s.substring(s.indexOf(a)+a.length);
	return (u.substring(0, u.indexOf(b)));
}

Deco.Layers.addContentToNewDiv = function(s, id, target) {
  var newdiv = document.createElement('div');
  newdiv.setAttribute('id',id);
  newdiv.innerHTML = s;
  document.body.appendChild(newdiv);
}


// Deco.Utils

Deco.Utils.getSrcFromQueryString = function () {
	var url = document.URL;
	if ((url.indexOf("/map/") > 0) && ((url.length - url.indexOf(".htm")) == 4)) {
		var haveSRC = url.indexOf("/src/");
		if (haveSRC > 0) {
			var subS = url.substring(haveSRC+5, url.length);
			if (subS.indexOf("/") > 0) {
				subS = subS.substring(0,subS.indexOf("/"));
			}
			else if (subS.indexOf(".") > 0) {
				subS = subS.substring(0,subS.indexOf("."));
			}
			else {
			 	subS = '';
			}
			return subS;
		}
		else {
			return '';	
		}
	}
	else if (url.indexOf(".aspx?") > 0) {
		var haveSRC  = url.indexOf("src=");
		if (haveSRC > 0) {
			var subS = url.substring(haveSRC+4, url.length);
			if (subS.indexOf("&") > 0) {
				subS = subS.substring(0,subS.indexOf("&"));
			}
			else {
				subS = subS.substring(0,url.length);
			}
			return subS;
		}
		else {
			return '';
		}
	}
	else {
		return '';
	}
}


// Deco.Ajax
Deco.Ajax.checkXMLHTTP = function () {
	
	var xmlhttp_flag = 0;
	
	try{
		xmlhttp = new XMLHttpRequest();
		xmlhttp_flag = 1;
	}catch(ee){
		try{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			xmlhttp_flag = 2;
		}catch(e){
			try{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				xmlhttp_flag = 3;
				
			}catch(E){
				xmlhttp = false;
				xmlhttp_flag = 4;
			}
		}
	}
	xmlhttp = null;

	return xmlhttp_flag;
}

Deco.Ajax.createXMLHTTP = function (type) {
	var xmlhttp = null;
	if (type == 1) {
		xmlhttp = new XMLHttpRequest();
	}
	else if (type == 2) {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	else if (type == 2) {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else {
		xmlhttp = null;
	}
	return xmlhttp;
}

Deco.Ajax.create = function() {
	var x = Deco.Ajax.createXMLHTTP(Deco.Ajax.checkXMLHTTP());
	return x;
}

Deco.Ajax.dummyAJAX = function() {	
	b = Deco.Ajax.createXMLHTTP(Deco.Ajax.checkXMLHTTP());
	if (b == null) {}
	else
	{
		b.open("GET", document.location ,true);
		b.onreadystatechange=function() {
			if (b.readyState==4 && x.status == 200){
				//do nothing
			}			
		}
		b.send(null)
	}
}









