function serverCall(url, after) {
    var xmlrequest = false;

    try {
        xmlrequest = new XMLHttpRequest();
    } catch (e1) {
        try {
            xmlrequest = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e) {
            try {
                xmlrequest = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (oc) {
                xmlrequest = null;
            }
        }
    }
    if (!xmlrequest)
    {
        alert('Incompatible browser detected!');
        return false;
    }

    //открываем соединение
    url = url+'&'+Math.random();
    //animationShow(true);

    xmlrequest.open("GET", url, true);
    //назначаем свою функцию-обработчик события изменения состояния
    xmlrequest.onreadystatechange=function() {
        if (xmlrequest.readyState != 4) {
            return;
        }
        if (xmlrequest.status==200) {
            try {
                after(xmlrequest.responseXML);
                delete xmlrequest.onreadystatechange;
                delete xmlrequest;
            }
            catch(err) {
                //animationShow(false);
                alert('Не получается выполнить коллбэк! '+err.name + ' : '+ err.message);
                return false;
            }
        }

    }
    //animationShow(false);
    xmlrequest.send('');
}


function setFormValues(xml)
{
    if (!xml.documentElement)
    {
        //alert('No data');
        return false;
    }

    xml = xml.documentElement;
    
    if (! xml.getElementsByTagName('status')[0])
    {
        return false;
    }
    var status = xml.getElementsByTagName('status')[0].textContent || xml.getElementsByTagName('status')[0].text;
    var items = xml.getElementsByTagName('items')[0].getElementsByTagName('item');
    var errors = xml.getElementsByTagName('errors')[0].getElementsByTagName('item');
    
    if (!items || items.length == 0)
    {
        return false;
    }
    var error_string = '';
    for (var i = 0; i < items.length; i++)
    {
        var elem_id = items[i].getAttribute('name');
        if ((elem = document.getElementById(elem_id)))
        {
            elem.value = items[i].textContent || items[i].text;
            elem.style.backgroundColor = "#FFFFFF";
            if(status == 'ERROR')
            {
                if (items[i].getAttribute('error') == 'true')
                {
                    elem.style.backgroundColor = '#FFCCCC';
                    if (errors[i])
                    {
                        error_string += (errors[i].textContent || errors[i].text) + "\r\n";
                    }
                }
            }
        }
    }
    
    if (error_string != '')
    {
        alert(error_string);
    }
}

function selectItem(item_id, selected_id) {
    var item = (document.getElementById(item_id)) ? document.getElementById(item_id)  : document.getElementById('list') ;
    for (var i = 0; i < item.options.length; i++) {
        if (item.options[i].value == selected_id) item.options[i].selected = true;
    }
}

function getForm(fobj)  {
    var str = "";
    var elements = fobj.elements;

    for(var i = 0; i < elemnts.length; i++){
        ft = els.title;  //  title  элемента
        fv = els.value;  //  value  элемента
        fn = els.name;  //  name  элемента
        switch(elements[i].type) {  //  обрабатываем  данные  согласно  типу  элемента
            case "text":
            case "hidden":
            case "password":
            case "textarea":

            //!!!!!!!!!!!!!!!!вставить вроверку на корректность вводимых данных(реализовать на уровне javascript)

            str += elements[i].name + "=" + elements[i].value + "&";
            break;

            case "checkbox":
            case "radio":
            if (els.checked){
                str += elements[i].name + "=" + elements[i].value + "&";
            }
            break;

            case "select-one":
            str += elements[i].name + "=" + elements[i].options[els.selectedIndex].value  +  "&";
            break;
        }  //  switch
    }  //  for
    str = encodeURI(str.substr(0, (str.length - 1)));
    return str;
}


function setDivContent(xml)
{
    var cur_xml = xml;
    if (!xml.documentElement)
    {
        //alert('No data');
        return false;
    }

    xml = xml.documentElement;
   
    if (! xml.getElementsByTagName('status')[0])
    {
        return false;
    }   

    var status = xml.getElementsByTagName('status')[0].textContent || xml.getElementsByTagName('status')[0].text;    
    if (status == 'OK')
    {
        var div = document.getElementById(xml.getElementsByTagName('element_id')[0].textContent || xml.getElementsByTagName('element_id')[0].text);
        div.innerHTML = xml.getElementsByTagName('content')[0].textContent || xml.getElementsByTagName('content')[0].text;
    }
    else
    {
        setFormValues(cur_xml);
    }
    
}


function Caldendar()
{
	/**
	 * Private members
	 */
	
	/**
	 * dom elements
	 */
	var $form = $('#archive_form');
	var $daySelect=[],$monthSelect=[],$yearSelect=[];
	
	/**
	 * calendar config
	 */
	var minYear = 2011;
	var minMonth = 3;
	
	var monthList = {1: 'января', 2: 'февраля', 3: 'марта', 4: 'апреля', 5: 'мая', 6: 'июня', 7: 'июля', 8: 'августа', 9: 'сентября', 10: 'октября', 11: 'ноября', 12: 'декабря'};
	var shortMonthList = {};
	jQuery.each( monthList, function(index, value){ if ( index >= minMonth ) shortMonthList[index] = value; } );
	
	var currentYear, d = new Date();
	currentYear = d.getFullYear();
	
	if ($form && typeof($form.fillSelect) != "undefined" )
	{
		var $daySelect = $('#archive_form').find('select[name="day"]');
		var $monthSelect = $('#archive_form').find('select[name="month"]');
		var $yearSelect = $('#archive_form').find('select[name="year"]');
	}
	
	var obj = {
			initControls: function(){
				if ($daySelect.length > 0 && $monthSelect.length > 0 && $yearSelect.length > 0)
				{
					$monthSelect.bind('change', obj._onChange);
					$daySelect.bind('change', obj._onChange);
					$yearSelect.bind('change', obj._onChange);
					obj._onChange();
				}
			}
			,_onChange: function(){
				var daysVal = $daySelect.val();
				var monthVal = $monthSelect.val();
				var yearVal = $yearSelect.val();
				var days = obj._getDays( yearVal, monthVal );
				var months = obj._getMonths( yearVal );
				var years = obj._getYears();
				
				
				$daySelect.fillSelect(days).val( daysVal );
				$monthSelect.fillSelect(months).val( monthVal );
				$yearSelect.fillSelect(years).val( yearVal ) ;
			}
			,_getDays: function(){
				var month = $monthSelect.val();
				var yearVal = $yearSelect.val();
				var maxI = 30;
				var minI = 1;
				if (month in [1,3,5,7,8,10,12])
				{
					maxI = 31;
				}
				if (month == 2)
				{
					maxI = yearVal % 4 == 0 ? 29 : 28;
				}
				if ( yearVal == minYear && month <= minMonth )
				{
					minI = 16;
				}
				var res = []; 
				for(var i = minI; i<=maxI; i++)
				{
					res[i] = i;
				}
				
				return res;
			}
			,_getMonths: function(){
				var yearVal = $yearSelect.val();
				var res = monthList;
				if (yearVal && yearVal == minYear)
					res = shortMonthList;
					
				return res;
			}
			,_getYears: function(){
				var res=[];
				year = d.getFullYear();
				
				for (var i=minYear; i<=currentYear; i++)
				{
					res[i] = i;
				}
				
				return res;
			}
	}
	// init controls
	obj.initControls();
	// show form
	$form.show();
	return obj;
}

function addbookmark(title, url) {
	if (window.sidebar) { // Firefox
		window.sidebar.addPanel(title, url, "");
	} else if (window.external) { // IE
		window.external.AddFavorite(url, title);
	} else if (window.opera && window.print) { // Opera
		var elem = document.createElement('a');
		elem.setAttribute('href',url);
		elem.setAttribute('title',title);
		elem.setAttribute('rel','sidebar');
		elem.click();
	}
}

jQuery('document').ready(function(){
	Caldendar();
});
