
var Namespace =
{
    Register : function(_Name)
    {
        var chk = false;
        var cob = "";
        var spc = _Name.split(".");
        for(var i = 0; i < spc.length; i++)
        {
            if(cob != "") {cob += "."; }
            cob += spc[i];
            chk = this.Exists(cob);
            if(!chk) { this.Create(cob); }
        }
        if(chk)
        {
            alert("Namespace: " + _Name + " is already defined.");
        }
    },

    Create : function(_Src)
    {
        eval("window." + _Src + " = new Object();");
    },

    Exists : function(_Src)
    {
        eval("var NE = false; try{ if(" + _Src + ") { NE = true; } else{ NE = false; } } catch(err) { NE = false; }");
        return NE;
    }
}

Namespace.Register("JSCore");

//
// Объект Calendar
//
JSCore.Point = function(x, y)
{
    this.x = x;
    this.y = y;
  
    return this;
}

//
// Объект Item
//
JSCore.Item = function(text)
{
    this.text = text;
    this.selectable = true;
    
    return this;
}

JSCore.GetItemList = function(xmlItemList)
{
    var itemList = new Array();
    
    for(i = 0; i < xmlItemList.length; i++)
    {
       var item = new JSCore.Item(JSCore.XML.GetInnerText(xmlItemList[i]));
       
       if(xmlItemList[i].getAttribute('disabled') == 1)
       {
          item.selectable = false;
       }
       itemList[itemList.length] = item;
    }
    
    return itemList;
}

JSCore.GetElemLeftTopPoint = function(elem)
{
    var point = new JSCore.Point(0, 0);
    
    curElem = elem;
    do
    {
        point.x += curElem.offsetLeft;
        point.y += curElem.offsetTop;
        curElem = curElem.offsetParent;
    }
    while(curElem.tagName != "BODY");
    
    return point;
}

JSCore.IsElemContains = function(parentElem, targetElem)
{
    var curElem = targetElem;
    while(true)
    {
        if(curElem.tagName == "HTML")
        {
            return 0;
        }
        curElem = curElem.parentNode;
        if(curElem.id == parentElem.id)
        {
            return 1;
        }
    }
    return 0;
}

JSCore.GetDateString = function(date)
{
    dateString = "";

    curDay = date.getDate();
    curMonth = date.getMonth() + 1;
    curYear = date.getFullYear();
    dateString = "";
    if(curDay < 10)
    {
        dateString += "0";
    }
    dateString += curDay + ".";
    if(curMonth < 10)
    {
        dateString += "0";
    }
    dateString += curMonth + ".";
    dateString += curYear;

    return dateString;
}

JSCore.GetCaretPosition = function(elem)
{
	var caretPos = 0;
	// IE Support
	if (document.selection)
	{
		elem.focus();
		var sel = document.selection.createRange();
		sel.moveStart ('character', - elem.value.length);
		caretPos = sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		caretPos = ctrl.selectionStart;

	return caretPos;
}

JSCore.SetCaretPosition = function(elem, pos)
{
	if(elem.setSelectionRange)
	{
		elem.focus();
		elem.setSelectionRange(pos, pos);
	}
	else if (elem.createTextRange)
	{
		var range = elem.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}

JSCore.IsTypingKey = function(keyCode)
{
    // Ё Х Ъ Ж Э Б Ю
    if(keyCode == 192 || keyCode == 219 || keyCode == 221 || keyCode == 186 || keyCode == 222 || keyCode == 188 || keyCode == 190)
    {
        return true;
    }
    if(keyCode >= 65 && keyCode <= 90) // лат. буквы на клавиатуре
    {
        return true;
    }
    if(keyCode >= 48 && keyCode <= 57) // цифры
    {
        return true;
    }
    if(keyCode == 8 || keyCode == 46) // BACKSPACE и DEL
    {
        return true;
    }
    if(keyCode == 187 || keyCode == 189 || keyCode == 220 || keyCode == 191) // различные знаки
    {
        return true;
    }
    return false;
}

JSCore.SwitchToCyr = function(text)
{
    var lat = "qwertyuiop{}asdfghjkl;'zxcvbnm,.";
    var cyr = "йцукенгшщзхъфывапролджэячсмитьбю";
    
    var result = "";
    for(i = 0; i < text.length; i++)
    {
        ch = text.charAt(i);
        for(j = 0; j < lat.length; j++)
        {
            if(lat.charAt(j) == text.charAt(i))
            {
                ch = cyr.charAt(j);
                break;
            }
        }
        result += ch;
    }
    alert(result);
    return result;
}

JSCore.Encode = function (string)
{
    return escape(JSCore.UTF8EEncode(string));
};

JSCore.Decode = function (string)
{
    return JSCore.UTF8Decode(unescape(string));
};

JSCore.UTF8EEncode = function (string)
{
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++)
    {
        var c = string.charCodeAt(n);

        if (c < 128) {
            utftext += String.fromCharCode(c);
        }
        else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        }
        else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }
    }

    return utftext;
};

JSCore.UTF8Decode = function (utftext)
{
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length )
    {
        c = utftext.charCodeAt(i);

        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        }
        else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }

    return string;
}

// Регистрируем NameSpace'ы
Namespace.Register("JSCore.AutoComplete");
Namespace.Register("JSCore.AutoComplete.Settings");

// Настройки по умолчанию
JSCore.AutoComplete.Settings.SCROLL_UP_IMAGE = "";
JSCore.AutoComplete.Settings.SCROLL_DOWN_IMAGE = "";
JSCore.AutoComplete.Settings.MAX_ROW_COUNT = 10;
JSCore.AutoComplete.Settings.ITEM_HEIGHT = 20;
JSCore.AutoComplete.Settings.ITEM_BG_COLOR = "#c6c6cf";
JSCore.AutoComplete.Settings.ITEM_BRD_COLOR = "#666666";

Namespace.Register("JSCore.DatePicker");
Namespace.Register("JSCore.DatePicker.Settings");

// Настройки по умолчанию
JSCore.DatePicker.Settings.PREV_MONTH_IMAGE = "_img/PrevMonth.gif";
JSCore.DatePicker.Settings.NEXT_MONTH_IMAGE = "_img/NextMonth.gif";
JSCore.DatePicker.Settings.CAPTION_COLOR = "#c6c6cf";

Namespace.Register("JSCore.HourSpanPicker");

