// ctrl+enter error message sending

document.onkeypress = function(e)
{
		var c=e||window.event;
		if (c.ctrlKey&&(c.keyCode==10||c.keyCode==13))
				reportSelection();
		if (c.shiftKey&&(c.keyCode==10||c.keyCode==13))
				glossary_word();
}

function glossary_word()
{
	var sel;
	if (document.selection) {
		sel = document.selection.createRange();
		sel = ((sel && sel.text) || '') + '';
	} else {
			sel = window.getSelection() + '';
	}
	if (confirm('Добавить термин в глоссарий?\n\n'+sel)) {
		dynaExecute('glossary_word', { admin: 1, term: sel }, function(r) { alert(r.responseJS); });
	}
}

function reportSelection()
{
	var sel;
	if (document.selection) {
		sel = document.selection.createRange();
		sel = ((sel && sel.text) || '') + '';
	} else {
			sel = window.getSelection() + '';
	}
	if (confirm('Вы хотите отправить сообщение об ошибке?\n\n'+sel)) {
		var msg = prompt('Введите описание ошибки', '') + '';

		dynaExecute('send_error', { 'msg': msg, 'sel': sel, 'ref': document.referrer, 'page': document.location.href });
	}
}

// выделяем все чекбоксы с заданным именем в форме

function checkAll(form, field, value)
{
	for (i = 0; i < form.elements.length; i++){
		if(form.elements[i].name == field)
			form.elements[i].checked = value;
	}
}

/**
 * Sets/unsets the pointer and marker in browse mode
 *
 * @param   object	the table row
 * @param   interger  the row number
 * @param   string	the action calling this script (over, out or click)
 * @param   string	the default background color
 * @param   string	the color to use for mouseover
 * @param   string	the color to use for marking a row
 *
 * @return  boolean  whether pointer is set or not
 */

function setPointer(theRow, theAction, theDefaultColor, thePointerColor)
{
	var theCells = null;
	var c = null;		
   
   // 2. Gets the current row and exits if the browser can't get it
	if (typeof(document.getElementsByTagName) != 'undefined') {
		theCells = theRow.getElementsByTagName('td');
	}
	else if (typeof(theRow.cells) != 'undefined') {
		theCells = theRow.cells;
	}
	else {
		return false;
	}
	
	// 3. Gets the current color...
	var rowCellsCnt  = theCells.length;
	var domDetect	= null;
	var currentColor = null;
	var newColor	 = null;
	
	if (typeof(window.opera) == 'undefined'
		&& typeof(theCells[0].getAttribute) != 'undefined') {
		currentColor = theCells[0].getAttribute('bgcolor');
		domDetect	= true;
	}
	// 3.2 ... with other browsers
	else {
		currentColor = theCells[0].style.backgroundColor;
		domDetect	= false;
	} // end 3
	
	if (theAction == 'over') {	
		newColor = thePointerColor;
	}
	else {
		newColor = theDefaultColor;
	}
	
	
		if (domDetect) {
			for (c = 0; c < rowCellsCnt; c++) {
				theCells[c].setAttribute('bgcolor', newColor, 0);
			} // end for
		}
		// 5.2 ... with other browsers
		else {
			for (c = 0; c < rowCellsCnt; c++) {
				theCells[c].style.backgroundColor = newColor;
			}
		}
	return true;		
} // end of the 'setPointer()' function


 function viewImage(i) {

	var X = 0;
	var Y = 0;

		//X = screen.width;
		//Y = screen.height;

	var d = document;

		X = d.body.scrollLeft;
		Y = d.body.scrollTop;

		document.getElementById('iB').src = i;
		var s = document.getElementById('sI');
		s.style.display = 'inline';
		s.style.top = Y;
		s.style.left = X + (screen.width / 5);
	}
	
function resizeDiv() {
	var s = document.getElementById('sI');
	var i = document.getElementById('iB');
		
	s.width = i.width;
	if(i.height <= 400) {
		s.height = i.height;
	}
	else {
			s.height = 400;
	}
}
	
function closeDiv() {
	document.getElementById('iB').src = '/img/work/nomencl/none.jpg';
	var s = document.getElementById('sI');
	s.style.display = 'none';
}

// Комбик для групп и категорий в list'e
function changeDisplay(id)
{
	var item = document.getElementById(id).style.display;
	switch (item)
	{
		case "none" : document.getElementById(id).style.display = ""; break;
		default : document.getElementById(id).style.display = "none"; document.getElementById('t2').className = "drop-select_over"; break;
	}
}
function changeClass(id)
{
	var item2 = document.getElementById(id).className;
	if (document.getElementById('ul1').style.display == "") {
		document.getElementById(id).className = "drop-select_on";
	}
	else {
		document.getElementById(id).className = "drop-select_over";
	}
}
function changeOver(id) {
	var item3 = document.getElementById(id).className;
	if (document.getElementById('ul1').style.display == "") { // if combo open - nochange class
		return;
	}
	else {
		switch (item3)
		{
			case "drop-select" : document.getElementById(id).className = "drop-select_over"; break;
			default : document.getElementById(id).className = "drop-select"; break;
		}
	}
}


// Проверка полей на корректность формата

(function($) {

	//Helper Function for Caret positioning
	$.fn.caret=function(begin,end){	
		if(this.length==0) return;
		if (typeof begin == 'number') {
            end = (typeof end == 'number')?end:begin;  
			return this.each(function(){
				if(this.setSelectionRange){
					this.focus();
					this.setSelectionRange(begin,end);
				}else if (this.createTextRange){
					var range = this.createTextRange();
					range.collapse(true);
					range.moveEnd('character', end);
					range.moveStart('character', begin);
					range.select();
				}
			});
        } else {
            if (this[0].setSelectionRange){
				begin = this[0].selectionStart;
				end = this[0].selectionEnd;
			}else if (document.selection && document.selection.createRange){
				var range = document.selection.createRange();			
				begin = 0 - range.duplicate().moveStart('character', -100000);
				end = begin + range.text.length;
			}
			return {begin:begin,end:end};
        }       
	};

	//Predefined character definitions
	var charMap={
		'9':"[0-9]",
		'a':"[A-Za-z]",
		'*':"[A-Za-z0-9]"
	};
	
	//Helper method to inject character definitions
	$.mask={
		addPlaceholder : function(c,r){
			charMap[c]=r;
		}
	};
	
	$.fn.unmask=function(){
		return this.trigger("unmask");
	};
	
	//Main Method
	$.fn.mask = function(mask,settings) {	
		settings = $.extend({
			placeholder: "_",			
			completed: null
		}, settings);		
		
		//Build Regex for format validation
		var re = new RegExp("^"+	
		$.map( mask.split(""), function(c,i){		  		  
		  return charMap[c]||((/[A-Za-z0-9]/.test(c)?"":"\\")+c);
		}).join('')+				
		"$");		

		return this.each(function(){		
			var input=$(this);
			var buffer=new Array(mask.length);
			var locked=new Array(mask.length);
			var valid=false;   
			var ignore=false;  			//Variable for ignoring control keys
			var firstNonMaskPos=null; 
			
			//Build buffer layout from mask & determine the first non masked character			
			$.each( mask.split(""), function(i,c){				
				locked[i]=(charMap[c]==null);				
				buffer[i]=locked[i]?c:settings.placeholder;									
				if(!locked[i] && firstNonMaskPos==null)
					firstNonMaskPos=i;
			});		
			
			function focusEvent(){					
				checkVal();
				writeBuffer();
				setTimeout(function(){
					$(input[0]).caret(valid?mask.length:firstNonMaskPos);					
				},0);
			};
			
			function keydownEvent(e){				
				var pos=$(this).caret();
				var k = e.keyCode;
				ignore=(k < 16 || (k > 16 && k < 32 ) || (k > 32 && k < 41));
				
				//delete selection before proceeding
				if((pos.begin-pos.end)!=0 && (!ignore || k==8 || k==46)){
					clearBuffer(pos.begin,pos.end);
				}	
				//backspace and delete get special treatment
				if(k==8){//backspace					
					while(pos.begin-->=0){
						if(!locked[pos.begin]){								
							buffer[pos.begin]=settings.placeholder;
							if($.browser.opera){
								//Opera won't let you cancel the backspace, so we'll let it backspace over a dummy character.								
								s=writeBuffer();
								input.val(s.substring(0,pos.begin)+" "+s.substring(pos.begin));
								$(this).caret(pos.begin+1);								
							}else{
								writeBuffer();
								$(this).caret(Math.max(firstNonMaskPos,pos.begin));								
							}									
							return false;								
						}
					}						
				}else if(k==46){//delete
					clearBuffer(pos.begin,pos.begin+1);
					writeBuffer();
					$(this).caret(Math.max(firstNonMaskPos,pos.begin));					
					return false;
				}else if (k==27){//escape
					clearBuffer(0,mask.length);
					writeBuffer();
					$(this).caret(firstNonMaskPos);					
					return false;
				}									
			};
			
			function keypressEvent(e){					
				if(ignore){
					ignore=false;
					//Fixes Mac FF bug on backspace
					return (e.keyCode == 8)? false: null;
				}
				e=e||window.event;
				var k=e.charCode||e.keyCode||e.which;						
				var pos=$(this).caret();
								
				if(e.ctrlKey || e.altKey){//Ignore
					return true;
				}else if ((k>=41 && k<=122) ||k==32 || k>186){//typeable characters
					var p=seekNext(pos.begin-1);					
					if(p<mask.length){
						if(new RegExp(charMap[mask.charAt(p)]).test(String.fromCharCode(k))){
							buffer[p]=String.fromCharCode(k);									
							writeBuffer();
							var next=seekNext(p);
							$(this).caret(next);
							if(settings.completed && next == mask.length)
								settings.completed.call(input);
						}				
					}
				}				
				return false;				
			};
			
			function clearBuffer(start,end){
				for(var i=start;i<end&&i<mask.length;i++){
					if(!locked[i])
						buffer[i]=settings.placeholder;
				}				
			};
			
			function writeBuffer(){				
				return input.val(buffer.join('')).val();				
			};
			
			function checkVal(){	
				//try to place charcters where they belong
				var test=input.val();
				var pos=0;
				for(var i=0;i<mask.length;i++){					
					if(!locked[i]){
						buffer[i]=settings.placeholder;
						while(pos++<test.length){
							//Regex Test each char here.
							var reChar=new RegExp(charMap[mask.charAt(i)]);
							if(test.charAt(pos-1).match(reChar)){
								buffer[i]=test.charAt(pos-1);								
								break;
							}									
						}
					}
				}
				var s=writeBuffer();
				if(!s.match(re)){							
					input.val("");	
					clearBuffer(0,mask.length);
					valid=false;
				}else
					valid=true;
			};
			
			function seekNext(pos){				
				while(++pos<mask.length){					
					if(!locked[pos])
						return pos;
				}
				return mask.length;
			};
			
			input.one("unmask",function(){
				input.unbind("focus",focusEvent);
				input.unbind("blur",checkVal);
				input.unbind("keydown",keydownEvent);
				input.unbind("keypress",keypressEvent);
				if ($.browser.msie) 
					this.onpaste= null;                     
				else if ($.browser.mozilla)
					this.removeEventListener('input',checkVal,false);
			});
			input.bind("focus",focusEvent);
			input.bind("blur",checkVal);
			input.bind("keydown",keydownEvent);
			input.bind("keypress",keypressEvent);
			//Paste events for IE and Mozilla thanks to Kristinn Sigmundsson
			if ($.browser.msie) 
				this.onpaste= function(){setTimeout(checkVal,0);};                     
			else if ($.browser.mozilla)
				this.addEventListener('input',checkVal,false);
				
			checkVal();//Perform initial check for existing values
		});
	};
})(jQuery);

