﻿function __htmlEncode( s )
{
    return s.replace( '&', '&amp;' ).replace( '<', '&lt;' ).replace( '>', '&gt;' ).replace( '"', '&quot;' );
}

function __formatDate( date )
{
	if( date==null )
		return "";
	else
		return (date.getDate()<=9 ?"0":"")+date.getDate()+"."+((date.getMonth()+1)<=9 ?"0":"")+(date.getMonth()+1)+"."+date.getFullYear();
}

function __parseDate( str )
{
    var dateRegExp = /^(\d?\d)\.(\d?\d)\.(\d\d\d\d)$/;
	if( dateRegExp.exec(str) )  /*str.search(dateRegExp) != -1*/
	{
		var yy = parseInt(RegExp.$3,10);
		var mm = parseInt(RegExp.$2,10)-1;
		var dd = parseInt(RegExp.$1,10);
		return new Date( Date.UTC( yy, mm, dd ) );
	}
	else
	{
		return null;
	}
}

function __getComboBoxValue( ctl )
{
	return ctl.value!="" ? parseInt( ctl.value ) : null;
}

function __getIds( ctllist )
{
	var res = new Array();
	for( var i in ctllist )
	{
		if( ctllist[i].checked )
		{
			res[res.length] = parseInt( ctllist[i].value );
		}
	}
	return res;
}
function __getTextIds( ctllist )
{
	var res = new Array();
	for( var i in ctllist )
	{
		if( ctllist[i].checked )
		{
			res[res.length] = ctllist[i].value;
		}
	}
	return res;
}

function __bindComboBox( ctl, items, selectedItemID, isOptional, defaultText )
{
	if( typeof(defaultText)=='undefined' ) defaultText = '';
	if( ctl.children )
	{
		while( ctl.children[0] )
		{
			ctl.removeChild( ctl.children[ctl.options.length-1] );
		}
		if( isOptional )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			option.text = defaultText;
			option.value = "";
			if( selectedItemID==null ) ctl.value=option.value;
		}
		for( var i in items )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			option.text = items[i].Name;
			option.value = items[i].ID;
			if( items[i].ID==selectedItemID )
			{
				ctl.value = selectedItemID;
			}
		}
	}
	else if(ctl.options)
	{
	    while(ctl.options.length != 0)
	        ctl.remove(0);
	        
	    if( isOptional )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			option.text = defaultText;
			option.value = "";
			if( selectedItemID==null ) ctl.value=option.value;
		}
		
		for( var i in items )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			option.text = items[i].Name;
			option.value = items[i].ID;
			if( items[i].ID==selectedItemID )
			{
				ctl.value = selectedItemID;
			}
		}   
	}
	else
	{
		var s = "";
		if( isOptional )
		{
			s += '<option value="" '+(selectedItemID==null?'selected':'')+'>'+defaultText+'</option>';
		}
		for( var i in items )
		{
			s += '<option value="'+items[i].ID+'"';
			s += (items[i].ID==selectedItemID?" selected":"");
			s += '>';
			s += __htmlEncode(items[i].Name);
			s += '</option>';
		}
		ctl.innerHTML = s;
	}
}

function __bindComboBoxGeo( ctl, items, selectedItemID, isOptional, defaultText )
{
	if( typeof(defaultText)=='undefined' ) defaultText = '';
	if( ctl.children )
	{
		while( ctl.children[0] )
		{
			ctl.removeChild( ctl.children[ctl.options.length-1] );
		}
		if( isOptional )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			option.text = defaultText;
			option.value = "";
			if( selectedItemID==null ) ctl.value=option.value;
		}
		for( var i in items )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			var indent = "";
			for( var j=0; j<items[i].Level; ++j )
				indent += "&nbsp;&nbsp;&nbsp;";
			option.innerHTML = indent + items[i].Name;
			option.value = items[i].ID;
			if( items[i].ID==selectedItemID )
			{
				ctl.value = selectedItemID;
			}
		}
	}
	else if(ctl.options)
	{
	    while(ctl.options.length != 0)
	        ctl.remove(0);
	        
	    if( isOptional )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			option.innerHTML = defaultText;
			option.value = "";
			if( selectedItemID==null ) ctl.value=option.value;
		}
		for( var i in items )
		{
			var option = document.createElement("OPTION");
			ctl.options.add(option);
			var indent = "";
			for( var j=0; j<items[i].Level; ++j )
				indent += "&nbsp&nbsp&nbsp;";
			option.innerHTML = indent + items[i].Name;
			option.value = items[i].ID;
			if( items[i].ID==selectedItemID )
			{
				ctl.value = selectedItemID;
			}
		}  
	}
	else
	{
		var s = "";
		if( isOptional )
		{
			s += '<option value="" '+(selectedItemID==null?'selected':'')+'>'+defaultText+'</option>';
		}
		for( var i in items )
		{
			var indent = "";
			for( var j=0; j<items[i].Level; ++j )
				indent += "&nbsp;&nbsp;&nbsp;";
			
			s += '<option value="'+items[i].ID+'"';
			s += (items[i].ID==selectedItemID?" selected":"");
			s += '>';
			s += indent + __htmlEncode(items[i].Name);
			s += '</option>';
		}
		ctl.innerHTML = s;
	}
}

function __setCheckBoxListWaiting( tab )
{
	if( tab.children )
	{
		while( tab.rows[0] )
		{
			tab.deleteRow( tab.rows.length-1 );
		}
		var row = tab.insertRow(-1);
		var cellA = row.insertCell(-1);
		cellA.innerHTML = "Загрузка...";
	}
	else
	{
		tab.innerHTML = "<tr><td>Загрузка...</td></tr>";
	}
}

function __bindCheckBoxList( fieldName, tab, items, selectedIds, onchange, allText )
{    
	var hash = new Object();

	if( typeof(allText)=='undefinded' ) allText='Все';
	
	if( tab.rows )
	{
		while( tab.rows.length != 0 )
		{
			tab.deleteRow( tab.rows.length-1 );
		}

		for( var i in items )
		{
			if( items[i]!=null )
			{
				var input = document.createElement("INPUT");
				input.type = "checkbox";
				//input.className = "chbs";
				input.name = fieldName;
				input.id = fieldName+"_"+items[i].ID;
				input.value = items[i].ID;
				//if( prev_hash!=null && prev_hash[ items[i].ID ]!=null && prev_hash[ items[i].ID ].checked ) 
				//	input.checked = true;
				
				hash[ items[i].ID ] = input;

				var row = tab.insertRow(-1);
				var cellA = row.insertCell(-1);
				var cellB = row.insertCell(-1);
				cellA.className = "search-chb";
				cellA.appendChild( input );
				cellB.className = "search-chb-text";
				cellB.innerHTML = '<label for="'+input.id+'">'+__htmlEncode( items[i].Name )+'</label>';
			}
			else
			{
				var row = tab.insertRow(-1);
				var cellA = row.insertCell(-1);
				row.height = 2;
				cellA.colSpan = 2;
				cellA.height = 1;
				cellA.innerHTML = '<hr style="border-bottom: 2px dashed #dddddd;border-top:none;border-left:none;border-right:none;width:100%;"/>';
			}
		}

		//отметить чек-боксы
		if( selectedIds!=null )
		{
			for( var i in selectedIds )
			{
				var ctl = hash[selectedIds[i]];
				if( ctl!=null )
					ctl.checked = true;
			}
		}
		
		tab.style.display = "none";
		tab.style.display = "inline";
	}
	else
	{
		var s = "";
		for( var i in items )
		{
			if( items[i]!=null )
			{
				s += '<tr><td class="search-chb">';
				s += '<input type=checkbox name="'+fieldName+'" ';
				s += 'id="'+fieldName+"_"+items[i].ID+'" ';
				s += 'value="'+items[i].ID+'" />';
				s += '</td><td class="search-chb-text">';
				s += '<label for="'+fieldName+"_"+items[i].ID+'">'+__htmlEncode( items[i].Name )+'</label>';
				s += '</td></tr>';
			}
			else
			{
				s += '<tr height="1"><td colspan=2><hr style="border-bottom: 2px dashed #dddddd;border-top:none;border-left:none;border-right:none;width:100%;"/></td></tr>';
			}
		}
		tab.innerHTML = s;

		for( var i in items )
		{
			if( items[i]!=null )
				hash[ items[i].ID ] = document.getElementById( fieldName+"_"+items[i].ID );
		}

		//отметить чек-боксы
		if( selectedIds!=null )
		{
			for( var i in selectedIds )
			{
				var ctl = hash[selectedIds[i]];
				if( ctl!=null )
					ctl.checked = true;
			}
		}
	}

	for( var i in hash )
	{
		hash[i].onclick = onchange;
	}

	return hash;
}

function __bindCheckBoxHotelServices( fieldName, tab, colCount, items, selectedIds, onchange )
{    
	//подготовить список элементов (вставить разделители)
	var arr = new Array();
	var prevServiceGroupName = null;
	for( var i in items )
	{
		if( items[i].ServiceGroupName!=prevServiceGroupName )
			arr[arr.length] = { ID: null, Name: items[i].ServiceGroupName };
		arr[arr.length] = items[i];
		prevServiceGroupName = items[i].ServiceGroupName;
	}
	items = arr;
	//подобрать количество строк в столбце
	var isOk = false;
	var rowCount = Math.floor( (arr.length+colCount-1)/colCount );
	for( ; !isOk && rowCount < arr.length; )
	{
		isOk = true;
		for( var k=rowCount-1; k<arr.length; k+=rowCount )
		{
			if( arr[k].ID==null ) { isOk = false; break; }
		}
		if( isOk ) break;
		rowCount++;
	}

	//нарисовать список
	var hash = new Object();
	if( tab.rows )
	{
		while( tab.rows.length != 0 )
		{
			tab.deleteRow( tab.rows.length-1 );
		}

		for( var k=0; k<rowCount; ++k )
		{
			var row = tab.insertRow(-1);
			for( var i=k; i<items.length; i+=rowCount )
			{
				if( items[i].ID!=null )
				{
					var input = document.createElement("INPUT");
					input.type = "checkbox";
					//input.className = "chbs";
					input.name = fieldName;
					input.id = fieldName+"_"+items[i].ID;
					input.value = items[i].ID;
					//if( prev_hash!=null && prev_hash[ items[i].ID ]!=null && prev_hash[ items[i].ID ].checked ) 
					//	input.checked = true;
					
					hash[ items[i].ID ] = input;

					var cellA = row.insertCell(-1);
					var cellB = row.insertCell(-1);
					//cellA.class = "search-chb";
					cellA.appendChild( input );
					cellB.innerHTML = '<label for="'+fieldName+"_"+items[i].ID+'">'+__htmlEncode( items[i].Name )+'</label>';
				}
				else
				{
					var cellB = row.insertCell(-1);
					cellB.innerHTML = '<div class="fsname">'+__htmlEncode( items[i].Name )+':</div>';
					cellB.colSpan = 2;
				}
			}
		}

		//отметить чек-боксы
		if( selectedIds!=null )
		{
			for( var i in selectedIds )
			{
				var ctl = hash[selectedIds[i]];
				if( ctl!=null )
					ctl.checked = true;
			}
		}
		
		tab.style.display = "none";
		tab.style.display = "inline";
	}
	else
	{
		var s = "";
		for( var k=0; k<rowCount; ++k )
		{
			s += "<tr>";
			for( var i=k; i<items.length; i+=rowCount )
			{
				if( items[i].ID!=null )
				{
					s += '<td>';
					s += '<input type=checkbox name="'+fieldName+'" ';
					s += 'id="'+fieldName+"_"+items[i].ID+'" ';
					s += 'value="'+items[i].ID+'" />';
					s += '</td><td>';
					s += '<label for="'+fieldName+"_"+items[i].ID+'">'+__htmlEncode( items[i].Name )+'</label>';
					s += '</td>';
				}
				else
				{
					s += '<td colspan=2>';
					s += '<div class="fsname">'+__htmlEncode( items[i].Name )+':</div>';
					s += '</td>';
				}
			}
			s += "</tr>";
		}

		tab.innerHTML = s;

		for( var i in items )
		{
			if( items[i].ID!=null )
			{
				hash[ items[i].ID ] = document.getElementById( fieldName+"_"+items[i].ID );
			}
		}

		//отметить чек-боксы
		if( selectedIds!=null )
		{
			for( var i in selectedIds )
			{
				var ctl = hash[selectedIds[i]];
				if( ctl!=null )
					ctl.checked = true;
			}
		}
	}

	for( var i in hash )
	{
		hash[i].onclick = onchange;
	}

	return hash;
}


