// универсальная бралка элементов (юзать везде!)
function ge(id) { return document.getElementById(id); }
// скрыть-показать
function hideid(id) { return ge(id).style.display = 'none'; }
function showid(id) { return ge(id).style.display = 'block'; }
function blinkid(id) { return ge(id).style.display = (ge(id).style.display=='none')?'block':'none'; }
// случаное число, чтобы 300 раз не писать Math.random();
function rm(){return Math.random();}
 /* XMLHTTPRequest Enable */
function createObject() {
  var http_request;
  if (window.XMLHttpRequest) { 
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/html');
    }
  } else if (window.ActiveXObject) { 
    try { http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
    }
  } return http_request;
}
 /* Definition of main var for ajax requests */
var http = createObject();
 /* Sending query via POST */
function sendPostQuery(url,parameters) {
  http.open('POST', url, true);
  http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http.setRequestHeader("Content-length", parameters.length);
  http.setRequestHeader("Connection", "close");
  http.send(parameters+'&nc='+rm());
}
 /* Sending query via GET */
function sendGetQuery(url) {
  http.open('get', url+'&nc='+rm());
  http.send(null);
}
 /* Dragging objects */
function agent(v) { return(Math.max(navigator.userAgent.toLowerCase().indexOf(v),0)); }
function xy(e,v) { return(v?(agent('msie')?event.clientY+document.body.scrollTop:e.pageY):(agent('msie')?event.clientX+document.body.scrollTop:e.pageX)); }
function dragOBJ(d,e,pos,hash) {
  function drag(e) { if(!stop) { d.style.top=(tX=xy(e,1)+oY-eY+'px'); d.style.left=(tY=xy(e)+oX-eX+'px');
    iX = xy(e,1)+oY-eY; iY = xy(e)+oX-eX;
  } 
	  if(Math.abs(iX)>20){
	    stop=1; document.onmousemove=''; document.onmouseup='';
		if(iX>20 && offset<lblocks.length){
		  exchangeBlocks(offset,offset+1,code);normblocks(code);
		}else if(iX<-20 && offset>1){
		  stop=1; document.onmousemove=''; document.onmouseup='';
		  exchangeBlocks(offset,offset-1,code);normblocks(code);
		}}
  }  var oX=parseInt(d.style.left),oY=parseInt(d.style.top),eX=xy(e),eY=xy(e,1),tX,tY,iX,iY,stop,offset=pos,code=hash;
  document.onmousemove=drag; document.onmouseup=function(){ 
  stop=1; document.onmousemove=''; document.onmouseup='';
  if(Math.abs(iX)>20){
	if(iX>20 && offset<lblocks.length){
	  exchangeBlocks(offset,offset+1,code);
	}else if(iX<-20 && offset>1){
	  exchangeBlocks(offset,offset-1,code);
	}}normblocks(code);
  };
} 
/* Exchanging block's html content */
function exchangeBlocks(first, second,code){
  var buf = ge('drag'+first).innerHTML;	
  ge('drag'+first).innerHTML = ge('drag'+second).innerHTML;
  ge('drag'+second).innerHTML = buf;
  buf = lblocks[first-1];
  lblocks[first-1]=lblocks[second-1];
  lblocks[second-1]=buf;
  ajaxSaveBlocks(code);
}
/* Norm. blocks */
function normblocks(code){
  for(var i=1;i<=lblocks.length;i++){
    if(!ge('lblock'+lblocks[i-1])){continue;}
    ge('lblock'+lblocks[i-1]).style.top = '0px'; ge('lblock'+lblocks[i-1]).style.left = '0px';
    ge('lhandle'+lblocks[i-1]).onmousedown= "dragOBJ(ge('lblock"+lblocks[i-1]+"'),event,"+i+",'"+code+"'); return false;";
  }
}
/* Changes value. Increment or decrement as a rule*/
function valch(counter,inc){
  val = parseInt(counter);
  if(val!=='NaN'){
    if(val==1){return '';} return val+inc;
  }else{
    val = parseInt(counter.substr(1));
	if(val!=='NaN'){
      if(val==1){return '';} return counter.substr(0,1) + (val+inc);
    }
  }return '';
}
// "фирменный alert"
function alert(msgText,buttonText) {
  // все стили здесь
  var fogStyle = "visibility: hidden; position: absolute; top: 0px; left: 0px; width: 100%; background: #8f959a; opacity: 0.2; filter: alpha(opacity=20);"
  var msgStyle = "visibility: hidden; position: absolute; top: 0px; left: 0px; background: white; border-top: 2px solid #e2a925; border-right: 2px solid #8f959a; border-bottom: 2px solid #8f959a; border-left: 2px solid #e2a925;";
  var msgDivStyle = "font: 13px Trebuchet MS; margin: 5px 10px 5px 10px;";
  var buttonDivStyle = "text-align: center; margin: 10px 0px 7px 0px;";
  var buttonStyle = "cursor: pointer; border-top: 1px solid #ead6af; border-left: 1px solid #ead6af; border-bottom: 1px solid #7c590c; border-right: 1px solid #7c590c; background: #ca992c; color: white; font: bold 13px Trebuchet MS;";
  // дефолтный текст кнопки
  if(!buttonText) buttonText = 'OK';
  // создаем или правим слои
  if(!document.getElementById('newAlert')) {
    var div = document.createElement('div'); document.body.appendChild(div);
    div.innerHTML = '<div id="newAlertFog" style="' + fogStyle + '">&nbsp;</div>';
    div.innerHTML += '<div id="newAlert" style="' + msgStyle + '"><div style="' +  msgDivStyle + '">' + msgText + '</div><div style="' + buttonDivStyle +  '"><input type=button style="' + buttonStyle + '" value="' + buttonText + '" onclick="hideAlert();"></div></div>';
  } else {
    document.getElementById('newAlert').getElementsByTagName('div')[0].innerHTML = msgText;
    document.getElementById('newAlert').getElementsByTagName('input')[0].value = buttonText;
  }
  // смещаем как надо
  var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
  var scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
  var scrollWidth = window.innerWidth || document.documentElement.clientWidth || document.body.offsetWidth;
  var scrollHeight = window.innerHeight || document.documentElement.clientHeight || document.body.offsetHeight;
  var newAlert = document.getElementById('newAlert');
  var fog = document.getElementById('newAlertFog');
  newAlert.style.top = scrollTop + (scrollHeight/2) - (newAlert.offsetHeight/2) + 'px';
  newAlert.style.left = scrollLeft + (scrollWidth/2) - (newAlert.offsetWidth/2) + 'px';
  fog.style.height = document.body.clientHeight + 'px';
  fog.style.width = scrollWidth + 'px';
  // кажем
  document.getElementById('newAlertFog').style.visibility = 'visible';
  newAlert.style.visibility = 'visible';
  // включаем горячие клавиши
  if(document.addEventListener) document.addEventListener('keydown',hideAlert,false);
  else if(document.attachEvent) document.attachEvent('onkeydown',hideAlert);
  // все
  return false;
}
// прячем фирменный алерт
function hideAlert(e){
  // смотрим клавишу
  var e = e || window.event;
  if(e) {
    var keyCode = e.which || e.keyCode;
    if(keyCode>1 && keyCode != 13 && keyCode != 32) return false;
    if(e.preventDefault) e.preventDefault(); e.returnValue = false;
  }
  // отключаем горячие клавиши
  if(document.removeEventListener) document.removeEventListener('keydown',hideAlert,false);
  else if(document.detachEvent) document.detachEvent('onkeydown',hideAlert);
  // скрываем сообщение
  document.getElementById('newAlert').style.visibility = 'hidden';
  document.getElementById('newAlertFog').style.visibility = 'hidden';
  // все
  return false;
}
// добавлялка событий
function addHandler(object,event,handler,useCapture) {
  if(object.addEventListener) object.addEventListener(event,handler,useCapture?useCapture:false);
  else if(object.attachEvent) object.attachEvent('on'+event,handler);
  return false;
}
// открывалка текстоблока
function openText(container) {
  ge('txt_cnt').innerHTML = ge(container).innerHTML;
  ge('txt_fog').style.display = 'block';
  ge('txt_shd').style.display = 'block';
  ge('txt_div').style.display = 'block';
  ge('txt_div').scrollTop = 0;
  addHandler(document,'keydown',hotEscape);
  return false;
}
// закрывалка текстоблока
function closeText() {
  ge('txt_fog').style.display = 'none';
  ge('txt_shd').style.display = 'none';
  ge('txt_div').style.display = 'none';
  ge('txt_div').scrollTop = 0;
  ge('txt_cnt').innerHTML = '';
  return false;
}
// горячий эскейп
function hotEscape(evt) {
  var keyCode = evt.which || event.keyCode;
  if(keyCode == 27) closeText();
}
