﻿//-----begin Numeric Control
    function FitTime(textBox, mask, AMPM)
    {
        if (mask == null) return;
        var texts = textBox.value.split(" ");
        var times = texts[0].split(":");
        times[0] = times[0] > 23 ? 23 : times[0];
        times[1] = times[1] > 59 ? 59 : times[1];
        times[1] = parseInt(times[1], 10) == 0 ? "00" : times[1];
        var suffix = null;
        if (textBox.value.indexOf("PM") > 0 || textBox.value.indexOf("AM") > 0 || AMPM)
        {
            suffix = AMPM ? AMPM.charAt(0) : null;
            if (!suffix)
                suffix = texts.length > 1 ? texts[1].charAt(0) : null;
            if (times[0] > 12)
            {
                suffix = "P";
                times[0] = times[0] - 12;
            }
            if (times[0] == 0 && suffix == "P")
            {
                times[0] = 11;
                times[1] = 59;
            }
            else if (times[0] == 0 && suffix == "A")
            {
                times[0] = 12;
                times[1] = "00";
            }
        }
        if (isNaN(parseInt(times[0], 10)) || isNaN(parseInt(times[1], 10)))
            textBox.value = "12:00 ";
        else
        {
            var hours = parseInt(times[0], 10);
            textBox.value = (hours < 10 ? "0" : "") + hours + ":" + times[1] + " ";
        }
        
        if (mask.get_AcceptAMPM() && suffix)
            mask.InsertAMPM(suffix);
            
        if (mask.get_AcceptAMPM() && textBox.value == "00:00 ")
        {
            textBox.value == "12:00 "
            mask.InsertAMPM("A");
        }
    }
    
    function ValidateTime(textBox, strData)
    {
        var arr = strData.split(":");
        if (arr.length < 1) return;//assume zero
        
        var hours = 0;
        var mins = 0;
        try
        {
            hours = parseInt(arr[0], 10);
        } catch (err)
        {
            alert("Count of hours must be numeric");
            textBox.focus();
            return;
        }
        
        if (hours < 0)
        {
            alert("Count of hours must be positive");
            textBox.focus();
            return;
        }
        if (arr.length < 2) return;
        try
        {
            mins = parseInt(arr[1], 10);
        } catch (err)
        {
            alert("Count of minutes must be numeric");
            textBox.focus();
            return;
        }
        
        if (mins > 59)
        {
            alert("Count of minutes must be less than 60");
            textBox.focus();
            return;
        }
    }

	function GetCurrentPosition(input)
	{
		begin = 0;
		if (input.setSelectionRange)
		{
			begin = parseInt(input.selectionStart, 10);
		}
		else if (document.selection)
		{
			var maxLength = input.getAttribute("maxLength");
			if (maxLength && input.value.length == maxLength)
				input.setAttribute("maxLength", maxLength + 1);
			var sel = document.selection.createRange();
			if (sel.text != "")
			{
				document.selection.clear();
				sel.text = String.fromCharCode(3);
			}
			else
				sel.text = String.fromCharCode(3);
			dummy = input.createTextRange();
			dummy.findText(String.fromCharCode(3));
			dummy.select();
			begin = input.value.indexOf(String.fromCharCode(3));
			document.selection.clear();
			if (maxLength && input.value.length == maxLength)
				input.setAttribute("maxLength", maxLength);
		}
		return begin;
	}
    function GetSelectionLength(input)
    {
		var length = 0;
		if (input.setSelectionRange)
		{
			length = input.selectionEnd - input.selectionStart;
		}
		else if (document.selection)
		{
			var sel = document.selection.createRange();
			length = sel.text.length;
		}
		return length;
    }
    function FitDigitContent(textBox, count, delimiter, maxLength, allowMinus)
    {
        var text = "";
        for(i = 0; i < textBox.value.length; i++)
            if ('0' <= textBox.value.charAt(i) && textBox.value.charAt(i) <= '9' || textBox.value.charAt(i) == delimiter || (textBox.value.charAt(i) == '-' && i == 0 && allowMinus))
                text += textBox.value.charAt(i);
                
        var shouldIncrement = false;
        if (text.indexOf(delimiter) >= 0 && text.length - text.indexOf(delimiter) > count + 1 )
        {
			if ('5' <= text.charAt(text.indexOf(delimiter) + count + 1) && text.charAt(text.indexOf(delimiter) + count + 1) <= '9')
				shouldIncrement = true;
            text = text.substring(0, text.indexOf(delimiter) + count + 1);            
        }
        if (count == 0)
            text = text.replace(delimiter, "");
        var i = 0;
        if (text.indexOf(delimiter) >= 0)
			i++;
		if (text.indexOf('-') >= 0)
			i++;
        if ((text.indexOf(delimiter) < 0) && (text.length > maxLength - count + i))
			text = text.substring(0, maxLength - count + i);
        if (maxLength > 0 && text.length > maxLength + i)
            text = text.substring(0, maxLength - 1 + i);                    	        
        //apply changes
        if (text != textBox.value)
            textBox.value = text;

        if (delimiter == ":")            
            ValidateTime(textBox, text);
    }
    function NumberBlur(textBox, count, delimiter)
    {
        if (textBox.value == "")
        {
            textBox.value = 0;
            return;
        }
        if (count == 0)
        {
            var number = Number.parseInvariant(textBox.value);
            textBox.value = number;
        }
        else
        {
            var re = /,/g;
            var text = textBox.value.replace(re, ".");
            re = /:/g;
            text = text.replace(re, ".");

            var number = Number.parseInvariant(text);
            text = number.format("N" + count);
            re = /,/g; // Sys.CultureInfo.InvariantCulture.numberFormat.NumberGroupSeparator
            text = text.replace(re, "");
            var splitted = text.split('.');
            if (splitted.length > 1)
                textBox.value = splitted[0] + delimiter + splitted[1];
            else
                textBox.value = splitted[0];
        }
    }
    function CheckDigitsContent(textBox, e, delimiter, maxLength, countAfterDelemiter, allowMinus)
    {
        var key;       
        if( e.keyCode)
            key = e.keyCode;
        else
            key = e.which;
        var countBeforeDelemiter = maxLength - countAfterDelemiter;
        var keyAsString = String.fromCharCode(key);
        if ( (((key < 48 || key > 57) && key != 8) &&                 
                (keyAsString != delimiter || textBox.value.indexOf(delimiter) > 0 ||
					countAfterDelemiter == 0) &&
                (keyAsString != '-' || !allowMinus)) || (countBeforeDelemiter <= 0)
           )
        {
            if ( e.keyCode )
                e.returnValue = false;
            else
                e.preventDefault();
            return;
        }
        if ((keyAsString == delimiter) || (keyAsString == '-'))
			return;
		if (GetSelectionLength(textBox) > 0)
			return;
		var currPos = GetCurrentPosition(textBox);
		var delIndex = textBox.value.indexOf(delimiter);
		var beforeDel = 0;
		var afterDel = 0;
		if (delIndex >= 0)
		{
			beforeDel = delIndex;
			afterDel = textBox.value.length - delIndex - 1;
		}
		else
		{
			beforeDel = textBox.value.length;
		}
		if (textBox.value.indexOf('-') >= 0)
			--beforeDel;
        if ( ( ((countAfterDelemiter == 0) || (delIndex < 0)) && (beforeDel >= countBeforeDelemiter)) ||
			 ( (countAfterDelemiter > 0) && 
				( ((currPos <= delIndex) && (beforeDel >= countBeforeDelemiter)) ||
				  ((currPos > delIndex) && (afterDel >= countAfterDelemiter)) 
				)
			 )
		   )
        {
			if ( e.keyCode )
				e.returnValue = false;
			else
				e.preventDefault();
        }
	}
//-----end Numeric Control

//-----begin ColorPicker Control
	function OnSelectColor(select, inputID)
	{
		var input = $get(inputID);
		var color = select.options[select.selectedIndex].value;
		input.style.backgroundColor = color;
	}
//-----end ColorPicker Control

function CheckDate(text, format, message)
{
    var result = null;
    var val = text.value;
    try{
        result = Date.parseInvariant(text.value, format);
    }catch(err){
    }
    if (result == null && text.value != "")
    {
        text.value = "";
        alert(message);
    }
        
    return val != "" ? result : 1;
}

function DateText_onfocusout(text, format, message) 
{
    if (!CheckDate(text, format.value, message))
        window.setTimeout(function(){text.focus();}, 10);
}

function DateText_OnDrop(e)
{
	e.target.focus();
}

/* click link button */
function DoLBClick(btnId)
{
    if (navigator.appName == "Microsoft Internet Explorer")
    {
        document.getElementById(btnId).click();
    }
    else
    {
        var url = document.getElementById(btnId).href;
        url = url.substring(11,url.length);
        eval(url);
    }
}

/* set hidden value and click link button */
function DoSHFAndLBClick(btnId,hidId,text)
{
    document.getElementById(hidId).value = text;
    if (navigator.appName == "Microsoft Internet Explorer")
    {
        document.getElementById(btnId).click();
    }
    else
    {
        var url = document.getElementById(btnId).href;
        url = url.substring(11,url.length);
        eval(url);
    }
}

function TrimString(string)
{
    return string.replace(/(^\s+)|(\s+$)/g, "");
}

function GetTableRow(element,offset)
{
    while (null != element && element.tagName != "TR")
    {
        element = element.parentNode;
    }

    if (null == element)
    {
        return null;
    }

    if (0 == offset)
    {
        return element;
    }

    while (null != element && 0 != offset)
    {
        element = (offset > 0) ? element.nextSibling : element.previousSibling;
        if ("TR" == element.tagName)
        {
            offset = (offset > 0) ? (offset - 1) : (offset + 1);
        }
    }

    return element;
}

function ValidateEMailAddress(address)
{
    var res = /^[\w\d_.-]+@[\w\d-]+[.]{1,1}[\w\d]{2,4}(?:[.]{1,1}[\w\d]{2,4})?$/
    return (null != res.exec(address));
}

function FindAbsPos(obj)
{
    var curleft = curtop = 0;
    if (obj.offsetParent)
    {
        do
        {
	        curleft += obj.offsetLeft;
	        curtop += obj.offsetTop;
	    }
	    while (obj = obj.offsetParent);
    }

    return [curleft,curtop];
}


