// DcomboBox.js
// Copywrite 2004 2005 Martin Krolik (martin@krolik.net)
// All rights reserved.  
var arrAllComboBoxes = new Array();
var pOldDComboBoxOnloadHandler = null;
var pOldDComboBoxResizeHandler = null;
pOldDComboBoxOnloadHandler = window.onload;
pOldDComboBoxResizeHandler = window.onresize;
onload =  DComboBoxOnloadHandler;
onresize = DComboBoxResizeHandler;
var ecx = 0;
function ComboInit(BaseName)
{
	var objA, objB, offset;
	offset = 0;
	if (navigator.appName.indexOf("Mozilla")>=0) offset = -1;
	objA = xGetElementById(BaseName);
	objB = xGetElementById(BaseName + "DcboBox");
	xMoveTo(objB, xPageX(objA) + offset, xPageY(objA));	
	xClip(objB , 0, xWidth(objB), xHeight(objB), xWidth(objB) - 19);

	// {{{ заплатка для design2.0
	objB.style.top = (parseInt(objB.style.top) - 86) + 'px';
	objB.style.left = (parseInt(objB.style.left) - 215) + 'px';
	// }}}
	xShow(objB);
//	UnSelectAnyOptions(objB);
}
function AllComboInit()
{
  for (var i = 0; i < arrAllComboBoxes.length; i++)
    {
      ComboInit(arrAllComboBoxes[i]);
    }
}
function DComboBoxOnloadHandler()
{
  if (pOldDComboBoxOnloadHandler) pOldDComboBoxOnloadHandler();
  AllComboInit();
}
function DComboBoxResizeHandler()
{
  if (pOldDComboBoxResizeHandler) pOldDComboBoxResizeHandler();
  AllComboInit();

}
function UpdateDCBoxGeneric(evt)
{
	var objA, objB, strName;
	var objEvent = new xEvent(evt);
	objB = objEvent.target;
	strName = objB.name;	
	strName = strName.split("DcboBox")[0];
	objA = xGetElementById(strName);
	objA.value = objB.options[objB.selectedIndex].text;
//fix by kyss. Нафига убирать selectedIndex?!!!
//	UnSelectAnyOptions(objB);
//if ((! document.all) && objA && (objA.onchange)) objA.onchange();
	if(navigator.appName == 'Microsoft Internet Explorer')
        	objA.setAttribute('autofocus','off');
	if (objA && (objA.onchange)) objA.onchange();
	onFocusCombo(objA);
	onFocusComboOtherChildren(objA);
}

function UnSelectAnyOptions(selectElement)
{
	// this unselects any records
	for (var n = 0; n < selectElement.options.length; n++)
	{
		selectElement.options[n].selected = false;
	}
	if (selectElement.options.length > 0)  // this is for NS4 on X-Windows
	{
		if (document.layers) 
		{  
			// this is for NS4 on X-Windows
			selectElement.options[0].selected = true;
		}
		selectElement.options[0].selected = false;
	}
	selectElement.selectedIndex = -1;
	selectElement.value = null;
}


function clearSelect(oListbox)
{
  oListbox.selectedIndex = -1;
  oListbox.value = null;
  for (var i=oListbox.options.length-1; i >= 0; i--)
  {
      oListbox.remove(i);
  }

}

//-------------------------------------------------------------------------------------------------

function onFocusCombo(p){
var req = new JsHttpRequest_AUX();
var curObj;
req.onreadystatechange = function() {
	if (req.readyState == 4) {
		if (req.responseJS) {
			curObj = deleteString(p.id,'DcboBox');
			p.setAttribute('manual','n');
			var child_id = document.getElementById(curObj  + 'DcboBox').getAttribute('child');
			if (child_id==null)
				return;
			var selObj = document.getElementById(child_id + 'DcboBox');
			var tmp_s = req.responseJS['rOptions'];

                        if(navigator.appName == 'Opera' || navigator.appName == 'Microsoft Internet Explorer')
				iFocus++;
			else
				iFocus = 0;

			document.getElementById(child_id).focus();
			document.getElementById(child_id).select();

                	clearSelect(selObj);

			var aOptions = tmp_s.split(";;;");
			for (var i=0; i < aOptions.length - 1; i++){
				aParam = aOptions[i].split("=>");
				newOption = document.createElement("option");
				    newOption.value = aParam[0];
				    newOption.text = aParam[1];
				    selObj.options.add(newOption);
				    selObj.options[selObj.options.length-1].innerHTML = aParam[1];
			}
			document.getElementById(child_id).value = selObj.options[0].innerHTML;
			document.body.style.cursor='default';
			document.getElementById(child_id).disabled = false;
			document.getElementById(child_id + 'DcboBox').disabled = false;
			document.getElementById(child_id).setAttribute('autofocus', 'on');
		
			document.getElementById(child_id).focus();
			document.getElementById(child_id).select();
		}
	}
}
req.caching = false;
req.open('GET', '/get_select_ajax.php',true);
curObj = deleteString(p.id,'DcboBox');

var parentValue = '';


var child_id = document.getElementById(curObj  + 'DcboBox').getAttribute('child');
if (child_id==null)
	return;

var selObj = document.getElementById(curObj + 'DcboBox');
var parentIndex = selObj.selectedIndex;

var child = document.getElementById(child_id + 'DcboBox');

if (child == null)
	return;


if (parentIndex < 0){
	clearSelect(child);
	return;
}

var parentValue = selObj.options[parentIndex].value;
if (parentValue==0 || parentValue=="0"){
	clearSelect(child);
	return;
}

child.disabled = false;
document.getElementById(child_id).disabled = false;

document.body.style.cursor='wait';
req.send({sObj: child_id, parentValue: parentValue});
}

//-------------------------------------------------------------------------------------------------------------

function onFocusComboOtherChildren(p){
var req = new JsHttpRequest_AUX();
var curObj;
req.onreadystatechange = function() {
	if (req.readyState == 4) {
		if (req.responseJS) {
			curObj = deleteString(p.id,'DcboBox');
			p.setAttribute('manual','n');
			var sOtherChildren = document.getElementById(curObj + 'DcboBox').getAttribute('otherchildren');
			if (sOtherChildren==null)
				return;
			var aOtherChildren = sOtherChildren.split(";");
			for(ii in aOtherChildren){
				if (aOtherChildren[ii]!=''){
					var selObj = document.getElementById(aOtherChildren[ii]  + 'DcboBox');
					var tmp_s = req.responseJS['rOptions'];
					clearSelect(selObj);

					var aOptions = tmp_s.split(";;;");
					for (var i=0; i < aOptions.length - 1; i++){
						var aParam = aOptions[i].split("=>");
						var newOption = document.createElement("option");
						    newOption.value = aParam[0];
						    newOption.text = aParam[1];
						    selObj.options.add(newOption);
						    selObj.options[selObj.options.length-1].innerHTML = aParam[1];
					}
					document.getElementById(aOtherChildren[ii]).value = selObj.options[0].innerHTML;
					document.body.style.cursor='default';	
				}
			}
		
		}
	}
}
req.caching = false;

req.open('GET', '/get_select_ajax.php',true);
curObj = deleteString(p.id,'DcboBox');

var parentValue = '';
var sOtherChildren = document.getElementById(curObj + 'DcboBox').getAttribute('otherchildren');
if (sOtherChildren==null)
	return;

var aOtherChildren = sOtherChildren.split(";");
for(i in aOtherChildren){
	if (aOtherChildren[i]!=''){
		var child = document.getElementById(aOtherChildren[i]  + 'DcboBox');
		var selObj = document.getElementById(curObj + 'DcboBox');
		var parentIndex = selObj.selectedIndex;
		if (child == null)
			return;
		if (parentIndex < 0){
			clearSelect(child);
			return;
		}

		var parentValue = selObj.options[parentIndex].value;
		if (parentValue==0 || parentValue=="0"){
			clearSelect(child);
			return;
		}

		child.disabled = false;
		document.getElementById(aOtherChildren[i]).disabled = false;

		document.body.style.cursor='wait';
		req.send({sObj: aOtherChildren[i], parentValue: parentValue});
	}//if
}//for

}

function onClickSelect(p){
var dropDownMenu = p.nextSibling;
    if (dropDownMenu==null)
	return;
    if (dropDownMenu.style.display=='block')
	    dropDownMenu.style.display='none';
}

function BuildDCBox(BaseName, StartValue, Options, PixelWidth, Other, AdditionalStyle)
{
	var DCOptions = new Array();
	AdditionalStyle='';
	if (!(PixelWidth)) PixelWidth = 200;
	if (!(StartValue)) StartValue = "";
	if ((typeof Options) == "string")  { DCOptions = Options.split(",") } else { DCOptions = Options }
	var strBuild = "";
	var cntOptions = DCOptions.length - 1;

	strBuild += "<select onClick='onClickSelect(this)' name='" + BaseName + "DcboBox' id='" + BaseName ;
	strBuild += "DcboBox' ";
	strBuild += "style='position: absolute; z-index:1; visibility: hidden; " + AdditionalStyle + "' ";
	strBuild += " onchange='UpdateDCBoxGeneric(event);' >" ;
	if ((DCOptions) && (DCOptions.length)){
		for (var cnt in DCOptions){
			strBuild += "<option value='" + cnt + "'>" + DCOptions[cnt] + "</option>";
		}
	}
	strBuild += "</select>";
	strBuild += "<input onFocus='sObj=this.id;' type='text' class='sai' onChange='onChangeSelect(this)' iobj='" + cntOptions + "' value='" + StartValue;
	strBuild += "' name='" + BaseName + "' id='" + BaseName + "' "
	sHeight = "";
	strBuild += "style='z-index:2; position: relative; " + AdditionalStyle  +"' ";
	strBuild += Other + " />"
	strBuild += "<br/>";
	return (strBuild);
}
function WriteDCBox(BaseName, StartValue, Options, PixelWidth, Other, AdditionalStyle)
{
	if (!(BaseName)) BaseName = "DefaultDComboBoxName";
	document.write(BuildDCBox(BaseName,StartValue,Options,PixelWidth,Other,AdditionalStyle));
	setTimeout("ComboInit('" + BaseName + "');", 5);
	arrAllComboBoxes.push(BaseName);

//	if (navigator.appName == 'Opera')
//		document.write("<style>.editform select { width:265px;}</style>");

}