function checkTimeDigits() {
	window.event.returnValue = !((event.keyCode < 48) || (event.keyCode > 57));
}


function checkTime(obj, max) {
	var val = obj.value;
	if (parseInt(val, 10) > max) {
		obj.value = obj.oldvalue;
	} else {
		var nval = "";
		var i = 0;
		for (i=0; i < val.length; i++) {
			if (val.charAt(i) == '0') {
				nval = val.substr(1);
			} else {
				break;
			}
		}
		if (nval == "") nval = val;
		if (nval.length == 1) nval = '0' + nval;

		if (nval != val) {
			obj.oldvalue = nval;
			obj.value = nval;
		}
	}
}

function CreateDateTimeField(field_name, isDate, isTime, value)
{
	var doc = document;
	var dn = new Date();
	var y = dn.getYear();
	if (y < 1900) y+=1900;

	if (isDate == 'yes') {
		var cdate = value.substr(0, value.indexOf(" ")).split(".");
		if (cdate.length == 3) {
			dn.setDate(cdate[0]);
			dn.setMonth(cdate[1] - 1);
			y = cdate[2];
		}

		CreateDateField(field_name, dn.getDate(), dn.getMonth() + 1, y)
	}

	if (isTime == 'yes') {
		var ctime = value.substr(value.indexOf(" "), value.length).split(":");
		if (ctime.length == 3) {
			dn.setHours(ctime[0]);
			dn.setMinutes(ctime[1]);
			dn.setSeconds(ctime[2]);
		}

		doc.write('&nbsp;&nbsp;<nowrap>');
		doc.write('<input type="text" oldvalue="'  + dn.getHours() + '" onkeyup="checkTime(this, 23)" onkeypress="checkTimeDigits()" style="width: 30px; text-align: center;" name="' + field_name + '_hrs" id="' + field_name + '_hrs" size="2" maxlength="3" value="' + dn.getHours() + '" />:');
		doc.write('<input type="text" oldvalue="'  + dn.getMinutes() + '" onkeyup="checkTime(this, 59)" onkeypress="checkTimeDigits()" style="width: 30px; text-align: center;" name="' + field_name + '_min" id="' + field_name + '_min" size="2" maxlength="3" value="' + dn.getMinutes() + '" />:');
		doc.write('<input type="text" oldvalue="'  + dn.getSeconds() + '" onkeyup="checkTime(this, 59)" onkeypress="checkTimeDigits()" style="width: 30px; text-align: center;" name="' + field_name + '_sec" id="' + field_name + '_sec" size="2" maxlength="3" value="' + dn.getSeconds() + '" /></nowrap>');

		checkTime(document.getElementById(field_name + '_hrs', 23));
		checkTime(document.getElementById(field_name + '_min', 59));
		checkTime(document.getElementById(field_name + '_sec', 59));
	}
}


function CreateDateField(field_name, d, m, y)
{
	var doc, i, months, today;

	doc = document;

	today = new Date();
	if (d == 0)	d = today.getDate();
	if (m == 0)	m = today.getMonth() + 1;
	if (y == 0)	y = today.getYear();
	if (y < 1900) y+=1900;


	months = Array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");

	doc.write("<select name='" + field_name + "_d'>");
	for (i=1; i<=31; i++)
	{
		doc.write("<option value='" + i + "'" + ((i==d)?" selected":"") + ">" + i + "</option>");
	}
	doc.write("</select>\n");

	doc.write("<select name='" + field_name + "_m'>");
	for (i=1; i<=12; i++)
	{
		doc.write("<option value='" + i + "'" + ((i==m)?" selected":"") + ">" + months[i-1] + "</option>");
	}
	doc.write("</select>\n");

	doc.write("<input type='text' class='pole' name='" + field_name + "_y' size='5' maxlength='4' style='width:55px; text-align: center;' value='" + ((y > 0) ? y : "") + "' />\n");

}

function SetSelectedValue(field_name, field_value, default_value) {
	var F, i, n, field;

	F = document.forms.element;

	field = F.elements[field_name].options;
	n = field.length;
	for (i=0; i<n; i++) {
		if (field[i].value == field_value) {
			field[i].selected = true;
			return;
		}
	}

	for (i=0; i<n; i++) {
		if (field[i].value == default_value) {
			field[i].selected = true;
			return;
		}
	}
}


function SetCheckedValue(field_name, field_value, default_value) {
	var F, i, n, field;

	F = document.forms.element;

	field = F.elements[field_name];
	if (field.length) {
		n = field.length;
		for (i=0; i<n; i++) {
			if (field[i].value == field_value) {
				field[i].checked = true;
				return;
			}
		}

		for (i=0; i<n; i++) {
			if (field[i].value == default_value) {
				field[i].checked = true;
				return;
			}
		}
	}
	else
	{
		if (field.value == field_value)	{
			field.checked = true;
			return;
		}

		if (field.value == default_value) {
			field.checked = true;
			return;
		}
	}
}


function OpenEditorWindow(objField)	{
	WindowOpen("html_field_edit.asp?field_name=" + objField.name + "&rnd=" + Math.round(Math.random()*10000), "_blank", 600, 600);
}




(function($) {

	/****************************

		Plugin for catalog fields of type "LINKS"

		Sample:
			jQuery(document).ready(function($){$("div.catalog_link").catalog_link();});

	*/
	$.fn.catalog_link = function(opts) {
		var options = $.extend({
			field: '',						// must be read from metadata attr 'link'
			div_id: '',						// must be read from metadata attr 'link'
			link_to_item: false,	// разрешить ссылки на элементы
			link_to_div: false,		// разрешить ссылки на разделы
			link_max: 0						// максимальное разрешенное количество связей (multiple)
		}, opts);

		// return original object to support chaining
		return this.each(function(opts) {
			var $container = $(this),
				o = $.extend(options, $container.metadata({type: 'attr', name: 'catalog_link'}));

			// Одна связь или множество
			o.link_max = o.multiple == 'yes' && o.link_max == 1 ? 0 : o.link_max;

			$container.css({margin: '0px', padding: '0px'});


			if (o.link_max==1) {
				$container.find("ul").css({margin: '0px', padding: '0px', 'list-style-type': 'none'});
			} else {
				$container.find("ul").css({margin: '3px 3px 3px 15px', padding: '0px'});
			}


			/* Прикрепление событий: удалить связь, подстветка связей при наведении */
			function AttachLinkEvent($element) {
				if (o.link_max > 0 && $container.find("input").length >= o.link_max) {
					$container.find("a.addlink").hide();
				}

				$element.css({padding: '3px', margin: '0px', cursor: 'pointer'});

				$("<a class='dellink' style='padding: 0px 3px; margin:0; border: solid 1px #cccccc; display: block; float: right; text-decoration: none; font-weight: bold;' href='#' title='Удалить'>&times;</a>").bind("click", function() {
						$(this).parent().remove();
						if (o.link_max > 0 && $container.find("input").length < o.link_max) {
							$container.find("a.addlink").show();
						}
						return false;
				}).prependTo($element).hide();

				$element.hover(function(){
					$(this)
						.css("background-color", "#efefef")
						.find("a.dellink").show();}
					,function(){
					$(this)
						.css("background-color", "")
						.find("a.dellink").hide();}
				);
			}

			// Текст ссылки 'добавить' в зависимости от кол-ва возможных связей
			var addlinkText = o.link_max == 1 ? 'выбрать' : 'добавить';

			$("<a href='#' class='js small addlink'>" + addlinkText + "</a>").bind("click", function() {
					var args = new Array(),	w = 500, h = 500;
					var left = (screen.width/2)-(w/2);
					var top = (screen.height/2)-(h/2);
					if (top < 0) top = 0;
					if (left < 0) left = 0;

					var url = "/adm/catalog/select_tree.asp?div_id=" + o.div_id;
					url += o.link_to_item?"&items=y":""; // Элементы показать?
					url += !o.link_to_div?"&divs=n":""; // Запрет на ссылки с разделов?
					url += "&rnd=" + Math.round(Math.random()*10000); // не кэшировать
					args = window.showModalDialog(url, args, "dialogWidth: " + w + "px; dialogHeight: " + h + "px; dialogLeft: " + left + "px; dialogTop: " + top + "px;");

					if (args && String(args[0]).length > 0 && String(args[1]).length > 0) {
						// Проверка чтобы не было такой же ссылки уже
						if (o.link_max > 0 && $container.find("input").length >= o.link_max) {
						} else {
							if ($container.find("input[value='" + args[0] + "']").length == 0) {
								AttachLinkEvent($('<li><input type="hidden" name="' + o.field + '" value="' + args[0] + '">' + args[1] + '</li>').appendTo($container.find("ul")));
							}
						}
					}
					return false;
				})
				.appendTo($container);

			/* Прикрепление событий: удалить связь, подстветка связей при наведении */
			AttachLinkEvent($container.find("li"));

		});
	};


})(jQuery);

jQuery(document).ready(function($) {
	$("div.catalog_link").catalog_link();
});




// Для Оперы и ФФ, они не поддерживают метод selectNode и selectSingleNode

if( document.implementation.hasFeature("XPath", "3.0") ) // check for XPath implementation
{
   // prototying the XMLDocument
   XMLDocument.prototype.selectNodes = function(cXPathString, xNode)
   {
      if( !xNode ) { xNode = this; }
      var oNSResolver = this.createNSResolver(this.documentElement)
      var aItems = this.evaluate(cXPathString, xNode, oNSResolver,
                   XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
      var aResult = [];
      for( var i = 0; i < aItems.snapshotLength; i++)
      {
         aResult[i] =  aItems.snapshotItem(i);
      }
      return aResult;
   }

   // prototying the Element
   Element.prototype.selectNodes = function(cXPathString)
   {
      if(this.ownerDocument.selectNodes)
      {
         return this.ownerDocument.selectNodes(cXPathString, this);
      }
      else{throw "For XML Elements Only";}
   }

   // prototying the XMLDocument
   XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode)
   {
      if( !xNode ) { xNode = this; }
      var xItems = this.selectNodes(cXPathString, xNode);
      if( xItems.length > 0 )
      {
         return xItems[0];
      }
      else
      {
         return null;
      }
   }

   // prototying the Element
   Element.prototype.selectSingleNode = function(cXPathString)
   {
      if(this.ownerDocument.selectSingleNode)
      {
         return this.ownerDocument.selectSingleNode(cXPathString, this);
      }
      else{throw "For XML Elements Only";}
   }


	// Emulates IE's xml property. Gives an XML serialization of the DOM Object
    XMLDocument.prototype.__defineGetter__("xml", function ()
	{
		return (new XMLSerializer()).serializeToString(this);
	});
	// Emulates IE's xml property. Gives an XML serialization of the DOM Object
    Node.prototype.__defineGetter__("xml", function ()
	{
		return (new XMLSerializer()).serializeToString(this);
	});


}


