﻿TYPE =
{
	registerNamespace: function(name)
	{
		///<summary>Verilen uzay alanı adını register eder.</summary>
		var root = window;
		var indices = new Array();
		indices = name.split('.');
		for (var i = 0; i < indices.length; i++)
		{
			if (!root[indices[i]])
			{
				root[indices[i]] = {};
				root[indices[i]].__isNamespace = true;
			}
			root = root[indices[i]];
		}
	},

	registerClass: function(type)
	{
		///<summary>Verilen sınıf tanımını prototype tabanlı yapıya dönüştürür</summary>

		type.prototype = new type;
		type.__isClass = true;
	},

	inheritClass: function(targetType, baseType, allowOverriding)
	{
		///<summary>Verilen temel sınıfın özelliklerini hedef sınıfa da transfer ederek kalıtımı sağlar</summary>
		///<param name="targetType" type="Function">Kalıtım işlemi esnasında süper sınıf</param>
		///<param name="baseType" type="Function">Temel Sınıf Tipi</param>
		///<param name="allowOverriding" type="bool">Üst sınıfın temel sınıftaki üyeleri aşırı yükleme yapıp, yapamayacağı</param>
		for (var key in baseType.prototype)
		{
			if (!targetType.prototype[key])
				targetType.prototype[key] = baseType.prototype[key];
			else
				if (!allowOverriding)
				targetType.prototype[key] = baseType.prototype[key];
		}
	},

	checkInheritance: function(objectInstance, baseType)
	{
		///<summary>İlk parametrede verilen nesnenin, ikinci parametredeki sınıfı inherit edip etmediğini kontrol eder.</summary>
		for (var key in objectInstance.prototype)
		{
			for (var bKey in baseType.prototype)
			{
				var found = false;
				if (bKey == key && typeof (baseType[bKey]) == typeof (objectInstance.prototype[key]))
				{
					found = true;
				}
			}

			if (!found)
				return false;
		}
		return true;
	}
}

