/* This script and many more are available free online at
The JavaScript Source!! http://javascript.internet.com
Created by: Konstantin Jagello | http://javascript-array.com/ */

var setDropDown;
var setDropDownOpenCallback;
var appendRemove;

$(document).ready(function(){

var TimeOut         = 0;
var currentLayer    = null;
var currentitem     = null;
var closeTimer      = null;
var isMSIE = /*@cc_on!@*/false;
var callback;

setDropDown = function (link_name,menu_name, offsetX, offsetY) {

		//$(menu_name).hide();
		afterRemove(link_name, menu_name, offsetX, offsetY);

		$(link_name).bind("mouseover", function(){mopen(link_name, menu_name)});
		$(link_name).bind("mouseout",  function(){mclosetime()});
		$(menu_name).bind("mouseover", function(){mcancelclosetime()});
		$(menu_name).bind("mouseout",  function(){mclosetime()});
		$(menu_name).css("z-index",10000);
		$(menu_name).parents().css("z-index",9999);//IE6のバグの為、親要素にも、z-indexを指定する必要がある。本メソッドの呼び出し元もしくはcss内で指定すること。
		$(menu_name).closest("li").css("position", "absolute");
}

setDropDownOpenCallback = function (link_name,menu_name, offsetX, offsetY, _callback) {
                callback = _callback;
		setDropDown(link_name,menu_name, offsetX, offsetY);
}

function mopen(link_name, menu_name) {
        
	var l  = $(menu_name);
	var mm = $(link_name);

	if (currentLayer && currentLayer.attr('id') != l.attr('id')){
		mclose();
	}

	mcancelclosetime();
	l.css("visibility", "visible");
	l.show();
	currentLayer = l;
	currentitem = mm;

	if (isMSIE) {
		currentLayer.parents().css("z-index",10000);//IE6のバグの為、親要素にも、z-indexを指定する必要がある。本メソッドの呼び出し元もしくはcss内で指定すること。
		currentLayer.css("z-index",10000);
	}
	
	if (callback) {
	 	callback();
	}
}

function mclosetime() {
  closeTimer = window.setTimeout(mclose, TimeOut);
}

function mcancelclosetime() {
  if(closeTimer) {
    window.clearTimeout(closeTimer);
    closeTimer = null;
  }
}

function mclose() {
	if(currentLayer!=null){
		if (isMSIE) {
			currentLayer.parents().css("z-index",0);
			currentLayer.css("z-index",0);
		}
		currentLayer.hide();
	}
}

//ターゲットappendElementをappendする。appendElementはapendの後削除する。
appendRemove = function(target, appendElement, offsetX, offsetY) {
	var htmlTemp;

	if ($(appendElement).size() > 0) {
		htmlTemp = $(appendElement).get();
		$(appendElement).remove();
		$(target).append(htmlTemp);
		$(appendElement).css("position", "relative");
		$(appendElement).css("left", offsetX);
		$(appendElement).css("top", offsetY);
		$(appendElement).css("z-index",9999);
	}
}

//ターゲットprependElementをappendする。prependElementはprependの後削除する。
prependRemove = function(target, prependElement, offsetX, offsetY) {
	var htmlTemp;

	if ($(prependElement).size() > 0) {
		htmlTemp = $(prependElement).get();
		$(prependElement).remove();
		$(target).prepend(htmlTemp);
		$(prependElement).css("position", "relative");
		$(prependElement).css("left", offsetX);
		$(prependElement).css("top", offsetY);
		$(prependElement).css("z-index",9999);
	}
}

//ターゲットafterElementをafterする。afterElementはafterの後削除する。
function afterRemove(target, afterElement, offsetX, offsetY) {
	var htmlTemp;

	if ($(afterElement).size() > 0) {
		htmlTemp = $(afterElement).get();
		$(afterElement).remove();
		$(target).after(htmlTemp);
		//$(afterElement).css("position", "absolute");
		$(afterElement).css("position", "relative");
		$(afterElement).css("left", offsetX);
		$(afterElement).css("top", offsetY);
		$(afterElement).css("z-index",9999);
	}

}

});

/*
 * jquery-auto-height.js
 *
 * Copyright (c) 2010 Tomohiro Okuwaki (http://www.tinybeans.net/blog/)
 * Licensed under MIT Lisence:
 * http://www.opensource.org/licenses/mit-license.php
 * http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license
 *
 * Since:   2010-04-19
 * Update:  2010-07-02
 * version: 0.03
 * Comment:
 *
 * jQuery 1.2 later
 *
 */

 (function($){
    $.fn.autoHeight = function(options){
        var op = $.extend({
            column  : 0,
            clear   : 0,
            height  : 'minHeight',
            reset   : '',
            descend : function descend (a,b){ return b-a; }

        },options || {}); // optionsに値があれば上書きする

        var self = $(this);
        var n = 0,
            hMax,
            hList = new Array(),
            hListLine = new Array();
            hListLine[n] = 0;

        // 要素の高さを取得
        self.each(function(i){
            if (op.reset == 'reset') {
                $(this).removeAttr('style');
            }
            var h = $(this).height();
            hList[i] = h;
            if (op.column > 1) {
                // op.columnごとの最大値を格納していく
                if (h > hListLine[n]) {
                    hListLine[n] = h;
                }
                if ( (i > 0) && (((i+1) % op.column) == 0) ) {
                    n++;
                    hListLine[n] = 0;
                };
            }
        });

        // 取得した高さの数値を降順に並べ替え
        hList = hList.sort(op.descend);
        hMax = hList[0];

        // 高さの最大値を要素に適用
        var browser = $.browser.version;
        if (op.column > 1) {
            for (var j=0; j<hListLine.length; j++) {
                for (var k=0; k<op.column; k++) {
                    if (browser == '6.0') {
                        self.eq(j*op.column+k).height(hListLine[j]);
                        if (k == 0 && op.clear != 0) self.eq(j*op.column+k).css('clear','both');
                    } else {
                        self.eq(j*op.column+k).css(op.height,hListLine[j]);
                        if (k == 0 && op.clear != 0) self.eq(j*op.column+k).css('clear','both');
                    }
                }
            }
        } else {
            if (browser == '6.0') {
                self.height(hMax);
            } else {
                self.css(op.height,hMax);
            }
        }
    };
})(jQuery);
