if(typeof(WebDatePicker2_all) != "object")
{
	var WebDatePicker2_all = new Object();
}

function WebDatePicker2_getElementById(elementId)
{
    if (document.getElementById) {
        return document.getElementById(elementId);
    }
    else if (document.all) {
        return document.all[elementId];
    }
    else if (document.layers) {
        return document.layers[elementId];
    }
    else return null;
}

function WebDatePicker2_getDatePickerById(id)
{
	var o = WebDatePicker2_all[id];
	if(o != null) return o;		
	return null;
}

var WebDatePicker2_ShowObject = null;
function WebDatePicker2_Document_OnClick()
{
	if((WebDatePicker2_ShowObject != null) && (WebDatePicker2_ShowObject.Icon != window.event.srcElement)&&(WebDatePicker2_ShowObject.Control != window.event.srcElement))
    {		
		WebDatePicker2_ShowObject.hideDialog();
	}
}
function WebDatePicker2_Window_OnUnLoad()
{
	document.detachEvent("onclick",WebDatePicker2_Document_OnClick);
	window.detachEvent("onunload",WebDatePicker2_Window_OnUnLoad);
}
document.attachEvent("onclick",WebDatePicker2_Document_OnClick);	
window.attachEvent("onunload",WebDatePicker2_Window_OnUnLoad);

function WebDatePicker2(clientId)
{
    this.Control = WebDatePicker2_getElementById(clientId);
    this.Icon = WebDatePicker2_getElementById(clientId+"_Image");
    this.DisplayMode = this.Control.getAttribute("DisplayMode");
    this.DateFormatString = this.Control.getAttribute("DateFormatString");
    if(this.DateFormatString == "")
    {
        this.DateFormatString ="MM/dd/yyyy";
    }
    this.HiddenSelectedValue = WebDatePicker2_getElementById(clientId+"_SelectedValue");
    this.Disabled = this.Control.disabled;
    this.OnSelectedChange = null;

    this._IsShowTime = false;
    this._SelectedDate = null;

    this.Dialog = WebDatePicker2Dialog;
    
    var me = this;
    if(me.Control.getAttribute("IsShowTime") == "true")
    {
        me._IsShowTime = true;
    }
    else
    {
        me._IsShowTime = false;
    }
    
    if(me.HiddenSelectedValue.value != "")
    {
        var d = new Date(me.HiddenSelectedValue.value);
        if(!isNaN(d))
        {
            this._SelectedDate = d;
        }
    }
    
	var evnt = me.Control.getAttribute("OnSelectedChange");
	if(evnt != "")
	{		
		this.OnSelectedChange = evnt;
	} 
	  
    if((me.DisplayMode != null) && (me.DisplayMode.toLowerCase() == "showhyperlink" ))
    {
        if(me.Icon != null)
        {
            me.Icon.onclick = function()
            {
	            if(WebDatePicker2_ShowObject != null && WebDatePicker2_ShowObject == me)
	            {
		            me.hideDialog();
	            }
	            else
	            {
                    me.showDialog();
	            }        

            }
        }
    }
    else
    {
        me.Control.onclick = function()
        {
            me.showDialog();
        }
    }

    this.getDisabled = function()
    {
        return me.Disabled;
    }
        
    this.setDisabled = function(v)
    {
        me.Disabled = v;
        if(me.Icon != null)
        {
            if(v == true)
            {
                me.Icon.style.display="none";
            }
            else
            {
                me.Icon.style.display="";
            }
        }
    }
    
	this.getDate = function()
	{
		return me._SelectedDate;
	}
	this.setDate = function(v)
	{
		if(v == null || typeof(v)=='undefined')
		{
            me.HiddenSelectedValue.value = "";
            me._SelectedDate = null;
            me.Control.value = "";
		}
		else if(v != me._SelectedDate)
        {
            me.Control.value = me.formatDate(v, me.DateFormatString);
            me.HiddenSelectedValue.value = me.formatDate(v, "MM/dd/yyyy HH:mm");
            me._SelectedDate = v;
            if(typeof(me.OnSelectedChange)=='string')
            {
	            try{bEventReturn = eval(me.OnSelectedChange);}catch(e){}
            }
            else if(me.OnSelectedChange != null && typeof(me.OnSelectedChange) == 'function')
            {
	            try{bEventReturn = me.OnSelectedChange(me.OnSelectedChange.arguments)}catch(e){}
            }                  
        }
	}    
    
    this.formatDate = function(date,dateFormat)
    {
        var year = date.getFullYear().toString();    
        var month = (date.getMonth()+1).toString().length==1?"0"+(date.getMonth()+1).toString():(date.getMonth()+1).toString();
        var day = date.getDate().toString().length==1?"0"+date.getDate().toString():date.getDate().toString();
        var hour = date.getHours().toString().length==1?"0"+date.getHours().toString():date.getHours().toString();
        var minute = date.getMinutes().toString().length==1?"0"+date.getMinutes().toString():date.getMinutes().toString(); 
        
        return me.DateFormatString.replace("MM",month).replace("dd",day).replace("yyyy",year).replace("HH",hour).replace("mm",minute);
    }
    
    this.hideDialog = function()
    {
	    me.Dialog.HideDialog();
	    WebDatePicker2_ShowObject = null;
    }
    this.showDialog = function()
    {
        if(!me.Disabled)
        {
    	    var e = me.Control;

		    var controlTop = 0;
		    var controlLeft = 0;		
		    var controlHeight = e.clientHeight;
		    var controlWidth = e.clientWidth;

            me.Dialog.onchange = function()
            {
                var selectDate = me.Dialog.GetDate();
                if((!isNaN(selectDate)) && (selectDate != me._SelectedDate))
                {
                    me.Control.value = me.formatDate(selectDate, me.DateFormatString);
                    me.HiddenSelectedValue.value = me.Control.value;
                    me._SelectedDate = selectDate;
	                if(typeof(me.OnSelectedChange)=='string')
	                {
		                try{bEventReturn = eval(me.OnSelectedChange);}catch(e){}
	                }
	                else if(me.OnSelectedChange != null && typeof(me.OnSelectedChange) == 'function')
	                {
		                try{bEventReturn = me.OnSelectedChange(me.OnSelectedChange.arguments)}catch(e){}
	                }                  
                }
                me.hideDialog();
            }
            if(me._SelectedDate == null)
            {
                me.Dialog.PutDate(new Date());
            }
            else
            {
                me.Dialog.PutDate(me._SelectedDate);
                me.Dialog.ShowDate = me.Dialog.GetDate();
            }

            me.Dialog.IsShowTime = me._IsShowTime;

		    var parent = me.Control;		
		    while ((parent != null)&&(parent.tagName != "BODY"))
		    {
			    controlTop += parent.offsetTop; 
			    controlTop -= parent.scrollTop;			
			    controlLeft += parent.offsetLeft;
			    controlLeft -= parent.scrollLeft;			
			    parent = parent.offsetParent;
		    }
    		
		    me.Dialog.SetLocation(controlLeft, controlTop + controlHeight + 4);
		    me.Dialog.ShowDialog();

		    WebDatePicker2_ShowObject = me;
		}
    }
}

function WebDatePicker2_Init(ControlId)
{
	var elem = WebDatePicker2_getElementById(ControlId);
	if(elem == null)
		return null;
	var me = new WebDatePicker2(ControlId);

	WebDatePicker2_all[ControlId] = me;
	return me
}
