function checkLocation(newLocation, historyData)
{
	wizard.parseAnchor(newLocation);
}

var theMachineUrl = appBaseUrl;

function Wizard(){	
}

var TYPE_PICKER = 0;
var TYPE_SLIDER = 1;
var TYPE_HIDDEN = 2;

var wizard = 
{
	lastImageUrl: null,
	currentBackId: 'bgtype_0',
	currentOrientation: 'tab_orientation_0',
	
	selectBackType: function(v)
	{
		if(1 || $('bgtype').value != v)
		{
			var backId = 'bgtype_' + v;
			$(this.currentBackId).className = "";
			$(this.currentBackId = backId).className = "icon_selected";
			$('bgtype').value = v;
			$S('tab_color2_widget').display = v == 1 ? '' : 'none';
			this.notifySizeChanged();
		}
	},
	
	selectTabOrientation: function(v)
	{
		if(1 || $('tab_orientation').value != v)
		{
			var dirId = 'tab_orientation_' + v;
			$(this.currentOrientation).className = "";
			$(this.currentOrientation = dirId).className = "icon_selected";
			$('tab_orientation').value = v;
			this.notifyChanged();
		}
	},
	
	fields:
	{
		tab_height_input:
		{
			type: 1,
			ajax_param: 'h',
			defaultValue: 40
		},
		tab_width_input:
		{
			type: 1,
			ajax_param: 'w',
			defaultValue: 140
		},
		corner_radius_input:
		{
			type: 1,
			ajax_param: 'r',
			defaultValue: 20
		},
		border_size_input:
		{
			type: 1,
			ajax_param: 'b',
			defaultValue: 3
		},
		background_color_input:
		{
			type: 0,
			ajax_param: 'back',
			defaultValue: 'ffffff'
		},
		border_color_input:
		{
			type: 0,
			ajax_param: 'border',
			defaultValue: '484a4a'
		},
		tab_color1_input:
		{
			type: 0,
			ajax_param: 'fore1',
			defaultValue: 'c99090'
		},
		tab_color2_input:
		{
			type: 0,
			ajax_param: 'fore2',
			defaultValue: 'ff0000'
		},
		tab_orientation:
		{
			type: 2,
			ajax_param: 'dir',
			defaultValue: 0
		},
		bgtype:
		{
			type: 2,
			ajax_param: 'ggt',
			defaultValue: 0
		}
		
	},
	
	validate: function()
	{
		var errors = "";
		
		for(field in this.fields)
		{
			if(this.fields[field].validate && !this.fields[field].validate($(field).value))
			{
				errors += this.fields[field].err_msg + "<br/>";
			}
		}
		if(errors == "")
		{
			this.updateAnchor();
			
			this.submit();
		}
		else
		{
			alert(errors);
		}
	},
	
	submit: function()
	{
		var paramString = "";
		
		var isDefaultImage = false;
		
		for(field in this.fields)
		{
			isDefaultImage = isDefaultImage && ($(field).value == this.fields[field].defaultValue);
			paramString += this.fields[field].ajax_param + "=" + $(field).value + "&";
		}
		
		$S('preview_refresher').visibility = 'hidden';
		
		this.lastImageUrl = appBaseUrl + "generators/generate_tabs_v3.php?" + paramString;

		$S('preview_frame').border = '0';
		$S('preview_frame')[this.getBorder()] = this.getBorderStyle();
		
		$S('preview_frame').backgroundColor = '#' + $('background_color_input').value;
		//alert(this.getBackgroundPosition());
		$S('preview_frame').backgroundPosition = this.getBackgroundPosition();
		$S('preview_frame').height = (this.getHeight() + 20) + "px";
		$S('preview_frame').width = (this.getWidth() + 20) + "px";
		
		if(!isDefaultImage)
		{
			$S('preview_frame').backgroundImage = "url('" + this.lastImageUrl + "')";
		}
		else
		{
			$S('preview_frame').backgroundImage = "url('images/defaultstripe.png')";
		}
	},
	
	getHeight: function()
	{
		var dir = parseInt($('tab_orientation').value);

		switch(dir)
		{
			case 0:
			case 2:
				return parseInt($('tab_height_input').value);
			case 1:
			case 3:
				return parseInt($('tab_width_input').value);
				
		}
	},
	getBackgroundPosition: function()
	{
		var dir = parseInt($('tab_orientation').value);

		switch(dir)
		{
			case 0:
				return "bottom center";
			case 1:
				return "center left";
			case 2:
				return "top center";
			case 3:
				return "center right";
		}
	},
	
	getWidth: function()
	{
		var dir = parseInt($('tab_orientation').value);

		switch(dir)
		{
			case 0:
			case 2:
				return parseInt($('tab_width_input').value);
			case 1:
			case 3:
				return parseInt($('tab_height_input').value);
		}
	},
	
	getBorderStyle: function()
	{
		return $('border_size_input').value + "px solid #" + $('border_color_input').value;
	},
	
	getBorder: function()
	{
		var dir = parseInt($('tab_orientation').value);

		switch(dir)
		{
			case 0:
				return "borderBottom";
			case 1:
				return "borderLeft";
			case 2:
				return "borderTop";
			case 3:
				return "borderRight";
		}
	},
	
	updateAnchor: function()
	{
		var anchorString = "";
		
		for(field in this.fields)
		{
			anchorString += this.fields[field].ajax_param + "=" + $(field).value + ";";
		}
		
		dhtmlHistory.add(encode64(anchorString), "");
	},
	
	parseAnchor: function()
	{
		var sharpIndex = location.href.indexOf('#');
		
		var anchorString = null;
		
		if(sharpIndex >= 0 && sharpIndex < location.href.length - 1)
		{
			anchorString = decode64(location.href.substring(sharpIndex + 1));
		}
		
		if(anchorString != null)
		{
			var anchorParams = anchorString.split(';');
			var paramsHash = new Array();
			
			for(var i=0; i<anchorParams.length; i++)
			{
				var keyValueArray = anchorParams[i].split('=');
				paramsHash[keyValueArray[0]] = keyValueArray[1];
			}
			
			for(field in this.fields)
			{
				this.parseField(field, paramsHash[this.fields[field].ajax_param]);
			}
		}
		else
		{
			for(field in this.fields)
			{
				this.parseField(field, this.fields[field].defaultValue);
			}
		}
		this.submit();
	},
	
	parseField: function(fieldId, fieldValue)
	{
		if(fieldId != '')
		{
			$(fieldId).value = fieldValue;
			switch(this.fields[fieldId].type)
			{
				case TYPE_PICKER:
					parseColorFromInput(fieldId.substring(0, fieldId.length - 6));
					break;
				case TYPE_SLIDER:
					Slider.updateFromInput(fieldId.substring(0, fieldId.length - 6));
					break;
				case TYPE_HIDDEN:
					if(fieldId == 'tab_orientation')
					{
						this.selectTabOrientation(fieldValue);
					}
					else if(fieldId == 'bgtype')
					{
						this.selectBackType(fieldValue);
					}
					break;
			}
		}
	},
	
	notifySizeChanged: function(sliderId)
	{
		wizard.notifyChanged();
		
		if(sliderId == 'tab_width' || sliderId == 'tab_height')
			wizard.checkRadius();
	},
	
	checkRadius: function()
	{
		var maxRadius = Math.floor(Math.min(parseInt($('tab_width_input').value) / 2, parseInt($('tab_height_input').value)));
		
		Slider.sliders['corner_radius'].maxValue = maxRadius;
		
		Slider.updateFromInput('corner_radius');
	},
	
	setColor: function(pickerId, color)
	{
		$S(pickerId).background = '#' + color;
		$(pickerId + '_input').value = color;
		this.notifyChanged();
	},
	
	notifyChanged: function()
	{
		$S('preview_refresher').visibility = 'visible';
	},
	
	
	download: function()
	{
		if(this.lastImageUrl)
		{
			location.href = this.lastImageUrl + "&download=1";
		}
	}
}
