﻿Type.registerNamespace("Telerik.Web.UI");

Telerik.Web.UI.RadPageViewCollection = function (owner)
{
	this._owner = owner;
	this._data = [];
}

Telerik.Web.UI.RadPageViewCollection.prototype = {
	get_count : function ()
	{
		return this._data.length;
	},
	_add : function (pageView)
	{
		this._insert(this.get_count(), pageView);
	},
	
	_insert : function (index, pageView)
	{
		Array.insert(this._data, index, pageView);
		pageView._multiPage = this._owner;
	},
	
	insert : function (index, pageView)
	{
		this._insert(index, pageView);
		this._owner._onPageViewInserted(index, pageView);
	},
	
	add : function (pageView)
	{
		this.insert(this.get_count(), pageView);
	},
	
	getPageView : function (index)
	{
		return this._data[index] || null;
	},
	
	removeAt : function (index)
	{
		var pageView = this.getPageView(index);
		if (pageView)
			this.remove(pageView);
	},
	
	remove : function (pageView)
	{
		this._owner._onPageViewRemoving(pageView);
		pageView.unselect();
		Array.remove(this._data, pageView);
		this._owner._onPageViewRemoved(pageView);
	}
}

Telerik.Web.UI.RadPageViewCollection.registerClass('Telerik.Web.UI.RadPageViewCollection');

Telerik.Web.UI.RadPageView = function (element)
{
	this._element = element;
}
Telerik.Web.UI.RadPageView.prototype = {
	
	/*Priave*/
	
	_select : function (suppressVisualUpdate)
	{
		var multiPage = this.get_multiPage();
		if (!multiPage)
		{
			this._cachedSelected = true;
			return;
		}
		
		multiPage._selectPageViewByIndex(this.get_index(), suppressVisualUpdate);
	},
	
	hide : function ()
	{
		if (this.get_element())
			this.get_element().style.display = "none";
	},
	
	show : function ()
	{
		if (!this.get_element()) return;
		
		this.get_element().style.display = "block";
		
		if (this._repaintCalled) return;
		
		$telerik.repaintChildren(this);
		
		this._repaintCalled = true;
	},
	
	/*Public API*/
	get_element : function ()
	{
		return this._element;
	},
	
	get_index : function ()
	{
		return Array.indexOf(this.get_multiPage().get_pageViews()._data, this);
	},
	
	get_id : function ()
	{
		return this._id;
	},
	
	set_id : function (value)
	{
		this._id = value;
		if (this.get_element())
			this.get_element().id = value;
	},
	
	get_multiPage : function ()
	{
		return this._multiPage || null;
	},
	
	get_selected : function ()
	{
		return this.get_multiPage().get_selectedPageView() == this;
	},
	
	set_selected : function (value)
	{
		if (value)
			this.select();
		else
			this.unselect();
	},
	
	select : function ()
	{
		this._select();
	},
	
	unselect : function ()
	{
		if (this.get_selected())
			this.get_multiPage().set_selectedIndex(-1);
	}
}

Telerik.Web.UI.RadPageView.registerClass('Telerik.Web.UI.RadPageView');

Telerik.Web.UI.RadMultiPage = function (element)
{
	Telerik.Web.UI.RadMultiPage.initializeBase(this, [element]);
	
	this._pageViews = new Telerik.Web.UI.RadPageViewCollection(this);
	this._selectedIndex = -1;
	this._pageViewData = null;
	this._changeLog = [];
}

Telerik.Web.UI.RadMultiPage.prototype = {
	/*Private*/
	_logInsert : function (pageView)
	{
		if (!this._trackingChanges) return;
		Array.add(this._changeLog, { type:1, index:pageView.get_index() });
	},
	
	_logRemove : function (pageView)
	{
		if (!this._trackingChanges) return;
		Array.add(this._changeLog, { type:2, index:pageView.get_index() });
	},
	
	_onPageViewRemoving : function (pageView)
	{
		this._logRemove(pageView);
	},
	
	_onPageViewInserted : function (index, pageView)
	{
		var element = pageView.get_element();
		if (!element)
			element = pageView._element = document.createElement("div");
		
		element.style.display = "none";
		
		if (pageView.get_id())
			element.id = pageView.get_id();
		
		var nextPageView = this.get_pageViews().getPageView(index + 1);
		
		if (nextPageView)
			this.get_element().insertBefore(element, nextPageView.get_element());
		else
			this.get_element().appendChild(element);
			
		if (pageView._cachedSelected)
		{
			pageView._cachedSelected = false;
			pageView.select();
		}
		
		this._logInsert(pageView);
	},
		
	_onPageViewRemoved : function (pageView)
	{
		if (pageView.get_element())
			this.get_element().removeChild(pageView.get_element());
	},
	
	_selectPageViewByIndex : function (index, suppressVisualUpdate)
	{
		if (this._selectedIndex == index) return;
		
		if (!this.get_isInitialized())
		{
			this._selectedIndex = index;
			return;
		}
		
		if (index < -1 || index >= this.get_pageViews().get_count()) return;
		
		var previousPageView = this.get_selectedPageView();
		this._selectedIndex = index;
		var currentPageView = this.get_selectedPageView();
		
		if (!suppressVisualUpdate)
		{
			if (previousPageView)
				previousPageView.hide();
			if (currentPageView)
				currentPageView.show();
		}
		
		this.updateClientState();	
	},
	
	/*Public API*/
	trackChanges : function ()
	{
		this._trackingChanges = true;
	},
	
	commitChanges : function ()
	{
		this.updateClientState();
		this._trackingChanges = false;
	},
	
	get_pageViewData : function ()
	{
		return this._pageViewData;
	},
	
	set_pageViewData : function (value)
	{
		this._pageViewData = value;
	},
	
	initialize : function ()
	{
		Telerik.Web.UI.RadMultiPage.callBaseMethod(this, "initialize");
		var pageViewData = this.get_pageViewData();
		
		for (var i = 0; i < pageViewData.length; i++)
		{
			var pageView = new Telerik.Web.UI.RadPageView($get(pageViewData[i].id));
			pageView._id = pageViewData[i].id;
			this._pageViews._add(pageView);
		}
	},
	
	findPageViewByID : function (id)
	{
		for (var i = 0; i < this.get_pageViews().get_count(); i++)
		{
			var pageView = this.get_pageViews().getPageView(i);
			if (pageView.get_id() == id)
				return pageView;
		}
		
		return null;
	},
	
	get_pageViews : function ()
	{
		return this._pageViews;
	},
	get_selectedIndex : function ()
	{
		return this._selectedIndex;
	},
	
	set_selectedIndex : function (value)
	{
		this._selectPageViewByIndex(value);
	},
	
	get_selectedPageView : function ()
	{
		return this.get_pageViews().getPageView(this.get_selectedIndex());
	},
	
	saveClientState : function ()
	{
		var clientState = {};
		clientState.selectedIndex = this.get_selectedIndex();
		clientState.changeLog = this._changeLog;
		return Sys.Serialization.JavaScriptSerializer.serialize(clientState);
	}
}

Telerik.Web.UI.RadMultiPage.registerClass('Telerik.Web.UI.RadMultiPage', Telerik.Web.UI.RadWebControl);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();