var _metro = {
	dest:'metro_div'
	,URL:'/parts/regdata.php'
	,doState:function (){processStateChange(_metro);}
	,iniHTML:''
	,func:'metro'
	};
var _form = {
	dest:'form_div'
	,URL:'/parts/regdata.php'
	,doState:function (){processStateChange(_form);}
	,iniHTML:''
	,func:''
	};
var _street = {
	dest:'street_div'
	,URL:'/parts/regdata.php'
	,doState:function (){processStateChange(_street);}
	,iniHTML:''
	,func:'street'
	};
var _reg = {
	dest:'message'
	,URL:'/parts/reg.php'
	,doState:function (){onStateChange (_reg)}
	,msg:'Вы зарегистрированы!'
	,iniHTML:''
	,form:'registr'
	};
var _update = {
	dest:'message'
	,URL:"/parts/user_update.php"
	,doState:function (){onStateChange (_update)}
	,msg:'Ваши данные обновлены'
	,iniHTML:''
	,func:''
	,form:'registr'
	};

var radio='moscow';
var cart=false;
var referer='/products/';
var edit=false;

function processStateChange(reqObj)
{
    if (reqObj.req.readyState == 4)
    {
        var contentDiv = document.getElementById(reqObj.dest);
				contentDiv.innerHTML = reqObj.req.responseJS.html;
  	}
}
function onStateChange(reqObj)
{
	if (reqObj.req.readyState == 4)
	{
	  var contentDiv = document.getElementById(reqObj.dest);
    response = reqObj.req.responseJS.answer;
    errors = reqObj.req.responseJS.errors;
    if (reqObj == _update || reqObj == _reg) show('hide');
    contentDiv.innerHTML = reqObj.iniHTML;
    if(response == 'OK')
    {
    	document.body.style.cursor="auto";
    	alert(reqObj.msg);
    	document.location.href = referer;
    }
    else
    {
    	document.body.style.cursor="auto";
    	alert(response);
    	var length = errors.length;
    	for ( var i=0; i<length; i++)
    	{				var elem = document.getElementById('err_' + errors[i].field);
				elem.innerHTML = errors[i].msg;
				elem.style.display = 'block';
    	}
			document.getElementById(reqObj.form).elements[errors[0].field].focus();
    }
	}
}

function loadHTML(reqObj, ch)
{
	var elements = getElementsByClassName('validation_err');
	var length = elements.length;
	for( var i=0; i<length; i++ )
	{
		elements[i].innerHTML='';
		elements[i].style.display = 'none';
	}
	var req = new JsHttpRequest();
	reqObj.req = req;
	if (req)
  {
    req.onreadystatechange = reqObj.doState;
		req.open(null, reqObj.URL, true);
		switch(reqObj)
		{			case _metro:
			case _street:
	    	req.send( { ch:ch, func:reqObj.func } );
	     	document.getElementById(reqObj.dest).innerHTML = "Идет загрузка, подождите...";
			break;
			case _form:
	    	req.send( { func:escape(radio)	} );
	     	document.getElementById(reqObj.dest).innerHTML = "Идет загрузка, подождите...";
			break;
			case _reg:
			case _update:
	   		req.send( { q:document.getElementById(reqObj.form) } );
				var contentDiv = document.getElementById(reqObj.dest);
	      	if (1 > reqObj.iniHTML.length)
	      		reqObj.iniHTML = contentDiv.innerHTML;
	      	contentDiv.innerHTML = reqObj.iniHTML + "Данные отправлены, подождите...";
	      	show('show');
	      	document.body.style.cursor="wait";
			break;
		}
  }
  else
  {  	alert("Ошибка: не удалось создать объект запроса.\nВозможно в Вашем браузере отключена или отсутствует поддержка ActiveX.")  }
}

function set_text(elem, destination) {
        dest_text = document.getElementById(destination);
	      dest_text.value = elem.options[elem.selectedIndex].text;
	      if (destination == "metro_str")
	      {	      	metro_id=document.getElementById("metro");
	      	metro_id.value=elem.options[elem.selectedIndex].value;	      }
}
function hide_element(elem){
	elem.style.display="none";
}
function set_form(value){	radio = value;
	loadHTML(_form);}
function form_load(){
	loadHTML(_form);
	document.getElementById("def").checked="checked";
}

function getClientWidth()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}
function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}
function getBodyScrollTop()
{
	return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}
function getBodyScrollLeft()
{
	return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}
function getClientCenterX()
{
	return parseInt(getClientWidth()/2)+getBodyScrollLeft();
}
function getClientCenterY()
{
	return parseInt(getClientHeight()/2)+getBodyScrollTop();
}
function show(action)
{
	var dest = document.getElementById("message");
	dest.style.left = getClientCenterX() - dest.clientWidth/2+'px';
	dest.style.top = getClientCenterY() - dest.clientHeight/2+'px';
	if ( "hide" == action ) dest.style.visibility = "hidden";
	else dest.style.visibility = "visible";
}
