// Based on Chained Selects for jQuery
// Copyright (C) 2008 Ziadin Givan www.CodeAssembly.com

jQuery.fn.chainSelect = function(target, url, settings)
{
	return this.each(function()
	{
		var mySelection = jQuery(this).val();

		jQuery(this).change(function() 
		{
			settings = jQuery.extend(
			{
				app: 'Izen',
				before: null,
				error: null,
				load: null,
				after: null,
				usePost: false,
				defaultValue: null,
				valueField: '_value',
				emptyContainer: false,
				parameters: { '_id': jQuery(this).attr('id'), '_name': jQuery(this).attr('name') }
			}, settings);
			var curSelection = jQuery(this).val();
			eval('settings.parameters.'+settings.valueField+' = curSelection');

			if (settings.before != null) 
				settings.before(target);

			ajaxCallback = function(data, textStatus) 
			{
				var curTargetSelection = jQuery(target).val();
				if (settings.emptyContainer === true)
				{
					var json = {element_type: 'select', name: jQuery(target).attr('name'), id: jQuery(target).attr('id'), title: jQuery(target).attr('title') };
					var container = jQuery(target).parent().attr('id');
					jQuery('#'+container).html('');
					jQuery('#'+container).gform_elements({targetDiv: '#'+container, newSubDiv: false});
					jQuery('#'+container).gform_elements.show_element(json);
				}
				else jQuery(target).html('');

				var dataError = false;
        //                        console.log('data: ',data);console.log('app: ', settings.app,' length: ',settings.app.length);console.log('appmatch: ',data.substr(0, settings.app.length));
				if (data != '' && data != 'FAILED' && data.substr(0, settings.app.length) == settings.app)
				{
					json = eval('('+data.substr(settings.app.length)+')');
				//	console.log(json);
					if (typeof(json.options) != 'undefined')
					{
						jQuery(target).attr('disabled', '');
						jQuery(target).css('display', 'block');
						var data = json.options;
						if (data != null)
						{
							for (i = 0; i < data.length; i++)
							{
								for (key in data[i])
									jQuery(target).get(0).add(new Option(data[i][key],[key]), document.all ? i : null);
							}

							if (curTargetSelection != '')
								jQuery(target).val(curTargetSelection);
							else if (settings.defaultValue != null)
								jQuery(target).val(settings.defaultValue);
							//else jQuery("option:first", target).attr("selected", "selected");
						}
						if (settings.load != null) 
						{
							settings.load(target, json);
						}
					}
					else dataError = true;
				}
				else dataError = true;

				if (dataError == true)
				{
					if (settings.error != null) 
						settings.error(target, curTargetSelection, ((typeof(json) != 'undefined') ? json : null));
					else
					{
						jQuery(target).attr('disabled', 'disabled');
						jQuery(target).css('display', 'none');
					}
				}
				else if (settings.after != null) 
				{
					settings.after(target);
				}

				if (curTargetSelection != jQuery(target).val())
					jQuery(target).change();
			};

			if (settings.usePost == true)
				jQuery.post(url, settings.parameters, ajaxCallback);
			else jQuery.get(url, settings.parameters, ajaxCallback);
		});

		var myVal = jQuery(this).val();
		if (mySelection != jQuery(this).val())
			jQuery(this).change();
		else if (this.options.length == 0)
		{
			jQuery(this).attr('disabled', 'disabled');
			jQuery(this).css('display', 'none');
		}
	});
};

/*
 * form_elements.js
 *
 * Copyright (c) 2008 by gAdAsT Corporation <gadast@gadast.net>
 *
 */
(function($){
	var targetDiv = null;
	var newSubDiv = true;
	var max_elements = null;
	var element_count = 0;

	$.fn.gform_elements = function(options)
	{
		var opts = $.extend({}, $.fn.gform_elements.defaults, options);
		targetDiv = opts.targetDiv;
		newSubDiv = opts.newSubDiv;
		max_elements = opts.max_elements;
		element_count = 0;
	};

	$.fn.gform_elements.get_count = function()
	{
		return element_count;
	};

	$.fn.gform_elements.increase_count = function()
	{
		element_count++;
	};

	$.fn.gform_elements.get_element = function(json)
	{
		var html = '';
		switch (json.element_type)
		{
			case 'textbox':
				if (json.name == undefined) break;
				if (json.label != undefined)
					html += '<label>'+json.label+'</label>';
				html += '<input type="text" name="'+json.name+'"';
				if (json.defaultval != undefined)
					html += ' value="'+json.defaultval+'"';
				if (json.size != undefined)
					html += ' size="'+json.size+'"';
				if (json.maxlength != undefined)
					html += ' maxlength="'+json.maxlength+'"';
				if (json.id != undefined)
					html += ' id="'+json.id+'"';
				if (json.iclass != undefined)
					html += ' class="'+json.iclass+'"';
				if (json.title != undefined)
					html += ' title="'+json.title+'"';
				html += ' />';
				break;
			case 'filebox':
				if (json.name == undefined) break;
				if (json.label != undefined)
					html += '<label>'+json.label+'</label>';
				html += '<input type="file" name="'+json.name+'"';
				if (json.size != undefined)
					html += ' size="'+json.size+'"';
				if (json.id != undefined)
					html += ' id="'+json.id+'"';
				if (json.iclass != undefined)
					html += ' class="'+json.iclass+'"';
				if (json.title != undefined)
					html += ' title="'+json.title+'"';
				html += ' />';
				break;
			case 'checkbox':
				if (json.name == undefined) break;
				html += '<input type="checkbox" name="'+json.name+'"';
				if (json.defaultval != undefined)
				{
					html += ' value="'+json.defaultval+'"';
					if (json.selectedval != undefined && json.defaultval == json.selectedval)
						html += ' checked="checked"';
				}
				html += ' />';
				if (json.label != undefined)
					html += '<label>'+json.label+'</label>';
				break;
			case 'radio':
				if (json.name == undefined) break;
				html += '<input type="radio" name="'+json.name+'"';
				if (json.defaultval != undefined)
				{
					html += ' value="'+json.defaultval+'"';
					if (json.selectedval != undefined && json.defaultval == json.selectedval)
						html += ' checked="checked"';
				}
				html += ' />';
				if (json.label != undefined)
					html += '<label>'+json.label+'</label>';
				break;
			case 'hidden':
				if (json.name == undefined) break;
				html += '<input type="hidden" name="'+json.name+'"';
				if (json.defaultval != undefined)
					html += ' value="'+json.defaultval+'"';
				html += ' />';
				break;
			case 'textarea':
				if (json.name == undefined) break;
				if (json.label != undefined)
					html += '<label>'+json.label+'</label>';
				html += '<textarea name="'+json.name+'"';
				if (json.id != undefined)
					html += ' id="'+json.id+'"';
				if (json.iclass != undefined)
					html += ' class="'+json.iclass+'"';
				if (json.cols != undefined)
					html += ' cols="'+json.cols+'"';
				if (json.rows != undefined)
					html += ' rows="'+json.rows+'"';
				html += '>';
				if (json.defaultval != undefined)
					html += json.defaultval;
				html += '</textarea>';
				break;
			case 'select':
				if (json.name == undefined) break;
				if (json.label != undefined)
					html += '<label>'+json.label+'</label>';
				html += '<select name="'+json.name+'"';
				if (json.size != undefined)
					html += ' size="'+json.size+'"';
				if (json.id != undefined)
					html += ' id="'+json.id+'"';
				if (json.iclass != undefined)
					html += ' class="'+json.iclass+'"';
				if (json.title != undefined)
					html += ' title="'+json.title+'"';
				html += '></select>';
				break;
			default:
				break;
		}
		return html;
	};

	$.fn.gform_elements.show_element = function(json)
	{
		if (max_elements > 0 && element_count >= max_elements)
			return false;

		var html = jQuery.fn.gform_elements.get_element(json);
		if (html != '')
			return jQuery.fn.gform_elements.show_html(html);
		return false;
	};

	$.fn.gform_elements.show_html = function(html)
	{
		if (max_elements > 0 && element_count >= max_elements)
			return false;

		if (newSubDiv == true) html = '<div>'+html+'</div>';
		$(targetDiv).append(html+"\n");
		jQuery.fn.gform_elements.increase_count();
		return true;
	};

	$.fn.gform_elements.defaults = {
		targetDiv: '#targetDiv',
		newSubDiv: true,
		max_elements: 0
	};
})(jQuery);
