Yke = {UI: false};



ykeCopyPrototype = function (descendant, parent) { 
	var sConstructor = parent.toString(); 
	var aMatch = sConstructor.match( /\s*function (.*)\(/ ); 
	if ( aMatch != null ) { descendant.prototype[aMatch[1]] = parent; } 
	for (var m in parent.prototype) { 
		descendant.prototype[m] = parent.prototype[m]; 
	} 
}; 

Yke.Debug = {};
Yke.Debug.enabled=false;
Yke.Debug.log = function (code, message, object) {};

$YDEBUG = Yke.Debug.log;

Yke.String = {};
Yke.String.replace = function(str, a, b)
{
	while(str.indexOf(a) > -1)
	{
		str = str.replace(a, b);
	}
	return str;
}
Yke.String.numToStr = function(num, minLength)
{
	var ret = num.toString();
	if(minLength != null)
	{
		while(ret.length < minLength)
		{
			ret = '0' + ret;
		}
	}
	return ret;
}



function __n__() { }

Yke.Date = {};
Yke.Date.dtregex =  /\d{4}-\d{2}-\d{2}.\d{2}:\d{2}:\d{2}/;
Yke.Date.isDateStr = function(str)
{
	var t = Yke.Date.dtregex.test(str);
	return t;
}
Yke.Date.isDate = function (date)
{
	var ret = false;
	if(typeof(date) == 'object')
	{
		try
		{
			ret = (date.getDate != null && date.getDay != null && date.getFullYear != null);
		}
		catch(e)
		{
		}
	}
	return ret;
}
Yke.Date.toWSString = function(date,heure,minute)
{
	if(Yke.Date.isDate(date))
	{
		var yyyy = date.getFullYear();
		// getMonth() -> 0 = Janvier => 01 , 1=Fevrier => 02
		var mm = "01";
		
		switch(date.getMonth())
		{
			case 0: mm = "01"; break;					
			case 1: mm = "02"; break;
			case 2: mm = "03"; break;
			case 3: mm = "04"; break;
			case 4: mm = "05"; break;
			case 5: mm = "06"; break;
			case 6: mm = "07"; break;
			case 7: mm = "08"; break;
			case 8: mm = "09"; break;
			case 9: mm = "10"; break;
			case 10: mm = "11"; break;
			case 11: mm = "12"; break;				
		}
		
		
		var dd = "01";
		if(date.getDate()>=10) dd = date.getDate();
		else
		{
			switch(date.getDate())
			{
				case 1: dd = "01"; break;					
				case 2: dd = "02"; break;
				case 3: dd = "03"; break;
				case 4: dd = "04"; break;
				case 5: dd = "05"; break;
				case 6: dd = "06"; break;
				case 7: dd = "07"; break;
				case 8: dd = "08"; break;
				case 9: dd = "09"; break;				
			}
		}
		
		if(heure!=null && heure!="" && minute!=null && minute!="")
			return yyyy+"-"+mm+"-"+dd+"T"+heure+":"+minute+":00";
		else
			return yyyy+"-"+mm+"-"+dd+"T00:00:00";
	}
	else
		return null;
}

Yke.Date.parse = function(str)
{
	if(Yke.Date.isDateStr(str) == true)
	{
		// 0000-11-22 33:44:55
		var yyyy = parseInt(str.substr(0,4)*1);
		var MM = parseInt(str.substr(5,2)*1);
		var dd = parseInt(str.substr(8,2)*1);
		var hh = parseInt(str.substr(11,2)*1);
		var mm = parseInt(str.substr(14,2)*1);
		var ss = parseInt(str.substr(17,2)*1);
		
		var dt = new Date(yyyy, (MM-1), dd, hh, mm, ss);
		if(dd != dt.getDate() || MM != (dt.getMonth()) + 1)
		{
			$YDEBUG('Yke.Date.parse error', 'invalid date', str , 2);
			dt = null;
			
		}
		return dt;
	}
	else
	{
		return null;
	}
}

Yke.Date.isAfter = function (dateA, dateB)
{
	if(Yke.Date.isEqual(dateA, dateB))
	{
		return false;
	}
	else
	{
		if(dateB.getFullYear() > dateA.getFullYear())
		{
			return true;
		}
		else
		{
			if(dateB.getFullYear() == dateA.getFullYear() && dateB.getMonth() > dateA.getMonth())
			{
				return true;
			}
			else if(dateB.getFullYear() == dateA.getFullYear() && dateA.getMonth() == dateB.getMonth() && dateB.getDate() > dateA.getDate() )
			{
				return true;
			}
			else return false;
		}
		return false;
	}
}

Yke.Date.isBefore = function (dateA, dateB)
{
	return Yke.Date.isAfter(dateB, dateA);
}

Yke.Date.isEqual = function (dateA, dateB)
{
	return (dateA.getDate() == dateB.getDate() && dateA.getFullYear() == dateB.getFullYear() && dateA.getMonth() == dateB.getMonth());
} 

/* retourne le nombre de jour dans un mois*/
Yke.Date.getMonthDays = function(monthID, year)
{
	var monthCount = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	var ret = monthCount[monthID];
	if(monthID == 1)
	{
		var dd = new Date(year,1,29);
		if(dd.getDate() == 29) ret = 29;
		else ret = 28;
	}
	return ret;
}

Yke.Inputs = {};
  /*
   **  Returns the caret (cursor) position of the specified text field.
   **  Return value range is 0-oField.length.
   */
   Yke.Inputs.getCaretPosition = function (oField) {

     // Initialize
     var iCaretPos = 0;

     // IE Support
     if (document.selection) { 

		var range = oField.createTextRange();
	 
       // Set focus on the element
       oField.focus ();
  
       // To get cursor position, get empty selection range
	   
       var oSel = document.selection.createRange ();
	   var len = oSel.text.length;
  
       // Move selection start to 0 position
       oSel.moveStart ('character', -oField.value.length);
  
       // The caret position is selection length
       iCaretPos = {start: oSel.text.length, end: oSel.text.length + len} ;
     }

     // Firefox support
     else if (oField.selectionStart || oField.selectionStart == '0')
       iCaretPos = {start: oField.selectionStart, end: oField.selectionEnd};

     // Return results
	 iCaretPos.length = (iCaretPos.end - iCaretPos.start);
	 iCaretPos.text = oField.value.substr(iCaretPos.start, iCaretPos.length);
	 
     return (iCaretPos);
   }


   /*
   **  Sets the caret (cursor) position of the specified text field.
   **  Valid positions are 0-oField.length.
   */
   Yke.Inputs.setCaretPosition = function(oField, start, length) {

	if (length==null) length = 0;
   
     // IE Support
     if (document.selection) { 
	   
	   var range = oField.createTextRange();
      range.collapse(true);
      range.moveStart("character", start);
      range.moveEnd("character", length);
      range.select();
	  return;
	   
     }

     // Firefox support
     else if (oField.selectionStart || oField.selectionStart == '0') {
       oField.selectionStart = start;
       oField.selectionEnd = start+length;
       oField.focus ();
     }
   }

