//
// Copyright (c) 2007-2008 Stardock Systems, Inc.
// Author: Andrew Powell, 10.30.07
// Version 1.01 ~ 01.03.08
//

Sd.UI = Class.create();

// Creates a copy of the original, changes properties to disable the button, inserts it before the original.
// This prevents IE from stopping the postback, and it looks perty.
Sd.UI.disableButton = function(button, abspos, hide)
{
	abspos = (abspos != null) ? abspos : true;
	hide = (hide != null) ? hide : false;
	
	var copy = $new('input');
	var type = button.type.toLowerCase();
	
	if(button.src) copy.src = button.src;
	copy.type = type;
	copy.disabled = true;
	copy.className = button.className;	
	copy.className += ' disabled';
	copy.value = button.value;

	if(!button.hide) Sd.Proto.extend(button);		
	if(type == 'button' || type == 'submit')
		button.hide();
	else
	{
		if(abspos)
		{
			copy.style.position = 'absolute';
			copy.style.left = button._bounds().x + 'px';		
			copy.style.top = button._bounds().y + 'px';
		}
		hide ? button.hide() : button.invisible();
	}
		
	button.parentNode.insertBefore(copy, button);
}

Sd.UI.itemMask = function(item, ani)
{
   var itemBounds = Sd.Common.getElementPos(item);
   var div = $new('div', '_ItemMask' + Base.UI.itemMaskIndex.toString(), 'itemmask');
   div.style.height = itemBounds.height + 'px';
   div.style.width = itemBounds.width + 'px';
   div.style.position = 'absolute';
   div.style.left = itemBounds.left + 'px';
   div.style.top = itemBounds.top + 'px';
   div.style.zIndex = Math.max(100, (item.zIndex + 1));

	 if(ani)
	 {
	    var waitani = $new('div', '', 'ajaxwait');
	    div.appendChild(waitani);
	 }
   document.body.appendChild(div);

   Base.UI.itemMaskIndex ++;
   
   return div.id;
}

Sd.UI.killMask = function(maskId)
{
   var mask = $id(maskId);
   if(!mask) return;
   document.body.removeChild(mask);
}

Sd.UI.noEnter = function(e)
{
   if(!e && window.event) e = window.event;
   if(!e) return true;
   var key = e.keyCode ? e.keyCode : e.which;
   var result = key != 13;

   if(result == false)
   {
      e.cancel = true;
      e.returnValue = false;
      if(e.preventDefault) e.preventDefault();
   }

   return result;	
}

//
// Retrieves a tinymce editor based on the partial id of the generated textarea.
// Andrew Powell 06.24.08
//
Sd.UI.getTinyEditor = function(partialId)
{
   var textarea = $id(partialId, null, 'textarea');
   if(!textarea) return;
   var editor = tinyMCE.editors[textarea.id];
   if(!editor) return;
   
   return editor;
};

//
// Determines if there is valid content within an editor.
//
//
Sd.UI.tinyValid = function(id)
{
	 var editor = Sd.UI.getTinyEditor(id);
	 if(!editor) return false;
   var content = editor.getContent();
   if(!content || content.trim() == '')	return false;
   
   return true;	
};

//
// Retrieves the selected text from a page.
// Andrew Powell 06.24.08
//
Sd.UI.getSelection = function(clear)
{
   var text;
   clear  = clear ? clear : true;
   if (document.getSelection)
   { 
      text = document.getSelection();
      if(text && !(text == '')) window.getSelection().collapseToStart();
   }
   else if (document.selection && document.selection.createRange)
   {
      var range = document.selection.createRange();
      text = range.text;
      range.collapse();
      range = null;
   }
   if(!text) text = '';
   return text;
};

Sd.UI.Tabs = Class.create();
Sd.UI.Tabs.prototype = {}

Sd.UI.Tabs.select = function(tab)
{
   var prevTab = Sd.UI.Tabs.prevTab;
   if(prevTab)
   {
      prevTab.className = prevTab.className.replace(/\sselected/, '');
      Sd.UI.Tabs.setSiblings(prevTab, false);
      
      var prevTabId = prevTab.id.replace(/_Tab/, '');
      var prevPageId = '_Page' + prevTabId;
      var prevPage = $id(prevPageId);
      prevPage.className = prevPage.className.replace(/\sselected/, '');
      
   }
   
   tab.className += ' selected';
   
   Sd.UI.Tabs.prevTab = tab;

   Sd.UI.Tabs.setSiblings(tab, true);
   
   var tabId = tab.id.replace(/_Tab/, '');
   var pageId = '_Page' + tabId;
   var page = $id(pageId);
   if(page) page.className += ' selected';            
   
}

Sd.UI.Tabs.setSiblings = function(tab, add)
{
   var nodes = Sd.UI.Tabs.getNodes(tab.parentNode);
   var nodeIndex = Sd.UI.Tabs.getNodeIndex(tab, nodes);
    
   var prev = ((nodeIndex > 0 && nodeIndex < nodes.length) ? nodes[nodeIndex - 1] : null);
   var next = ((nodeIndex >= 0 && nodeIndex < nodes.length - 1) ? nodes[nodeIndex + 1] : null);
      
   if(!prev && !next) return;
   
   var prevValid = (prev && prev.className && prev.className.indexOf('tab') == 0);
   var nextValid = (next && next.className && next.className.indexOf('tab') == 0);
    
   if(prevValid == false && nextValid == false) return;

   if(add == true)
   {
      if(prev) prev.className += ' prevt';
      if(next) next.className += ' nextt';
   }
   else
   {
      if(prev) prev.className = prev.className.replace(/\sprevt/g, '');
      if(next) next.className = next.className.replace(/\snextt/g, '');
   }
   
}        

Sd.UI.Tabs.getNodes = function(parent)
{
   var nodes = [];
   for(var i = 0; i < parent.childNodes.length; i++)
   {
      if(parent.childNodes[i].tagName && parent.childNodes[i].tagName.toLowerCase() == 'div') nodes[nodes.length] = parent.childNodes[i];
   }
   
   return nodes;
}

Sd.UI.Tabs.getNodeIndex = function(tab, nodes)
{
   for(var i = 0; i < nodes.length; i++)
   {
      if(nodes[i] == tab) return i;
   }
   
   return -1;
}      