text: /* ----------------------------------------------------------------------------- 
  
    jQuery DateTimePicker - Responsive flat design jQuery DateTime Picker plugin for Web & Mobile
    Version 0.1.25
    Copyright (c)2015 Curious Solutions LLP and Neha Kadam
    http://curioussolutions.github.io/DateTimePicker
    https://github.com/CuriousSolutions/DateTimePicker
  
   ----------------------------------------------------------------------------- */
  
  $.DateTimePicker = $.DateTimePicker || {
  
  	name: "DateTimePicker",
  
  	i18n: {}, // Internationalization Objects
  
  	defaults:  //Plugin Defaults
  	{
  		mode: "date",
  		defaultDate: null,
  	
  		dateSeparator: "-",
  		timeSeparator: ":",
  		timeMeridiemSeparator: " ",
  		dateTimeSeparator: " ",
  		monthYearSeparator: " ",
  	
  		dateTimeFormat: "dd-MM-yyyy HH:mm",
  		dateFormat: "dd-MM-yyyy",
  		timeFormat: "HH:mm",
  	
  		maxDate: null,
  		minDate:  null,
  	
  		maxTime: null,
  		minTime: null,
  	
  		maxDateTime: null,
  		minDateTime: null,
  	
  		shortDayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
  		fullDayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
  		shortMonthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
  		fullMonthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
  		labels: null, /*{"year": "Year", "month": "Month", "day": "Day", "hour": "Hour", "minutes": "Minutes", "seconds": "Seconds", "meridiem": "Meridiem"}*/
  
  		minuteInterval: 1,
  		roundOffMinutes: true,
  
  		secondsInterval: 1,
  		roundOffSeconds: true,
  	
  		titleContentDate: "Set Date",
  		titleContentTime: "Set Time",
  		titleContentDateTime: "Set Date & Time",
  	
  		buttonsToDisplay: ["HeaderCloseButton", "SetButton", "ClearButton"],
  		setButtonContent: "Set",
  		clearButtonContent: "Clear",
      	incrementButtonContent: "+",
      	decrementButtonContent: "-",
  		setValueInTextboxOnEveryClick: false,
  	
  		animationDuration: 400,
  	
  		isPopup: true,
  		parentElement: "body",
  
  		language: "",
  	
  		init: null, // init(oDateTimePicker)
  		addEventHandlers: null,  // addEventHandlers(oDateTimePicker)
  		beforeShow: null,  // beforeShow(oInputElement)
  		afterShow: null,  // afterShow(oInputElement)
  		beforeHide: null,  // beforeHide(oInputElement)
  		afterHide: null,  // afterHide(oInputElement)
  		buttonClicked: null,  // buttonClicked(sButtonType, oInputElement) where sButtonType = "SET"|"CLEAR"|"CANCEL"|"TAB"
  		settingValueOfElement: null, // settingValueOfElement(sValue, dDateTime, oInputElement)
  		formatHumanDate: null,  // formatHumanDate(oDateTime, sMode, sFormat)
  	
  		parseDateTimeString: null, // parseDateTimeString(sDateTime, sMode, oInputField)
  		formatDateTimeString: null, // formatDateTimeString(oDateTime, sMode, oInputField)
  	},
  
  	dataObject: // Temporary Variables For Calculation Specific to DateTimePicker Instance
  	{
  	
  		dCurrentDate: new Date(),
  		iCurrentDay: 0,
  		iCurrentMonth: 0,
  		iCurrentYear: 0,
  		iCurrentHour: 0,
  		iCurrentMinutes: 0,
  		iCurrentSeconds: 0,
  		sCurrentMeridiem: "",
  		iMaxNumberOfDays: 0,
  	
  		sDateFormat: "",
  		sTimeFormat: "",
  		sDateTimeFormat: "",
  	
  		dMinValue: null,
  		dMaxValue: null,
  	
  		sArrInputDateFormats: [],
  		sArrInputTimeFormats: [],
  		sArrInputDateTimeFormats: [],
  
  		bArrMatchFormat: [],
  		bDateMode: false,
  		bTimeMode: false,
  		bDateTimeMode: false,
  	
  		oInputElement: null,
  
  		iTabIndex: 0,
  		bElemFocused: false,
  	
  		bIs12Hour: false	
  	}
  
  };
  
  $.cf = {
  
  	_isValid: function(sValue)
  	{
  		return (sValue !== undefined && sValue !== null && sValue !== "");
  	},
  
  	_compare: function(sString1, sString2)
  	{
  		var bString1 = (sString1 !== undefined && sString1 !== null),
  		bString2 = (sString2 !== undefined && sString2 !== null);
  		if(bString1 && bString2)
  		{
  			if(sString1.toLowerCase() === sString2.toLowerCase())
  				return true;
  			else
  				return false;
  		}
  		else
  			return false;			
  	}
  
  };
  
  (function (factory) 
  {
      if(typeof define === 'function' && define.amd) 
      {
          // AMD. Register as an anonymous module.
          define(['jquery'], factory);
      }
      else if(typeof exports === 'object') 
      {
          // Node/CommonJS
          module.exports = factory(require('jquery'));
      }
      else 
      {
          // Browser globals
          factory(jQuery);
      }
  }(function ($) 
  {
  	"use strict";
  
  	function DateTimePicker(element, options)
  	{
  		this.element = element;
  
  		var sLanguage = "";
  		sLanguage = ($.cf._isValid(options) && $.cf._isValid(options.language)) ? options.language : $.DateTimePicker.defaults.language;
  		this.settings = $.extend({}, $.DateTimePicker.defaults, options, $.DateTimePicker.i18n[sLanguage]);
  		this.options = options;
  
  		this.oData = $.extend({}, $.DateTimePicker.dataObject);
  		this._defaults = $.DateTimePicker.defaults;
  		this._name = $.DateTimePicker.name;
  
  		this.init();
  	}
  
  	$.fn.DateTimePicker = function (options)
  	{
  		var oDTP = $(this).data(),
  		sArrDataKeys = oDTP ? Object.keys(oDTP) : [],
  		iKey, sKey;
  		
  		if(typeof options === "string")
  		{			
  			if($.cf._isValid(oDTP))
  			{
  				if(options === "destroy")
  				{
  					if(sArrDataKeys.length > 0)
  					{
  						for(iKey in sArrDataKeys)
  						{
  							sKey = sArrDataKeys[iKey];
  							if(sKey.search("plugin_DateTimePicker") !== -1)
  							{
  								$(document).unbind("click.DateTimePicker");
  								$(document).unbind("keydown.DateTimePicker");
  								$(document).unbind("keyup.DateTimePicker");
  							
  								$(this).children().remove();
  								$(this).removeData();
  								$(this).unbind();
  								$(this).removeClass("dtpicker-overlay dtpicker-mobile");
  
  								oDTP = oDTP[sKey];
  							
  								console.log("Destroyed DateTimePicker Object");
  								console.log(oDTP);
  							
  								break;
  							}
  						}
  					}
  					else
  					{
  						console.log("No DateTimePicker Object Defined For This Element");
  					}
  				}
  				else if(options === "object")
  				{
  					if(sArrDataKeys.length > 0)
  					{
  						for(iKey in sArrDataKeys)
  						{
  							sKey = sArrDataKeys[iKey];
  							if(sKey.search("plugin_DateTimePicker") !== -1)
  							{
  								return oDTP[sKey];
  							}
  						}
  					}
  					else
  					{
  						console.log("No DateTimePicker Object Defined For This Element");
  					}
  				}
  			}
  		}
  		else
  		{
  			return this.each(function() 
  			{
  				$.removeData(this, "plugin_DateTimePicker");
  				if(!$.data(this, "plugin_DateTimePicker"))
  					$.data(this, "plugin_DateTimePicker", new DateTimePicker(this, options));
  			});
  		}
  	};
  
  	DateTimePicker.prototype = {
  	
  		// Public Method
  		init: function () 
  		{
  			var oDTP = this;					
  		
  			oDTP._setDateFormatArray(); // Set DateFormatArray
  			oDTP._setTimeFormatArray(); // Set TimeFormatArray
  			oDTP._setDateTimeFormatArray(); // Set DateTimeFormatArray
  		
  			if(oDTP.settings.isPopup)
  			{
  				oDTP._createPicker();
  				$(oDTP.element).addClass("dtpicker-mobile");
  			}
  
  			if(oDTP.settings.init)
  				oDTP.settings.init.call(oDTP);
  
  			oDTP._addEventHandlersForInput();
  		},
  	
  		_setDateFormatArray: function()
  		{
  			var oDTP = this;
  		
  			oDTP.oData.sArrInputDateFormats = [];		
  			var sDate = "";
  		
  			//  0 - "dd-MM-yyyy"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "yyyy";
  			oDTP.oData.sArrInputDateFormats.push(sDate);
  		
  			//  1 - "MM-dd-yyyy"
  			sDate = "MM" + oDTP.settings.dateSeparator + "dd" + oDTP.settings.dateSeparator + "yyyy";
  			oDTP.oData.sArrInputDateFormats.push(sDate);
  		
  			//  2 - "yyyy-MM-dd"
  			sDate = "yyyy" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "dd";
  			oDTP.oData.sArrInputDateFormats.push(sDate);
  		
  			//  3 - "dd-MMM-yyyy"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MMM" + oDTP.settings.dateSeparator + "yyyy";
  			oDTP.oData.sArrInputDateFormats.push(sDate);
  
  			//  4 - "MM yyyy"
  			sDate = "MM" + oDTP.settings.monthYearSeparator + "yyyy";
  			oDTP.oData.sArrInputDateFormats.push(sDate);
  
  			//  5 - "MMM yyyy"
  			sDate = "MMM" + oDTP.settings.monthYearSeparator + "yyyy";
  			oDTP.oData.sArrInputDateFormats.push(sDate);
  
  			//  6 - "MMM yyyy"
  			sDate = "MMMM" + oDTP.settings.monthYearSeparator + "yyyy";
  			oDTP.oData.sArrInputDateFormats.push(sDate);
  		},
  	
  		_setTimeFormatArray: function()
  		{
  			var oDTP = this;
  		
  			oDTP.oData.sArrInputTimeFormats = [];
  			var sTime = "";
  
  			//  0 - "hh:mm:ss AA"
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss" + oDTP.settings.timeMeridiemSeparator + "AA";
  			oDTP.oData.sArrInputTimeFormats.push(sTime);
  		
  			//  1 - "HH:mm:ss"
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss";
  			oDTP.oData.sArrInputTimeFormats.push(sTime);
  		
  			//  2 - "hh:mm AA"
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeMeridiemSeparator + "AA";
  			oDTP.oData.sArrInputTimeFormats.push(sTime);
  		
  			//  3 - "HH:mm"
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm";
  			oDTP.oData.sArrInputTimeFormats.push(sTime);
  		},
  	
  		_setDateTimeFormatArray: function()
  		{
  			var oDTP = this;
  		
  			oDTP.oData.sArrInputDateTimeFormats = [];
  			var sDate = "", sTime = "", sDateTime = "";
  
  			//  0 - "dd-MM-yyyy HH:mm:ss"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  1 - "dd-MM-yyyy hh:mm:ss AA"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  2 - "MM-dd-yyyy HH:mm:ss"
  			sDate = "MM" + oDTP.settings.dateSeparator + "dd" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  3 - "MM-dd-yyyy hh:mm:ss AA"
  			sDate = "MM" + oDTP.settings.dateSeparator + "dd" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  4 - "yyyy-MM-dd HH:mm:ss"
  			sDate = "yyyy" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "dd";
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  5 - "yyyy-MM-dd hh:mm:ss AA"
  			sDate = "yyyy" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "dd";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  			
  			//  6 - "dd-MMM-yyyy hh:mm:ss"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MMM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  			
  			//  7 - "dd-MMM-yyyy hh:mm:ss AA"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MMM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeSeparator + "ss" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  
  			//--------------
  		
  			//  8 - "dd-MM-yyyy HH:mm"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  9 - "dd-MM-yyyy hh:mm AA"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  10 - "MM-dd-yyyy HH:mm"
  			sDate = "MM" + oDTP.settings.dateSeparator + "dd" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  11 - "MM-dd-yyyy hh:mm AA"
  			sDate = "MM" + oDTP.settings.dateSeparator + "dd" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  12 - "yyyy-MM-dd HH:mm"
  			sDate = "yyyy" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "dd";
  			sTime = "HH" + oDTP.settings.timeSeparator + "mm";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		
  			//  13 - "yyyy-MM-dd hh:mm AA"
  			sDate = "yyyy" + oDTP.settings.dateSeparator + "MM" + oDTP.settings.dateSeparator + "dd";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  			
  			//  14 - "dd-MMM-yyyy hh:mm"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MMM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  			
  			//  15 - "dd-MMM-yyyy hh:mm AA"
  			sDate = "dd" + oDTP.settings.dateSeparator + "MMM" + oDTP.settings.dateSeparator + "yyyy";
  			sTime = "hh" + oDTP.settings.timeSeparator + "mm" + oDTP.settings.timeMeridiemSeparator + "AA";
  			sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  			oDTP.oData.sArrInputDateTimeFormats.push(sDateTime);
  		},
  
  		_matchFormat: function(sMode, sFormat)
  		{
  			var oDTP = this;
  
  			oDTP.oData.bArrMatchFormat = [];
  			oDTP.oData.bDateMode = false;
  			oDTP.oData.bTimeMode = false;
  			oDTP.oData.bDateTimeMode = false;
  			var oArrInput = [], iTempIndex;
  
  			sMode = $.cf._isValid(sMode) ? sMode : oDTP.settings.mode;
  			if($.cf._compare(sMode, "date"))
  			{
  				sFormat = $.cf._isValid(sFormat) ? sFormat : oDTP.oData.sDateFormat;
  				oDTP.oData.bDateMode = true;
  				oArrInput = oDTP.oData.sArrInputDateFormats;
  			}
  			else if($.cf._compare(sMode, "time"))
  			{
  				sFormat = $.cf._isValid(sFormat) ? sFormat : oDTP.oData.sTimeFormat;
  				oDTP.oData.bTimeMode = true;
  				oArrInput = oDTP.oData.sArrInputTimeFormats;
  			}
  			else if($.cf._compare(sMode, "datetime"))
  			{
  				sFormat = $.cf._isValid(sFormat) ? sFormat : oDTP.oData.sDateTimeFormat;
  				oDTP.oData.bDateTimeMode = true;
  				oArrInput = oDTP.oData.sArrInputDateTimeFormats;
  			}
  
  			for(iTempIndex = 0; iTempIndex < oArrInput.length; iTempIndex++)
  			{
  				oDTP.oData.bArrMatchFormat.push(
  					$.cf._compare(sFormat, oArrInput[iTempIndex])
  				);
  			}
  		},
  
  		_setMatchFormat: function(iArgsLength, sMode, sFormat)
  		{
  			var oDTP = this;
  
  			if(iArgsLength > 0)
  				oDTP._matchFormat(sMode, sFormat);
  		},
  
  		_createPicker: function()
  		{
  			var oDTP = this;
  		
  			$(oDTP.element).addClass("dtpicker-overlay");
  			$(".dtpicker-overlay").click(function(e)
  			{
  				oDTP._hidePicker("");
  			});
  		
  			var sTempStr = "";	
  			sTempStr += "<div class='dtpicker-bg'>";
  			sTempStr += "<div class='dtpicker-cont'>";
  			sTempStr += "<div class='dtpicker-content'>";
  			sTempStr += "<div class='dtpicker-subcontent'>";
  			sTempStr += "</div>";
  			sTempStr += "</div>";
  			sTempStr += "</div>";
  			sTempStr += "</div>";
  			$(oDTP.element).html(sTempStr);
  		},
  	
  		_addEventHandlersForInput: function()
  		{
  			var oDTP = this;
  		
  			oDTP.oData.oInputElement = null;
  
  			$(oDTP.settings.parentElement).find("input[type='date'], input[type='time'], input[type='datetime']").each(function()
  			{
  				$(this).attr("type", "text");
  				$(this).attr("data-field", $(this).attr("type"));
  			});	
          
  			var sel = "[data-field='date'], [data-field='time'], [data-field='datetime']";
  			$(oDTP.settings.parentElement).off("focus", sel, oDTP._inputFieldFocus);
  			$(oDTP.settings.parentElement).on ("focus", sel, {"obj": oDTP}, oDTP._inputFieldFocus);
  		
  			$(oDTP.settings.parentElement).off("click", sel, oDTP._inputFieldClick);
  			$(oDTP.settings.parentElement).on ("click", sel, {"obj": oDTP}, oDTP._inputFieldClick);
  
  			if(oDTP.settings.addEventHandlers) //this is not an event-handler really. Its just a function called
  				oDTP.settings.addEventHandlers.call(oDTP); // which could add EventHandlers
  		},
  	
  		_inputFieldFocus: function(e)
  		{
  			var oDTP = e.data.obj;
  			oDTP.showDateTimePicker(this);
  			oDTP.oData.bMouseDown = false;
  		},
  
  		_inputFieldClick: function(e)
  		{
            	var oDTP = e.data.obj;
  			if(!$.cf._compare($(this).prop("tagName"), "input"))
  			{
  				oDTP.showDateTimePicker(this);
  			}
  			e.stopPropagation();
  		},
  
  		// Public Method
  		getDateObjectForInputField: function(oInputField)
  		{
  			var oDTP = this;
  
  			if($.cf._isValid(oInputField))
  			{
  				var sDateTime = oDTP._getValueOfElement(oInputField),
  				sMode = $(oInputField).data("field"),
  				sFormat = "",
  				dInput;
  
  				if(!$.cf._isValid(sMode))
  		    		sMode = oDTP.settings.mode;
  		    	if(! oDTP.settings.formatDateTimeString)
  		    	{
  		    		sFormat = $(oInputField).data("format");
  			    	if(!$.cf._isValid(sFormat))
  			    	{
  				    	if($.cf._compare(sMode, "date"))
  				    		sFormat = oDTP.settings.dateFormat;
  				    	else if($.cf._compare(sMode, "time"))
  				        	sFormat = oDTP.settings.timeFormat;
  				        else if($.cf._compare(sMode, "datetime"))
  				        	sFormat = oDTP.settings.dateTimeFormat;
  				    }
  
  				    oDTP._matchFormat(sMode, sFormat);
  
  			    	if($.cf._compare(sMode, "date"))
  			    		dInput = oDTP._parseDate(sDateTime);
  			    	else if($.cf._compare(sMode, "time"))
  			        	dInput = oDTP._parseTime(sDateTime);
  			        else if($.cf._compare(sMode, "datetime"))
  			        	dInput = oDTP._parseDateTime(sDateTime);
  
  				}
  				else
  				{
  					dInput = oDTP.settings.parseDateTimeString.call(oDTP, sDateTime, sMode, $(oInputField));
  				}
  
  		        return dInput;
  			}
  		},
  
  		// Public Method
  		setDateTimeStringInInputField: function(oInputField, dInput)
  		{
  			var oDTP = this;
  
  			dInput = dInput || oDTP.oData.dCurrentDate;
  		
  			var oArrElements;
  			if($.cf._isValid(oInputField))
  			{
  				oArrElements = [];
  				if(typeof oInputField === "string")
  					oArrElements.push(oInputField);
  				else if(typeof oInputField === "object")
  					oArrElements = oInputField;
  			}
  			else
  			{
  				if($.cf._isValid(oDTP.settings.parentElement))
  				{
  					oArrElements = $(oDTP.settings.parentElement).find("[data-field='date'], [data-field='time'], [data-field='datetime']");
  				}
  				else
  				{
  					oArrElements = $("[data-field='date'], [data-field='time'], [data-field='datetime']");
  				}
  			}
  		
  			oArrElements.each(function()
  			{
  				var oElement = this,
  				sMode, sFormat, bIs12Hour, sOutput;
  			
  		        sMode = $(oElement).data("field");
  		        if(!$.cf._isValid(sMode))
  		    		sMode = oDTP.settings.mode;
  		    
  		    	sFormat = "Custom";
  		    	bIs12Hour = false;
  		    	if(! oDTP.settings.formatDateTimeString)
  		    	{
  			    	sFormat = $(oElement).data("format");
  			    	if(!$.cf._isValid(sFormat))
  			    	{
  				    	if($.cf._compare(sMode, "date"))
  				    		sFormat = oDTP.settings.dateFormat;
  				    	else if($.cf._compare(sMode, "time"))
  				        	sFormat = oDTP.settings.timeFormat;
  				        else if($.cf._compare(sMode, "datetime"))
  				        	sFormat = oDTP.settings.dateTimeFormat;
  				    }
  
  				    bIs12Hour = oDTP.getIs12Hour(sMode, sFormat);
  				}
  
  				sOutput = oDTP._setOutput(sMode, sFormat, bIs12Hour, dInput, oElement);
  				oDTP._setValueOfElement(sOutput, $(oElement));
  			});
  		},
  
  		// Public Method
  		getDateTimeStringInFormat: function(sMode, sFormat, dInput)
  		{
  			var oDTP = this;
  			return oDTP._setOutput(sMode, sFormat, oDTP.getIs12Hour(sMode, sFormat), dInput);
  		},
  	
  		// Public Method
  		showDateTimePicker: function(oElement)
  		{
  			var oDTP = this;
  			
  			if(oDTP.oData.oInputElement !== null)
  				oDTP._hidePicker(0, oElement);
  			else
  				oDTP._showPicker(oElement);
  		},
  	
  		_setButtonAction: function(bFromTab)
  		{
  			var oDTP = this;
  		
  			if(oDTP.oData.oInputElement !== null)
  			{
  				oDTP._setValueOfElement(oDTP._setOutput());
  				
  				if(bFromTab)
  				{
  					if(oDTP.settings.buttonClicked)
  						oDTP.settings.buttonClicked.call(oDTP, "TAB", oDTP.oData.oInputElement);
  					oDTP._hidePicker(0);
  				}
  				else
  					oDTP._hidePicker("");					
  			}
  		},
  
  		_setOutput: function(sMode, sFormat, bIs12Hour, dCurrentDate, oElement)
  		{
  			var oDTP = this;
  		
  			dCurrentDate = $.cf._isValid(dCurrentDate) ? dCurrentDate : oDTP.oData.dCurrentDate;
  			bIs12Hour = bIs12Hour || oDTP.oData.bIs12Hour;
  
  			var oDTV = oDTP._setVariablesForDate(dCurrentDate, true, true);
  		
  			var sOutput = "",
  			oFDate = oDTP._formatDate(oDTV),
  			oFTime = oDTP._formatTime(oDTV),
  			oFDT = $.extend({}, oFDate, oFTime),
  		
  			sDateStr = "", sTimeStr = "",
  			iArgsLength = Function.length,
  			bAddSeconds;
  
  			if(oDTP.settings.formatDateTimeString)
  			{
  				sOutput = oDTP.settings.formatDateTimeString.call(oDTP, oFDT, sMode, oElement);
  			}
  			else
  			{
  				// Set bDate, bTime, bDateTime & bArrMatchFormat based on arguments of this function 
  				oDTP._setMatchFormat(iArgsLength, sMode, sFormat);
  
  				if(oDTP.oData.bDateMode)
  				{
  					if(oDTP.oData.bArrMatchFormat[0])
  					{
  						sOutput = oFDT.dd + oDTP.settings.dateSeparator + oFDT.MM + oDTP.settings.dateSeparator + oFDT.yyyy;
  					}
  					else if(oDTP.oData.bArrMatchFormat[1])
  					{
  						sOutput = oFDT.MM + oDTP.settings.dateSeparator + oFDT.dd + oDTP.settings.dateSeparator + oFDT.yyyy;
  					}
  					else if(oDTP.oData.bArrMatchFormat[2])
  					{
  						sOutput = oFDT.yyyy + oDTP.settings.dateSeparator + oFDT.MM + oDTP.settings.dateSeparator + oFDT.dd;
  					}
  					else if(oDTP.oData.bArrMatchFormat[3])
  					{
  						sOutput = oFDT.dd + oDTP.settings.dateSeparator + oFDT.monthShort + oDTP.settings.dateSeparator + oFDT.yyyy;
  					}
  					else if(oDTP.oData.bArrMatchFormat[4])
  					{
  						sOutput = oFDT.MM + oDTP.settings.monthYearSeparator + oFDT.yyyy;
  					}
  					else if(oDTP.oData.bArrMatchFormat[5])
  					{
  						sOutput = oFDT.monthShort + oDTP.settings.monthYearSeparator + oFDT.yyyy;
  					}
  					else if(oDTP.oData.bArrMatchFormat[6])
  					{
  						sOutput = oFDT.month + oDTP.settings.monthYearSeparator + oFDT.yyyy;
  					}
  				}
  				else if(oDTP.oData.bTimeMode)
  				{
  					if(oDTP.oData.bArrMatchFormat[0])
  					{
  						sOutput = oFDT.hh + oDTP.settings.timeSeparator + oFDT.mm + oDTP.settings.timeSeparator + oFDT.ss + oDTP.settings.timeMeridiemSeparator + oFDT.ME;
  					}
  					else if(oDTP.oData.bArrMatchFormat[1])
  					{
  						sOutput = oFDT.HH + oDTP.settings.timeSeparator + oFDT.mm + oDTP.settings.timeSeparator + oFDT.ss;
  					}
  					else if(oDTP.oData.bArrMatchFormat[2])
  					{
  						sOutput = oFDT.hh + oDTP.settings.timeSeparator + oFDT.mm + oDTP.settings.timeMeridiemSeparator + oFDT.ME;
  					}
  					else if(oDTP.oData.bArrMatchFormat[3])
  					{
  						sOutput = oFDT.HH + oDTP.settings.timeSeparator + oFDT.mm;
  					}
  				}
  				else if(oDTP.oData.bDateTimeMode) 
  				{
  					// Date Part - "dd-MM-yyyy"
  					if(oDTP.oData.bArrMatchFormat[0] || 
  						oDTP.oData.bArrMatchFormat[1] ||
  						oDTP.oData.bArrMatchFormat[8] || 
  						oDTP.oData.bArrMatchFormat[9])
  					{
  						sDateStr = oFDT.dd + oDTP.settings.dateSeparator + oFDT.MM + oDTP.settings.dateSeparator + oFDT.yyyy;
  					}
  					// Date Part - "MM-dd-yyyy"
  					else if(oDTP.oData.bArrMatchFormat[2] || 
  							oDTP.oData.bArrMatchFormat[3] ||
  							oDTP.oData.bArrMatchFormat[10] || 
  							oDTP.oData.bArrMatchFormat[11])
  					{
  						sDateStr = oFDT.MM + oDTP.settings.dateSeparator + oFDT.dd + oDTP.settings.dateSeparator + oFDT.yyyy;
  					}
  					// Date Part - "yyyy-MM-dd"
  					else if(oDTP.oData.bArrMatchFormat[4] || 
  							oDTP.oData.bArrMatchFormat[5] ||
  							oDTP.oData.bArrMatchFormat[12] || 
  							oDTP.oData.bArrMatchFormat[13])
  					{
  						sDateStr = oFDT.yyyy + oDTP.settings.dateSeparator + oFDT.MM + oDTP.settings.dateSeparator + oFDT.dd;
  					}
  					// Date Part - "dd-MMM-yyyy"
  					else if(oDTP.oData.bArrMatchFormat[6] || 
  							oDTP.oData.bArrMatchFormat[7] ||
  							oDTP.oData.bArrMatchFormat[14] || 
  							oDTP.oData.bArrMatchFormat[15])
  					{
  						sDateStr = oFDT.dd + oDTP.settings.dateSeparator + oFDT.monthShort + oDTP.settings.dateSeparator + oFDT.yyyy;
  					}
  				
  					bAddSeconds = oDTP.oData.bArrMatchFormat[0] || 
  							oDTP.oData.bArrMatchFormat[1] ||
  							oDTP.oData.bArrMatchFormat[2] || 
  							oDTP.oData.bArrMatchFormat[3] ||
  							oDTP.oData.bArrMatchFormat[4] || 
  							oDTP.oData.bArrMatchFormat[5] ||
  							oDTP.oData.bArrMatchFormat[6] || 
  							oDTP.oData.bArrMatchFormat[7];
  					if(bIs12Hour)
  					{
  						if(bAddSeconds)
  						{
  							sTimeStr = oFDT.hh + oDTP.settings.timeSeparator + oFDT.mm + oDTP.settings.timeSeparator + oFDT.ss + oDTP.settings.timeMeridiemSeparator + oFDT.ME;
  						}
  						else
  						{
  							sTimeStr = oFDT.hh + oDTP.settings.timeSeparator + oFDT.mm + oDTP.settings.timeMeridiemSeparator + oFDT.ME;
  						}
  					}
  					else
  					{
  						if(bAddSeconds)
  						{
  							sTimeStr = oFDT.HH + oDTP.settings.timeSeparator + oFDT.mm + oDTP.settings.timeSeparator + oFDT.ss;
  						}
  						else
  						{
  							sTimeStr = oFDT.HH + oDTP.settings.timeSeparator + oFDT.mm;
  						}
  					}
  				
  					if(sDateStr !== "" && sTimeStr !== "")
  						sOutput = sDateStr + oDTP.settings.dateTimeSeparator + sTimeStr;
  				}
  			
  				// Reset bDate, bTime, bDateTime & bArrMatchFormat to original values
  				oDTP._setMatchFormat(iArgsLength);
  			}
  
  			return sOutput;
  		},
  	
  		_clearButtonAction: function()
  		{
  			var oDTP = this;
  		
  			if(oDTP.oData.oInputElement !== null)
  			{
  				oDTP._setValueOfElement("");
  			}
  			oDTP._hidePicker("");
  		},
  	
  		_setOutputOnIncrementOrDecrement: function()
  		{
  			var oDTP = this;
  		
  			if($.cf._isValid(oDTP.oData.oInputElement) && oDTP.settings.setValueInTextboxOnEveryClick)
  			{
  				oDTP._setValueOfElement(oDTP._setOutput());
  			}
  		},
  	
  		_showPicker: function(oElement)
  		{
  			var oDTP = this;
  
  			if(oDTP.oData.oInputElement === null)
  			{
  				oDTP.oData.oInputElement = oElement;
  				oDTP.oData.iTabIndex = parseInt($(oElement).attr("tabIndex"));
  			
  				var sMode = $(oElement).data("field") || "",
  				sMinValue = $(oElement).data("min") || "",
  				sMaxValue = $(oElement).data("max") || "",
  				sFormat = $(oElement).data("format") || "",
  				sView = $(oElement).data("view") || "",
  				sStartEnd = $(oElement).data("startend") || "",
  				sStartEndElem = $(oElement).data("startendelem") || "",
  				sCurrent = oDTP._getValueOfElement(oElement) || "";
  			
  				if(sView !== "")
  				{
  					if($.cf._compare(sView, "Popup"))
  						oDTP.setIsPopup(true);
  					else 
  						oDTP.setIsPopup(false);
  				}
  			
  				if(!oDTP.settings.isPopup)
  				{
  					oDTP._createPicker();
  				
  					var iElemTop = $(oDTP.oData.oInputElement).offset().top + $(oDTP.oData.oInputElement).outerHeight(),
  					iElemLeft = $(oDTP.oData.oInputElement).offset().left,
  					iElemWidth =  $(oDTP.oData.oInputElement).outerWidth();
  				
  					$(oDTP.element).css({position: "absolute", top: iElemTop, left: iElemLeft, width: iElemWidth, height: "auto"});
  				}
  
  				if(oDTP.settings.beforeShow)
  					oDTP.settings.beforeShow.call(oDTP, oElement);
  			
  				sMode = $.cf._isValid(sMode) ? sMode : oDTP.settings.mode;
  				oDTP.settings.mode = sMode;
  				if(!$.cf._isValid(sFormat))
  				{
  					if($.cf._compare(sMode, "date"))
  						sFormat = oDTP.settings.dateFormat;
  					else if($.cf._compare(sMode, "time"))
  						sFormat = oDTP.settings.timeFormat;
  					else if($.cf._compare(sMode, "datetime"))
  						sFormat = oDTP.settings.dateTimeFormat;
  				}
  
  				oDTP._matchFormat(sMode, sFormat);
  			
  				oDTP.oData.dMinValue = null;
  				oDTP.oData.dMaxValue = null;
  				oDTP.oData.bIs12Hour = false;
  
  				var sMin, sMax,
  				sTempDate, dTempDate,
  				sTempTime, dTempTime,
  				sTempDateTime, dTempDateTime;
  			
  				if(oDTP.oData.bDateMode)
  				{
  					sMin = sMinValue || oDTP.settings.minDate;
  					sMax = sMaxValue || oDTP.settings.maxDate;
  				
  					oDTP.oData.sDateFormat = sFormat;
  				
  					if($.cf._isValid(sMin))
  						oDTP.oData.dMinValue = oDTP._parseDate(sMin);
  					if($.cf._isValid(sMax))
  						oDTP.oData.dMaxValue = oDTP._parseDate(sMax);
  				
  					if(sStartEnd !== "" && ($.cf._compare(sStartEnd, "start") || $.cf._compare(sStartEnd, "end")) && sStartEndElem !== "")
  					{
  						if($(sStartEndElem).length >= 1)
  						{
  							sTempDate = oDTP._getValueOfElement($(sStartEndElem));
  							if(sTempDate !== "")
  							{
  								if(oDTP.settings.parseDateTimeString)
  									dTempDate = oDTP.settings.parseDateTimeString.call(oDTP, sTempDate, sMode, $(sStartEndElem));
  								else
  									dTempDate = oDTP._parseDate(sTempDate);
  
  								if($.cf._compare(sStartEnd, "start"))
  								{
  									if($.cf._isValid(sMax))
  									{
  										if(oDTP._compareDates(dTempDate, oDTP.oData.dMaxValue) < 0)
  											oDTP.oData.dMaxValue = new Date(dTempDate);
  									}
  									else
  										oDTP.oData.dMaxValue = new Date(dTempDate);
  								}
  								else if($.cf._compare(sStartEnd, "end"))
  								{
  									if($.cf._isValid(sMin))
  									{
  										if(oDTP._compareDates(dTempDate, oDTP.oData.dMinValue) > 0)
  											oDTP.oData.dMinValue = new Date(dTempDate);
  									}
  									else
  										oDTP.oData.dMinValue = new Date(dTempDate);
  								}
  							}
  						}
  					}
  				
  					if(oDTP.settings.parseDateTimeString)
  						oDTP.oData.dCurrentDate = oDTP.settings.parseDateTimeString.call(oDTP, sCurrent, sMode, $(oElement));
  					else
  						oDTP.oData.dCurrentDate = oDTP._parseDate(sCurrent);
  
  					oDTP.oData.dCurrentDate.setHours(0);
  					oDTP.oData.dCurrentDate.setMinutes(0);
  					oDTP.oData.dCurrentDate.setSeconds(0);
  				}
  				else if(oDTP.oData.bTimeMode)
  				{
  					sMin = sMinValue || oDTP.settings.minTime;
  					sMax = sMaxValue || oDTP.settings.maxTime;
  				
  					oDTP.oData.sTimeFormat = sFormat;
  				
  					if($.cf._isValid(sMin))
  						oDTP.oData.dMinValue = oDTP._parseTime(sMin);
  					if($.cf._isValid(sMax))
  						oDTP.oData.dMaxValue = oDTP._parseTime(sMax);
  				
  					if(sStartEnd !== "" && ($.cf._compare(sStartEnd, "start") || $.cf._compare(sStartEnd, "end")) && sStartEndElem !== "")
  					{
  						if($(sStartEndElem).length >= 1)
  						{
  							sTempTime = oDTP._getValueOfElement($(sStartEndElem));
  							if(sTempTime !== "")
  							{
  								if(oDTP.settings.parseDateTimeString)
  									dTempDate = oDTP.settings.parseDateTimeString.call(oDTP, sTempTime, sMode, $(sStartEndElem));
  								else
  									dTempTime = oDTP._parseTime(sTempTime);
  							
  								if($.cf._compare(sStartEnd, "start"))
  								{
  									dTempTime.setMinutes(dTempTime.getMinutes() - 1);
  									if($.cf._isValid(sMax))
  									{
  										if(oDTP._compareTime(dTempTime, oDTP.oData.dMaxValue) === 2)
  											oDTP.oData.dMaxValue = new Date(dTempTime);
  									}
  									else
  										oDTP.oData.dMaxValue = new Date(dTempTime);
  								}
  								else if($.cf._compare(sStartEnd, "end"))
  								{
  									dTempTime.setMinutes(dTempTime.getMinutes() + 1);
  									if($.cf._isValid(sMin))
  									{
  										if(oDTP._compareTime(dTempTime, oDTP.oData.dMinValue) === 3)
  											oDTP.oData.dMinValue = new Date(dTempTime);
  									}
  									else
  										oDTP.oData.dMinValue = new Date(dTempTime);
  								}
  							}
  						}
  					}
  				
  					oDTP.oData.bIs12Hour = oDTP.getIs12Hour();
  					if(oDTP.settings.parseDateTimeString)
  						oDTP.oData.dCurrentDate = oDTP.settings.parseDateTimeString.call(oDTP, sCurrent, sMode, $(oElement));
  					else
  						oDTP.oData.dCurrentDate = oDTP._parseTime(sCurrent);
  				}
  				else if(oDTP.oData.bDateTimeMode)
  				{
  					sMin = sMinValue || oDTP.settings.minDateTime;
  					sMax = sMaxValue || oDTP.settings.maxDateTime;
  				
  					oDTP.oData.sDateTimeFormat = sFormat;
  				
  					if($.cf._isValid(sMin))
  						oDTP.oData.dMinValue = oDTP._parseDateTime(sMin);
  					if($.cf._isValid(sMax))
  						oDTP.oData.dMaxValue = oDTP._parseDateTime(sMax);
  				
  					if(sStartEnd !== "" && ($.cf._compare(sStartEnd, "start") || $.cf._compare(sStartEnd, "end")) && sStartEndElem !== "")
  					{
  						if($(sStartEndElem).length >= 1)
  						{
  							sTempDateTime = oDTP._getValueOfElement($(sStartEndElem));
  							if(sTempDateTime !== "")
  							{
  								if(oDTP.settings.parseDateTimeString)
  									dTempDateTime = oDTP.settings.parseDateTimeString.call(oDTP, sTempDateTime, sMode, $(sStartEndElem));
  								else
  									dTempDateTime = oDTP._parseDateTime(sTempDateTime);
  								
  								if($.cf._compare(sStartEnd, "start"))
  								{
  									if($.cf._isValid(sMax))
  									{
  										if(oDTP._compareDateTime(dTempDateTime, oDTP.oData.dMaxValue) < 0)
  											oDTP.oData.dMaxValue = new Date(dTempDateTime);
  									}
  									else
  										oDTP.oData.dMaxValue = new Date(dTempDateTime);
  								}
  								else if($.cf._compare(sStartEnd, "end"))
  								{
  									if($.cf._isValid(sMin))
  									{
  										if(oDTP._compareDateTime(dTempDateTime, oDTP.oData.dMinValue) > 0)
  											oDTP.oData.dMinValue = new Date(dTempDateTime);
  									}
  									else
  										oDTP.oData.dMinValue = new Date(dTempDateTime);
  								}
  							}
  						}
  					}
  				
  					oDTP.oData.bIs12Hour = oDTP.getIs12Hour();
  					if(oDTP.settings.parseDateTimeString)
  						oDTP.oData.dCurrentDate = oDTP.settings.parseDateTimeString.call(oDTP, sCurrent, sMode, $(oElement));
  					else
  						oDTP.oData.dCurrentDate = oDTP._parseDateTime(sCurrent);
  				}
  			
  				oDTP._setVariablesForDate();
  				oDTP._modifyPicker();
  				$(oDTP.element).fadeIn(oDTP.settings.animationDuration);
  
  				if(oDTP.settings.afterShow)
  				{
  					setTimeout(function()
  					{
  						oDTP.settings.afterShow.call(oDTP, oElement);
  					}, oDTP.settings.animationDuration);	
  				}
  			}
  		},
  	
  		_hidePicker: function(iDuration, oElementToShow)
  		{
  			var oDTP = this;
  			var oElement = oDTP.oData.oInputElement;
  
  			if(oDTP.settings.beforeHide)
  				oDTP.settings.beforeHide.call(oDTP, oElement);
  
  			if(!$.cf._isValid(iDuration))
  				iDuration = oDTP.settings.animationDuration;
  		
  			if($.cf._isValid(oDTP.oData.oInputElement))
  			{
  				$(oDTP.oData.oInputElement).blur();
  				oDTP.oData.oInputElement = null;
  			}
  		
  			$(oDTP.element).fadeOut(iDuration);
  			if(iDuration === 0)
  			{
  				$(oDTP.element).find('.dtpicker-subcontent').html("");
  			}
  			else
  			{
  				setTimeout(function()
  				{
  					$(oDTP.element).find('.dtpicker-subcontent').html("");
  				}, iDuration);
  			}
  
  			$(document).unbind("click.DateTimePicker");
  			$(document).unbind("keydown.DateTimePicker");
  			$(document).unbind("keyup.DateTimePicker");
  
  			if(oDTP.settings.afterHide)
  			{
  				if(iDuration === 0)
  				{
  					oDTP.settings.afterHide.call(oDTP, oElement);
  				}
  				else
  				{
  					setTimeout(function()
  					{
  						oDTP.settings.afterHide.call(oDTP, oElement);
  					}, iDuration);
  				}
  			}
  
  			if($.cf._isValid(oElementToShow))
  				oDTP._showPicker(oElementToShow);
  		},
  	
  		_modifyPicker: function()
  		{
  			var oDTP = this;
  
  			var sTitleContent, iNumberOfColumns;
  			var sArrFields = [];
  			if(oDTP.oData.bDateMode)
  			{
  				sTitleContent = oDTP.settings.titleContentDate;
  				iNumberOfColumns = 3;
  			
  				if(oDTP.oData.bArrMatchFormat[0])  // "dd-MM-yyyy"
  				{
  					sArrFields = ["day", "month", "year"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[1])  // "MM-dd-yyyy"
  				{
  					sArrFields = ["month", "day", "year"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[2])  // "yyyy-MM-dd"
  				{
  					sArrFields = ["year", "month", "day"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[3])  // "dd-MMM-yyyy"
  				{
  					sArrFields = ["day", "month", "year"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[4])  // "MM-yyyy"
  				{
  					iNumberOfColumns = 2;
  					sArrFields = ["month", "year"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[5])  // "MMM yyyy"
  				{
  					iNumberOfColumns = 2;
  					sArrFields = ["month", "year"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[6])  // "MMMM yyyy"
  				{
  					iNumberOfColumns = 2;
  					sArrFields = ["month", "year"];
  				}
  			}
  			else if(oDTP.oData.bTimeMode)
  			{
  				sTitleContent = oDTP.settings.titleContentTime;
  				if(oDTP.oData.bArrMatchFormat[0]) // hh:mm:ss AA
  				{
  					iNumberOfColumns = 4;
  					sArrFields = ["hour", "minutes", "seconds", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[1]) // HH:mm:ss
  				{
  					iNumberOfColumns = 3;
  					sArrFields = ["hour", "minutes", "seconds"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[2]) // hh:mm AA
  				{
  					iNumberOfColumns = 3;
  					sArrFields = ["hour", "minutes", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[3]) // HH:mm
  				{
  					iNumberOfColumns = 2;
  					sArrFields = ["hour", "minutes"];
  				}
  			}
  			else if(oDTP.oData.bDateTimeMode)
  			{
  				sTitleContent = oDTP.settings.titleContentDateTime;
  			
  				if(oDTP.oData.bArrMatchFormat[0])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["day", "month", "year", "hour", "minutes", "seconds"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[1])
  				{
  					iNumberOfColumns = 7;
  					sArrFields = ["day", "month", "year", "hour", "minutes", "seconds", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[2])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["month", "day", "year", "hour", "minutes", "seconds"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[3])
  				{
  					iNumberOfColumns = 7;
  					sArrFields = ["month", "day", "year", "hour", "minutes", "seconds", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[4])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["year", "month", "day", "hour", "minutes", "seconds"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[5])
  				{
  					iNumberOfColumns = 7;
  					sArrFields = ["year", "month", "day", "hour", "minutes", "seconds", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[6])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["day", "month", "year", "hour", "minutes", "seconds"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[7])
  				{
  					iNumberOfColumns = 7;
  					sArrFields = ["day", "month", "year", "hour", "minutes", "seconds", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[8])
  				{
  					iNumberOfColumns = 5;
  					sArrFields = ["day", "month", "year", "hour", "minutes"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[9])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["day", "month", "year", "hour", "minutes", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[10])
  				{
  					iNumberOfColumns = 5;
  					sArrFields = ["month", "day", "year", "hour", "minutes"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[11])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["month", "day", "year", "hour", "minutes", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[12])
  				{
  					iNumberOfColumns = 5;
  					sArrFields = ["year", "month", "day", "hour", "minutes"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[13])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["year", "month", "day", "hour", "minutes", "meridiem"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[14])
  				{
  					iNumberOfColumns = 5;
  					sArrFields = ["day", "month", "year", "hour", "minutes"];
  				}
  				else if(oDTP.oData.bArrMatchFormat[15])
  				{
  					iNumberOfColumns = 6;
  					sArrFields = ["day", "month", "year", "hour", "minutes", "meridiem"];
  				}
  			}
  			
  		
  			//--------------------------------------------------------------------
  			var sColumnClass = "dtpicker-comp" + iNumberOfColumns,
  			bDisplayHeaderCloseButton = false,
  			bDisplaySetButton = false,
  			bDisplayClearButton = false,
  			iTempIndex;
  			
  			for(iTempIndex = 0; iTempIndex < oDTP.settings.buttonsToDisplay.length; iTempIndex++)
  			{
  				if($.cf._compare(oDTP.settings.buttonsToDisplay[iTempIndex], "HeaderCloseButton"))
  					bDisplayHeaderCloseButton = true;
  				else if($.cf._compare(oDTP.settings.buttonsToDisplay[iTempIndex], "SetButton"))
  					bDisplaySetButton = true;
  				else if($.cf._compare(oDTP.settings.buttonsToDisplay[iTempIndex], "ClearButton"))
  					bDisplayClearButton = true;
  			}
  		
  			var sHeader = "";
  			sHeader += "<div class='dtpicker-header'>";
  			sHeader += "<div class='dtpicker-title'>" + sTitleContent + "</div>";
  			if(bDisplayHeaderCloseButton)
  				sHeader += "<a class='dtpicker-close'>&times;</a>";
  			sHeader += "<div class='dtpicker-value'></div>";
  			sHeader += "</div>";
  		
  			//--------------------------------------------------------------------
  		
  			var sDTPickerComp = "";
  			sDTPickerComp += "<div class='dtpicker-components'>";
  
  			for(iTempIndex = 0; iTempIndex < iNumberOfColumns; iTempIndex++)
  			{
  				var sFieldName = sArrFields[iTempIndex];
  
  				sDTPickerComp += "<div class='dtpicker-compOutline " + sColumnClass + "'>";
  				sDTPickerComp += "<div class='dtpicker-comp " + sFieldName + "'>";
  				sDTPickerComp += "<a class='dtpicker-compButton increment'>" + oDTP.settings.incrementButtonContent + "</a>";
  				sDTPickerComp += "<input type='text' class='dtpicker-compValue'></input>";
  				sDTPickerComp += "<a class='dtpicker-compButton decrement'>" + oDTP.settings.decrementButtonContent + "</a>";
  				if(oDTP.settings.labels)
  					sDTPickerComp += "<div class='dtpicker-label'>" + oDTP.settings.labels[sFieldName] + "</div>";
  				sDTPickerComp += "</div>";
  				sDTPickerComp += "</div>";
  			}
  		
  			sDTPickerComp += "</div>";
  		
  			//--------------------------------------------------------------------
  		
  			var sButtonContClass = "";
  			if(bDisplaySetButton && bDisplayClearButton)
  				sButtonContClass = " dtpicker-twoButtons";
  			else
  				sButtonContClass = " dtpicker-singleButton";
  		
  			var sDTPickerButtons = "";
  			sDTPickerButtons += "<div class='dtpicker-buttonCont" + sButtonContClass + "'>";
  			if(bDisplaySetButton)
  				sDTPickerButtons += "<a class='dtpicker-button dtpicker-buttonSet'>" + oDTP.settings.setButtonContent + "</a>";
  			if(bDisplayClearButton)
  				sDTPickerButtons += "<a class='dtpicker-button dtpicker-buttonClear'>" + oDTP.settings.clearButtonContent + "</a>";
  			sDTPickerButtons += "</div>";
  		
  			//--------------------------------------------------------------------
  		
  			var sTempStr = sHeader + sDTPickerComp + sDTPickerButtons;
  		
  			$(oDTP.element).find('.dtpicker-subcontent').html(sTempStr);
  		
  			oDTP._setCurrentDate();
  			oDTP._addEventHandlersForPicker();
  		},
  	
  		_addEventHandlersForPicker: function()
  		{
  			var oDTP = this;
  		
  			$(document).on("click.DateTimePicker", function(e)
  			{
  				oDTP._hidePicker("");
  			});
  		
  			$(document).on("keydown.DateTimePicker", function(e)
  			{
  				if(! $('.dtpicker-compValue').is(':focus') && parseInt(e.keyCode ? e.keyCode : e.which) === 9)
  				{
  					oDTP._setButtonAction(true);
  					$("[tabIndex=" + (oDTP.oData.iTabIndex + 1) + "]").focus();
  					return false;
  				}
  			});
  
  			$(document).on("keydown.DateTimePicker", function(e)
  			{
  				if(! $('.dtpicker-compValue').is(':focus') && parseInt(e.keyCode ? e.keyCode : e.which) !== 9)
  				{
  					oDTP._hidePicker("");
  				}
  			});
  
  			$(".dtpicker-cont *").click(function(e)
  			{
  				e.stopPropagation();
  			});
  		
  			$('.dtpicker-compValue').not('.month .dtpicker-compValue, .meridiem .dtpicker-compValue').keyup(function() 
  			{ 
  				this.value = this.value.replace(/[^0-9\.]/g,'');
  			});
  
  			$('.dtpicker-compValue').focus(function()
  			{
  				oDTP.oData.bElemFocused = true;
  			});
  		
  			$('.dtpicker-compValue').blur(function()
  			{
  				oDTP._getValuesFromInputBoxes();
  				oDTP._setCurrentDate();
  			
  				oDTP.oData.bElemFocused = false;
  				var $oParentElem = $(this).parent().parent();
  				setTimeout(function()
  				{
  					if($oParentElem.is(':last-child') && !oDTP.oData.bElemFocused)
  					{
  						oDTP._setButtonAction(false);
  					}
  				}, 50);			
  			});
  		
  			$(".dtpicker-compValue").keyup(function()
  			{
  				var $oTextField = $(this),
  			
  				sTextBoxVal = $oTextField.val(),
  				iLength = sTextBoxVal.length,
  				sNewTextBoxVal;
  			
  				if($oTextField.parent().hasClass("day") || $oTextField.parent().hasClass("hour") || $oTextField.parent().hasClass("minutes") || $oTextField.parent().hasClass("meridiem"))
  				{
  					if(iLength > 2)
  					{
  						sNewTextBoxVal = sTextBoxVal.slice(0, 2);
  						$oTextField.val(sNewTextBoxVal);
  					}
  				}
  				else if($oTextField.parent().hasClass("month"))
  				{
  					if(iLength > 3)
  					{
  						sNewTextBoxVal = sTextBoxVal.slice(0, 3);
  						$oTextField.val(sNewTextBoxVal);
  					}
  				}
  				else if($oTextField.parent().hasClass("year"))
  				{
  					if(iLength > 4)
  					{
  						sNewTextBoxVal = sTextBoxVal.slice(0, 4);
  						$oTextField.val(sNewTextBoxVal);
  					}
  				}
  			});
  
  			//-----------------------------------------------------------------------
  		
  			$(oDTP.element).find('.dtpicker-close').click(function(e)
  			{
  				if(oDTP.settings.buttonClicked)
  					oDTP.settings.buttonClicked.call(oDTP, "CLOSE", oDTP.oData.oInputElement);
  				oDTP._hidePicker("");
  			});
  		
  			$(oDTP.element).find('.dtpicker-buttonSet').click(function(e)
  			{
  				if(oDTP.settings.buttonClicked)
  					oDTP.settings.buttonClicked.call(oDTP, "SET", oDTP.oData.oInputElement);
  				oDTP._setButtonAction(false);
  			});
  		
  			$(oDTP.element).find('.dtpicker-buttonClear').click(function(e)
  			{
  				if(oDTP.settings.buttonClicked)
  					oDTP.settings.buttonClicked.call(oDTP, "CLEAR", oDTP.oData.oInputElement);
  				oDTP._clearButtonAction();
  			});
  		
  			// ----------------------------------------------------------------------------
  		
  			$(oDTP.element).find(".day .increment, .day .increment *").click(function(e)
  			{
  				oDTP.oData.iCurrentDay++;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".day .decrement, .day .decrement *").click(function(e)
  			{
  				oDTP.oData.iCurrentDay--;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".month .increment, .month .increment *").click(function(e)
  			{
  				oDTP.oData.iCurrentMonth++;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".month .decrement, .month .decrement *").click(function(e)
  			{
  				oDTP.oData.iCurrentMonth--;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".year .increment, .year .increment *").click(function(e)
  			{
  				oDTP.oData.iCurrentYear++;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".year .decrement, .year .decrement *").click(function(e)
  			{
  				oDTP.oData.iCurrentYear--;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".hour .increment, .hour .increment *").click(function(e)
  			{
  				oDTP.oData.iCurrentHour++;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".hour .decrement, .hour .decrement *").click(function(e)
  			{
  				oDTP.oData.iCurrentHour--;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".minutes .increment, .minutes .increment *").click(function(e)
  			{
  				oDTP.oData.iCurrentMinutes += oDTP.settings.minuteInterval;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".minutes .decrement, .minutes .decrement *").click(function(e)
  			{
  				oDTP.oData.iCurrentMinutes -= oDTP.settings.minuteInterval;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  
  			$(oDTP.element).find(".seconds .increment, .seconds .increment *").click(function(e)
  			{
  				oDTP.oData.iCurrentSeconds += oDTP.settings.secondsInterval;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".seconds .decrement, .seconds .decrement *").click(function(e)
  			{
  				oDTP.oData.iCurrentSeconds -= oDTP.settings.secondsInterval;
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		
  			$(oDTP.element).find(".meridiem .dtpicker-compButton, .meridiem .dtpicker-compButton *").click(function(e)
  			{
  				if($.cf._compare(oDTP.oData.sCurrentMeridiem, "AM"))
  				{
  					oDTP.oData.sCurrentMeridiem = "PM";
  					oDTP.oData.iCurrentHour += 12;
  				}
  				else if($.cf._compare(oDTP.oData.sCurrentMeridiem, "PM"))
  				{
  					oDTP.oData.sCurrentMeridiem = "AM";
  					oDTP.oData.iCurrentHour -= 12;
  				}				
  				oDTP._setCurrentDate();
  				oDTP._setOutputOnIncrementOrDecrement();
  			});
  		},
  
  		_adjustMinutes: function(iMinutes) 
  		{
  			var oDTP = this;
  			if(oDTP.settings.roundOffMinutes && oDTP.settings.minuteInterval !== 1)
  			{
  				iMinutes = (iMinutes % oDTP.settings.minuteInterval) ? (iMinutes - (iMinutes % oDTP.settings.minuteInterval) + oDTP.settings.minuteInterval) : iMinutes;
  			}
  			return iMinutes;
  		},
  
  		_adjustSeconds: function(iSeconds) 
  		{
  			var oDTP = this;
  			if(oDTP.settings.roundOffSeconds && oDTP.settings.secondsInterval !== 1)
  			{
  				iSeconds = (iSeconds % oDTP.settings.secondsInterval) ? (iSeconds - (iSeconds % oDTP.settings.secondsInterval) + oDTP.settings.secondsInterval) : iSeconds;
  			}
  			return iSeconds;
  		},
  	
  		_getValueOfElement: function(oElem)
  		{
  			var oDTP = this;
  			var sElemValue = "";
  		
  			if($.cf._compare($(oElem).prop("tagName"), "INPUT"))
  				sElemValue = $(oElem).val();
  			else
  				sElemValue = $(oElem).html();
  		
  			return sElemValue;
  		},
  	
  		_setValueOfElement: function(sElemValue, $oElem)
  		{
  			var oDTP = this;
  		
  			if(!$.cf._isValid($oElem))
  				$oElem = $(oDTP.oData.oInputElement);
  		
  			if($.cf._compare($oElem.prop("tagName"), "INPUT"))
  				$oElem.val(sElemValue);
  			else
  				$oElem.html(sElemValue);
  
  			var dElemValue = oDTP.getDateObjectForInputField($oElem);
  
  			if(oDTP.settings.settingValueOfElement)
  				oDTP.settings.settingValueOfElement.call(oDTP, sElemValue, dElemValue, $oElem);
  		
  			$oElem.change();		
  		
  			return sElemValue;
  		},
  	
  		//-----------------------------------------------------------------
  	
  		_parseDate: function(sDate)
  		{
  			var oDTP = this;
  
  			var dTempDate = (oDTP.settings.defaultDate ? new Date(oDTP.settings.defaultDate) : new Date()),
  			iDate = dTempDate.getDate(),
  			iMonth = dTempDate.getMonth(),
  			iYear = dTempDate.getFullYear();
  		
  			if($.cf._isValid(sDate))
  			{
  				var sArrDate;
  				if(oDTP.oData.bArrMatchFormat[4] || oDTP.oData.bArrMatchFormat[5] || oDTP.oData.bArrMatchFormat[6])
  					sArrDate = sDate.split(oDTP.settings.monthYearSeparator);
  				else
  					sArrDate = sDate.split(oDTP.settings.dateSeparator);
  			
  				if(oDTP.oData.bArrMatchFormat[0])  // "dd-MM-yyyy"
  				{
  					iDate = parseInt(sArrDate[0]);
  					iMonth = parseInt(sArrDate[1] - 1);
  					iYear = parseInt(sArrDate[2]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[1])  // "MM-dd-yyyy"
  				{
  					iMonth = parseInt(sArrDate[0] - 1);
  					iDate = parseInt(sArrDate[1]);
  					iYear = parseInt(sArrDate[2]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[2])  // "yyyy-MM-dd"
  				{
  					iYear = parseInt(sArrDate[0]);
  					iMonth = parseInt(sArrDate[1] - 1);
  					iDate = parseInt(sArrDate[2]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[3])  // "dd-MMM-yyyy"
  				{
  					iDate = parseInt(sArrDate[0]);
  					iMonth = oDTP._getShortMonthIndex(sArrDate[1]);
  					iYear = parseInt(sArrDate[2]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[4])  // "MM-yyyy"
  				{
  					iDate = 1;
  					iMonth = parseInt(sArrDate[0]) - 1;
  					iYear = parseInt(sArrDate[1]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[5])  // "MMM yyyy"
  				{
  					iDate = 1;
  					iMonth = oDTP._getShortMonthIndex(sArrDate[0]);
  					iYear = parseInt(sArrDate[1]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[6])  // "MMMM yyyy"
  				{
  					iDate = 1;
  					iMonth = oDTP._getFullMonthIndex(sArrDate[0]);
  					iYear = parseInt(sArrDate[1]);
  				}
  			}
  
  			dTempDate = new Date(iYear, iMonth, iDate, 0, 0, 0, 0);
  			return dTempDate;
  		},
  	
  		_parseTime: function(sTime)
  		{
  			var oDTP = this;
  		
  			var dTempDate = (oDTP.settings.defaultDate ? new Date(oDTP.settings.defaultDate) : new Date()),
  			iDate = dTempDate.getDate(),
  			iMonth = dTempDate.getMonth(),
  			iYear = dTempDate.getFullYear(),
  			iHour = dTempDate.getHours(),
  			iMinutes = dTempDate.getMinutes(),
  			iSeconds = dTempDate.getSeconds(),
  			sArrTime, sMeridiem, sArrTimeComp,
  			bShowSeconds = oDTP.oData.bArrMatchFormat[0] ||
  							oDTP.oData.bArrMatchFormat[1];
  
  			iSeconds = bShowSeconds ? oDTP._adjustSeconds(iSeconds) : 0;
  		
  			if($.cf._isValid(sTime))
  			{
  				if(oDTP.oData.bIs12Hour)
  				{
  					sArrTime = sTime.split(oDTP.settings.timeMeridiemSeparator);
  					sTime = sArrTime[0];
  					sMeridiem = sArrTime[1];
  
  					if(!($.cf._compare(sMeridiem, "AM") || $.cf._compare(sMeridiem, "PM")))
  						sMeridiem = "";
  				}
  
  				sArrTimeComp = sTime.split(oDTP.settings.timeSeparator);
  				iHour = parseInt(sArrTimeComp[0]);
  				iMinutes = parseInt(sArrTimeComp[1]);
  
  				if(bShowSeconds)
  				{
  					iSeconds = parseInt(sArrTimeComp[2]);
  					iSeconds = oDTP._adjustSeconds(iSeconds);
  				}
  
  				if(iHour === 12 && $.cf._compare(sMeridiem, "AM"))
  					iHour = 0;
  				else if(iHour < 12 && $.cf._compare(sMeridiem, "PM"))
  					iHour += 12;
  			}
  			iMinutes = oDTP._adjustMinutes(iMinutes);
  		
  			dTempDate = new Date(iYear, iMonth, iDate, iHour, iMinutes, iSeconds, 0);
  		
  			return dTempDate;
  		},
  	
  		_parseDateTime: function(sDateTime)
  		{
  			var oDTP = this;
  		
  			var dTempDate = (oDTP.settings.defaultDate ? new Date(oDTP.settings.defaultDate) : new Date()),
  			iDate = dTempDate.getDate(),
  			iMonth = dTempDate.getMonth(),
  			iYear = dTempDate.getFullYear(),
  			iHour = dTempDate.getHours(),
  			iMinutes = dTempDate.getMinutes(),
  			iSeconds = dTempDate.getSeconds(),
  			sMeridiem = "",
  			sArrDateTime, sArrDate, sTime, sArrTimeComp, sArrTime,
  			bShowSeconds = oDTP.oData.bArrMatchFormat[0] || // "dd-MM-yyyy HH:mm:ss"
  							oDTP.oData.bArrMatchFormat[1] || // ""dd-MM-yyyy hh:mm:ss AA"
  							oDTP.oData.bArrMatchFormat[2] || // "MM-dd-yyyy HH:mm:ss"
  							oDTP.oData.bArrMatchFormat[3] || // "MM-dd-yyyy hh:mm:ss AA"
  							oDTP.oData.bArrMatchFormat[4] || // "yyyy-MM-dd HH:mm:ss"
  							oDTP.oData.bArrMatchFormat[5] || // "yyyy-MM-dd hh:mm:ss AA"
  							oDTP.oData.bArrMatchFormat[6] || // "dd-MMM-yyyy HH:mm:ss"
  							oDTP.oData.bArrMatchFormat[7]; // "dd-MMM-yyyy hh:mm:ss AA"
  
  			iSeconds = bShowSeconds ? oDTP._adjustSeconds(iSeconds) : 0;
  		
  			if($.cf._isValid(sDateTime))
  			{
  				sArrDateTime = sDateTime.split(oDTP.settings.dateTimeSeparator);
  				sArrDate = sArrDateTime[0].split(oDTP.settings.dateSeparator);
  			
  				if(oDTP.oData.bArrMatchFormat[0] || // "dd-MM-yyyy HH:mm:ss"
  					oDTP.oData.bArrMatchFormat[1] || // ""dd-MM-yyyy hh:mm:ss AA"
  					oDTP.oData.bArrMatchFormat[8] || // "dd-MM-yyyy HH:mm"
  					oDTP.oData.bArrMatchFormat[9]) // "dd-MM-yyyy hh:mm AA"
  				{
  					iDate = parseInt(sArrDate[0]);
  					iMonth = parseInt(sArrDate[1] - 1);
  					iYear = parseInt(sArrDate[2]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[2] ||  // "MM-dd-yyyy HH:mm:ss"
  					oDTP.oData.bArrMatchFormat[3] || // "MM-dd-yyyy hh:mm:ss AA"
  					oDTP.oData.bArrMatchFormat[10] ||  // "MM-dd-yyyy HH:mm"
  					oDTP.oData.bArrMatchFormat[11]) // "MM-dd-yyyy hh:mm AA"
  				{
  					iMonth = parseInt(sArrDate[0] - 1);
  					iDate = parseInt(sArrDate[1]);
  					iYear = parseInt(sArrDate[2]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[4] ||  // "yyyy-MM-dd HH:mm:ss"
  					oDTP.oData.bArrMatchFormat[5] || // "yyyy-MM-dd hh:mm:ss AA"
  					oDTP.oData.bArrMatchFormat[12] ||  // "yyyy-MM-dd HH:mm"
  					oDTP.oData.bArrMatchFormat[13]) // "yyyy-MM-dd hh:mm AA"
  				{
  					iYear = parseInt(sArrDate[0]);
  					iMonth = parseInt(sArrDate[1] - 1);
  					iDate = parseInt(sArrDate[2]);
  				}
  				else if(oDTP.oData.bArrMatchFormat[6] || // "dd-MMM-yyyy HH:mm:ss"
  					oDTP.oData.bArrMatchFormat[7] || // "dd-MMM-yyyy hh:mm:ss AA"
  					oDTP.oData.bArrMatchFormat[14] || // "dd-MMM-yyyy HH:mm:ss"
  					oDTP.oData.bArrMatchFormat[15]) // "dd-MMM-yyyy hh:mm:ss AA"
  				{
  					iDate = parseInt(sArrDate[0]);
  					iMonth = oDTP._getShortMonthIndex(sArrDate[1]);
  					iYear = parseInt(sArrDate[2]);
  				}
  			
  				sTime = sArrDateTime[1];
  				if($.cf._isValid(sTime))
  				{
  					if(oDTP.oData.bIs12Hour)
  					{
  						if($.cf._compare(oDTP.settings.dateTimeSeparator, oDTP.settings.timeMeridiemSeparator) && (sArrDateTime.length === 3))
  							sMeridiem = sArrDateTime[2];
  						else
  						{
  							sArrTimeComp = sTime.split(oDTP.settings.timeMeridiemSeparator);
  							sTime = sArrTimeComp[0];
  							sMeridiem = sArrTimeComp[1];
  						}
  					
  						if(!($.cf._compare(sMeridiem, "AM") || $.cf._compare(sMeridiem, "PM")))
  							sMeridiem = "";
  					}
  					
  					sArrTime = sTime.split(oDTP.settings.timeSeparator);
  
  					iHour = parseInt(sArrTime[0]);
  					iMinutes = parseInt(sArrTime[1]);
  					if(bShowSeconds)
  					{
  						iSeconds = parseInt(sArrTime[2]);
  					}
  
  					if(iHour === 12 && $.cf._compare(sMeridiem, "AM"))
  						iHour = 0;
  					else if(iHour < 12 && $.cf._compare(sMeridiem, "PM"))
  						iHour += 12;
  				}
  			}
  			iMinutes = oDTP._adjustMinutes(iMinutes);
      	
  			dTempDate = new Date(iYear, iMonth, iDate, iHour, iMinutes, iSeconds, 0);
  			return dTempDate;
  		},
  	
  		_getShortMonthIndex: function(sMonthName)
  		{
  			var oDTP = this;
  
  			for(var iTempIndex = 0; iTempIndex < oDTP.settings.shortMonthNames.length; iTempIndex++)
  			{
  				if($.cf._compare(sMonthName, oDTP.settings.shortMonthNames[iTempIndex]))
  					return iTempIndex;
  			}
  		},
  
  		_getFullMonthIndex: function(sMonthName)
  		{
  			var oDTP = this;
  
  			for(var iTempIndex = 0; iTempIndex < oDTP.settings.fullMonthNames.length; iTempIndex++)
  			{
  				if($.cf._compare(sMonthName, oDTP.settings.fullMonthNames[iTempIndex]))
  					return iTempIndex;
  			}
  		},
  
  		// Public Method
  		getIs12Hour: function(sMode, sFormat)
  		{
  			var oDTP = this;
  
  			var bIs12Hour = false, 
  			iArgsLength = Function.length;
  
  			oDTP._setMatchFormat(iArgsLength, sMode, sFormat);
  
  			if(oDTP.oData.bTimeMode)
  	        {
  	        	bIs12Hour = oDTP.oData.bArrMatchFormat[0] || 
  	        				oDTP.oData.bArrMatchFormat[2];
  	        }
  	        else if(oDTP.oData.bDateTimeMode)
  	        {
  	        	bIs12Hour = oDTP.oData.bArrMatchFormat[1] ||
  							oDTP.oData.bArrMatchFormat[3] ||
  							oDTP.oData.bArrMatchFormat[5] ||
  							oDTP.oData.bArrMatchFormat[7] ||
  							oDTP.oData.bArrMatchFormat[9] ||
  							oDTP.oData.bArrMatchFormat[11] ||
  							oDTP.oData.bArrMatchFormat[13] ||
  							oDTP.oData.bArrMatchFormat[15];
  			}
  
  			oDTP._setMatchFormat(iArgsLength);
  
  			return bIs12Hour;
  		},
  	
  		//-----------------------------------------------------------------
  	
  		_setVariablesForDate: function(dInput, bIncludeTime, bSetMeridiem)
  		{
  			var oDTP = this;
  		
  			var dTemp, oDTV = {},
  			bValidInput = $.cf._isValid(dInput);
  			if(bValidInput)
  			{
  				dTemp = new Date(dInput);
  				if(!$.cf._isValid(bIncludeTime))
  					bIncludeTime = true;
  				if(!$.cf._isValid(bSetMeridiem))
  					bSetMeridiem = true;
  			}
  			else
  			{
  				if (Object.prototype.toString.call(oDTP.oData.dCurrentDate) === '[object Date]' && isFinite(oDTP.oData.dCurrentDate))
      		  			dTemp = new Date(oDTP.oData.dCurrentDate);
    				else 
      					dTemp = new Date();
      					
  				if(!$.cf._isValid(bIncludeTime))
  					bIncludeTime = (oDTP.oData.bTimeMode || oDTP.oData.bDateTimeMode);
  				if(!$.cf._isValid(bSetMeridiem))
  					bSetMeridiem = oDTP.oData.bIs12Hour;
  			}
  
  			oDTV.iCurrentDay = dTemp.getDate();
  			oDTV.iCurrentMonth = dTemp.getMonth();
  			oDTV.iCurrentYear = dTemp.getFullYear();
  			oDTV.iCurrentWeekday = dTemp.getDay();
  		
  			if(bIncludeTime)
  			{
  				oDTV.iCurrentHour = dTemp.getHours();
  				oDTV.iCurrentMinutes = dTemp.getMinutes();
  				oDTV.iCurrentSeconds = dTemp.getSeconds();
  			
  				if(bSetMeridiem)
  				{
  					oDTV.sCurrentMeridiem = oDTP._determineMeridiemFromHourAndMinutes(oDTV.iCurrentHour, oDTV.iCurrentMinutes);
  				}
  			}
  
  			if(bValidInput)
  				return oDTV;
  			else
  				oDTP.oData = $.extend(oDTP.oData, oDTV);
  		},
  	
  		_getValuesFromInputBoxes: function()
  		{
  			var oDTP = this;
  		
  			if(oDTP.oData.bDateMode || oDTP.oData.bDateTimeMode)
  			{
  				var sMonth, iMonth;
  
  				sMonth = $(oDTP.element).find(".month .dtpicker-compValue").val();
  				if(sMonth.length > 1)
  					sMonth = sMonth.charAt(0).toUpperCase() + sMonth.slice(1);
  				iMonth = oDTP.settings.shortMonthNames.indexOf(sMonth);
  				if(iMonth !== -1)
  				{
  					oDTP.oData.iCurrentMonth = parseInt(iMonth);
  				}
  				else
  				{
  					if(sMonth.match("^[+|-]?[0-9]+$"))
  					{
  						oDTP.oData.iCurrentMonth = parseInt(sMonth - 1);
  					}
  				}
  			
  				oDTP.oData.iCurrentDay = parseInt($(oDTP.element).find(".day .dtpicker-compValue").val()) || oDTP.oData.iCurrentDay;					
  				oDTP.oData.iCurrentYear = parseInt($(oDTP.element).find(".year .dtpicker-compValue").val()) || oDTP.oData.iCurrentYear;
  			}
  		
  			if(oDTP.oData.bTimeMode || oDTP.oData.bDateTimeMode)
  			{
  				var iTempHour, iTempMinutes, iTempSeconds, sMeridiem;
  
  				iTempHour = parseInt($(oDTP.element).find(".hour .dtpicker-compValue").val());
  				iTempMinutes = oDTP._adjustMinutes(parseInt($(oDTP.element).find(".minutes .dtpicker-compValue").val()));
  				iTempSeconds = oDTP._adjustMinutes(parseInt($(oDTP.element).find(".seconds .dtpicker-compValue").val()));
  
  				oDTP.oData.iCurrentHour = isNaN(iTempHour) ? oDTP.oData.iCurrentHour : iTempHour;
  				oDTP.oData.iCurrentMinutes = isNaN(iTempMinutes) ? oDTP.oData.iCurrentMinutes : iTempMinutes;
  				oDTP.oData.iCurrentSeconds = isNaN(iTempSeconds) ? oDTP.oData.iCurrentSeconds : iTempSeconds;
  			
  				if(oDTP.oData.iCurrentSeconds > 59)
  				{
  					oDTP.oData.iCurrentMinutes += oDTP.oData.iCurrentSeconds / 60;
  					oDTP.oData.iCurrentSeconds = oDTP.oData.iCurrentSeconds % 60;
  				}
  				if(oDTP.oData.iCurrentMinutes > 59)
  				{
  					oDTP.oData.iCurrentHour += oDTP.oData.iCurrentMinutes / 60;
  					oDTP.oData.iCurrentMinutes = oDTP.oData.iCurrentMinutes % 60;
  				}
  
  				if(oDTP.oData.bIs12Hour)
  				{
  					if(oDTP.oData.iCurrentHour > 12)
  						oDTP.oData.iCurrentHour = (oDTP.oData.iCurrentHour % 12);
  				}
  				else
  				{
  					if(oDTP.oData.iCurrentHour > 23)
  						oDTP.oData.iCurrentHour = (oDTP.oData.iCurrentHour % 23);
  				}
  			
  				if(oDTP.oData.bIs12Hour)
  				{
  					sMeridiem = $(oDTP.element).find(".meridiem .dtpicker-compValue").val();
  					if($.cf._compare(sMeridiem, "AM") || $.cf._compare(sMeridiem, "PM"))
  						oDTP.oData.sCurrentMeridiem = sMeridiem;
  				
  					if($.cf._compare(oDTP.oData.sCurrentMeridiem, "PM"))
  					{
  						if(oDTP.oData.iCurrentHour !== 12 && oDTP.oData.iCurrentHour < 13)
  							oDTP.oData.iCurrentHour += 12;
  					}
  					if($.cf._compare(oDTP.oData.sCurrentMeridiem, "AM") && oDTP.oData.iCurrentHour === 12)
  						oDTP.oData.iCurrentHour = 0;
  				}
  			}
  		},
  
  		_setCurrentDate: function()
  		{
  			var oDTP = this;
  		
  			if(oDTP.oData.bTimeMode || oDTP.oData.bDateTimeMode)
  			{
  				if(oDTP.oData.iCurrentSeconds > 59)
  				{
  					oDTP.oData.iCurrentMinutes += oDTP.oData.iCurrentSeconds / 60;
  					oDTP.oData.iCurrentSeconds = oDTP.oData.iCurrentSeconds % 60;
  				}
  				else if(oDTP.oData.iCurrentSeconds < 0)
  				{
  					oDTP.oData.iCurrentMinutes -= oDTP.settings.minuteInterval;
  					oDTP.oData.iCurrentSeconds += 60;
  				}
  				oDTP.oData.iCurrentMinutes = oDTP._adjustMinutes(oDTP.oData.iCurrentMinutes);
  				oDTP.oData.iCurrentSeconds = oDTP._adjustSeconds(oDTP.oData.iCurrentSeconds);
  			}
  		
  			var dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0),
  			bGTMaxDate = false, bLTMinDate = false,
  			sFormat, oDate, oFormattedDate, oFormattedTime,
  			sDate, sTime, sDateTime;
  		
  			if(oDTP.oData.dMaxValue !== null)
  				bGTMaxDate = (dTempDate.getTime() > oDTP.oData.dMaxValue.getTime());
  			if(oDTP.oData.dMinValue !== null)
  				bLTMinDate = (dTempDate.getTime() < oDTP.oData.dMinValue.getTime());
  		
  			if(bGTMaxDate || bLTMinDate)
  			{
  				var bCDGTMaxDate = false, bCDLTMinDate = false; 
  				if(oDTP.oData.dMaxValue !== null)
  					bCDGTMaxDate = (oDTP.oData.dCurrentDate.getTime() > oDTP.oData.dMaxValue.getTime());
  				if(oDTP.oData.dMinValue !== null)
  					bCDLTMinDate = (oDTP.oData.dCurrentDate.getTime() < oDTP.oData.dMinValue.getTime());
  			
  				if(!(bCDGTMaxDate || bCDLTMinDate))
  					dTempDate = new Date(oDTP.oData.dCurrentDate);
  				else
  				{
  					if(bCDGTMaxDate)
  					{
  						dTempDate = new Date(oDTP.oData.dMaxValue);
  						console.log("Info : Date/Time/DateTime you entered is later than Maximum value, so DateTimePicker is showing Maximum value in Input Field.");
  					}
  					if(bCDLTMinDate)
  					{
  						dTempDate = new Date(oDTP.oData.dMinValue);
  						console.log("Info : Date/Time/DateTime you entered is earlier than Minimum value, so DateTimePicker is showing Minimum value in Input Field.");
  					}
  					console.log("Please enter proper Date/Time/DateTime values.");
  				}
  			}
  		
  			oDTP.oData.dCurrentDate = new Date(dTempDate);
  			oDTP._setVariablesForDate();
  
  			oDate = {}; sDate = ""; sTime = ""; sDateTime = "";
  
  			if(oDTP.oData.bDateMode || oDTP.oData.bDateTimeMode)
  			{
  				if(oDTP.oData.bDateMode && (oDTP.oData.bArrMatchFormat[4] || oDTP.oData.bArrMatchFormat[5] || oDTP.oData.bArrMatchFormat[6]))
  					oDTP.oData.iCurrentDay = 1;
  			
  				oFormattedDate = oDTP._formatDate();
  
  				$(oDTP.element).find('.day .dtpicker-compValue').val(oFormattedDate.dd);
  			
  				if(oDTP.oData.bDateMode)
  				{
  					if(oDTP.oData.bArrMatchFormat[4])  // "MM-yyyy"
  						$(oDTP.element).find('.month .dtpicker-compValue').val(oFormattedDate.MM);
  					else if(oDTP.oData.bArrMatchFormat[6])  // "MMMM yyyy"
  						$(oDTP.element).find('.month .dtpicker-compValue').val(oFormattedDate.month);
  					else
  						$(oDTP.element).find('.month .dtpicker-compValue').val(oFormattedDate.monthShort);
  				}
  				else
  					$(oDTP.element).find('.month .dtpicker-compValue').val(oFormattedDate.monthShort);
  			
  				$(oDTP.element).find('.year .dtpicker-compValue').val(oFormattedDate.yyyy);
  			
  				if(oDTP.settings.formatHumanDate)
  				{
  					oDate = $.extend(oDate, oFormattedDate);
  				}
  				else
  				{
  					if(oDTP.oData.bDateMode && (oDTP.oData.bArrMatchFormat[4] || oDTP.oData.bArrMatchFormat[5] || oDTP.oData.bArrMatchFormat[6]))
  					{
  						if(oDTP.oData.bArrMatchFormat[4])
  							sDate = oFormattedDate.MM + oDTP.settings.monthYearSeparator + oFormattedDate.yyyy;
  						else if(oDTP.oData.bArrMatchFormat[5])
  							sDate = oFormattedDate.monthShort + oDTP.settings.monthYearSeparator + oFormattedDate.yyyy;
  						else if(oDTP.oData.bArrMatchFormat[6])
  							sDate = oFormattedDate.month + oDTP.settings.monthYearSeparator + oFormattedDate.yyyy;
  					}
  					else
  						sDate = oFormattedDate.dayShort + ", " + oFormattedDate.month + " " + oFormattedDate.dd + ", " + oFormattedDate.yyyy;
  				}
  			}
  			if(oDTP.oData.bTimeMode || oDTP.oData.bDateTimeMode)
  			{
  				oFormattedTime = oDTP._formatTime();
  
  				if(oDTP.oData.bIs12Hour)
  					$(oDTP.element).find('.meridiem .dtpicker-compValue').val(oDTP.oData.sCurrentMeridiem);
  				$(oDTP.element).find('.hour .dtpicker-compValue').val(oFormattedTime.hour);
  				$(oDTP.element).find('.minutes .dtpicker-compValue').val(oFormattedTime.mm);
  				$(oDTP.element).find('.seconds .dtpicker-compValue').val(oFormattedTime.ss);
  			
  				if(oDTP.settings.formatHumanDate)
  				{
  					oDate = $.extend(oDate, oFormattedTime);
  				}
  				else
  				{
  					var bShowSecondsTime = (oDTP.oData.bTimeMode && (
  						oDTP.oData.bArrMatchFormat[0] ||
  						oDTP.oData.bArrMatchFormat[1])),
  
  					bShowSecondsDateTime = (oDTP.oData.bDateTimeMode && 
  							(oDTP.oData.bArrMatchFormat[0] || 
  							oDTP.oData.bArrMatchFormat[1] ||
  							oDTP.oData.bArrMatchFormat[2] || 
  							oDTP.oData.bArrMatchFormat[3] ||
  							oDTP.oData.bArrMatchFormat[4] || 
  							oDTP.oData.bArrMatchFormat[5] ||
  							oDTP.oData.bArrMatchFormat[6] || 
  							oDTP.oData.bArrMatchFormat[7]));
  
  					if(bShowSecondsTime || bShowSecondsDateTime)
  						sTime = oFormattedTime.hour + oDTP.settings.timeSeparator + oFormattedTime.mm + oDTP.settings.timeSeparator + oFormattedTime.ss;
  					else
  						sTime = oFormattedTime.hour + oDTP.settings.timeSeparator + oFormattedTime.mm;
  
  					if(oDTP.oData.bIs12Hour)
  						sTime += oDTP.settings.timeMeridiemSeparator + oDTP.oData.sCurrentMeridiem;
  				}
  			}
  		
  			if(oDTP.settings.formatHumanDate)
  			{
  				if(oDTP.oData.bDateTimeMode)
  					sFormat = oDTP.oData.sDateFormat;
  				else if(oDTP.oData.bDateMode)
  					sFormat = oDTP.oData.sTimeFormat;
  				else if(oDTP.oData.bTimeMode)
  					sFormat = oDTP.oData.sDateTimeFormat;
  
  				sDateTime = oDTP.settings.formatHumanDate.call(oDTP, oDate, oDTP.settings.mode, sFormat);
  			}
  			else		
  			{
  				if(oDTP.oData.bDateTimeMode)
  					sDateTime = sDate + oDTP.settings.dateTimeSeparator + sTime;
  				else if(oDTP.oData.bDateMode)
  					sDateTime = sDate;
  				else if(oDTP.oData.bTimeMode)
  					sDateTime = sTime;
  			}
  
  			$(oDTP.element).find('.dtpicker-value').html(sDateTime);
  
  			oDTP._setButtons();
  		},
  
  		_formatDate: function(oDTVP)
  		{
  			var oDTP = this;
  			var oDTV = {},
  			sDay, sYear, 
  			iMonth, sMonth, sMonthShort, sMonthFull, 
  			iDayOfTheWeek, sDayOfTheWeek, sDayOfTheWeekFull;
  
  			if($.cf._isValid(oDTVP))
  				oDTV = $.extend({}, oDTVP);
  			else
  			{
  				oDTV.iCurrentDay = oDTP.oData.iCurrentDay;
  				oDTV.iCurrentMonth = oDTP.oData.iCurrentMonth;
  				oDTV.iCurrentYear = oDTP.oData.iCurrentYear;
  				oDTV.iCurrentWeekday = oDTP.oData.iCurrentWeekday;
  			}
  
  			sDay = oDTV.iCurrentDay;
  			sDay = (sDay < 10) ? ("0" + sDay) : sDay;
  			iMonth = oDTV.iCurrentMonth;
  			sMonth = oDTV.iCurrentMonth + 1;
  			sMonth = (sMonth < 10) ? ("0" + sMonth) : sMonth;
  			sMonthShort = oDTP.settings.shortMonthNames[iMonth];
  			sMonthFull = oDTP.settings.fullMonthNames[iMonth];
  			sYear = oDTV.iCurrentYear;
  			iDayOfTheWeek = oDTV.iCurrentWeekday;
  			sDayOfTheWeek = oDTP.settings.shortDayNames[iDayOfTheWeek];
  			sDayOfTheWeekFull = oDTP.settings.fullDayNames[iDayOfTheWeek];
  		
  			return {
  				"dd": sDay,
  				"MM": sMonth,
  				"monthShort": sMonthShort,
  				"month": sMonthFull,
  				"yyyy": sYear,
  				"dayShort": sDayOfTheWeek,
  				"day": sDayOfTheWeekFull
  			};
  		},
  
  		_formatTime: function(oDTVP)
  		{
  			var oDTP = this;
  			var oDTV = {},
  			iHour24, sHour24, iHour12, sHour12, sHour,
  			sMinutes, sSeconds;
  
  			if($.cf._isValid(oDTVP))
  				oDTV = $.extend({}, oDTVP);
  			else
  			{
  				oDTV.iCurrentHour = oDTP.oData.iCurrentHour;
  				oDTV.iCurrentMinutes = oDTP.oData.iCurrentMinutes;
  				oDTV.iCurrentSeconds = oDTP.oData.iCurrentSeconds;
  				oDTV.sCurrentMeridiem = oDTP.oData.sCurrentMeridiem;
  			}
  
  			iHour24 = oDTV.iCurrentHour;
  			sHour24 = (iHour24 < 10) ? ("0" + iHour24) : iHour24;
  			sHour = sHour24;
  
  			iHour12 = oDTV.iCurrentHour;
  			if(iHour12 > 12)
  				iHour12 -= 12;
  			if(sHour === 0)
  				iHour12 = 12;
  			sHour12 = (iHour12 < 10) ? ("0" + iHour12) : iHour12;
  			if(oDTP.oData.bIs12Hour)
  				sHour = sHour12;
  		
  			sMinutes = oDTV.iCurrentMinutes;
  			sMinutes = (sMinutes < 10) ? ("0" + sMinutes) : sMinutes;
  			sSeconds = oDTV.iCurrentSeconds;
  			sSeconds = (sSeconds < 10) ? ("0" + sSeconds) : sSeconds;
  		
  			return {
  				"H": iHour24,
  				"HH": sHour24,
  				"h": iHour12,
  				"hh": sHour12,
  				"hour": sHour,
  				"m": oDTV.iCurrentMinutes,
  				"mm": sMinutes,
  				"s": oDTV.iCurrentSeconds,
  				"ss": sSeconds,
  				"ME": oDTV.sCurrentMeridiem
  			};
  		},
  	
  		_setButtons: function()
  		{
  			var oDTP = this;
  			$(oDTP.element).find('.dtpicker-compButton').removeClass("dtpicker-compButtonDisable").addClass('dtpicker-compButtonEnable');
  		
  			var dTempDate;
  			if(oDTP.oData.dMaxValue !== null)
  			{
  				if(oDTP.oData.bTimeMode)
  				{
  					// Decrement Hour
  					if((oDTP.oData.iCurrentHour + 1) > oDTP.oData.dMaxValue.getHours() || ((oDTP.oData.iCurrentHour + 1) === oDTP.oData.dMaxValue.getHours() && oDTP.oData.iCurrentMinutes > oDTP.oData.dMaxValue.getMinutes()))
  						$(oDTP.element).find(".hour .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Decrement Minutes
  					if(oDTP.oData.iCurrentHour >= oDTP.oData.dMaxValue.getHours() && (oDTP.oData.iCurrentMinutes + 1) > oDTP.oData.dMaxValue.getMinutes())
  						$(oDTP.element).find(".minutes .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				}
  				else
  				{
  					// Increment Day
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, (oDTP.oData.iCurrentDay + 1), oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() > oDTP.oData.dMaxValue.getTime())
  						$(oDTP.element).find(".day .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Increment Month
  					dTempDate = new Date(oDTP.oData.iCurrentYear, (oDTP.oData.iCurrentMonth + 1), oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() > oDTP.oData.dMaxValue.getTime())
  						$(oDTP.element).find(".month .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Increment Year
  					dTempDate = new Date((oDTP.oData.iCurrentYear + 1), oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() > oDTP.oData.dMaxValue.getTime())
  						$(oDTP.element).find(".year .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Increment Hour
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, (oDTP.oData.iCurrentHour + 1), oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() > oDTP.oData.dMaxValue.getTime())
  						$(oDTP.element).find(".hour .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Increment Minutes
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, (oDTP.oData.iCurrentMinutes + 1), oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() > oDTP.oData.dMaxValue.getTime())
  						$(oDTP.element).find(".minutes .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  
  					// Increment Seconds
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, (oDTP.oData.iCurrentSeconds + 1), 0);
  					if(dTempDate.getTime() > oDTP.oData.dMaxValue.getTime())
  						$(oDTP.element).find(".seconds .increment").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				}
  			}
  		
  			if(oDTP.oData.dMinValue !== null)
  			{
  				if(oDTP.oData.bTimeMode)
  				{
  					// Decrement Hour
  					if((oDTP.oData.iCurrentHour - 1) < oDTP.oData.dMinValue.getHours() || ((oDTP.oData.iCurrentHour - 1) === oDTP.oData.dMinValue.getHours() && oDTP.oData.iCurrentMinutes < oDTP.oData.dMinValue.getMinutes()))
  						$(oDTP.element).find(".hour .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Decrement Minutes
  					if(oDTP.oData.iCurrentHour <= oDTP.oData.dMinValue.getHours() && (oDTP.oData.iCurrentMinutes - 1) < oDTP.oData.dMinValue.getMinutes())
  						$(oDTP.element).find(".minutes .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				}
  				else
  				{
  					// Decrement Day 
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, (oDTP.oData.iCurrentDay - 1), oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() < oDTP.oData.dMinValue.getTime())
  						$(oDTP.element).find(".day .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Decrement Month 
  					dTempDate = new Date(oDTP.oData.iCurrentYear, (oDTP.oData.iCurrentMonth - 1), oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() < oDTP.oData.dMinValue.getTime())
  						$(oDTP.element).find(".month .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Decrement Year 
  					dTempDate = new Date((oDTP.oData.iCurrentYear - 1), oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() < oDTP.oData.dMinValue.getTime())
  						$(oDTP.element).find(".year .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Decrement Hour
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, (oDTP.oData.iCurrentHour - 1), oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() < oDTP.oData.dMinValue.getTime())
  						$(oDTP.element).find(".hour .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				
  					// Decrement Minutes
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, (oDTP.oData.iCurrentMinutes - 1), oDTP.oData.iCurrentSeconds, 0);
  					if(dTempDate.getTime() < oDTP.oData.dMinValue.getTime())
  						$(oDTP.element).find(".minutes .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  
  					// Decrement Seconds
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, oDTP.oData.iCurrentHour, oDTP.oData.iCurrentMinutes, (oDTP.oData.iCurrentSeconds - 1), 0);
  					if(dTempDate.getTime() < oDTP.oData.dMinValue.getTime())
  						$(oDTP.element).find(".seconds .decrement").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  				}
  			}
  			
  			if(oDTP.oData.bIs12Hour)
  			{
  				var iTempHour, iTempMinutes;
  				if(oDTP.oData.dMaxValue !== null || oDTP.oData.dMinValue !== null)
  				{
  					iTempHour = oDTP.oData.iCurrentHour;
  					if($.cf._compare(oDTP.oData.sCurrentMeridiem, "AM"))
  						iTempHour += 12;
  					else if($.cf._compare(oDTP.oData.sCurrentMeridiem, "PM"))
  						iTempHour -= 12;
  				
  					dTempDate = new Date(oDTP.oData.iCurrentYear, oDTP.oData.iCurrentMonth, oDTP.oData.iCurrentDay, iTempHour, oDTP.oData.iCurrentMinutes, oDTP.oData.iCurrentSeconds, 0);
  				
  					if(oDTP.oData.dMaxValue !== null)
  					{
  						if(oDTP.oData.bTimeMode)
  						{
  							iTempMinutes = oDTP.oData.iCurrentMinutes;
  							if(iTempHour > oDTP.oData.dMaxValue.getHours() || (iTempHour === oDTP.oData.dMaxValue.getHours() && iTempMinutes > oDTP.oData.dMaxValue.getMinutes()))
  								$(oDTP.element).find(".meridiem .dtpicker-compButton").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  						}
  						else
  						{
  							if(dTempDate.getTime() > oDTP.oData.dMaxValue.getTime())
  								$(oDTP.element).find(".meridiem .dtpicker-compButton").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  						}
  					}
  				
  					if(oDTP.oData.dMinValue !== null)
  					{
  						if(oDTP.oData.bTimeMode)
  						{
  							iTempMinutes = oDTP.oData.iCurrentMinutes;
  							if(iTempHour < oDTP.oData.dMinValue.getHours() || (iTempHour === oDTP.oData.dMinValue.getHours() && iTempMinutes < oDTP.oData.dMinValue.getMinutes()))
  								$(oDTP.element).find(".meridiem .dtpicker-compButton").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  						}
  						else
  						{
  							if(dTempDate.getTime() < oDTP.oData.dMinValue.getTime())
  								$(oDTP.element).find(".meridiem .dtpicker-compButton").removeClass("dtpicker-compButtonEnable").addClass("dtpicker-compButtonDisable");
  						}
  					}
  				}
  			}
  		},
  	
  		// Public Method
  		setIsPopup: function(bIsPopup)
  		{
  			var oDTP = this;
  			oDTP.settings.isPopup = bIsPopup;
  		
  			if($(oDTP.element).css("display") !== "none")
  				oDTP._hidePicker(0);
  		
  			if(oDTP.settings.isPopup)
  			{
  				$(oDTP.element).addClass("dtpicker-mobile");
  				
  				$(oDTP.element).css({position: "fixed", top: 0, left: 0, width: "100%", height: "100%"});
  			}
  			else
  			{
  				$(oDTP.element).removeClass("dtpicker-mobile");
  				
  				if(oDTP.oData.oInputElement !== null)
  				{
  					var iElemTop = $(oDTP.oData.oInputElement).offset().top + $(oDTP.oData.oInputElement).outerHeight(),
  					iElemLeft = $(oDTP.oData.oInputElement).offset().left,
  					iElemWidth =  $(oDTP.oData.oInputElement).outerWidth();
  				
  					$(oDTP.element).css({position: "absolute", top: iElemTop, left: iElemLeft, width: iElemWidth, height: "auto"});
  				}
  			}
  		},
  	
  		_compareDates: function(dDate1, dDate2)
  		{
  			dDate1 = new Date(dDate1.getDate(), dDate1.getMonth(), dDate1.getFullYear(), 0, 0, 0, 0);
  			dDate1 = new Date(dDate1.getDate(), dDate1.getMonth(), dDate1.getFullYear(), 0, 0, 0, 0);
  			var iDateDiff = (dDate1.getTime() - dDate2.getTime()) / 864E5;
  			return (iDateDiff === 0) ? iDateDiff: (iDateDiff/Math.abs(iDateDiff));
  		},
  	
  		_compareTime: function(dTime1, dTime2)
  		{
  			var iTimeMatch = 0;
  			if((dTime1.getHours() === dTime2.getHours()) && (dTime1.getMinutes() === dTime2.getMinutes()))
  				iTimeMatch = 1;  	// 1 = Exact Match
  			else
  			{
  				if(dTime1.getHours() < dTime2.getHours())
  					iTimeMatch = 2;	 // time1 < time2
  				else if(dTime1.getHours() > dTime2.getHours())
  					iTimeMatch = 3; 	// time1 > time2
  				else if(dTime1.getHours() === dTime2.getHours())
  				{
  					if(dTime1.getMinutes() < dTime2.getMinutes())
  						iTimeMatch = 2;	 // time1 < time2
  					else if(dTime1.getMinutes() > dTime2.getMinutes())
  						iTimeMatch = 3; 	// time1 > time2
  				}
  			}
  			return iTimeMatch;
  		},
  	
  		_compareDateTime: function(dDate1, dDate2)
  		{
  			var iDateTimeDiff = (dDate1.getTime() - dDate2.getTime()) / 6E4;
  			return (iDateTimeDiff === 0) ? iDateTimeDiff: (iDateTimeDiff/Math.abs(iDateTimeDiff));
  		},
  
  		_determineMeridiemFromHourAndMinutes: function(iHour, iMinutes)
  		{
  			if(iHour > 12) 
  			{
  				return "PM";
  			} 
  			else if(iHour === 12 && iMinutes >= 0) 
  			{
  				return "PM";
  			} 
  			else 
  			{
  				return "AM";
  			}
  		},
  
  		// Public Method
  		setLanguage: function(sLanguage)
  		{
  			var oDTP = this;
  
  			oDTP.settings = $.extend({}, $.DateTimePicker.defaults, oDTP.options, $.DateTimePicker.i18n[sLanguage]);
  		
  			oDTP._setDateFormatArray(); // Set DateFormatArray
  			oDTP._setTimeFormatArray(); // Set TimeFormatArray
  			oDTP._setDateTimeFormatArray(); // Set DateTimeFormatArray
  
  			return oDTP;
  		}
  
  	};
  	
  }));
  
  