// Calendar
//pause(5000);
calendarTranslate = new Array();  // Table of translate
calendarHoliday = new Array();  // Table of translate

/**
 * Funkce pro nacitani dalsich knihoven a js 
 */ 
function $import(path){    
  $("script[src*=calendar-lib.js]").each( function(i,s) {
      var se, base = s.src.replace(/calendar\-lib\.js$/,'');                 
      se = $(document.createElement('script'));                  
      se.attr('type', 'text/javascript');    	
      se.attr('src', base + path);
      se.attr('language', 'JavaScript1.6');
      se.attr('charset', 'utf-8');
      $('head').append(se);      
	  });    
}

/**
 * Sada funkci pro skryti Selectu a Flashu
 */ 
// ----------------------------------------------------
function showSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

// ---------------------------------------------------

function showFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "visible";
	}

	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "hidden";
	}

	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "hidden";
	}

}

// -----------------------------------------------------------------------------------

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.com
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	
//	console.log(self.innerWidth);
//	console.log(document.documentElement.clientWidth);

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

//	console.log("xScroll " + xScroll)
//	console.log("windowWidth " + windowWidth)

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
//	console.log("pageWidth " + pageWidth)

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

// -----------------------------------------------------------------------------------


/**
 * rozsireni metody Date o parsovani datumu z sablony
 */ 
Date.prototype.parseByTemplate = function(text, pattern) { 
 if(text==null || text.length==0) { return 0; }
 else if(pattern != null && pattern.length>0) {
  var res;
  var vzor = pattern.match(/^(dd|d|mm|m|rrrr|rr)([^dmr]+)(dd|d|mm|m|rrrr|rr)([^dmr]+)(dd|d|mm|m|rrrr|rr)$/i);
  if(vzor == null) {return -1;}
  var p1 = text.indexOf(vzor[2],0);
  if(p1==-1) {
	   p1 = text.indexOf(vzor[2].replace(/(^\s*)|(\s*$)/g, ""),0);
  }
  var p2 = text.indexOf(vzor[4],p1+1);
  if(p2==-1) {
	   p2 = text.indexOf(vzor[4].replace(/(^\s*)|(\s*$)/g, ""),p1+1);
  }
  if(p1<0 || p2<0) return -1;
  var opt = {};
  opt[vzor[1].toLowerCase()] = parseInt(text.slice(0,p1),10);
  opt[vzor[3].toLowerCase()] = parseInt(text.slice(p1+1,p2),10);
  opt[vzor[5].toLowerCase()] = parseInt(text.slice(p2+1),10);  
  
  if(opt['rr']) {              
    if(opt['rr']<30) {
     opt['rr'] = 2000 + opt['rr'] 
    }else if(opt['rr']>=30 && opt['rr']<99){
     opt['rr'] = 1900 + opt['rr'];
    }
  } 
  if(opt['rrrr']) {             
    if(opt['rrrr']<30) {
     opt['rrrr'] = 2000 + opt['rrrr'];     
    }else if(opt['rrrr']>=30 && opt['rrrr']<99){
     opt['rrrr'] = 1900 + opt['rrrr'];     
    }
  }
  // test vstupnich dat  
  var tmpDate = new Date((opt['rr'] || opt['rrrr']),(opt['m'] || opt['mm'])-1,10);    
  if((opt['rr']&&(opt['rr']<0 || opt['rr']>99)) ||  (opt['rrrr']&&(opt['rrrr']<1900 || opt['rrrr']>2100)) ||
      (opt['m']&&(opt['m']<1 || opt['m']>12)) || (opt['mm']&&(opt['mm']<1 || opt['mm']>12)) ||
      (opt['d']&&(opt['d']<1 || opt['d']>tmpDate.getMonthLength())) || (opt['dd']&&(opt['dd']<1 || opt['dd']>tmpDate.getMonthLength()))) return 0;
       
  res = Date.UTC((opt['rr'] || opt['rrrr']),(opt['m'] || opt['mm'])-1,(opt['d'] || opt['dd']));     
  this.setTime(res);
  return res;
 }else{
  return 0;
 }   
}
// vraci naformatovany datum podle vzoru
Date.prototype.toStringByTemplate = function(pattern) { 
 if(pattern == null || pattern.length==0) { return '';} 
 var opt = {};
 opt['d'] = opt['dd'] = String(this.getUTCDate());
 opt['m'] = opt['mm'] = String(this.getUTCMonth()+1);
 opt['rrrr'] = this.getUTCFullYear();
 if(opt['dd'].length==1) { opt['dd'] = "0"+opt['dd']; }
 if(opt['mm'].length==1) { opt['mm'] = "0"+opt['mm']; }
 opt['rr'] = String(opt['rrrr']).slice(2);  
 var vzor = pattern.match(/^(d|dd|m|mm|rr|rrrr)([^dmr]+)(d|dd|m|mm|rr|rrrr)([^dmr]+)(d|dd|m|mm|rr|rrrr)$/i); 
 return opt[vzor[1].toLowerCase()]+vzor[2]+opt[vzor[3].toLowerCase()]+vzor[4]+opt[vzor[5].toLowerCase()];
}
// Zjisti kolik ma mesic dni
Date.prototype.getMonthLength = function() {
 var days = 31; 
 switch(this.getUTCMonth()+1) {
  case 4:
  case 6:
  case 9:
  case 11: days = 30; break;
  case 2: 
   days = 28;
   var year = this.getUTCFullYear();
   if(year%4 == 0 && (year%100!=0 || year%400==0)) {
    days = 29;
   }
  break;
 }
 return days;
}
// Zjisti cislo dne v tydnu pro 1. a posledniho v mesici
Date.prototype.getDayBorders = function() {
 var df, dl;
 df = new Date(this.getTime());
 df.setUTCDate(1);
 dl = new Date(this.getTime());
 dl.setUTCDate(dl.getMonthLength());
 return [df.getUTCDay(),dl.getUTCDay()];
}
// posouva mesic o num vpred / vzad  (+12/-12) 
Date.prototype.changeMonth = function(num) {
 if(num<0) {
  var day = this.getUTCDate();
  this.setUTCDate(1);
  this.setUTCHours(0,0,0,0);
  var df = new Date(this.getTime()-86400000); 
  this.setTime(this.getTime()-(df.getMonthLength()*86400000));
  if(this.getMonthLength()<day) {
   day = this.getMonthLength();
  }
  this.setUTCDate(day)
  num += 1;
 } else if(num>0) {     
  var monthLength = this.getMonthLength();
  var day = this.getUTCDate();
  this.setUTCDate(1);
  this.setUTCHours(0,0,0,0);     
  //var df = new Date(this.getTime()+(monthLength*24*60*60*1000))  
  this.setTime(this.getTime()+(monthLength*24*60*60*1000));
  if(this.getMonthLength()<day) {
   day = this.getMonthLength();
  }
  this.setUTCDate(day);
  num -= 1;
 }
 if(num!=0) {  
  this.changeMonth(num);
 }else{
  return this.getTime();
 } 
}
// Den v roce
Date.prototype.dateInYear = function() {
 var count = 0;
 var date = new Date(this.getTime());
 count += date.getUTCDate();
 date.setUTCDate(1); 
 while(date.getUTCMonth()>0) {
  date.changeMonth(-1);
  count += date.getMonthLength();  
 } 
 return count;
}
function pause(ms){
	var date = new Date();
	curDate = null;
	do{var curDate = new Date();}
	while( curDate - date < ms);
}
