﻿/**
 * Массив в котором хранятся параметры задизейбленых кнопок
 * [0] - className
 * [1] - href
 * [2] - onclick
 **/
var CtrlButtonsBackups = new Array();

/**
 * ButtonsHelper Examples
 *
 * Disable button:
 * ----------------------------------------------------
 * ButtonsHelper.setButtonState('MyButtonID',false);
 * ButtonsHelper.disableButton('MyButtonID');
 *
 * Enable button:
 * ----------------------------------------------------
 * ButtonsHelper.setButtonState('MyButtonID',true);
 * ButtonsHelper.enableButton('MyButtonID');
 *
 * Show shine:
 * ----------------------------------------------------
 * ButtonsHelper.toggleShine('MyButtonID',true);
 * ButtonsHelper.showShine('MyButtonID');
 *
 * Hide shine:
 * ----------------------------------------------------
 * ButtonsHelper.toggleShine('MyButtonID',false);
 * ButtonsHelper.hideShine('MyButtonID');
 *
 **/
var ButtonsHelper = {
	/**
	 * Изменяет текст кнопки
	 *
	 * @param string button id
	 * return bool
	 **/
	changeButtonText : function(button_id, new_text)
	{
		if(this.isButton(button_id)==false) return false;
		
		var isTextButton = this.isTextButton(button_id);
		
		if(isTextButton) {
			document.getElementById(button_id).innerHTML = new_text;
		}
		else {
			document.getElementById(button_id).getElementsByTagName('SPAN').item(0).getElementsByTagName('SPAN').item(0).getElementsByTagName('SPAN').item(0).innerHTML = new_text;
		}
		return true;
	},
	
	/**
	 * Проверяет является ли контрол кнопкой
	 *
	 * @param string button id
	 * return bool
	 **/
	isButton : function(button_id)
	{
		var button = document.getElementById(button_id);
		if(button==null) return false;
		
		//если контрол содержит один из наших класов - то это кнопка
		res = button.className.match('(.*?)Button_(Big|Middle|Little)_(Red|Blue|Gray|None)');
		if(res==null) return false;
		return true;
	},
	
	/**
	 * Проверяет является ли контрол текстовой кнопкой
	 *
	 * @param string button id
	 * return bool
	 **/
	isTextButton : function(button_id)
	{
		var button = document.getElementById(button_id);
		if(button==null) return false;		
		if(this.isButton(button_id)==false) return false;
		res = button.className.match('(.*?)Button_(Big|Middle|Little)_(Red|Blue|Gray|None)');
		//у текстовой кнопки параметр ButtonColor по дефолту задан в None
		if(res[3]=='None') return true;
		return false;	
	},
	
	/**
	 * Вкл\Вык солнышко
	 *
	 * @param string button id
	 * @param bool show shine
	 * return bool
	 **/
	toggleShine : function(button_id,showShine)
	{
		if(showShine) return this.showShine(button_id);
		else return this.hideShine(button_id);
	},
	
	/**
	 * Прячет кнопку и показывает солнышко
	 *
	 * @param string button id
	 * return bool
	 **/
	showShine : function(button_id)
	{
		if(this.isButton(button_id)==false) return false;		
		if(this.isTextButton(button_id)==true) return false;
		if(document.getElementById(button_id+'_Shine')!=null) return false;
		
		var button = document.getElementById(button_id);

		var buttonWidth = button.clientWidth;
		
		res = button.className.match('(.*?)Button_(Big|Middle|Little)_(Red|Blue|Gray|None)');
		
		var buttonPreClass = res[1]+'';
		var buttonType = res[2]+'';
		var buttonColor = res[3]+'';
		
		//Создаем солнышко
		var shine = document.createElement('SPAN');
		shine.id = button.id+'_Shine';
		shine.className = 'Shine_'+buttonType;
		shine.style.width = buttonWidth+'px';
		
		var shine_inner = document.createElement('SPAN');
		shine_inner.className = 'Shine_'+buttonType+'_Inner';
		shine_inner.style.width = buttonWidth+'px';
		
		var shine_inner_inner = document.createElement('SPAN');
		shine_inner_inner.className = 'Shine_'+buttonType+'_Inner';
		shine_inner_inner.style.width = buttonWidth+'px';
		
		var shine_inner_img = document.createElement('SPAN');
		shine_inner_img.className = 'Shine_'+buttonType+'_Inner_Img';
		shine_inner_img.innerHTML = '&nbsp;';
		shine_inner_img.style.width = buttonWidth+'px';
				
		shine_inner_inner.appendChild(shine_inner_img);
		shine_inner.appendChild(shine_inner_inner);		
		shine.appendChild(shine_inner);
		
		//Вставляем его перед кнопкой		
		button.parentNode.insertBefore(shine,button.nextSibling);
					
		button.style.display = 'none';
		
		return true;
	},
	
	/**
	 * Прячет солнышко и показывает кнопку
	 *
	 * @param string button id
	 * return bool
	 **/
	hideShine : function (button_id)
	{
		if(this.isButton(button_id)==false) return false;		
		if(this.isTextButton(button_id)==true) return false;
		
		var shine = document.getElementById(button_id+'_Shine');
		if(shine==null) return false;
		
		var button = document.getElementById(button_id);
		
		button.parentNode.removeChild(shine);
		button.style.display = '';
		
		return true;	
	},
	
	/**
	 * Вкл\Вык кнопку
	 *
	 * @param string button id
	 * @param bool enable button
	 * return bool
	 **/
	setButtonState : function (button_id,enable)
	{
		if(enable) this.enableButton(button_id);
		else this.disableButton(button_id);
	},
	
	/**
	 * Активирует кнопку
	 *
	 * @param string button id
	 * return bool
	 **/	
	enableButton : function(button_id)
	{
		if(!CtrlButtonsBackups[button_id]) return false;
		if(this.isButton(button_id)==false) return false;
		
		var isTextButton = this.isTextButton(button_id);
		
		var button = document.getElementById(button_id);

		//Востанавливаем параметры кнопки
		button.setAttribute('href',CtrlButtonsBackups[button_id][1]);
		button.onclick = CtrlButtonsBackups[button_id][2];
		
		if(isTextButton==false)		
		{
			//Востанавливаем цвет кнопки
			var left_span  = button.getElementsByTagName('SPAN').item(0);
			var right_span = left_span.getElementsByTagName('SPAN').item(0);
			var inner_span = right_span.getElementsByTagName('SPAN').item(0);
						
			button.className     = CtrlButtonsBackups[button_id][0];
			left_span.className  = CtrlButtonsBackups[button_id][0]+'_Left';
			right_span.className = CtrlButtonsBackups[button_id][0]+'_Right';
			inner_span.className = CtrlButtonsBackups[button_id][0]+'_Inner';
		}
		else
		{
			button.style.color = '';
		}
		button.style.cursor = '';
		delete CtrlButtonsBackups[button_id];
		return true;
	},
	
	/**
	 * Дизейблит кнопку
	 *
	 * @param string button id
	 * return bool
	 **/
	disableButton : function(button_id)
	{
		if(this.isButton(button_id)==false) return false;
		
		var isTextButton = this.isTextButton(button_id);
		
		var button = document.getElementById(button_id);
		
		res = button.className.match('(.*?)Button_(Big|Middle|Little)_(Red|Blue|Gray|None)');
		
		var buttonPreClass = res[1]+'';
		var buttonType = res[2]+'';
		var buttonColor = res[3]+'';
		
		//Сохраняем параметры кнопки
		CtrlButtonsBackups[button_id] = new Array(button.className, button.href, button.onclick);
		
		if(isTextButton==false)		
		{
			//Меняем цвет кнопки на серый
			var left_span  = button.getElementsByTagName('SPAN').item(0);
			var right_span = left_span.getElementsByTagName('SPAN').item(0);
			var inner_span = right_span.getElementsByTagName('SPAN').item(0);
						
			button.className     = buttonPreClass+'Button_'+buttonType+'_Gray';
			left_span.className  = buttonPreClass+'Button_'+buttonType+'_Gray_Left';
			right_span.className = buttonPreClass+'Button_'+buttonType+'_Gray_Right';
			inner_span.className = buttonPreClass+'Button_'+buttonType+'_Gray_Inner';
		}
		else
		{
			button.style.color = '#999';
		}
		button.style.cursor = 'default';
		
		//Убираем у кнопки параметры чтобы сделать ее не кликовой
		button.href = null;
		button.removeAttribute('href');
		button.onclick = null;
		button.removeAttribute('onclick');
			
		return true;
	}
}
