var frm_errors = [];
var frm_warnings = [];

if (!IMG) var IMG = '';

var loading_content = '<div style="padding: 5px; text-align: center; "><img src="'+IMG+'ajax/indicator1.gif" border="0"></div>';

var onload_arr = new Array();

/**
* error_vector = string
* key 0 = 1 - report by ajax to server, 0 - do not report
* key 1 = 0 - do not raport user error, 1..9 - report style
* key 2 = 1 - hide element(whitch need to update), 0 - do not hide
* key 3 = 1 - return to first page, 0 - do not return
* key 4 = 1 - critical error, erase all order info, it is not critical do not erase
*/

function set_errors() {
	if (frm_errors.length > 0)
	for (var i = 0; i < frm_errors.length; i++) {
		$(frm_errors[i]).className += " error";
	}

	if (frm_warnings.length > 0)
	for (var i = 0; i < frm_warnings.length; i++) {
		$(frm_warnings[i]).className += " warning";
	}
}


function showCalendar(lay, formname){
 var ie4a = (document.all) ? true : false;
 var ns4a = (document.layers) ? true : false;
 var ns6a = (document.getElementById && !document.all) ? true : false;
 if (ns4a){return;}
 var days=new Array ("Pr","An","Tr","Kt","Pn","Št","Sk");
 var ret_txt='<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr class="calendar_col">';
 for(i=0;i<7;i++){
   ret_txt+='<td height="16" class="calendar_td" align="center">'+days[i]+'</td>';
 }
 if(lay=='dep'){
   yr=parseInt(document.forms[formname].depYear.value);
   mn=parseInt(document.forms[formname].depMonth.value)-1;
   selectedDay=parseInt(document.forms[formname].depDay.value);
   //selectedInterval=parseInt(document.forms[formname].departDateRange.value)+1;
   var val='dep';
 }
 if(lay=='arr'){
   yr=parseInt(document.forms[formname].arrYear.value);
   mn=parseInt(document.forms[formname].arrMonth.value)-1;
   selectedDay=parseInt(document.forms[formname].arrDay.value);
   //selectedInterval=parseInt(document.forms[formname].arrRange.value)+1;
   var val='arr';
 }
 if(yr<200){yr+=1900;}
 start=new Date(yr,mn,1);
 startday=start.getDay();
 if(startday==0){startday=7;}
 nxt_yr=yr;
 nxt_mon=mn+1;
 if(nxt_mon>11){nxt_mon=0;nxt_yr++;}
 end=new Date(nxt_yr,nxt_mon,1);
 dayCount=Math.round((parseInt(end.valueOf())-parseInt(start.valueOf()))/(1000*60*60*24));
 ret_txt+='<tr class="bg2a">';
 if(startday<=7){
   for(i=1;i<startday;i++){
     ret_txt+='<td>&nbsp;</td>';
   }
 }
 counter=startday;
 for(i=1;i<=dayCount;i++){
   counter++;
   //ret_txt+='<td align="center" '+(selectedDay+selectedInterval<=i || selectedDay-selectedInterval>=i?'':'bgcolor="#FBFCFD"')+'>';
   ret_txt+='<td align="center" '+(selectedDay+1<=i || selectedDay-1>=i?'class="calendar"':'class="calendar_on"')+'>';
   ret_txt+='<a href="javascript:void(0);" '+(selectedDay+1<=i || selectedDay-1>=i?'class="calendar"':'class="calendar_on"')+'  onclick="document.'+formname+'.'+val+'Day.value='+i+';showCalendar('+"'"+lay+"', '"+formname+"'"+')">';
   ret_txt+=(selectedDay==i?'<b>'+i+'</b>':i);
   ret_txt+='</a></td>';
   if(counter>=8){
     counter=1;
     ret_txt+='</tr><tr>';
   }
 }
 
  for(i=counter;i<=7;i++){
  	ret_txt+='<td>&nbsp;</td>';
  }
 ret_txt+='</tr></table>';
 
 if(ie4a){
   document.all(lay).innerHTML=ret_txt;
 }
 if(ns6a){
   over = document.getElementById([lay]);
   range = document.createRange();
   range.setStartBefore(over);
   domfrag = range.createContextualFragment(ret_txt);
   while (over.hasChildNodes()){
     over.removeChild(over.lastChild);
   }
   over.appendChild(domfrag);
 }
 calculatedaycount(formname);
 
}

var MINUTE = 60 * 1000
var HOUR = MINUTE * 60
var DAY = HOUR * 24
var WEEK = DAY * 7


function setDepartDateDefault(formname) {
 document.forms[formname].depDay.value=document.forms[formname].hiddendepDay.value;
 document.forms[formname].depMonth.value=parseInt(document.forms[formname].hiddendepMonth.value)+1;
 document.forms[formname].depYear.value=document.forms[formname].hiddendepYear.value;
}
function setReturnDate(formname) {
 //if (document.forms[formname].journey[1].checked){
 departDate = new Date(document.forms[formname].depYear.value, parseInt(document.forms[formname].depMonth.value)-1, document.forms[formname].depDay.value);
 document.forms[formname].arrDay.value=departDate.getDate();
 document.forms[formname].arrMonth.value=parseInt(departDate.getMonth())+1;
 yr=departDate.getYear();
 if(yr<200){yr+=1900;}
 document.forms[formname].arrYear.value=yr;
 //document.forms[formname].arrRange.value=document.forms[formname].departDateRange.value
 //}
}
function setDepartYear(formname) {
 if (parseInt(document.forms[formname].depMonth.value)-1 < parseInt(document.forms[formname].hiddendepMonth.value)) {
   document.forms[formname].depYear.value = parseInt(document.forms[formname].hiddendepYear.value)+1;
 }
 if (parseInt(document.forms[formname].depMonth.value)-1 >= parseInt(document.forms[formname].hiddendepMonth.value)) {
   document.forms[formname].depYear.value = document.forms[formname].hiddendepYear.value;
 }
}
function checkDepartDate(formname) {
 departDate = new Date(document.forms[formname].depYear.value, parseInt(document.forms[formname].depMonth.value)-1, document.forms[formname].depDay.value);
 hiddenDepartDate = new Date(document.forms[formname].hiddendepYear.value, document.forms[formname].hiddendepMonth.value, document.forms[formname].hiddendepDay.value);
 if (departDate < hiddenDepartDate) {
   setDepartDateDefault(formname);
 }
}
function setReturnYear(formname) {
 if (parseInt(document.forms[formname].arrMonth.value)-1 < parseInt(document.forms[formname].hiddendepMonth.value)) {
   document.forms[formname].arrYear.value = parseInt(document.forms[formname].hiddendepYear.value)+1;
 }
 if (parseInt(document.forms[formname].arrMonth.value)-1 >= parseInt(document.forms[formname].hiddendepMonth.value)) {
   document.forms[formname].arrYear.value = document.forms[formname].hiddendepYear.value;
 }
}
function checkReturnDate(formname) {
 departDate = new Date(document.forms[formname].depYear.value, parseInt(document.forms[formname].depMonth.value)-1, document.forms[formname].depDay.value);
 returnDate = new Date(document.forms[formname].arrYear.value, parseInt(document.forms[formname].arrMonth.value)-1, document.forms[formname].arrDay.value);
 if (returnDate < departDate) {
  setReturnDate(formname);
 }
}


function calculatedaycount(formname){
 	departDate = new Date(document.forms[formname].depYear.value, parseInt(document.forms[formname].depMonth.value)-1, document.forms[formname].depDay.value);
 	returnDate = new Date(document.forms[formname].arrYear.value, parseInt(document.forms[formname].arrMonth.value)-1, document.forms[formname].arrDay.value);
 	var one_day=1000*60*60*24;
 	diff=Math.ceil((returnDate.getTime()-departDate.getTime())/(one_day));
 	document.getElementById('duration').innerHTML=diff;
 	document.getElementById('duration').value=diff;	
}

/**
* add function to onload list. Executes, when page will be loaded
**/
function add_onload(str) {
	onload_arr[onload_arr.length] = str;
}

/**
* Load all saved functions
**/
function onload_func() {
	if (onload_arr) {
		var i;
		for (i = 0; i < onload_arr.length; i = i + 1) {
	    	eval(onload_arr[i]);
		}
	}
}


/**
*procces AJAX errors
*
* error_handling - 1 - alert box
* type - error type
	1 - alert box
* data - variable type depends on situation
**/
function ajax_error(error_handling, type, data) {
	switch(type) {
	case 'parse':
		if (error_handling == 1)
			alert(Error[5]);
		else
  			show_ajax_error(Error[5]);
  		break    
	case 'server_side':
		if (error_handling == 1)
			alert(Error[6]+' ' + data);
		else
  			show_ajax_error( data);
  		break
 	case 'other_error':
		if (error_handling == 1)
			alert( data);
		else
  			show_ajax_error( data);
  		break
	default:
		break;
	}
}

function show_ajax_error(str){
	$('errormessagecont').style.display='';
	$('errormsg').innerHTML=str;
	new Effect.Highlight($('errormessagecont'));
}



/**
* updates select element
*
* elem_id - select type element id whitch needs to be updated
* url - short url for ajac call
* loading_elem_id - loading element id, display will bew set (none, block), OPTIONAL
* extra_option - if true we add optional option "select.."
* error_level - what we should do if error occurs
**/
function update_select(elem_id, url, loading_elem_id, extra_option, error_level) {
	handle_loading('show');
	AjaxRequest.get(
    {      
		'url': SITE + url,
		'onSuccess':function(req){
			handle_loading('hide');
			var parse_error = false; var php_error = false;
    		obj = $(elem_id);       
			obj.options.length = 0;
			try {
				eval('var data = ' + req.responseText);
			}
			catch(err) {
				parse_error = true;
			}			
			if (typeof(data)!='undefined')
			if (typeof(data.envelope)!='undefined')
			if (typeof(data.envelope.error)=='string')
					 	php_error = data.envelope.error;		 		
			if (parse_error || php_error) {
				if (parse_error) {
					ajax_error(error_level, 'parse');
				}
				if (php_error) {
					ajax_error(error_level, 'server_side', php_error);
				}	
			}
			else { // if there was no php side, or parser error
				values = data.envelope.data;
				if (values) { // if correct data returned
						if (extra_option) { // if we need extra option
						var option = new Option('   ',0);
						obj.options.add(option,0);
					}
					for (index=1;index<values.length+1;index++) {
						var option = new Option(values[index-1]['title'],values[index-1]['value']);
						obj.options.add(option,index);
					} 
				}
				else {
					// array is empty
				}
    		}
       },
      'onError':function(req){
      	handle_loading('hide');
      	//alert('Error!\nStatusText='+req.statusText+'\nContents='+req.responseText);
      	ajax_error(error_level, 'other_error', req.statusText);
      }  
    });
    
    /*
    * internal loading element function
    * action ('hide', show');
    */
    function handle_loading(action) {
		if (loading_elem_id) {
			if (action == 'show')
					$(loading_elem_id).style.display = 'block';
			else
				$(loading_elem_id).style.display = 'none';
		}
    }
}




/**
* updates element uses DOM method innerHTML
*
* elem_id - select type element id whitch needs to be updated
* url - short url for ajac call
* loading_elem_id - loading element id, display will bew set (none, block), OPTIONAL
* effect - efect to do when finished
* error_level - what we should do if error occurs
**/
function update_content(elem_id, url, loading_elem_id, effect, error_level, onSuccessFunction) {
	handle_loading('show');
	AjaxRequest.get(
    {      
		'url': SITE + url,
		'onSuccess':function(req){
			handle_loading('hide');
			var parse_error = false; var php_error = false;
			try {
				eval('var data = ' + req.responseText);
			}
			catch(err) {
				parse_error = true;
			}
			if (typeof(data)!='undefined')
			if (typeof(data.envelope)!='undefined')
			if (typeof(data.envelope.error)=='string')
					 	php_error = data.envelope.error;		 		
			if (parse_error || php_error) {
				if (parse_error) {
					ajax_error(error_level, 'parse');
				}
				if (php_error) {
					ajax_error(error_level, 'server_side', php_error);
				}	
			}
			else { // if there was no php side, or parser error
				inner = data.envelope.data;
				if (inner) { // if not empty
					if (effect) 
						$(elem_id).style.display = 'none';
					else
						$(elem_id).style.display = 'block';
					$(elem_id).innerHTML = inner;
					if (effect) new Effect.toggle($(elem_id),effect);
				}
				else {
					$(elem_id).style.display = 'block';
					$(elem_id).innerHTML = 'Empty content returned..';
				}
				if (typeof(onSuccessFunction)=="function"){
					onSuccessFunction();
				}
    		}
       },
      'onError':function(req){
      	handle_loading('hide');
      	//alert('Error!\nStatusText='+req.statusText+'\nContents='+req.responseText);
      	ajax_error(error_level, 'other_error', req.statusText);
      }  
    });
    
	
	
    function handle_loading(action) {
		if (loading_elem_id) {
			if (action == 'show') {
				if (loading_elem_id == 1) { //self object loading
					$(elem_id).style.display = 'block';
					$(elem_id).innerHTML = loading_content;
				}
				else {
					$(loading_elem_id).style.display = 'block';
				}
			}
			else {
				if (loading_elem_id == 1) { //self object loading
					$(elem_id).innerHTML = '';
				}
				else {
					$(loading_elem_id).style.display = 'none';
				}
			}
		}
    }
}


/**
* Downloads data, passes it to function
*
* fnct - function that handles received data
* url - short url for ajax call
* loading_elem_id - loading element id, display will bew set (none, block), OPTIONAL
* error_level - what we should do if error occurs
**/

function download_data(fnct, url, error_level, loading_elem_id) {
	handle_loading('show');
	AjaxRequest.get(
	{      
		'url': SITE + url,
		'onSuccess':function(req){
			handle_loading('hide');
			var parse_error = false; var php_error = false;
			try {
				eval('var data = ' + req.responseText);
			}
			catch(err) {
				parse_error = true;
			}			
			if (typeof(data)!='undefined')
			if (typeof(data.envelope)!='undefined')
			if (typeof(data.envelope.error)=='string')
						php_error = data.envelope.error;		 		
			if (parse_error || php_error) {
				if (parse_error) {
					ajax_error(error_level, 'parse');
				}
				if (php_error) {
					ajax_error(error_level, 'server_side', php_error);
				}	
			}
			else { 
				eval(fnct+'(data);');
			}
	   },
	  'onError':function(req){
		handle_loading('hide');
		//alert('Error!\nStatusText='+req.statusText+'\nContents='+req.responseText);
		ajax_error(error_level, 'other_error', req.statusText);
	  }  
	});
	function handle_loading(action) {
		if (loading_elem_id) {
			if (action == 'show')
					$(loading_elem_id).style.display = 'block';
			else
				$(loading_elem_id).style.display = 'none';
		}
	}		

}



function page(mypage,w,h){
  var scroll = 'yes';
  var winl = (screen.width-w)/2;
  var wint = (screen.height-h)/2;
  var settings  ='height='+h+',';
      settings +='width='+w+',';
      settings +='top='+wint+',';
      settings +='left='+winl+',';
      settings +='scrollbars='+scroll+',';
      settings +='resizable=yes';
  win=window.open(mypage,'',settings);
  if(parseInt(navigator.appVersion) >= 4){win.window.focus();}
}


function num_format(num) {
  num = num+'';
  num = num.replace(",", ".");
  num= parseFloat(num);
  num= num.toFixed(2); 
  return num;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function goLocation(href) {
 	w = window.open(href, "info", "resizable=yes,scrollbars=yes,width=640,height=480,left="+Math.floor((screen.width-640)/2)+",top="+Math.floor((screen.height-480)/2));
	if(w) w.focus();
}

function in_array(value, mas) {
	var i;
	for (i=0; i < mas.length; i++) {
		if (mas[i].toLowerCase() == value.toLowerCase()) return true;
	}
	return false;
}

function calc_born_date(o) {
	//alert("rxxxr");
	seg = o.id.split('_');
	pc = o.value;
	if (seg.length == 4 && check_personal_code(pc)) {
		
		type = seg[0];
		field_name = seg[1]+'_'+seg[2];
		nr = seg[3];
		
		year0 = '19';
		if (pc[0] != null) if (in_array(pc[0],['3','4'])) year0 = '19'; 
		else if (in_array(pc[0],['5','6'])) year0 = '20';

		year1 = pc[1] + pc[2];
		month = pc[3] + pc[4];
		day = pc[5] + pc[6];
		date = year0.concat(year1)+'-'+month+'-'+day;
		if ($(type+'_date_born_year_'+nr) != null && $(type+'_date_born_month_'+nr) != null && $(type+'_date_born_day_'+nr) != null) {
			year_obj = $(type+'_date_born_year_'+nr);
			month_obj = $(type+'_date_born_month_'+nr);
			day_obj = $(type+'_date_born_day_'+nr);
			if (isDate(date) && !parseInt(year_obj.value) && !parseInt(month_obj.value) && !parseInt(day_obj.value)) {
				year_obj.value = year0.concat(year1);
				month_obj.value = month;
				day_obj.value = day;
			} else { return false; }
		}
	}
}
	
function check_personal_code(code) { 
	var i,a,b,c,d,e;
	var s = new String(code);
	d = 0;
	e = 0;
	b = 1;
	c = 3;
	for (i=0; i<10; i++) {
		a = s.charAt(i);
		d = d + (b * a);
		e = e + (c * a);
		b = b + 1;
		if (b == 10) b = 1;
		c = c + 1;
		if (c == 10) c = 1;
	}
	d = d % 11;
	e = e % 11;
	i = (d == 10)?(e == 10)? 0 : e : d ;
	if (s.charAt(10) == i) return true; 
	else return false;
}
 
function isDate(dateStr) {
	var datePat = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/;
	var matchArray = dateStr.match(datePat);
	
	if (matchArray == null) return false;
	
	year = matchArray[1];
	month = matchArray[3];
	day = matchArray[5];
	
	if (month < 1 || month > 12) return false;
	if (day < 1 || day > 31) return false;
	if ((month==4 || month==6 || month==9 || month==11) && day==31)	return false;
	
	if (month == 2) {
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			return false;
		}
	}
	
	return true;
}

function calendar_date_enable(id,enable) {
	if ($(id)) $(id).enabled = enable;
}