/*@cc_on _d=document;eval("var document=_d")@*/
// Set Function

function showStatusBar( obj, info, flag )
{
	if ( typeof obj=="object" && typeof info=="string" )
	{
		// Position
		obj.innerHTML		= "<p align='center' style='font:14pt;'>" + info + "</p>";
		obj.style.display	= flag;
	}
}

/**
 * Function: Check If Element In Array
 * Param: 	 element		Element To Check
 * Param:	 arr			Array
 * Retrun:	 Number Of Index
 *			 -1				Not Found
 **/
function InArray( element, arr )
{
	// Arguments Check
	if ( typeof element!="undefined" && typeof arr == "object" )
	{
		var i = 0;
		for ( i in arr )
		{
			if ( arr[i]==element )
			{
				return parseInt(i);
			}
		}
	}
	
	return -1;
}

/**
 * Function: Add Element Into Array
 * Param:	 element		Element To Add
 * Param:	 arr			Array
 * Return:	 true			Success
 *			 false			Failed
 **/
function AddIntoArray( element, arr )
{
	if ( typeof element!="undefined" && typeof arr == "object" )
	{
		var i = arr.length;
		arr.length ++;
		arr[i]= element;
		return true;
	}
	
	return false
}


/**
 * Function: Delete Element From Array
 * Param:	 element		Element To Delete
 * Param:	 arr			Array
 * Return:	 true			Success
 *			 false			Failed
 **/
function DeleteFromArray( element, arr )
{
	if ( typeof element!="undefined" && typeof arr == "object" )
	{
		// Find Element
		var i		= 0;
		var found	= false;
		var idx		= InArray( element, arr );
		if ( idx>=0 )
		{
			for ( i = idx; i<(arr.length - 1); i++ )
			{
				arr[i]	= arr[ i + 1 ];
			}
			arr.length --;
			
			return true;
		}
		
		return false;
	}
	
	return false
}

/**
 * Function:	Get Distinct Value Array
 * Param:		arr				Array
 * Return:		result			Distinct Value Array
 **/
function DistinctArray( arr )
{
	// Arguments Check
	if ( typeof arr == "object" && arr.length>0 )
	{
		var result	= new Array();
		var	i		= 0;
		for ( i=0; i<arr.length; i++ )
		{
			if ( InArray( arr[i], result )<0 )
			{
				AddIntoArray( arr[i], result );
			}
		}
		
		return result;
	}
	
	return null;
}
 
/**
 * Function:	Get Array Group By Key
 * Param: 		keys			Key Array
 * Param:		joins			Join Array
 * Param:		values			Value Array
 * Param: 		dataType		Data Type
 * Return:		Array Group By Key
 **/
function GroupArray( keys, joins, values, dataType )
{
 	// Argumetns Check
 	if ( typeof joins == "object" && typeof keys == "object" && typeof values == "object" &&
 		joins.length == keys.length && keys.length == values.length && typeof dataType == "string" )
 	{
 		var 	i 			= 0;
 		
 		// Get Distinct Key
 		var		arrKey		= DistinctArray( keys );
 		if ( typeof arrKey == "object" &&
 			arrKey.length>0 )
 		{
 			var result = new Array();
 			for ( i=0; i<arrKey.length; i++ )
 			{
 				var temp = new Array();
 				AddIntoArray( temp, result );
 			}
 			
 			for ( i=0; i<keys.length; i++ )
 			{
 				var idx = InArray( keys[i], arrKey );
 				if ( idx>=0 )
 				{
 					var subArr = new Array();
 					AddIntoArray( keys[i], subArr );
 					AddIntoArray( joins[i], subArr );
 					AddIntoArray( values[i], subArr );
 					
 					AddIntoArray( subArr, result[idx] );
 				}
 			}
 		}
 		
 		return result;
 	}
 	
 	return null;
}

/**
 * Function:	Filter Array By Key
 * Param: 		arr				Array
 * Param:		idx				SubArray Index To Filter
 * Param:		filterStr		Filter String
 * Return:		Array Filter By Key
 **/
function FilterArray( arr, idx, filterStr )
{
 	// Argumetns Check
 	if ( typeof arr == "object" && typeof idx == "number" && typeof filterStr == "string" )
 	{
 		var 	i 			= 0;
 		var		result		= new Array();
 		for ( i = 0; i<arr.length; i++ )
 		{
 			// Do Filter
 			var	item	= arr[i]; 			
 			if ( typeof item == "object" && 
 				item.length>=( idx + 1 ) &&
 				item[idx]==filterStr )
 			{
 				AddIntoArray( item, result );
 			}
 		}
 		
 		return result;
 	}
 	
 	return null;
}

/**
 * Function:	Get Minimize Object Of Array
 * Param:		arr			Array
 * Param:		valueIdx	Value Index Of SubArray
 * Return:		Index Of Minimize Value Element
 **/
function MinArray( arr, valueIdx )
{
	if ( typeof arr == "object" && typeof valueIdx == "number" )
	{
		var i;
		var index = -1;
		var value = null;
		for ( i=0; i<arr.length; i++ )
		{
			var item = arr[i];
			if ( value==null )
			{
				value	= item[valueIdx];
				index	= i;
			}
			else
			{
				if ( item[valueIdx]<=value )
				{
					value	= item[valueIdx];
					index	= i;
				}
			}
		}
		
		if ( value!=null )
		{
			return arr[index];
		}
		
	}
	
	return null;
}

/**
 * Function:	Get Maximize Object Of Array
 * Param:		arr			Array
 * Param:		valueIdx	Value Index Of SubArray
 * Return:		Index Of Maximize Value Element
 **/
function MaxArray( arr, valueIdx )
{
	if ( typeof arr == "object" && typeof valueIdx == "number" )
	{
		var i;
		var index = -1;
		var value = null;
		for ( i=0; i<arr.length; i++ )
		{
			var item = arr[i];
			if ( value==null )
			{
				value	= item[valueIdx];
				index	= i;
			}
			else
			{
				if ( item[valueIdx]>=value )
				{
					value	= item[valueIdx];
					index	= i;
				}
			}
		}
		
		if ( value!=null )
		{
			return arr[index];
		}
		
	}

	return null;
}

/**
 * Function:	Union Arrays
 * Param:		arr1, arr2	Array
 * Return:		Unioned Array
 **/
function UnionArray( arr1, arr2 )
{
	if ( typeof arr1 == "object" && typeof arr2 == "object" )
	{
		var i;
		var index = -1;
		var value = null;
		for ( i=0; i<arr2.length; i++ )
		{
			var item = arr2[i];
			AddIntoArray( item, arr1 );
		}
		
		return arr1;		
	}

	return null;
}

/**
 * Function: 	Get Intersection Of 2 Array
 * Param:		arr1		Array1
 * Param:		arr2		Array2
 * Return:		
 **/
function IntersectArray( arrLE, arrGE, valueIdx )
{
	if ( typeof arrLE == "object" && typeof arrGE == "object" 
		&& typeof valueIdx == "number" )
	{
		var min		= MinArray( arrGE, valueIdx );
		var minValue= ( min!=null )?min[valueIdx]:0;
		
		var max		= MaxArray( arrLE, valueIdx );
		var maxValue= ( max!=null )?max[valueIdx]:0;		
		
		if ( min!=null && max!=null )
		{
			return ( maxValue - minValue );
		}
		else
		{
			return Math.abs( maxValue - minValue );
		}
	}
	
	return null;
}

/**
 * Function:	Open a Window
 * Param:		width		Width
 * Param:		height		Height
 * Param:		url			
 * Param:		name
 * Return:		window object
 **/
function showDialog(width, height, url, sName) 
{
	var strPara = "dialogHeight:" + height + "px;dialogWidth:" + width + "px;;help:off;resizable:off;scroll:yes;status:off";
	var strReturn = window.showModalDialog(url, sName, strPara);
	return strReturn;
}

function showDialogEx(left, top, width, height, url, sName) 
{
	var strPara = "dialogLeft:" + left + "px; dialogTop:" + top + 
					"px; dialogHeight:" + height + "px;dialogWidth:" + 
					width + "px;;help:off;resizable:off;scroll:yes;status:off";
	var strReturn = window.showModalDialog(url, sName, strPara);
	return strReturn;
}

function showWindow( width, height, url, sName )
{
	var top		= ( screen.width - parseInt(width) ) / 2;
	var left	= ( screen.height - parseInt(height) ) / 2;
	var sPara	= "directories=no, top=" + parseInt(top);
	sPara		+= ", left=" + parseInt(left);
	sPara		+= ", width=" + parseInt(width);
	sPara		+= ", height=" + parseInt(height);
	sPara		+= ", location=no, menubar=no";
	sPara		+= ", resizable=yes, scrollbars=yes";
	sPara		+= ", status=yes, titlebar=no";
	sPara		+= ", toolbar=no";
	
	var winObj	= window.open( url, sName, sPara, true );
	winObj.focus();
	return winObj;
}

function showWindowEx( width, height, url, name, resize, scrollbar )
{
	var top		= ( screen.width - parseInt(width) ) / 2 - 150;
	var left	= ( screen.height - parseInt(height) ) / 2;
	var sPara	= "directories=no, top=" + parseInt(top);
	sPara		+= ", left=" + parseInt(left);
	sPara		+= ", width=" + parseInt(width);
	sPara		+= ", height=" + parseInt(height);
	sPara		+= ", location=no, menubar=no";
	sPara		+= ", resizable=" + resize + ", scrollbars=" + scrollbar;
	sPara		+= ", status=no, titlebar=no";
	sPara		+= ", toolbar=no";
	
	var winObj	= window.open( url, name, sPara, true );
	winObj.focus();
	return winObj;
}

/**
 * Function: 	Enable Or Disable Every Form Element
 * Param:		item		Form
 * Param:		isEnabled	True - Enable, False - Disable
 * return:		
 **/
function enableForm( item, isEnabled )
{
	if ( typeof item=="object" )
	{
		var i	= 0;
		for ( i=0; i<item.elements.length; i++ )
		{
			item.elements[i].disabled	= (!isEnabled);
		}
	}
}	

function formatNumber( item )
{
	if ( parseInt(item)<10 )
	{
		return "0" + item;
	}
	else
	{
		return item;
	}
}

function getDateString()
{
	var today 	= new Date();
	var year	= today.getFullYear();
	var month	= today.getMonth() + 1;
	var day		= today.getDate();
	
	return year + "-" + formatNumber(month) + "-" + formatNumber(day);
}

function checkFormItem( oForm, checkName, checkValue, checkFlag )
{
	if ( typeof oForm=="object" )
	{
		var i	= 0;
		for ( i=0; i<oForm.elements.length; i++ )
		{
			if ( oForm.elements[i].name==checkName &&
				oForm.elements[i].value==checkValue &&
				oForm.elements[i].type=="checkbox" )
			{
				oForm.elements[i].checked = checkFlag;
				alert( oForm.elements[i].checked );
			}
		}
	}
}

function enableFormItem( oForm, itemType, itemName, itemValue, itemFlag )
{
	if ( typeof oForm=="object" )
	{
		var i	= 0;
		alert( oForm.elements.length );
		for ( i=0; i<oForm.elements.length; i++ )
		{
			if ( oForm.elements[i].type==itemType )
				alert( oForm.elements[i].name + "=" + oForm.elements[i].value );
				
			if ( oForm.elements[i].name==itemName &&
				oForm.elements[i].value==itemValue &&
				oForm.elements[i].type==itemType )
			{
				alert( oForm.elements[i].disabled );
				oForm.elements[i].disabled = !itemFlag;
			}
		}
	}
}

/**
 * Function:		Cookie Op
 * Param:			sName		Cookie Name
 * Param:			sValue		Cookie Value
 **/ 
function SetCookie(sName, sValue)
{
	var date = new Date();
  	date.setTime( date.getTime() + 3600 * 24 * 365 * 1000 );
  	document.cookie = sName + "=" + escape(sValue) + "; expires=" + date.toGMTString();
}

function GetCookie(sName)
{
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0]) 
      return unescape(aCrumb[1]);
  }
  return null;
}

/**
 * Function:		Form Select Op
 * Param:			oSelect		Select Item
 * Param:			sValue			Select Value
 **/
function FormSelectSelectItem( oSelect, sValue )
{
	var options = oSelect.options;
	var i;
	for ( i=0; i<options.length; i++ )
	{
		if ( sValue==options[i].value )
		{
			oSelect.selectedIndex = i;
			return;
		}
	}
}

function FormInputSelectItem( oForm, itemName, sValue )
{
	if ( typeof oForm=="object" )
	{
		var i	= 0;
		for ( i=0; i<oForm.elements.length; i++ )
		{
			if ( oForm.elements[i].name==itemName )
			{
				oForm.elements[i].checked = ( oForm.elements[i].value==sValue );
			}
		}
	}
}

function GetFormElements( oForm, itemType, itemName )
{
	var items = new Array();
	if ( typeof oForm == "object" )
	{
		var i	= 0;
		for ( i=0; i<oForm.elements.length; i++ )
		{
			if ( oForm.elements[i].name==itemName  &&
				oForm.elements[i].type==itemType )
			{
				AddIntoArray( oForm.elements[i], items );
			}
		}
	}
	
	//alert( items );
	return items;
}

function validateForm( oForm )
{
	var pItem	= /input|select|textarea|text|checkbox|radio/ig;
	var vItem	= /<>|%|;|\\(|\\)|&|\\+|"|'/ig;
	
	if ( typeof oForm == "object" )
	{
		var i = 0;
		for ( i=0; i<oForm.elements.length; i++ )
		{
			var ele 	= oForm.elements[i];
			
			var eleType	= ele.type;
			var eleValue= ele.value;
			
			var flag	= eleType.match(pItem);
			if ( flag!=null )
			{
				flag = eleValue.match(vItem);
				if ( flag )
				{
					alert( "[" + flag + "] is a invalidate value" );
					ele.value = "";
					ele.focus();
					return false;
				}
			}
		}
	}
	
	return true;
}
