/*** ***
License
This software is published under the BSD license as listed below.
 
Copyright (c) 2007 pennycms.com

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met:

 . Redistributions of source code must retain the above copyright notice, 
   this list of conditions and the following disclaimer. 

 . Redistributions in binary form must reproduce the above copyright notice, 
   this list of conditions and the following disclaimer in the documentation 
   and/or other materials provided with the distribution. 

 . Neither the name of the pennycms.com nor the names of its contributors 
   may be used to endorse or promote products derived from this software without 
   specific prior written permission. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*** ***/

function $() {
	return "string"==typeof arguments[0]?document.getElementById(arguments[0]):arguments[0];
}

function $$() {
	$node = arguments[1]||document;
	return $node.getElementsByTagName(arguments[0]);
}

String.prototype.lengths = function() {
	return this.replace('/[^\x00-\xff]/ig',"**").length; 
}

function StringBuffer () {
	this.__strings__ = new Array;
}

StringBuffer.prototype.append = function () {
	this.__strings__.push(arguments[0]);
}

StringBuffer.prototype.toString = function () {
	return this.__strings__.join("");
}

/***
Pennyutils Object.
***/
var Pennyutils = new Object;

Pennyutils.generateDate = function ($obj) {
	var $dateText = $obj.value;
	
	if ($dateText.length==8) {	// String length 8 character.
		if ($dateText.indexOf("-") < 1) {	// String text have "-"
			$obj.value = $dateText.substr(0, 4)+"-"+$dateText.substr(4, 2)+"-"+$dateText.substr(6, 2)
		}
	}
}

Pennyutils.isDate = function ($obj) {
	if ($obj==null) {
		return;
	}
	var $value = $obj.value;
	if (($value == null)||($value.length == 0)||($value == "0000-00-00")) {
		return false;
	}
	var r = $value.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
	if(r==null) {
		obj.select();
		obj.focus();
		return false;
	}
	var d = new Date(r[1], r[3]-1, r[4]);
	
	if (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]) {
		return true;
	} else {
		obj.select();
		obj.focus();
		return false;
	}
}


Pennyutils.getFitSize = function () {
	$img=arguments[0];
	$set_width=arguments[1]>0?arguments[1]:1;
	$set_height=arguments[2]>0?arguments[2]:1;
	$model=arguments[3];
	
	$width_rate = $set_width / $img.width;
	$height_rate = $set_height / $img.height;
	
	if ($model==1) {
		$rate = $width_rate > $height_rate ? $width_rate : $height_rate; // get max rate.
	} else if ($model==2) {
		$rate = $width_rate;
	} else if ($model==3) {
		$rate = $height_rate;
	} else {
		$rate = $width_rate < $height_rate ? $width_rate : $height_rate; // get min rate.
	}
	
	$re_width = $img.width * $rate;
	$re_height = $img.height * $rate;
	
	var $size = new Object();
	
	$size.width = $re_width;
	$size.height = $re_height;
	
	return $size;
}

Pennyutils.resizeImage = function () {
	$img=arguments[0];
	$set_width=arguments[1]>0?arguments[1]:1;
	$set_height=arguments[2]>0?arguments[2]:1;
	$model=arguments[3];
//	alert($img.src);
	var $size = Pennyutils.getFitSize($img, $set_width, $set_height, $model);
	
	$img.width = $size.width==0?$set_width:$size.width;
	$img.height = $size.height==0?$set_height:$size.height;
	
	return $size;
}

Pennyutils.setCssStyle = function ($item, $style_script) {
	if (!$item) return;
	$item.setAttribute("style", $style_script);
	$item.style.cssText = $style_script;
}

Pennyutils.setClassName = function ($item, $class_name) {
	if (!$item) return;
	if(document.uniqueID) {		// IE.
		$item.setAttribute("className", $class_name);
	} else {
		$item.setAttribute("class", $class_name);
	}
}

Pennyutils.getClassName = function ($item) {
	if (!$item) return;
	if(document.uniqueID) {		// IE.
		return $item.getAttribute("className");
	} else {
		return $item.getAttribute("class");
	}
}

Pennyutils.setIdName = function ($item, $id_name) {
	if (!$item) return;
	if(document.uniqueID) {		// IE.
		$item.id = $id_name;
	} else {
		$item.setAttribute("id", $id_name);
	}
}

Pennyutils.getIdName = function ($item) {
	if (!$item) return;
	if(document.uniqueID) {		// IE.
		return $item.id;
	} else {
		return $item.getAttribute("id");
	}
}

Pennyutils.noDocSelect = function () {
	if(document.uniqueID) {		// IE.
		return false;
	} else  {
		$("body").style["-moz-user-select"]="none";
	}
}

Pennyutils.showHideSelectObject = function ($input_obj, $select_obj, $parent_obj) {
//	alert($input_obj+":"+$select_obj);
	$input_obj = "string"==typeof $input_obj?document.getElementById($input_obj):$input_obj;
	$select_obj = "string"==typeof $select_obj?document.getElementById($select_obj):$select_obj;
	if (!$input_obj||!$select_obj) return;
	
	var $cssText = $select_obj.style.cssText.toLowerCase();
	if ($cssText.indexOf("display:none;")>=0||$cssText.indexOf("display: none;")>=0) {
//		Pennyutils.replaceCSSText($obj, "display", "display:inline");
//		$select_obj.style.visibility="visible";
//		$input_obj.offsetHeight;
//		$input_obj.offsetWidth;
		var $temp_element;
		var $select_pos_x = 0;
		var $select_pos_y = 0;
		$temp_element = $input_obj;
		while ($temp_element!=null) {
			$select_pos_x += $temp_element.offsetLeft;
			$select_pos_y += $temp_element.offsetTop;
//			alert($temp_element.id+"\n"+$select_pos_x+","+$temp_element.offsetLeft+";"+$select_pos_y+","+$temp_element.offsetTop);
			$temp_element = $temp_element.offsetParent;
		}
		
		var $parent_pos_x = 0;
		var $parent_pos_y = 0;
		$parent_obj = "string"==typeof $parent_obj?document.getElementById($parent_obj):$parent_obj;
		if ($parent_obj) {
			$temp_element = $parent_obj;
			while ($temp_element!=null) {
				$parent_pos_x += $temp_element.offsetLeft;
				$parent_pos_y += $temp_element.offsetTop;
				$temp_element = $temp_element.offsetParent;
			}
		}
/* Needless count offsetParent.offsetLeft/offsetTop!!!
		var $select_pos_x = $input_obj.offsetLeft;
		var $select_pos_y = $input_obj.offsetTop;
*/
//		alert($select_pos_x+","+$select_pos_y+":"+$parent_pos_x+","+$parent_pos_y);
		$select_obj.style.left = ($select_pos_x-$parent_pos_x)+"px";
		$select_obj.style.top = ($select_pos_y-$parent_pos_y) + $input_obj.offsetHeight+"px";
//		$select_obj.style.left = "0px";
//		$select_obj.style.top = "0px";

		$select_obj.style.display = "block";
		Pennyutils.replaceCSSText($select_obj, "display", "display:inline");
		$select_obj.style.visibility="visible";
//		window.status = $select_pos_x+":"+$select_pos_y+":"+$parent_pos_x+":"+$parent_pos_y;
		if ($select_obj.offsetWidth < $input_obj.offsetWidth) {	// must visible then $select_obj cat give offsetWidth.
			$select_obj.style.width = $input_obj.offsetWidth;
		}
	} else {
		Pennyutils.replaceCSSText($select_obj, "display", "display:none");
		$select_obj.style.visibility="hidden";
	}
}

Pennyutils.showHideUnderObject = function () {
	var $input_obj = "string"==typeof arguments[0]?document.getElementById(arguments[0]):arguments[0];
	var $select_obj = "string"==typeof arguments[1]?document.getElementById(arguments[1]):arguments[1];
	var $offset_x = Number(arguments[2])?Number(arguments[2]):0;
	var $offset_y = Number(arguments[3])?Number(arguments[3]):0;
	if (!$input_obj||!$select_obj) return;
	
	var $cssText = $select_obj.style.cssText.toLowerCase();
	if ($cssText.indexOf("display:none;")>=0||$cssText.indexOf("display: none;")>=0) {
		var $temp_element;
		var $select_pos_x = 0;
		var $select_pos_y = 0;
		$temp_element = $input_obj;
		while ($temp_element!=null) {
			$select_pos_x += $temp_element.offsetLeft;
			$select_pos_y += $temp_element.offsetTop;
			$temp_element = $temp_element.offsetParent;
		}
		
		$select_obj.style.left = ($select_pos_x+$offset_x)+"px";
		$select_obj.style.top = ($select_pos_y+$offset_y+$input_obj.offsetHeight)+"px";
		
		$select_obj.style.display = "block";
		Pennyutils.replaceCSSText($select_obj, "display", "display:inline");
		$select_obj.style.visibility="visible";

//		if ($select_obj.offsetWidth < $input_obj.offsetWidth) {	// must visible then $select_obj cat give offsetWidth.
//			$select_obj.style.width = $input_obj.offsetWidth;
//		}
	} else {
		Pennyutils.replaceCSSText($select_obj, "display", "display:none");
		$select_obj.style.visibility="hidden";
	}
}

Pennyutils.showHideObject = function ($obj) {
	$obj = "string"==typeof $obj?document.getElementById($obj):$obj;
	if (!$obj) return;
	var $cssText = $obj.style.cssText.toLowerCase();
//alert($cssText+"\n"+$cssText.indexOf("display:none;"));
	if ($cssText.indexOf("display:none;")>=0||$cssText.indexOf("display: none;")>=0) {
		Pennyutils.replaceCSSText($obj, "display", "display:inline");
		$obj.style.visibility="visible";
//alert("inline:"+$obj.style.cssText.toLowerCase());
	} else {
		Pennyutils.replaceCSSText($obj, "display", "display:none");
		$obj.style.visibility="hidden";
//alert("none:"+$obj.style.cssText.toLowerCase());
	}
}

Pennyutils.showObject = function () {
	$obj = "string"==typeof arguments[0]?document.getElementById(arguments[0]):arguments[0];
	if (!$obj) return;
	$obj.style.visibility="visible";
	Pennyutils.replaceCSSText($obj, "display", "display:inline");
	if (arguments[1]) {	// position.
/*
	var s = "";
	s+="\n document.body.clientWidth :"+ document.body.clientWidth ;
	s+="\n document.body.clientHeight :"+ document.body.clientHeight ;
	s+="\n document.documentElement.clientWidth :"+document.documentElement.clientWidth;
	s+="\n document.documentElement.clientHeight :"+document.documentElement.clientHeight;
	s+="\n document.body.offsetWidth :"+ document.body.offsetWidth ;
	s+="\n document.body.offsetHeight :"+ document.body.offsetHeight ;
	s+="\n document.body.scrollWidth :"+ document.body.scrollWidth ;
	s+="\n document.body.scrollHeight :"+ document.body.scrollHeight ;
	s+="\n document.body.scrollTop :"+ document.body.scrollTop ;
	s+="\n document.documentElement.scrollTop :"+ document.documentElement.scrollTop ;
	s+="\n document.body.scrollLeft :"+ document.body.scrollLeft ;
	s+="\n window.screenTop :"+ window.screenTop ;
	s+="\n window.screenLeft :"+ window.screenLeft ;
	s+="\n window.screen.height :"+ window.screen.height ;
	s+="\n window.screen.width :"+ window.screen.width ;
	s+="\n window.screen.availHeight :"+ window.screen.availHeight ;
	s+="\n window.screen.availWidth :"+ window.screen.availWidth ;
	s+="\n window.screen.colorDepth :"+ window.screen.colorDepth ;
	s+="\n window.screen.deviceXDPI :"+ window.screen.deviceXDPI ;
	alert(s);
*/
		$obj.style.left=arguments[2]?arguments[2]:(document.documentElement.clientWidth>$obj.offsetWidth?document.documentElement.clientWidth-$obj.offsetWidth:0)/2+"px";
		$obj.style.top=arguments[3]?arguments[3]:(document.documentElement.clientHeight>$obj.offsetHeight?document.documentElement.clientHeight-$obj.offsetHeight:0)/2+document.documentElement.scrollTop+"px";
	}
}

Pennyutils.hideObject = function () {
	$obj = "string"==typeof arguments[0]?document.getElementById(arguments[0]):arguments[0];
	if (!$obj) return;
//	$obj.setAttribute("style", "display:none");
//	$obj.style.cssText = "display:none";
	$obj.style.visibility="hidden";
	Pennyutils.replaceCSSText($obj, "display", "display:none");
}

Pennyutils.replaceCSSText = function () {
	$obj = "string"==typeof arguments[0]?document.getElementById(arguments[0]):arguments[0];
	if (!$obj) return;
	var $cssText = $obj.style.cssText.toLowerCase()+"";
//	var $reg= new RegExp(arguments[1]+":\\s*\\S*;","g");	// [ var $reg=new RegExp("display:.*;","g"); ] IE error!
//	$cssText = $cssText.replace($reg, "");
//	$obj.style.cssText=arguments[2]+$cssText;
	var $cssTextBuffer = new StringBuffer();
	var $cssTextArray = $cssText.split(";");
	for (var $index=0; $index<$cssTextArray.length; $index++) {
		if ($cssTextArray[$index].indexOf(arguments[1]+":")<0) {
			$cssTextBuffer.append($cssTextArray[$index]);
			$cssTextBuffer.append(";");
		}
	}
	$cssTextBuffer.append(arguments[2]);
	
	$obj.style.cssText=$cssTextBuffer.toString();
}

Pennyutils.showMessage = function () {
	if ($("message_win")) {

	} else {
		var message_win=document.createElement("div");
		message_win.setAttribute("id","message_win");
		
		var textarea=document.createElement("textarea");
		textarea.setAttribute("id","message_win_inner");
		message_win.appendChild(textarea);
		
		var button=document.createElement("input");
		button.type = "button";
		button.accessKey = "w";
		button.value = Pennyutils.lang.close+".W";
		Pennyutils.setClassName(button, "button");
		button.onclick = function() {Pennyutils.hideObject("message_win");}
		message_win.appendChild(button);
		
		document.body.appendChild(message_win);
	}
	
	if (arguments[1]=="1") {	//	Info
		Pennyutils.replaceCSSText($("message_win"), "border", "border:3px solid #66cc00");
	} else if (arguments[1]=="2") {	//	Warn
		Pennyutils.replaceCSSText($("message_win"), "border", "border:3px solid #ffcc00");
	} else {	//	Error\Fatal
		Pennyutils.replaceCSSText($("message_win"), "border", "border:3px solid #990000");
	}
	
	$("message_win_inner").value=arguments[0];
	
	Pennyutils.showObject("message_win", true);
}

Pennyutils.debug = function ($value) {
	if ($("debug_textarea")) {
		if(document.uniqueID) {		// IE.
			$("debug_textarea").appendChild(document.createTextNode($value+"\r"));	// IE.
		} else {
			$("debug_textarea").value+=$value+"\n";	// FF.
		}
		$("debug_textarea").scrollTop = $("debug_textarea").scrollHeight;
	}
}

/* Pennyutils.events. begin. */
Pennyutils.events = new Object;
Pennyutils.events.addEventHandler = function ($target, $event_type, $function_handler) {
	if ($target.addEventListener) {
		$target.addEventListener($event_type, $function_handler, false);
	} else if ($target.attachEvent) {
		$target.attachEvent("on" + $event_type, $function_handler);
	} else {
		$target["on" + $event_type] = $function_handler;
	}
};

Pennyutils.events.removeEventHandler = function ($target, $event_type, $function_handler) {
    if ($target.removeEventListener) {
        $target.removeEventListener($event_type, $function_handler, false);
    } else if ($target.detachEvent) {
        $target.detachEvent("on" + $event_type, $function_handler);
    } else { 
        $target["on" + $event_type] = null;
    }
};

Pennyutils.events.formatEvent = function ($event) {
    if (typeof $event.charCode == "undefined") {
        $event.charCode = ($event.type == "keypress") ? $event.keyCode : 0;
        $event.isChar = ($event.charCode > 0);
    }
    
    if ($event.srcElement && !$event.target) {
        $event.eventPhase = 2;
        $event.pageX = $event.clientX + document.body.scrollLeft;
        $event.pageY = $event.clientY + document.body.scrollTop;
        
        if (!$event.preventDefault) {
                $event.preventDefault = function () {
                    this.returnValue = false;
                };
        }

        if ($event.type == "mouseout") {
            $event.relatedTarget = $event.toElement;
        } else if ($event.type == "mouseover") {
            $event.relatedTarget = $event.fromElement;
        }

        if (!$event.stopPropagation) {
                $event.stopPropagation = function () {
                    this.cancelBubble = true;
                };
        }
        
        $event.target = $event.srcElement;
        $event.time = (new Date).getTime();
    }
    
    return $event;
};

Pennyutils.events.getEvent = function() {
    if (window.event) {
        return this.formatEvent(window.event);
    } else {
        return Pennyutils.events.getEvent.caller.arguments[0];
    }
};
/* Pennyutils.events. end. */

/* . begin. */
Pennyutils.input = new Object;

Pennyutils.input.isNotMax = function($element) {
//	alert($element.getAttribute("maxlength"));
	if ($element.value.lengths > $element.getAttribute("maxlength")) {
//		alert($element.getAttribute("maxlength"));
		return false;
	} else {
		return true;
	}
//	return $element.value.length <= $element.getAttribute("maxlength");
}

Pennyutils.input.numberScroll = function ($element_id, $event) {
	if ($event.keyCode == 38) {
		Pennyutils.input.numberChange($element_id, true);	// Up
	} else if ($event.keyCode == 40) {
		Pennyutils.input.numberChange($element_id, false);	// Down
	}
}
Pennyutils.input.numberChange = function ($element_id, $up_or_down) {
	var $element = document.getElementById($element_id);
	
	if ($element.value.length==0) {
		$element.value = 0;
	} else {
		if ($up_or_down) {
			$element.value = Number($element.value)+1;
		} else {
			$element.value = Number($element.value)-1;
		}		
	}
}

Pennyutils.input.timeScroll = function ($element_id, $event) {
	if ($event.keyCode == 38) {
		Pennyutils.input.timeChange($element_id, true);
	} else if ($event.keyCode == 40) {
		Pennyutils.input.timeChange($element_id, false);
	}
}
Pennyutils.input.timeChange = function ($element_id, $up_or_down) {
	var $element = document.getElementById($element_id);
	
	if ($element.value.length == 0) {
		var d = new Date();
		$element.value = (d.getHours() < 10 ? "0" : "") + d.getHours() + ":" + (d.getMinutes() < 10 ? "0" : "") + d.getMinutes();
	} else {
		var r = $element.value.match(/^(\d{1,2})(:|\/)(\d{1,2})$/);
		var d = new Date();
		
		if ($up_or_down) {
			d.setHours(r[1], Number(r[3])+1);
			$element.value = (d.getHours() < 10 ? "0" : "") + d.getHours() + ":" + (d.getMinutes() < 10 ? "0" : "") + d.getMinutes();
		} else {
			d.setHours(r[1], Number(r[3])-1);
			$element.value = (d.getHours() < 10 ? "0" : "") + d.getHours() + ":" + (d.getMinutes() < 10 ? "0" : "") + d.getMinutes();
		}
	}
}

Pennyutils.input.dateScroll = function ($element_id, $event) {
	var $element = document.getElementById($element_id);
	
	if ($event.keyCode == 38) {
		Pennyutils.input.dateChange($element_id, true);
	} else if ($event.keyCode == 40) {
		Pennyutils.input.dateChange($element_id, false);
	}
}
Pennyutils.input.dateChange = function ($element_id, $up_or_down) {
	var $element = document.getElementById($element_id);
	
	if (!isDate($element)) {
		var d = new Date();
		$element.value = d.getFullYear() + "-" + (d.getMonth()+1 < 10 ? "0" : "") + (d.getMonth()+1) + "-" + (d.getDate() < 10 ? "0" : "") + d.getDate();
	} else {
		var r = $element.value.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
		
		if ($up_or_down) {
			var d = new Date(r[1], r[3]-1, Number(r[4])+1);
			$element.value = d.getFullYear() + "-" + (d.getMonth()+1 < 10 ? "0" : "") + (d.getMonth()+1) + "-" + (d.getDate() < 10 ? "0" : "") + d.getDate();
		} else {
			var d = new Date(r[1], r[3]-1, Number(r[4])-1);
			$element.value = d.getFullYear() + "-" + (d.getMonth()+1 < 10 ? "0" : "") + (d.getMonth()+1) + "-" + (d.getDate() < 10 ? "0" : "") + d.getDate();
		}
	}
}

Pennyutils.input.mouOver = function ($id, $type, $index) {
	var $img = document.getElementById($id + "_img_" + $index);
	if ($img.src.indexOf("_o.gif")<0) {
		var $reg=new RegExp(".gif","g");
		$img.src = $img.src.replace($reg, "_o.gif");
	}
}

Pennyutils.input.mouOut = function ($id, $type, $index) {
	var $img = document.getElementById($id + "_img_" + $index);
	if ($img.src.indexOf("_o.gif")) {
		var $reg=new RegExp("_o.gif","g");
		$img.src = $img.src.replace($reg, ".gif");
	}
}

Pennyutils.input.setRadioValue = function ($id, $index) {
	var $input = document.getElementById($id);
	var $img = document.getElementById($id + "_img_" + $index);
	var $reg=new RegExp("img/cms_radio.*.gif","g");
	var $radio_group = document.getElementById($id + "_hide_radio_group_list");
	for ($i=0;$i<$radio_group.length;$i++) {
		$img=document.getElementById($id + "_img_" + $i);
		$img.src = $img.src.replace($reg, "img/cms_radio.gif");
		$radio_group.options[$i].selected=false;
	}
	
	// Selected.
	$img=document.getElementById($id + "_img_" + $index);
	$img.src = $img.src.replace($reg, "img/cms_radio_y.gif");
	$radio_group.options[$index].selected=true;
	$input.value=$radio_group.options[$index].value;
}

Pennyutils.input.setSelectRadioValue = function ($id, $index) {
	var $input = document.getElementById($id);
	var $img = document.getElementById($id + "_img_" + $index);
	var $reg=new RegExp("img/cms_radio.*.gif","g");
	var $radio_group = document.getElementById($id + "_hide_radio_list");
	for ($i=0;$i<$radio_group.length;$i++) {
		$img=document.getElementById($id + "_img_" + $i);
		$img.src = $img.src.replace($reg, "img/cms_radio.gif");
		$radio_group.options[$i].selected=false;
	}
	
	// Selected.
	$img=document.getElementById($id + "_img_" + $index);
	$img.src = $img.src.replace($reg, "img/cms_radio_y.gif");
	$radio_group.options[$index].selected=true;
	$input.value=$radio_group.options[$index].value;
	$($id+"_list_field").value=$radio_group.options[$index].text;
	$($id+"_list_field").focus();
}

Pennyutils.input.setCheckboxValue = function ($id, $_index) {
	var $checkbox_group=document.getElementById($id+"_hide_checkbox_group_list");
	var $img;
	var $reg=new RegExp("img/cms_checkbox.*.gif","g");
	if ($checkbox_group.options[$_index].selected==true) {
		$img = document.getElementById($id + "_img_" + $_index);
		$img.src = $img.src.replace($reg, "img/cms_checkbox.gif");
		$checkbox_group.options[$_index].selected=false;
	} else {
		$img = document.getElementById($id + "_img_" + $_index);
		$img.src = $img.src.replace($reg, "img/cms_checkbox_y.gif");
		$checkbox_group.options[$_index].selected=true;
	}
	$img=null;
	// Set value & sort value.
	$value = new StringBuffer();
	for ($i=0;$i<$checkbox_group.length;$i++) {
		if ($checkbox_group.options[$i].selected==true) {
			$value.append($checkbox_group.options[$i].value);
			$value.append(",");
		}
	}
	// Cut ','.
	$value=$value.toString();
	$len=$value.length;
	if ($len>0&&$value.charAt($len-1)==',') {
		$value=$value.substr(0, $len-1);
	}
	document.getElementById($id).value = $value.toString();
}

Pennyutils.input.setSelectCheckboxValue = function ($id, $_index) {
	var $checkbox_group=document.getElementById($id+"_hide_select_list");
	var $img;
	var $reg=new RegExp("img/cms_checkbox.*.gif","g");
	if ($checkbox_group.options[$_index].selected==true) {
		$img = document.getElementById($id + "_img_" + $_index);
		$img.src = $img.src.replace($reg, "img/cms_checkbox.gif");
		$checkbox_group.options[$_index].selected=false;
	} else {
		$img = document.getElementById($id + "_img_" + $_index);
		$img.src = $img.src.replace($reg, "img/cms_checkbox_y.gif");
		$checkbox_group.options[$_index].selected=true;
	}
	$img=null;
	// Set value & sort value.
	$value = new StringBuffer();
	$text = new StringBuffer();
	for ($i=0;$i<$checkbox_group.length;$i++) {
		if ($checkbox_group.options[$i].selected==true) {
			$value.append($checkbox_group.options[$i].value);
			$value.append(",");
			
			$text.append($checkbox_group.options[$i].text);
			$text.append(",");
		}
	}
	// Cut ','.
	$text=$text.toString();
	$len=$text.length;
	if ($len>0&&$text.charAt($len-1)==',') {
		$text=$text.substr(0, $len-1);
	}
	$($id+"_select_field").value = $text.toString();
	$value=$value.toString();
	$len=$value.length;
	if ($len>0&&$value.charAt($len-1)==',') {
		$value=$value.substr(0, $len-1);
	}
	$($id).value = $value.toString();
	$($id+"_select_field").focus();
}

Pennyutils.input.setInputValue = function ($id, $value) {
	var $input = document.getElementById($id);
	$input.value = $value;
	
	var $checkbox_group = document.getElementById($id + "_hide_checkbox_group_list");
	if ($checkbox_group) {	// checkbox_group.
		var $reg=new RegExp("img/cms_checkbox.*.gif","g");
		for ($i=0;$i<$checkbox_group.length;$i++) {
			$img=document.getElementById($id + "_img_" + $i);
			$img.src=$img.src.replace($reg, "img/cms_checkbox.gif");
			$checkbox_group.options[$i].selected=false;
		}
		var $value = $value.length>0?$value.split(","):"";
		for ($index=0;$index<$value.length;$index++) {
			for ($i=0;$i<$checkbox_group.length;$i++) {
				if ($checkbox_group.options[$i].value==$value[$index]) {
					$checkbox_group.options[$i].selected=true;
					$img=document.getElementById($id + "_img_" + $i);
					$img.src=$img.src.replace($reg, "img/cms_checkbox_y.gif");
					break;
				}
			}
		}
	}
	var $radio_group = document.getElementById($id + "_hide_radio_group_list");
	if ($radio_group) {	// radio_group.
		var $reg=new RegExp("img/cms_radio.*.gif","g");
		var $value=$value.length>0?$value:"";
		for ($i=0;$i<$radio_group.length;$i++) {
			$img=document.getElementById($id + "_img_" + $i);
			$img.src=$img.src.replace($reg, "img/cms_radio.gif");
			$radio_group.options[$i].selected=false;
			if ($radio_group.options[$i].value==$value) {
				$radio_group.options[$i].selected=true;
				$img=document.getElementById($id + "_img_" + $i);
				$img.src=$img.src.replace($reg, "img/cms_radio_y.gif");
			}
		}
	}
	var $combo_box = document.getElementById($id + "_combo_box_list");
	if ($combo_box) {	// combo_box.
		var $options = $combo_box.getElementsByTagName("option");
		if ($options) {
			for (var $index=0; $index<$options.length; $index++) {
				if ($value==$options[$index].value) {
					var combo_box_field = document.getElementById($id + "_combo_box_field");
					if (combo_box_field) {
						combo_box_field.value = $options[$index].text;
						$options[$index].selected = true;
					}
				} else {
					$options[$index].selected = false;
				}
			}
		}
	}
	var $select=document.getElementById($id+"_hide_select_list");
	if ($select) {	// select.
		var $reg=new RegExp("img/cms_checkbox.*.gif","g");
		for ($i=0;$i<$select.length;$i++) {
			$img=document.getElementById($id + "_img_" + $i);
			$img.src=$img.src.replace($reg, "img/cms_checkbox.gif");
			$select.options[$i].selected=false;
		}
		var $text = new StringBuffer();
		var $value = $value.length>0?$value.split(","):"";
		for ($index=0;$index<$value.length;$index++) {
			for ($i=0;$i<$select.length;$i++) {
				if ($select.options[$i].value==$value[$index]) {
					$text.append($select.options[$i].text);
					$select.options[$i].selected=true;
					$img=document.getElementById($id + "_img_" + $i);
					$img.src=$img.src.replace($reg, "img/cms_checkbox_y.gif");
					break;
				}
			}
			if ($index<($value.length-1)) {
				$text.append(",");
			}
		}
		$($id+"_select_field").value = $text.toString();
	}
	var $list = document.getElementById($id + "_hide_radio_list");
	if ($list) {	// list.
		var $reg=new RegExp("img/cms_radio.*.gif","g");
		var $value=$value.length>0?$value:"";
		for ($i=0;$i<$list.length;$i++) {
			$img=document.getElementById($id + "_img_" + $i);
			$img.src=$img.src.replace($reg, "img/cms_radio.gif");
			$list.options[$i].selected=false;
			if ($list.options[$i].value==$value) {
				var list_field = document.getElementById($id + "_list_field");
				if (list_field) {
					list_field.value = $list.options[$i].text;
				}
				$list.options[$i].selected=true;
				$img=document.getElementById($id + "_img_" + $i);
				$img.src=$img.src.replace($reg, "img/cms_radio_y.gif");
			}
		}
	}
	var $date = document.getElementById($id + "_date");
	if ($date) {	// date.
		if ($value!=null&&$value.length==10) {
			$($id+"_year").value=$value.substr(0, 4);
			$($id+"_month").value=$value.substr(5, 2);
			$($id+"_date").value=$value.substr(8, 2);
		} else {
			$($id+"_year").value='';
			$($id+"_month").value='';
			$($id+"_date").value='';
		}
	}
	var $time = document.getElementById($id + "_second");
	if ($time) {	// time.
		if ($value!=null&&$value.length==8) {
			$($id+"_hour").value=$value.substr(0, 2);
			$($id+"_minute").value=$value.substr(3, 2);
			$($id+"_second").value=$value.substr(6, 2);
		} else {
			$($id+"_hour").value='';
			$($id+"_minute").value='';
			$($id+"_second").value='';
		}
	}
	if ($date&&$time) {	// date time.
		if ($value!=null&&$value.length==19) {
			$($id+"_year").value=$value.substr(0, 4);
			$($id+"_month").value=$value.substr(5, 2);
			$($id+"_date").value=$value.substr(8, 2);
			$($id+"_hour").value=$value.substr(11, 2);
			$($id+"_minute").value=$value.substr(14, 2);
			$($id+"_second").value=$value.substr(17, 2);
		} else {
			$($id+"_year").value='';
			$($id+"_month").value='';
			$($id+"_date").value='';
			$($id+"_hour").value='';
			$($id+"_minute").value='';
			$($id+"_second").value='';
		}
	}
}

Pennyutils.input.getInputText = function ($id) {
	var $value = document.getElementById($id).value;
	
	var $checkbox_group = document.getElementById($id + "_hide_checkbox_group_list");
	if ($checkbox_group) {	// checkbox_group.
		var $value = $value.length>0?$value.split(","):"";
		var $text = new StringBuffer();
		for ($i=0;$i<$checkbox_group.length;$i++) {
			for ($index=0;$index<$value.length;$index++) {
				if ($checkbox_group.options[$i].value==$value[$index]) {
					$text.append($checkbox_group.options[$i].text);
					$text.append(" ");
					break;
				}
			}
		}
		return $text.toString();
	}
	var $radio = document.getElementById($id + "_hide_radio_group_list");
	if ($radio) {	// radio.
		for ($i=0;$i<$radio.length;$i++) {
			if ($value==$radio.options[$i].value) {
				return $radio.options[$i].text;
			}
		}
	}
	
	return $value;
}

Pennyutils.input.widget = function ($preferences) {
	this.$onsubmit = $preferences["onsubmit"]?$preferences["onsubmit"]:null;
//	this.values = $values?$values:null;
	this.$propertys = $preferences["propertys"]?$preferences["propertys"]:null;
	if (this.$propertys) {
		var $function;
		for (var $property in this.$propertys) {
			$function = eval("Pennyutils.input.widget.prototype.create"+$iteam["input"]);
			
			this.callFunction($function, $property);
		}
	}
}

Pennyutils.input.widget.prototype.callFunction = function ($function, $argument) {
	$function($argument);
}
Pennyutils.input.widget.prototype.createRadioLabel = function ($label, $name) {
	var string_buffer = new StringBuffer();
	string_buffer.append("<div style=\"border:1px solid #333333;position:relative;\"><label style=\"float:left;\">"+$label+"</label>");
	string_buffer.append(this.createRadio($name, "float:right;"));
	string_buffer.append("</div>");
	
	return string_buffer.toString();
}
Pennyutils.input.widget.prototype.createRadio = function ($name, $style_script) {
	var $form_index = 0;
//	var $name = "sex";
	var $id = $form_index+$name;
	var $json_obj = {"0":"a", "1":"b", "2":"c", "3":"d", "4":"e"};
	var string_buffer = new StringBuffer();
	string_buffer.append("<div class=\"pww_radio\">");
	string_buffer.append("<div>");
	var $index = 0;
	for (var $iteam in $json_obj) {
//		alert($iteam + ":" + json_obj[$iteam]);
		string_buffer.append("<span><a href=\"javascript:void%200;\" onclick=\"Pennyutils.input.setRadioValue('"+$id+"', '"+$iteam+"');blur();\" onfocus=\"Pennyutils.input.mouOver('"+$id+"', 'radio', "+$index+")\" onblur=\"Pennyutils.input.mouOut(\'"+$id+"\', 'radio', "+$index+")\" onkeydown=\"if(event.keyCode==32)Pennyutils.input.setRadioValue('"+$id+"', '"+$iteam+"')\" onmousemove=\"Pennyutils.input.mouOver('"+$id+"', 'radio', "+$index+")\" onmouseout=\"Pennyutils.input.mouOut('"+$id+"', 'radio', "+$index+")\"><img id=\""+$id+"_img_"+$index+"\" src=\"img/radio.gif\" border=\"0\" />"+$json_obj[$iteam]+"</a><input id=\""+$id+"_img_item_radio_"+$index+"\" type=\"hidden\" value=\"0\" /><input id=\""+$id+"_img_item_value_"+$index+"\" type=\"hidden\" value=\""+$iteam+"\" /></span>");
//		string_buffer.append("<span><img id=\""+$id+"_img_"+$index+"\" src=\"img/radio.gif\" checked=\"0\" value=\""+$iteam+"\" onclick=\"Pennyutils.input.setRadioValue('"+$id+"', '"+$iteam+"');blur();\" onfocus=\"Pennyutils.input.mouOver('"+$id+"', 'radio', "+$index+")\" onblur=\"Pennyutils.input.mouOut(\'"+$id+"\', 'radio', "+$index+")\" onkeydown=\"if(event.keyCode==32)Pennyutils.input.setRadioValue('"+$id+"', '"+$iteam+"')\" onmousemove=\"Pennyutils.input.mouOver('"+$id+"', 'radio', "+$index+")\" onmouseout=\"Pennyutils.input.mouOut('"+$id+"', 'radio', "+$index+")\" />"+$json_obj[$iteam]+"</span>");
		$index++;
	}
	string_buffer.append("</div>");
	string_buffer.append("<input id=\""+$id+"\" name=\""+$name+"\" type=\"hidden\" value=\"\" onkeydown=\"\" size=\""+$index+"\" />");
	string_buffer.append("</div><div style=\"clear:both\"></div>");
	
	return string_buffer.toString();
}

Pennyutils.input.widget.prototype.createCheckboxLabel = function ($label, $name) {
	var string_buffer = new StringBuffer();
	string_buffer.append("<div style=\"border:1px solid #333333;position:relative;\"><label style=\"float:left;text-align:right;border:1px solid #333333;width:80px;\">"+$label+"</label>");
	string_buffer.append(this.createCheckbox($name));
	string_buffer.append("</div>");
	
	return string_buffer.toString();
}
Pennyutils.input.widget.prototype.createCheckbox = function ($name) {
	var $form_index = 0;
//	var $name = "job";
	var $id = $form_index+$name;
	var $json_obj = {"0":"a", "1":"b", "2":"c", "3":"d", "4":"e"};
	var string_buffer = new StringBuffer();
	string_buffer.append("<div class=\"pww_checkbox\" style=\"border:1px solid #333333;float:right;height:30px;\">");
	string_buffer.append("<div>");
	var $index = 0;
	for (var $iteam in $json_obj) {
//		alert($iteam + ":" + json_obj[$iteam]);
		string_buffer.append("<span><a href=\"javascript:void%200;\" onclick=\"Pennyutils.input.setCheckboxValue('"+$id+"', '"+$iteam+"');blur();\" onfocus=\"Pennyutils.input.mouOver('"+$id+"', 'checkbox', "+$index+")\" onblur=\"Pennyutils.input.mouOut(\'"+$id+"\', 'checkbox', "+$index+")\" onkeydown=\"if(event.keyCode==32)setCheckboxValue('"+$id+"', '"+$iteam+"')\" onmousemove=\"Pennyutils.input.mouOver('"+$id+"', 'checkbox', "+$index+")\" onmouseout=\"Pennyutils.input.mouOut('"+$id+"', 'checkbox', "+$index+")\"><img id=\""+$id+"_img_"+$index+"\" src=\"img/checkbox.gif\" border=\"0\" />"+$json_obj[$iteam]+"</a><input id=\""+$id+"_img_item_checked_"+$index+"\" type=\"hidden\" value=\"0\" /><input id=\""+$id+"_img_item_value_"+$index+"\" type=\"hidden\" value=\""+$iteam+"\" /></span>");
		$index++;
	}
	string_buffer.append("</div>");
	string_buffer.append("<input id=\""+$id+"\" name=\""+$name+"\" type=\"hidden\" value=\"\" onkeydown=\"\" size=\""+$index+"\" />");
	string_buffer.append("</div><div style=\"clear:both\"></div>");
	
	return string_buffer.toString();
}

Pennyutils.input.widget.prototype.createText = function () {
	var $form_index = 0;
	var $name = "input";
	var $id = $form_index+$name;
	return "<div class=\"pww_text\"><input id=\""+$id+"\" name=\""+$name+"\" type=\"text\" value=\"\" onfocus=\"this.select()\" /></div>";
}

Pennyutils.input.widget.prototype.createHiddenText = function () {
	var $form_index = 0;
	var $name = "input";
	var $id = $form_index+$name;
	return "<div class=\"pww_text\"><input id=\""+$id+"\" name=\""+$name+"\" type=\"text\" value=\"\" readonly=\"readonly\" /></div>";
}

Pennyutils.input.widget.prototype.createHidden = function () {
	var $form_index = 0;
	var $name = "input";
	var $id = $form_index+$name;
	return "<div class=\"pww_text\"><input id=\""+$id+"\" name=\""+$name+"\" type=\"hidden\" value=\"\" /></div>";
}

Pennyutils.input.widget.prototype.createTextArea = function () {
	return "<span class=\"pww_text_area\"><textarea maxlength=\"10\" onkeypress=\"return Pennyutils.input.isNotMax(this)\" onfocus=\"this.select()\"></textarea></span>";
}

Pennyutils.input.widget.prototype.createNumber = function () {
	return "<span class=\"pww_number\"><input id=\"\" name=\"\" type=\"text\" value=\"\"  onkeydown=\"Pennyutils.input.numberScroll(this, event)\" onfocus=\"this.select()\" /><img src=\"img/up.gif\" onclick=\"\" onmousemove=\"\" onmouseout=\"\" /><br /><img src=\"img/fixsize.gif\" height=\"2\" /><br /><img src=\"img/down.gif\" onclick=\"\" onmousemove=\"\" onmouseout=\"\" /></span>";
}
/* . end. */

/* Drag. begin */
Pennyutils.drag = new Object;

Pennyutils.drag = function () {
	this.$element="string"==typeof arguments[0]?document.getElementById(arguments[0]):arguments[0];
	this.ondragstart=arguments[1]?arguments[1]:this.defaultDragStart;
	this.ondraging=arguments[2]?arguments[2]:this.defaultDraging;
	this.ondragend=arguments[3]?arguments[3]:this.defaultDragEnd;
	this.$event;
	this.offsetX=0;
	this.offsetY=0;
//	var offsetX=$event.offsetX?$event.offsetX:$event.layerX; 
	
	var $drag_obj=this;
	var $mouseDown=function(){
//		$("debug_textarea").value="";
		$drag_obj.$event=arguments[0]||window.event;
//		$("debug_textarea").value+=$drag_obj.$event+"\n";
//		$("debug_textarea").value+=$drag_obj.$element.offsetLeft+":"+$drag_obj.$element.layerX+"\n";
		$drag_obj.offsetX = typeof $drag_obj.$element.layerX=="undefined"?$drag_obj.$element.offsetLeft:$drag_obj.$element.layerX;
		$drag_obj.offsetY = typeof $drag_obj.$element.layerY=="undefined"?$drag_obj.$element.offsetTop:$drag_obj.$element.layerY;
		$drag_obj.offsetX = $drag_obj.$event.clientX - $drag_obj.offsetX;
		$drag_obj.offsetY = $drag_obj.$event.clientY - $drag_obj.offsetY;
//		$("debug_textarea").value+=$drag_obj.offsetX+":"+$drag_obj.offsetY+"\n";
		this.offsetX=$drag_obj.offsetX;
		this.offsetY=$drag_obj.offsetY;
		
		$drag_obj.attachEventHandlers();	// Drag start.
		$drag_obj.ondragstart.call(this);
	};
	if(this.$element.addEventListener){
		this.$element.addEventListener("mousedown",$mouseDown,false);
	}else if(this.$element.attachEvent){
		this.$element.attachEvent("onmousedown",$mouseDown);
	}else{
		throw new Error("Not support this browser!");
	}
}
Pennyutils.drag.prototype.attachEventHandlers=function(){
	var $drag_obj=this;
	this.$mouseMove=function(){	// start drag
		this.$event=arguments[0]||window.event;
		this.offsetX=$drag_obj.offsetX;
		this.offsetY=$drag_obj.offsetY;
		// ... 
		$drag_obj.ondraging.call(this);
	};
	$drag_obj.$mouseUp=function(){
		$drag_obj.detachEventHandlers();	// stop drag/drop
		// ... 
		$drag_obj.ondragend.call(this);
	};
	if(document.addEventListener){
		document.addEventListener("mousemove",this.$mouseMove,false);
		document.addEventListener("mouseup",this.$mouseUp,false);
	}else if(document.body.attachEvent){
		document.body.attachEvent("onmousemove",this.$mouseMove);
		document.body.attachEvent("onmouseup",this.$mouseUp);
	}else{
		throw new Error("Not support this browser!");
	}
}
Pennyutils.drag.prototype.detachEventHandlers=function(){
	if(document.removeEventListener){
		document.removeEventListener("mousemove",this.$mouseMove,false);
		document.removeEventListener("mouseup",this.$mouseUp,false);
	}else if(document.body.detachEvent){
		document.body.detachEvent("onmousemove",this.$mouseMove);
		document.body.detachEvent("onmouseup",this.$mouseUp);
	}else{
		throw new Error("Not support this browser!");
	}
}
Pennyutils.drag.prototype.defaultDragStart=function(){
//	$("debug_textarea").value+="drag start\n";
}
Pennyutils.drag.prototype.defaultDraging=function(){
//	var $event=arguments[0]||window.event;
//	debug_textarea.value+=$event.clientX+":"+this.$event.clientX+"\n";
}
Pennyutils.drag.prototype.defaultDragEnd=function(){
//	$("debug_textarea").value+="drag stop\n";
}
/* Drag. end */

Pennyutils.showPhoto=function () {
	var $show_img=arguments[0];
	$show_img.src.onload=new Function("Pennyutils.setOpacity(this, 100, 5)");
	$show_img.src=arguments[1];
	var $img_width=arguments[2];
	var $img_height=arguments[3];
	Pennyutils.resizeImage($show_img, $img_width, $img_height);
	$show_img.style.left=($img_width-$show_img.width)/2+"px";
	$show_img.style.top=($img_height-$show_img.height)/2+"px";
//	$show_img.style.opacity=0;
//	$show_img.style.filter='alpha(opacity=0)';
//	Pennyutils.setOpacity($show_img, 100, 10);
	$show_img.style.opacity=1;
	$show_img.style.filter='alpha(opacity=100)';
}
Pennyutils.setOpacity=function () {
	$element=arguments[0];
	$alpha=arguments[1];
	$target=arguments[2];
	$element='object'==typeof $element?$element:$($element);
	var $opacity=$element.style.opacity||Pennyutils.getStyleProperty($element, 'opacity');
	var $destine=$alpha>$opacity*100?1:-1;
	window.status=$opacity+","+arguments[1]+","+arguments[2]+","+$destine;
	$element.style.opacity=$opacity;
	clearInterval($element.$interval_id);
	$element.$interval_id=setInterval(function(){Pennyutils.tween($element, $alpha, $destine, $target)}, 20);
}
Pennyutils.tween=function () {
	$element=arguments[0];
	$alpha=arguments[1];
	$destine=arguments[2];
	$target=arguments[3];
	$element='object'==typeof $element?$element:$($element);
	var $opacity=Math.round($element.style.opacity*100);
	if ($destine<0) {
		if($opacity>=$alpha){
			clearInterval($element.$interval_id);
		}
	} else {
		if($opacity<=$alpha){
			clearInterval($element.$interval_id);
		}
	}
	
	var $now_opacity=$opacity+Math.ceil(Math.abs($alpha-$opacity)/$target)*$destine;
	$element.style.opacity=$now_opacity/100;
	$element.style.filter='alpha(opacity='+$now_opacity+')';
	window.status=$now_opacity;
}
Pennyutils.getStyleProperty=function() {
	$element=arguments[0];
	$property=arguments[1];
	$element=typeof $element=="object"?$element:$($element);
	return $element.currentStyle?$element.currentStyle[$property]:document.defaultView.getComputedStyle($element,null).getPropertyValue($property);
}

function handleMouseMove () {
	var $event = Pennyutils.events.getEvent();
	var $move = $(this.$table_name+"_header_move_"+this.$col);
	var $target = $(this.$table_name+"_header_item_"+this.$col);
	var margin = 0;
	var t_left = 0;
	
	if(document.uniqueID) {
		$move.style.left = $event.clientX;
		var nLt=0;
		var offsetParent = $target;
		while (offsetParent!=null && offsetParent!=document.body) {
			nLt+=offsetParent.offsetLeft;
			if(document.uniqueID){
				parseInt(offsetParent.currentStyle.borderLeftWidth)>0?nLt+=parseInt(offsetParent.currentStyle.borderLeftWidth):"";
			}
			offsetParent=offsetParent.offsetParent;
		}
		t_left = nLt;
	} else {
		$move.style.setProperty("left", $event.clientX+"px", "");
		t_left = $target.offsetLeft;
	}
	
	margin = $event.clientX - t_left;
	
	set_element_value("test_grid", "t_left:"+t_left+" , margin:"+margin+" , width:"+$target.offsetWidth);
	
	if ((margin-2) <= 0) {
//		_draggable.moveTo(_dropTarget.getLeft(), _dropTarget.getTop());
	}
	
	if (margin > 0) {
		$(this.$table_name+"_header_item_"+this.$col).style.width=(margin+5)+"px";
		$(this.$table_name+"_header_text_"+this.$col).style.width=margin+"px";
		for (i = 0; i < this.$row_count; i++) {
			$(this.$table_name+"_column_item_"+this.$col+"_"+i).style.width=(margin+5)+"px";				
		}
	}
}

function handleMouseDown () {
	this.$table_name = arguments[0];
	this.$col = arguments[1];
	this.$row_count = arguments[2];
	
	var $target = $(this.$table_name+"_header_move_"+this.$col);
	Pennyutils.setCssStyle($target, "position:absolute;");

	Pennyutils.events.addEventHandler(document.body, "mousemove", handleMouseMove);
	Pennyutils.events.addEventHandler(document.body, "mouseup", handleMouseUp);
}

function handleMouseUp () {
	var $move = $("_header_move_"+this.$ind);
	Pennyutils.setCssStyle($move, "position:static;");
	
	Pennyutils.events.removeEventHandler(document.body, "mousemove", this.handleMouseMove);
	Pennyutils.events.removeEventHandler(document.body, "mouseup", this.handleMouseUp);
}

$blankColor="background-color:#ffffff;";
$clickColor="background-color:#dddddd;";
$overColor="background-color:#f0f0f0;";
$overClickColor="background-color:#eeeeee;";

function clickRow (obj) {
	if (this.oldClickRow) {
		this.oldClickRow.setAttribute("show", "0");
		Pennyutils.setCssStyle(this.oldClickRow, $blankColor);
	}
	
	if (obj.getAttribute("show")==1) {
		obj.setAttribute("show", "0");
		Pennyutils.setCssStyle(obj, $blankColor);
	} else {
		obj.setAttribute("show", "1");
		Pennyutils.setCssStyle(obj, $clickColor);
	}
	
	this.oldClickRow = obj;
}

function overRow (obj) {
	if (obj.getAttribute("show")==1) {
		Pennyutils.setCssStyle(obj, $overClickColor);
	} else {
		Pennyutils.setCssStyle(obj, $overColor);
	}
}

function outRow (obj) {
	if (obj.getAttribute("show")==1) {
		Pennyutils.setCssStyle(obj, $clickColor);
	} else {
		Pennyutils.setCssStyle(obj, $blankColor);
	}
}
