window.openWithHashOptions = function(url, name, options) {
    if (typeof options != 'object' || options instanceof String) {
        return window.openWithoutHashOptions(url, name, options);
    }
    var opts = {
        directories: 'no',
        location:    'no',
        menubar:     'no',
        personalbar: 'no',
        resizable:   'yes',
        scrollbars:  'yes',
        status:      'no',
        toolbar:     'no'
    };
    if (options.size) {
        var m = options.size.match(/^(\d+)x(\d+)$/);
        if (m) {
            options.width  = m[1];
            options.height = m[2];
        }
        delete options.size;
    }
    for (var key in options) {
        if (options.hasOwnProperty(key)) {
            opts[key] = options[key];
        }
    }
    options = [];
    for (var key in opts) {
        if (opts.hasOwnProperty(key)) {
            options.push(key + '=' + opts[key]);
        }
    }
    return window.openWithoutHashOptions(url, name, options.join(','));
}
window.openWithoutHashOptions = window.open;
window.open = window.openWithHashOptions;


function disableSubmitOnSubmit(form) {
    Event.observe(form, 'submit', function() {
        Form.getInputs(form, 'submit').each(function(submit) {
            submit.disabled = true;
        });
    });
}


Object.extend(Form, {
    setSelectOptions: function(select, options, _options) {
        var __options = $H({ text: 'text', value: 'value', include_blank: false });
        __options.merge(_options)
        select = $(select);
        var adjustment = __options.include_blank ? 1 : 0;
        select.length = options.length + adjustment;
        for (var i = 0; i < options.length; i++) {
            select.options[i + adjustment].text  = options[i][__options.text];
            select.options[i + adjustment].value = options[i][__options.value];
        }
    },

    setSelectByValue: function(select, value) {
        select = $(select);
        for (var i = 0, l = select.options.length; i < l; i++) {
            if (select.options[i].value == value) {
                select.selectedIndex = i;
                break;
            }
        }
    }
});

Number.prototype.toJson = function() {
    return this.toString();
}


function deleteWithConfirm(url, message) {
    message = message || '本当に削除してよろしいですか？';
    if (confirm(message)) {
        var f = document.createElement('form');
        document.body.appendChild(f);
        f.method = 'POST';
        f.action = url;
        f.submit();
    };
}

function under_construction() {
    alert('ごめんなさい、現在準備中です！');
    return false;
}


// 手抜き
String.prototype.toJson = function() {
    return '"' + this.replace(/"/g, '\\"') + '"';
}

Array.prototype.toJson = function() {
    var jsons = this.map(function(i) { return i.toJson() });
    return '[' + jsons.join(',') + ']';
}

Hash.prototype.toJson = function() {
    var jsons = this.map(function(i) { return '"' + i[0].toString() + '":' + i[1].toJson() });
    return '{' + jsons.join(',') + '}';
};


function BrowserDetect() {
    var ua = navigator.userAgent;
    if (ua.indexOf('KHTML') > -1)                  this.isKHTML   = true;
    if (ua.indexOf('Macintosh') > -1)              this.isMac     = true;
    if (ua.indexOf('Windows') > -1)                this.isWindows = true;
    if (ua.indexOf('Gecko') > -1 && !this.isKHTML) this.isGecko   = true;
    if (ua.indexOf('Firefox') > -1)                this.isFirefox = true;
    if (window.opera) {
        this.isOpera = true;
    } else if (ua.indexOf('MSIE') > -1) {
        this.isIE = true;
        if (typeof document.documentElement.style.msInterpolationMode != 'undefined') {
            this.isIE7 = true;
        } else {
            this.isIE6 = true;
        }
    }
}


function show_categories(genre_id) {
	$('category_base_' + genre_id).style.display = 'inline';
	hide_categories(genre_id);
	hide_region_categories(null);
}

function hide_categories(except_genre_id) {
	var cate = $('cate');
	var cate_children = $A(cate.childNodes);
	cate_children.each(function(child){
		if(child.className == 'category_base' && child.id != 'category_base_' + except_genre_id){
			child.style.display = 'none';
		}
	});
}

function show_region_categories(genre_id) {
	$('region_category_base_' + genre_id).style.display = 'inline';
	hide_region_categories(genre_id);
	hide_categories(null);
}

function hide_region_categories(except_genre_id) {
	var cate = $('region_cate');
	var cate_children = $A(cate.childNodes);
	cate_children.each(function(child){
		if(child.className == 'category_base' && child.id != 'region_category_base_' + except_genre_id){
			child.style.display = 'none';
		}
	});
}

function set_child_regions(m_region_genre_id, level, region_max_level){
	var url = '/config/region';
	var element_id = 'm_region_genre_id_' + (level+1);
	new Ajax.Request(url, 
	{
		method: 'get', 
		parameters: 'm_region_genre_id=' + m_region_genre_id,
		asynchronous: false,
		onSuccess: function(http_obj){
			var regions = eval('(' + http_obj.responseText + ')');
			set_region_options(element_id, regions);
			
			if(level < region_max_level){
				set_child_regions($(element_id).value, level+1, region_max_level);
			}
		},
		onFailure: function(http_obj){
		}
	});
}

function set_child_regions_by_url(m_region_genre_id, level, region_max_level, url){
	var element_id = 'm_region_genre_id_' + (level+1);
	new Ajax.Request(url, 
	{
		method: 'get', 
		parameters: 'm_region_genre_id=' + m_region_genre_id,
		asynchronous: false,
		onSuccess: function(http_obj){
			var regions = eval('(' + http_obj.responseText + ')');
			set_region_options(element_id, regions);
			
			if(level < region_max_level){
				set_child_regions_by_url($(element_id).value, level+1, region_max_level, url);
			}
		},
		onFailure: function(http_obj){
		}
	});
}

function set_region_options(element_id, region_options){
	var target_element = $(element_id);
	var target_options = target_element.options;
	target_options.length = region_options.length;
	for(i = 0; i < target_options.length; i++){
		target_options[i].value = region_options[i]['id'];
		target_options[i].text = region_options[i]['genre_name'];
	}
}

function set_region(element_id, target_id, display_id, url)
{
    var t_map_shounin_id = $(element_id).value;
    new Ajax.Request(url,
    {
        method: 'get',
        parameters: 't_map_shounin_id=' + t_map_shounin_id,
        asynchronous: false,
        onSuccess: function(http_obj) {
            var region = eval('(' + http_obj.responseText + ')');
            $(target_id).value = region.ex_m_region_genre ? region.ex_m_region_genre : '';
            $(display_id).innerHTML = region.ex_m_region_genre_name ? region.ex_m_region_genre_name : '';
        },
        onFailure: function(http_obj) {
        }
    });
}

function set_child_categorys(m_shop_category_id, level, max_level, category_ids){
    var url = '/shop_item_category/json_for_options';
    var element_id = 'm_shop_category_id_' + (level+1);
    new Ajax.Request(url, 
    {
        method: 'get', 
        parameters: 'm_shop_category_id=' + m_shop_category_id,
        asynchronous: true,
        onSuccess: function(http_obj){
            var categorys = eval('(' + http_obj.responseText + ')');
            set_category_options(element_id, categorys, !category_ids ? null : category_ids[level+1]);
            if(level < max_level){
                set_child_categorys($(element_id).value, level+1, max_level, category_ids);
            }
        },
        onFailure: function(http_obj){
        }
    });
}

function set_child_categorys_member(m_member_shop_category_id, level, max_level, category_ids){
    var url = '/shop_item_category/json_for_options';
    var element_id = 'm_member_shop_category_id_' + (level+1);
    new Ajax.Request(url, 
    {
        method: 'get', 
        parameters: 'm_member_shop_category_id=' + m_member_shop_category_id,
        asynchronous: false,
        onSuccess: function(http_obj){
            var categorys = eval('(' + http_obj.responseText + ')');
            set_category_options(element_id, categorys, !category_ids ? null : category_ids[level+1]);
            if(level < max_level){
                set_child_categorys_member($(element_id).value, level+1, max_level, category_ids);
            }
        },
        onFailure: function(http_obj){
        }
    });
}

function set_market_child_categorys(m_market_item_category_id, level, max_level, category_ids){
    var url = '/market_item_category/json_for_options';
    var element_id = 'm_market_item_category_id_' + (level+1);
    new Ajax.Request(url, 
    {
        method: 'get', 
        parameters: 'm_market_item_category_id=' + m_market_item_category_id,
        asynchronous: true,
        onSuccess: function(http_obj){
            var categorys = eval('(' + http_obj.responseText + ')');
            set_category_options(element_id, categorys, !category_ids ? null : category_ids[level+1]);
            if(level < max_level){
                set_market_child_categorys($(element_id).value, level+1, max_level, category_ids);
            }
        },
        onFailure: function(http_obj){
        }
    });
}

function set_category_options(element_id, category_options, selected_id){
    var target_element = $(element_id);
    var target_options = target_element.options;
    target_options.length = category_options.length;
    for(i = 0; i < target_options.length; i++){
        target_options[i].value = category_options[i]['id'];
        target_options[i].text = category_options[i]['category_name'];
    }
    if (selected_id) {
		$(element_id).value = selected_id;
	}
}

Element.Methods.readAttribute = function(element, name) {
	element = $(element);
	if (document.all && !window.opera) {
	  var t = Element._attributeTranslations;
	  if (t.values[name]) return t.values[name](element, name);
	  if (t.names[name])  name = t.names[name];
      try {
		  var attribute = element.attributes[name];
		  if(attribute) return attribute.nodeValue;
	  } catch(e) {
      }
	}
	return element.getAttribute(name);
}

function get_youtube_info(tag) {
  var regex = /^<object[ ]+width="([\d]+)"[ ]+height="([\d]+)"><param[ ]+name="movie"[ ]+value="([^"]+)"><\/param>.+<\/object>$/i;

  tag = tag.replace(/^[ ]+|[ ]+$/g, '');
  var m = m = tag.match(regex);
  if (m && m.length == 4) {
    var width = m[1];
    var height = m[2];
    var url = m[3];

    if (!/^http:\/\/www.youtube(?:-nocookie)?\.com\//.test(url)) {
      return false;
    }

    return [width, height, url];
  }
  return false;
}
