function getBrowser()
{
	var browserName = navigator.appName; 
	if (browserName == "Netscape")
		return "mozilla";
	else 
		if (browserName == "Microsoft Internet Explorer")
			return "ie";
		else
			return "other";
}


function loadAjaxData(elementId, url, refreshfields)
{ 
	var req = null; 

	document.getElementById(elementId).innerHTML = "Se incarca...";

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		if (req.overrideMimeType) 
			req.overrideMimeType('text/html');
	} 
	else 
	if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	req.onreadystatechange = function() { 
		document.getElementById(elementId).innerHTML = "Wait for server...";
		if (req.readyState == 4) {
			if (req.status == 200) {
				document.getElementById(elementId).innerHTML = req.responseText;
				if (refreshfields)
					refreshElements(refreshfields);
			}
			else
				document.getElementById(elementId).innerHTML = "Eroare la incarcare (code " + req.status + " " + req.statusText + ")";
		} 
	}; 
	
	req.open("GET", url, true); 
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	req.send(null); 
} 


function loadAjaxOptions(elementId, url, autoSelect, message)
{ 
	var req = null; 

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		if (req.overrideMimeType) 
			req.overrideMimeType('text/html');
	} 
	else 
	if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	req.onreadystatechange = function() { 
		if (req.readyState == 4) {
			if (req.status == 200) {
				var optionArr = req.responseText.split(";");
				var select = document.getElementById(elementId);
				var options = select.options;
				var cnt = options.length;
				var cnt1 = 0;
				//optGroup = undefined;
				
				if (req.responseText == '') {
					select.disabled = true;
					if (message != undefined)
						alert(message);
					return;
				}
				
				if (getBrowser() == 'mozilla') {
					var groups = select.getElementsByTagName('optgroup');
					for (var i = groups.length - 1; i >= 0; i--) {
						var oOptions = groups[i].getElementsByTagName('option');
						for (var j = oOptions.length - 1; j >= 0; j--)
							oOptions[j] = null;
						
						select.removeChild(groups[i]);
						//groups[i] = null;
					}
				}
				else {
					var groups = select.getElementsByTagName('optgroup');
					for (var i = groups.length - 1; i >= 0; i--) {
						select.removeChild(groups[i]);
					}
				}
				
				for (var i = 0; i < optionArr.length; i++) {
					if (optionArr[i] == '')
						break;
					var oa = optionArr[i].split(',');
					
					if (oa[0] == 'optgroup') {
						var optGroup = document.createElement('optgroup');
						optGroup.label = oa[1];
						select.appendChild(optGroup);
						continue;
					}
					
					if (getBrowser() == 'mozilla') {
						if (optGroup != undefined) {
							var option = new Option(oa[1], oa[0]);
							optGroup.appendChild(option);
						}
						else
							options[i] = new Option(oa[1], oa[0]);
					}
					else
						options[i] = new Option(oa[1], oa[0]);
					
					cnt1++;
				}
				
				for (i = cnt; i >= cnt1; i--) 
					options[i] = null;
				
				if (autoSelect)
					select.selectedIndex = (options.length > 2 ? 0 : 1);
				select.disabled = false;
			}
		} 
	}; 
	
	req.open("GET", url, true); 
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	req.send(null); 
} 


function loadAjaxValue(elementId, url)
{ 
	var req = null; 

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		if (req.overrideMimeType) 
			req.overrideMimeType('text/html');
	} 
	else 
	if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}


	req.onreadystatechange = function() { 
		if (req.readyState == 4) {
			if (req.status == 200) {
				document.getElementById(elementId).value = req.responseText;
				//alert(elementId + '='+document.getElementById(elementId).value);
			}
		} 
	}; 
	
	req.open("GET", url, true); 
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	req.send(null); 
} 


function sendAjaxForm(form, url, msgId, refreshfields)
{ 
	var req = null; 

	document.getElementById(msgId).innerHTML = "Se trimit datele...";

	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		if (req.overrideMimeType) 
			req.overrideMimeType('text/html');
	} 
	else 
	if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	req.onreadystatechange = function() {
		document.getElementById(msgId).innerHTML = "Waiting for server...";
		if (req.readyState == 4) {
			if (req.status == 200) {
				document.getElementById(msgId).innerHTML = req.responseText;
				if (refreshfields)
					refreshElements(refreshfields);
			}
			else
				document.getElementById(msgId).innerHTML="Eroare la incarcare (code " + req.status + " " + req.statusText + ")";
		} 
	}; 
	
	req.open("POST", url, true); 
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	req.send(formData2QueryString(form)); 
}


function refreshContent(element, url, timeout)
{
	intId = window.setInterval('doRefreshContent()', timeout, element, url);
}


function refreshContent(element, url, timeout)
{
	window.clearInterval(intId);
	loadAjaxData(element, url);
	intId = -1;
}


function refreshElements(fields)
{
	for (var i = 0; i < fields.length; i++)
		loadAjaxData(fields[i]['element'], fields[i]['url']);
}

////////////////////////////////////////////////////////
/*
 * Copyright 2005 Matthew Eernisse (mde@fleegix.org)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Original code by Matthew Eernisse (mde@fleegix.org), March 2005
 * Additional bugfixes by Mark Pruett (mark.pruett@comcast.net), 12th July 2005
 * Multi-select added by Craig Anderson (craig@sitepoint.com), 24th August 2006
 *
 * Version 1.3
*/

/**
 * Serializes the data from all the inputs in a Web form
 * into a query-string style string.
 * @param docForm -- Reference to a DOM node of the form element
 * @param formatOpts -- JS object of options for how to format
 * the return string. Supported options:
 *    collapseMulti: (Boolean) take values from elements that
 *    can return multiple values (multi-select, checkbox groups)
 *    and collapse into a single, comman-delimited value
 *    (e.g., thisVar=asdf,qwer,zxcv)
 * @returns query-string style String of variable-value pairs
 */
function formData2QueryString(docForm, formatOpts) {
  
  var opts = formatOpts || {};
  opts.collapseMulti = true;
  var str = '';
  var formElem;
  var lastElemName = '';
  
  for (i = 0; i < docForm.elements.length; i++) {
    formElem = docForm.elements[i];
    
    switch (formElem.type) {
      // Text fields, hidden form elements
      case 'text':
      case 'hidden':
      case 'password':
      case 'textarea':
      case 'select-one':
        str += formElem.name + '=' + encodeURI(formElem.value) + '&'
        break;
        
      // Multi-option select
      case 'select-multiple':
        var isSet = false;
        for(var j = 0; j < formElem.options.length; j++) {
          var currOpt = formElem.options[j];
          if(currOpt.selected) {
            if (opts.collapseMulti) {
              if (isSet) {
                str += ',' + encodeURI(currOpt.value);
              }
              else {
                str += formElem.name + '=' + encodeURI(currOpt.value);
                isSet = true;
              }
            }
            else {
              str += formElem.name + '=' + encodeURI(currOpt.value) + '&';
            }
          }
        }
        if (opts.collapseMulti) {
          str += '&';
        }
        break;
      
      // Radio buttons
      case 'radio':
        if (formElem.checked) {
          str += formElem.name + '=' + encodeURI(formElem.value) + '&'
        }
        break;
        
      // Checkboxes
      case 'checkbox':
        if (formElem.checked) {
          // Collapse multi-select into comma-separated list
          if (opts.collapseMulti && (formElem.name == lastElemName)) {
            // Strip of end ampersand if there is one
            if (str.lastIndexOf('&') == str.length-1) {
              str = str.substr(0, str.length - 1);
            }
            // Append value as comma-delimited string
            str += ',' + encodeURI(formElem.value);
          }
          else {
            str += formElem.name + '=' + encodeURI(formElem.value);
          }
          str += '&';
          lastElemName = formElem.name;
        }
        break;
        
    }
  }
  // Remove trailing separator
  str = str.substr(0, str.length - 1);
  return str;
}

